raindancers-cloudfront 0.0.42 → 0.0.44

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 (434) hide show
  1. package/lib/cloudfront/lambda-bundled/cognito-auth/__pycache__/six.cpython-312.pyc +0 -0
  2. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  3. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  4. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  5. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  6. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  7. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  8. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  9. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  10. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  11. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  12. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  13. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  14. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  15. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  16. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  17. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  18. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  19. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  20. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  21. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  22. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  23. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  24. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  25. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  26. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  27. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  28. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  29. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  30. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  31. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  32. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  33. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  34. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  35. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  36. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  37. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  38. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  39. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  40. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  41. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  42. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  43. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  44. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  45. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  46. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  47. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  48. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  49. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  50. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  51. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  52. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  53. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  54. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  55. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  56. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  57. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  58. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  59. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  60. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  61. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  62. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  63. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  64. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  65. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  66. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  67. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  68. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  69. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  70. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  71. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  72. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  73. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  74. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  75. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  76. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  77. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  78. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  79. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  80. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  81. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  82. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  83. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  84. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  85. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  86. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  87. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  88. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  89. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  90. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  91. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  92. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  93. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  94. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  95. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  96. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  97. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  98. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  99. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  100. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  101. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  102. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  103. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  104. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  105. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  106. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  107. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  108. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  109. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  110. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  111. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  112. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  113. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/__init__.cpython-312.pyc +0 -0
  114. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/debug.cpython-312.pyc +0 -0
  115. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/error.cpython-312.pyc +0 -0
  116. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/__init__.cpython-312.pyc +0 -0
  117. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/streaming.cpython-312.pyc +0 -0
  118. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/__init__.cpython-312.pyc +0 -0
  119. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/decoder.cpython-312.pyc +0 -0
  120. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/encoder.cpython-312.pyc +0 -0
  121. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/eoo.cpython-312.pyc +0 -0
  122. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/__init__.cpython-312.pyc +0 -0
  123. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/decoder.cpython-312.pyc +0 -0
  124. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/encoder.cpython-312.pyc +0 -0
  125. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/__init__.cpython-312.pyc +0 -0
  126. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/decoder.cpython-312.pyc +0 -0
  127. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/encoder.cpython-312.pyc +0 -0
  128. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/__init__.cpython-312.pyc +0 -0
  129. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/decoder.cpython-312.pyc +0 -0
  130. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/encoder.cpython-312.pyc +0 -0
  131. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/__init__.cpython-312.pyc +0 -0
  132. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/integer.cpython-312.pyc +0 -0
  133. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/__init__.cpython-312.pyc +0 -0
  134. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/base.cpython-312.pyc +0 -0
  135. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/char.cpython-312.pyc +0 -0
  136. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/constraint.cpython-312.pyc +0 -0
  137. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/error.cpython-312.pyc +0 -0
  138. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedtype.cpython-312.pyc +0 -0
  139. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedval.cpython-312.pyc +0 -0
  140. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/opentype.cpython-312.pyc +0 -0
  141. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tag.cpython-312.pyc +0 -0
  142. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tagmap.cpython-312.pyc +0 -0
  143. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/univ.cpython-312.pyc +0 -0
  144. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/useful.cpython-312.pyc +0 -0
  145. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/__init__.cpython-312.pyc +0 -0
  146. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/asn1.cpython-312.pyc +0 -0
  147. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/cli.cpython-312.pyc +0 -0
  148. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/common.cpython-312.pyc +0 -0
  149. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/core.cpython-312.pyc +0 -0
  150. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/key.cpython-312.pyc +0 -0
  151. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/parallel.cpython-312.pyc +0 -0
  152. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pem.cpython-312.pyc +0 -0
  153. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1.cpython-312.pyc +0 -0
  154. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1_v2.cpython-312.pyc +0 -0
  155. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/prime.cpython-312.pyc +0 -0
  156. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/randnum.cpython-312.pyc +0 -0
  157. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/transform.cpython-312.pyc +0 -0
  158. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/util.cpython-312.pyc +0 -0
  159. package/lib/cloudfront/lambda-bundled/edge-auth/__pycache__/six.cpython-312.pyc +0 -0
  160. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  161. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  162. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  163. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  164. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  165. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  166. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  167. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  168. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  169. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  170. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  171. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  172. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  173. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  174. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  175. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  176. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  177. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  178. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  179. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  180. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  181. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  182. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  183. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  184. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  185. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  186. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  187. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  188. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  189. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  190. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  191. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  192. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  193. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  194. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  195. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  196. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  197. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  198. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  199. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  200. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  201. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  202. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  203. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  204. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  205. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  206. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  207. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  208. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  209. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  210. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  211. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  212. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  213. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  214. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  215. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  216. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  217. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  218. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  219. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  220. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  221. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  222. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  223. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  224. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  225. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  226. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  227. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  228. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  229. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  230. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  231. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  232. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  233. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  234. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  235. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  236. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  237. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  238. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  239. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  240. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  241. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  242. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  243. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  244. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  245. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  246. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  247. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  248. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  249. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  250. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  251. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  252. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  253. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  254. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  255. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  256. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  257. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  258. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  259. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  260. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  261. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  262. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  263. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  264. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  265. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  266. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  267. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  268. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  269. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  270. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  271. package/lib/cloudfront/lambda-bundled/hmacSecret/__pycache__/six.cpython-312.pyc +0 -0
  272. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/__init__.cpython-312.pyc +0 -0
  273. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_aws_iot_metrics.cpython-312.pyc +0 -0
  274. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_test.cpython-312.pyc +0 -0
  275. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/auth.cpython-312.pyc +0 -0
  276. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/cbor.cpython-312.pyc +0 -0
  277. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/checksums.cpython-312.pyc +0 -0
  278. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/common.cpython-312.pyc +0 -0
  279. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/crypto.cpython-312.pyc +0 -0
  280. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/exceptions.cpython-312.pyc +0 -0
  281. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/http.cpython-312.pyc +0 -0
  282. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/io.cpython-312.pyc +0 -0
  283. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/logging.cpython-312.pyc +0 -0
  284. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt.cpython-312.pyc +0 -0
  285. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt5.cpython-312.pyc +0 -0
  286. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt_request_response.cpython-312.pyc +0 -0
  287. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/s3.cpython-312.pyc +0 -0
  288. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/websocket.cpython-312.pyc +0 -0
  289. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/__init__.cpython-312.pyc +0 -0
  290. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/http.cpython-312.pyc +0 -0
  291. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/__init__.cpython-312.pyc +0 -0
  292. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/rpc.cpython-312.pyc +0 -0
  293. package/lib/cloudfront/lambda-bundled/hmacSecret/bin/__pycache__/jp.cpython-312.pyc +0 -0
  294. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/__init__.cpython-312.pyc +0 -0
  295. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/args.cpython-312.pyc +0 -0
  296. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/auth.cpython-312.pyc +0 -0
  297. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/awsrequest.cpython-312.pyc +0 -0
  298. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/client.cpython-312.pyc +0 -0
  299. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compat.cpython-312.pyc +0 -0
  300. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compress.cpython-312.pyc +0 -0
  301. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/config.cpython-312.pyc +0 -0
  302. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configloader.cpython-312.pyc +0 -0
  303. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configprovider.cpython-312.pyc +0 -0
  304. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/context.cpython-312.pyc +0 -0
  305. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/credentials.cpython-312.pyc +0 -0
  306. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/discovery.cpython-312.pyc +0 -0
  307. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint.cpython-312.pyc +0 -0
  308. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint_provider.cpython-312.pyc +0 -0
  309. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/errorfactory.cpython-312.pyc +0 -0
  310. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/eventstream.cpython-312.pyc +0 -0
  311. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/exceptions.cpython-312.pyc +0 -0
  312. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/handlers.cpython-312.pyc +0 -0
  313. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/history.cpython-312.pyc +0 -0
  314. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/hooks.cpython-312.pyc +0 -0
  315. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpchecksum.cpython-312.pyc +0 -0
  316. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpsession.cpython-312.pyc +0 -0
  317. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/loaders.cpython-312.pyc +0 -0
  318. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/model.cpython-312.pyc +0 -0
  319. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/monitoring.cpython-312.pyc +0 -0
  320. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/paginate.cpython-312.pyc +0 -0
  321. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/parsers.cpython-312.pyc +0 -0
  322. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/plugin.cpython-312.pyc +0 -0
  323. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/regions.cpython-312.pyc +0 -0
  324. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/response.cpython-312.pyc +0 -0
  325. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/retryhandler.cpython-312.pyc +0 -0
  326. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/serialize.cpython-312.pyc +0 -0
  327. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/session.cpython-312.pyc +0 -0
  328. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/signers.cpython-312.pyc +0 -0
  329. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/stub.cpython-312.pyc +0 -0
  330. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/tokens.cpython-312.pyc +0 -0
  331. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/translate.cpython-312.pyc +0 -0
  332. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/useragent.cpython-312.pyc +0 -0
  333. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/utils.cpython-312.pyc +0 -0
  334. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/validate.cpython-312.pyc +0 -0
  335. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/waiter.cpython-312.pyc +0 -0
  336. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/__init__.cpython-312.pyc +0 -0
  337. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/auth.cpython-312.pyc +0 -0
  338. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/__init__.cpython-312.pyc +0 -0
  339. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/client.cpython-312.pyc +0 -0
  340. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/docstring.cpython-312.pyc +0 -0
  341. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/example.cpython-312.pyc +0 -0
  342. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/method.cpython-312.pyc +0 -0
  343. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/paginator.cpython-312.pyc +0 -0
  344. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/params.cpython-312.pyc +0 -0
  345. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/service.cpython-312.pyc +0 -0
  346. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/shape.cpython-312.pyc +0 -0
  347. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/sharedexample.cpython-312.pyc +0 -0
  348. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/translator.cpython-312.pyc +0 -0
  349. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/utils.cpython-312.pyc +0 -0
  350. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/waiter.cpython-312.pyc +0 -0
  351. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/__init__.cpython-312.pyc +0 -0
  352. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-312.pyc +0 -0
  353. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/restdoc.cpython-312.pyc +0 -0
  354. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/style.cpython-312.pyc +0 -0
  355. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/__init__.cpython-312.pyc +0 -0
  356. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/adaptive.cpython-312.pyc +0 -0
  357. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/base.cpython-312.pyc +0 -0
  358. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/bucket.cpython-312.pyc +0 -0
  359. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/quota.cpython-312.pyc +0 -0
  360. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/special.cpython-312.pyc +0 -0
  361. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/standard.cpython-312.pyc +0 -0
  362. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/throttling.cpython-312.pyc +0 -0
  363. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/__init__.cpython-312.pyc +0 -0
  364. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/six.cpython-312.pyc +0 -0
  365. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/__init__.cpython-312.pyc +0 -0
  366. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
  367. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/__pycache__/__init__.cpython-312.pyc +0 -0
  368. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  369. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  370. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/__init__.cpython-312.pyc +0 -0
  371. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_common.cpython-312.pyc +0 -0
  372. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_version.cpython-312.pyc +0 -0
  373. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/easter.cpython-312.pyc +0 -0
  374. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/relativedelta.cpython-312.pyc +0 -0
  375. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/rrule.cpython-312.pyc +0 -0
  376. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/tzwin.cpython-312.pyc +0 -0
  377. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/utils.cpython-312.pyc +0 -0
  378. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/__init__.cpython-312.pyc +0 -0
  379. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/_parser.cpython-312.pyc +0 -0
  380. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/isoparser.cpython-312.pyc +0 -0
  381. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/__init__.cpython-312.pyc +0 -0
  382. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_common.cpython-312.pyc +0 -0
  383. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_factories.cpython-312.pyc +0 -0
  384. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/tz.cpython-312.pyc +0 -0
  385. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/win.cpython-312.pyc +0 -0
  386. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc +0 -0
  387. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc +0 -0
  388. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc +0 -0
  389. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/ast.cpython-312.pyc +0 -0
  390. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc +0 -0
  391. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc +0 -0
  392. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc +0 -0
  393. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/lexer.cpython-312.pyc +0 -0
  394. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc +0 -0
  395. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc +0 -0
  396. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  397. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_base_connection.cpython-312.pyc +0 -0
  398. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
  399. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_request_methods.cpython-312.pyc +0 -0
  400. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
  401. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
  402. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
  403. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  404. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
  405. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
  406. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
  407. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc +0 -0
  408. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
  409. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
  410. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
  411. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc +0 -0
  412. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc +0 -0
  413. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc +0 -0
  414. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc +0 -0
  415. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc +0 -0
  416. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc +0 -0
  417. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/connection.cpython-312.pyc +0 -0
  418. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc +0 -0
  419. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
  420. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
  421. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
  422. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
  423. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
  424. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
  425. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
  426. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
  427. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
  428. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
  429. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
  430. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc +0 -0
  431. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
  432. package/lib/cloudfront/patterns/cognitoCustomerPool.d.ts +62 -0
  433. package/lib/cloudfront/patterns/cognitoCustomerPool.js +74 -15
  434. package/package.json +1 -1
@@ -19,6 +19,29 @@ export interface CognitoAppClientSpec {
19
19
  /** Generate a client secret. @default false (public SPA client) */
20
20
  readonly generateSecret?: boolean;
21
21
  }
22
+ /**
23
+ * Same-account SES email configuration for the pool. Synthesises an
24
+ * `EmailConfiguration` with `EmailSendingAccount: DEVELOPER`. Its purpose is to
25
+ * satisfy Cognito's precondition for enabling EMAIL_OTP MFA — Cognito requires a
26
+ * verified same-account SES identity on the pool before it will accept
27
+ * `EnabledMfas: ['EMAIL_OTP']`, independently of any custom email sender that
28
+ * overrides actual delivery.
29
+ */
30
+ export interface CognitoCustomerPoolEmailConfig {
31
+ /**
32
+ * ARN of a VERIFIED SES identity in the POOL's OWN account (domain identity
33
+ * preferred; a verified email-address identity also works). Passed to Cognito as
34
+ * the `EmailConfiguration.SourceArn`. Must be in the pool's region.
35
+ */
36
+ readonly sesVerifiedDomainArn: string;
37
+ /**
38
+ * The From address for the pool's SES configuration, e.g.
39
+ * `2fa@alpha.functionalself.com`. A local-part on the verified identity's domain.
40
+ */
41
+ readonly fromEmail: string;
42
+ /** Optional display name, e.g. "Functional Self". @default - address only */
43
+ readonly fromName?: string;
44
+ }
22
45
  /**
23
46
  * Optional Cognito Identity Pool + ABAC (attributes-for-access-control) config.
24
47
  * Maps token claims to principal tags so downstream IAM can scope on them.
@@ -89,6 +112,29 @@ export interface CognitoCustomerPoolProps {
89
112
  * @default false
90
113
  */
91
114
  readonly emailOtpMfa?: boolean;
115
+ /**
116
+ * Configure the pool for PASSWORDLESS customer sign-in using choice-based
117
+ * authentication (`USER_AUTH`) with `EMAIL_OTP` as a first auth factor. The
118
+ * customer signs in with just their email and a one-time code — no password and
119
+ * no second factor. Delivered by {@link customEmailSenderLambda}; requires
120
+ * {@link customSenderKmsKey} and {@link emailConfiguration} (same enablement
121
+ * precondition as {@link emailOtpMfa}), and an Essentials-or-higher feature plan.
122
+ *
123
+ * Hard Cognito constraints this mode encodes (proven against a live pool):
124
+ * - `PASSWORD` is MANDATORY in `AllowedFirstAuthFactors`; Cognito rejects a list
125
+ * without it. So the pool allows `[PASSWORD, EMAIL_OTP]` and the CONSUMER's UI
126
+ * must never offer the password path (always `InitiateAuth(USER_AUTH,
127
+ * PREFERRED_CHALLENGE=EMAIL_OTP)`). To keep the password unreachable through the
128
+ * app client too, this mode also drops the `userSrp` auth flow and enables the
129
+ * `user` (choice-based `ALLOW_USER_AUTH`) flow on the app clients.
130
+ * - `EMAIL_OTP` as a first factor is INCOMPATIBLE with `MfaConfiguration: ON`, so
131
+ * this mode forces `mfa: OFF`. NOTE: the `OFF -> ON` transition is irreversible
132
+ * via the API, so a pool created with this mode cannot later gain MFA in place.
133
+ *
134
+ * Mutually exclusive with {@link emailOtpMfa} (email is a first factor here, a
135
+ * second factor there). @default false
136
+ */
137
+ readonly passwordlessEmailOtp?: boolean;
92
138
  /**
93
139
  * Custom Email Sender Lambda. When set (together with {@link customSenderKmsKey}),
94
140
  * it is wired to the pool via the `CUSTOM_EMAIL_SENDER` trigger and Cognito
@@ -106,6 +152,22 @@ export interface CognitoCustomerPoolProps {
106
152
  * @default - no key (only valid when no custom email sender is set)
107
153
  */
108
154
  readonly customSenderKmsKey?: kms.IKey;
155
+ /**
156
+ * Same-account SES email configuration for the pool. REQUIRED when
157
+ * {@link emailOtpMfa} is set: Cognito refuses to enable EMAIL_OTP MFA unless the
158
+ * pool carries an `EmailSendingAccount: DEVELOPER` configuration pointing at a
159
+ * VERIFIED SES identity in the pool's OWN account — this precondition is validated
160
+ * at the pool-config layer, BEFORE any email is routed, so a
161
+ * {@link customEmailSenderLambda} (which overrides delivery) does not satisfy it.
162
+ *
163
+ * The identity here exists only to satisfy that enablement precondition; when a
164
+ * custom email sender is attached, Cognito never actually sends through this
165
+ * identity (the Lambda intercepts every email), so a cross-account or
166
+ * SES-sandbox delivery path is unaffected. Prefer a verified DOMAIN identity;
167
+ * a verified email-address identity also works if Cognito rejects the domain form.
168
+ * @default - no SES config (Cognito default sender; not valid with emailOtpMfa)
169
+ */
170
+ readonly emailConfiguration?: CognitoCustomerPoolEmailConfig;
109
171
  /**
110
172
  * L1 account-takeover risk configuration (requires {@link advancedSecurityMode}
111
173
  * ENFORCED/AUDIT). Passed through to CfnUserPoolRiskConfigurationAttachment.
@@ -62,27 +62,50 @@ class CognitoCustomerPool extends constructs.Construct {
62
62
  throw new Error('CognitoCustomerPool: emailOtpMfa requires customEmailSenderLambda (and customSenderKmsKey) — '
63
63
  + 'EMAIL_OTP codes are delivered by the custom email sender, so email MFA cannot be enabled without it.');
64
64
  }
65
+ if (props.emailOtpMfa && !props.emailConfiguration) {
66
+ throw new Error('CognitoCustomerPool: emailOtpMfa requires emailConfiguration — '
67
+ + 'Cognito refuses to enable EMAIL_OTP MFA unless the pool carries a DEVELOPER SES '
68
+ + 'EmailConfiguration on a verified same-account identity. This precondition is checked '
69
+ + 'before any email is routed, so the custom email sender does not satisfy it.');
70
+ }
71
+ if (props.passwordlessEmailOtp && props.emailOtpMfa) {
72
+ throw new Error('CognitoCustomerPool: passwordlessEmailOtp and emailOtpMfa are mutually exclusive — '
73
+ + 'passwordless uses EMAIL_OTP as a FIRST auth factor (MFA off), while emailOtpMfa uses it '
74
+ + 'as a SECOND factor (MFA on). Choose one.');
75
+ }
76
+ if (props.passwordlessEmailOtp && (!props.customEmailSenderLambda || !props.emailConfiguration)) {
77
+ throw new Error('CognitoCustomerPool: passwordlessEmailOtp requires customEmailSenderLambda, customSenderKmsKey '
78
+ + 'and emailConfiguration — the first-factor EMAIL_OTP code is delivered by the custom email '
79
+ + 'sender, and Cognito requires the same DEVELOPER SES EmailConfiguration enablement precondition.');
80
+ }
65
81
  // With emailOtpMfa, EMAIL_OTP is the sole factor and is applied via an L1
66
82
  // override below; do NOT pass mfaSecondFactor.email to the L2 (its validateEmailMfa
67
- // demands a managed DEVELOPER SES config, which the custom-sender path avoids).
83
+ // demands a `email` UserPoolEmail be set, which we supply separately via
84
+ // emailConfiguration — see the `email` prop below).
68
85
  const l2MfaSecondFactor = props.emailOtpMfa
69
86
  ? { otp: false, sms: false }
70
87
  : (props.mfaSecondFactor ?? { otp: true, sms: false });
71
- // Account recovery must not be email-only when EMAIL_OTP MFA is enabled:
72
- // Cognito rejects EmailMfaConfiguration unless AccountRecoverySetting has at
73
- // least one mechanism other than verified_email (recovering email-based MFA via
74
- // email is circular). AccountRecovery.NONE maps to the admin_only mechanism, which
75
- // satisfies the constraint without introducing an SMS/phone factor into this
76
- // passwordless-email design. Otherwise keep the email-only default.
77
88
  const accountRecovery = props.emailOtpMfa
89
+ // Cognito rejects EmailMfaConfiguration unless AccountRecoverySetting has at
90
+ // least one mechanism other than verified_email (recovering email-based MFA via
91
+ // email is circular). AccountRecovery.NONE maps to the admin_only mechanism, which
92
+ // satisfies the constraint without introducing an SMS/phone factor into this
93
+ // passwordless-email design. Otherwise keep the email-only default.
78
94
  ? aws_cdk_lib_1.aws_cognito.AccountRecovery.NONE
79
95
  : aws_cdk_lib_1.aws_cognito.AccountRecovery.EMAIL_ONLY;
96
+ // Passwordless uses EMAIL_OTP as a FIRST auth factor, which Cognito forbids while
97
+ // MFA is ON ("Only PASSWORD and WEB_AUTHN can be enabled as an auth factor if MFA
98
+ // is enabled"). So passwordless forces MFA OFF. NB: the OFF->ON transition is
99
+ // irreversible via the API — a pool created passwordless cannot later gain MFA in place.
100
+ const mfaConfig = props.passwordlessEmailOtp
101
+ ? aws_cdk_lib_1.aws_cognito.Mfa.OFF
102
+ : (props.mfa ?? aws_cdk_lib_1.aws_cognito.Mfa.REQUIRED);
80
103
  this.userPool = new aws_cdk_lib_1.aws_cognito.UserPool(this, 'UserPool', {
81
104
  userPoolName: props.userPoolName,
82
105
  selfSignUpEnabled: props.selfSignUpEnabled ?? false,
83
106
  signInAliases: { email: true },
84
107
  signInCaseSensitive: false,
85
- mfa: props.mfa ?? aws_cdk_lib_1.aws_cognito.Mfa.REQUIRED,
108
+ mfa: mfaConfig,
86
109
  mfaSecondFactor: l2MfaSecondFactor,
87
110
  passwordPolicy: props.passwordPolicy ?? {
88
111
  minLength: 12,
@@ -108,11 +131,38 @@ class CognitoCustomerPool extends constructs.Construct {
108
131
  // L1 escape hatch: enable EMAIL_OTP as the only MFA factor. The L2 cannot express
109
132
  // "email MFA delivered solely by a custom sender" (see emailOtpMfa docs), so set
110
133
  // EnabledMfas directly on the underlying CfnUserPool. The custom email sender
111
- // delivers the code; no managed SES email configuration is required.
134
+ // delivers the code, but Cognito still requires a DEVELOPER SES EmailConfiguration
135
+ // on a verified same-account identity as an ENABLEMENT precondition (below).
136
+ if (props.emailConfiguration) {
137
+ // Set EmailConfiguration via L1 with the caller's exact verified same-account
138
+ // identity ARN — accepting either a domain or an email-address identity without
139
+ // CDK re-deriving the ARN from the From address. This satisfies Cognito's
140
+ // EMAIL_OTP enablement precondition; the custom email sender still overrides
141
+ // actual delivery, so this identity is never sent through.
142
+ const cfnPool = this.userPool.node.defaultChild;
143
+ cfnPool.emailConfiguration = {
144
+ emailSendingAccount: 'DEVELOPER',
145
+ sourceArn: props.emailConfiguration.sesVerifiedDomainArn,
146
+ from: props.emailConfiguration.fromName
147
+ ? `${props.emailConfiguration.fromName} <${props.emailConfiguration.fromEmail}>`
148
+ : props.emailConfiguration.fromEmail,
149
+ };
150
+ }
112
151
  if (props.emailOtpMfa) {
113
152
  const cfnPool = this.userPool.node.defaultChild;
114
153
  cfnPool.enabledMfas = ['EMAIL_OTP'];
115
154
  }
155
+ if (props.passwordlessEmailOtp) {
156
+ // Choice-based sign-in: EMAIL_OTP as a first auth factor. PASSWORD is MANDATORY
157
+ // in AllowedFirstAuthFactors (Cognito rejects a list without it), so it stays —
158
+ // but the app client below drops the password (userSrp) flow and the consumer's
159
+ // UI never offers it, so the password path is unreachable through this client.
160
+ const cfnPool = this.userPool.node.defaultChild;
161
+ cfnPool.policies = {
162
+ ...cfnPool.policies,
163
+ signInPolicy: { allowedFirstAuthFactors: ['PASSWORD', 'EMAIL_OTP'] },
164
+ };
165
+ }
116
166
  const preTokenLambda = props.preTokenGenerationLambda ?? new aws_cdk_lib_1.aws_lambda.Function(this, 'PreTokenLambda', {
117
167
  runtime: aws_cdk_lib_1.aws_lambda.Runtime.PYTHON_3_12,
118
168
  handler: 'index.handler',
@@ -142,11 +192,20 @@ class CognitoCustomerPool extends constructs.Construct {
142
192
  const client = new aws_cdk_lib_1.aws_cognito.UserPoolClient(this, `Client${spec.key}`, {
143
193
  userPool: this.userPool,
144
194
  generateSecret: spec.generateSecret ?? false,
145
- authFlows: {
146
- userSrp: true,
147
- custom: props.enableCustomAuthFlow ?? false,
148
- // userPassword / adminUserPassword intentionally omitted (disabled).
149
- },
195
+ authFlows: props.passwordlessEmailOtp
196
+ ? {
197
+ // Passwordless: enable choice-based ALLOW_USER_AUTH and DROP userSrp so the
198
+ // password challenge cannot be initiated through this client — even by a
199
+ // direct API call. PASSWORD stays a pool factor (Cognito's rule) but is
200
+ // unreachable via the storefront client.
201
+ user: true,
202
+ custom: props.enableCustomAuthFlow ?? false,
203
+ }
204
+ : {
205
+ userSrp: true,
206
+ custom: props.enableCustomAuthFlow ?? false,
207
+ // userPassword / adminUserPassword intentionally omitted (disabled).
208
+ },
150
209
  oAuth: {
151
210
  flows: { authorizationCodeGrant: true },
152
211
  scopes: [aws_cdk_lib_1.aws_cognito.OAuthScope.OPENID, aws_cdk_lib_1.aws_cognito.OAuthScope.EMAIL, aws_cdk_lib_1.aws_cognito.OAuthScope.PROFILE],
@@ -201,4 +260,4 @@ class CognitoCustomerPool extends constructs.Construct {
201
260
  }
202
261
  }
203
262
  exports.CognitoCustomerPool = CognitoCustomerPool;
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0b0N1c3RvbWVyUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbG91ZGZyb250L3BhdHRlcm5zL2NvZ25pdG9DdXN0b21lclBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FLcUI7QUFDckIsdURBQXlDO0FBeUh6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBWTNELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvRixNQUFNLElBQUksS0FBSyxDQUNiLGtHQUFrRztrQkFDaEcscUhBQXFILENBQ3hILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0Y7a0JBQzdGLHNHQUFzRyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxvRkFBb0Y7UUFDcEYsZ0ZBQWdGO1FBQ2hGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLFdBQVc7WUFDekMsQ0FBQyxDQUFD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aUJBQ3BGLEVBQ0QsK0JBQStCLENBQ2hDO2dCQUNELGVBQWUsRUFBRSxHQUFHLENBQUMsZ0NBQWdDO2FBQ3RELENBQUMsQ0FBQztZQUVILElBQUkseUJBQU8sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7Z0JBQ25FLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUc7Z0JBQ3JDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFO2FBQ3pELENBQUMsQ0FBQztZQUVILGdFQUFnRTtZQUNoRSxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxJQUFJLHlCQUFPLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtvQkFDN0QsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRztvQkFDckMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7b0JBQ3hELFdBQVcsRUFBRSxLQUFLO29CQUNsQixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7aUJBQ2pDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUxELGtEQTBMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jb2duaXRvIGFzIGNvZ25pdG8sXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3Nfa21zIGFzIGttcyxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cbnR5cGUgQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZyA9IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG50eXBlIENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnID0gY29nbml0by5DZm5Vc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudC5Db21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG5cbi8qKlxuICogU3BlY2lmaWNhdGlvbiBmb3Igb25lIENvZ25pdG8gYXBwIGNsaWVudCAoZS5nLiBvbmUgYnJhbmQgb3Igb25lIGZyb250LWVuZCkuXG4gKiBQdWJsaWMgU1BBIGNsaWVudHM6IG5vIHNlY3JldCwgUEtDRSAoYXV0aG9yaXphdGlvbi1jb2RlIGdyYW50KSwgU1JQLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BcHBDbGllbnRTcGVjIHtcbiAgLyoqIExvZ2ljYWwga2V5IHVzZWQgYXMgdGhlIGNvbnN0cnVjdCBpZCBhbmQgdGhlIGtleSBpbiB7QGxpbmsgQ29nbml0b0N1c3RvbWVyUG9vbC51c2VyUG9vbENsaWVudHN9LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIE9BdXRoMiBjYWxsYmFjayBVUkxzIGZvciB0aGlzIGNsaWVudCAodXNlZCBvbmx5IGJ5IHRoZSBzb2NpYWwvaG9zdGVkIHJlZGlyZWN0IGZsb3cpLiAqL1xuICByZWFkb25seSBjYWxsYmFja1VybHM/OiBzdHJpbmdbXTtcbiAgLyoqIExvZ291dCBVUkxzIGZvciB0aGlzIGNsaWVudC4gKi9cbiAgcmVhZG9ubHkgbG9nb3V0VXJscz86IHN0cmluZ1tdO1xuICAvKiogSWRlbnRpdHkgcHJvdmlkZXJzIHRoaXMgY2xpZW50IHN1cHBvcnRzLiBAZGVmYXVsdCBbQ09HTklUT10gKi9cbiAgcmVhZG9ubHkgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM/OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlcltdO1xuICAvKiogR2VuZXJhdGUgYSBjbGllbnQgc2VjcmV0LiBAZGVmYXVsdCBmYWxzZSAocHVibGljIFNQQSBjbGllbnQpICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlU2VjcmV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25hbCBDb2duaXRvIElkZW50aXR5IFBvb2wgKyBBQkFDIChhdHRyaWJ1dGVzLWZvci1hY2Nlc3MtY29udHJvbCkgY29uZmlnLlxuICogTWFwcyB0b2tlbiBjbGFpbXMgdG8gcHJpbmNpcGFsIHRhZ3Mgc28gZG93bnN0cmVhbSBJQU0gY2FuIHNjb3BlIG9uIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0lkZW50aXR5UG9vbEFiYWNDb25maWcge1xuICAvKiogQWxsb3cgdW5hdXRoZW50aWNhdGVkIChndWVzdCkgaWRlbnRpdGllcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENsYWltIOKGkiBwcmluY2lwYWwtdGFnIG1hcHBpbmcsIGUuZy4gYHsgc3ViOiAnY3VzdG9tZXItaWQnIH1gLiBBcHBsaWVkIHRvIHRoZVxuICAgKiB1c2VyLXBvb2wgcHJvdmlkZXIgc28gYXV0aGVudGljYXRlZCBzZXNzaW9ucyBjYXJyeSB0aGVzZSBhcyBgYXdzOlByaW5jaXBhbFRhZy8qYC5cbiAgICovXG4gIHJlYWRvbmx5IHByaW5jaXBhbFRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogTWFuYWdlZCBwb2xpY2llcyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgcm9sZS4gQGRlZmF1bHQgbm9uZSAoYXR0YWNoIHlvdXIgb3duKS4gKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRlZFJvbGVNYW5hZ2VkUG9saWNpZXM/OiBpYW0uSU1hbmFnZWRQb2xpY3lbXTtcbn1cblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIENvZ25pdG9DdXN0b21lclBvb2x9LiBFdmVyeSB2YWx1ZSBpcyBnZW5lcmljIOKAlCBub1xuICogcHJvamVjdC9icmFuZC9kb21haW4gc3BlY2lmaWNzIGFyZSBiYWtlZCBpbjsgcGFzcyB0aGVtIGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0N1c3RvbWVyUG9vbFByb3BzIHtcbiAgLyoqIFVzZXIgcG9vbCBuYW1lLiAqL1xuICByZWFkb25seSB1c2VyUG9vbE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDb2duaXRvIGhvc3RlZC1VSSBkb21haW4gcHJlZml4IChnbG9iYWxseSB1bmlxdWUpLiAqL1xuICByZWFkb25seSBjb2duaXRvRG9tYWluUHJlZml4OiBzdHJpbmc7XG4gIC8qKiBBcHAgY2xpZW50cyB0byBjcmVhdGUgKHR5cGljYWxseSBvbmUgcGVyIGJyYW5kL2Zyb250LWVuZCkuIEF0IGxlYXN0IG9uZS4gKi9cbiAgcmVhZG9ubHkgYXBwQ2xpZW50czogQ29nbml0b0FwcENsaWVudFNwZWNbXTtcbiAgLyoqIEVuYWJsZSBzZWxmLXNlcnZpY2Ugc2lnbi11cC4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgc2VsZlNpZ25VcEVuYWJsZWQ/OiBib29sZWFuO1xuICAvKiogTUZBIGVuZm9yY2VtZW50LiBAZGVmYXVsdCBSRVFVSVJFRCAqL1xuICByZWFkb25seSBtZmE/OiBjb2duaXRvLk1mYTtcbiAgLyoqIFNlY29uZCBmYWN0b3JzLiBAZGVmYXVsdCB7IG90cDogdHJ1ZSwgc21zOiBmYWxzZSB9ICovXG4gIHJlYWRvbmx5IG1mYVNlY29uZEZhY3Rvcj86IGNvZ25pdG8uTWZhU2Vjb25kRmFjdG9yO1xuICAvKiogUGFzc3dvcmQgcG9saWN5LiBAZGVmYXVsdCBtaW5MZW5ndGggMTIsIHVwcGVyL2xvd2VyL2RpZ2l0cy9zeW1ib2xzLiAqL1xuICByZWFkb25seSBwYXNzd29yZFBvbGljeT86IGNvZ25pdG8uUGFzc3dvcmRQb2xpY3k7XG4gIC8qKiBBZHZhbmNlZCBzZWN1cml0eSBtb2RlICh0aHJlYXQgcHJvdGVjdGlvbikuIEBkZWZhdWx0IE9GRiAqL1xuICByZWFkb25seSBhZHZhbmNlZFNlY3VyaXR5TW9kZT86IGNvZ25pdG8uQWR2YW5jZWRTZWN1cml0eU1vZGU7XG4gIC8qKiBTdGFuZGFyZCBhdHRyaWJ1dGVzIGNvbmZpZy4gKi9cbiAgcmVhZG9ubHkgc3RhbmRhcmRBdHRyaWJ1dGVzPzogY29nbml0by5TdGFuZGFyZEF0dHJpYnV0ZXM7XG4gIC8qKiBDdXN0b20gYXR0cmlidXRlcy4gKi9cbiAgcmVhZG9ubHkgY3VzdG9tQXR0cmlidXRlcz86IHsgW2tleTogc3RyaW5nXTogY29nbml0by5JQ3VzdG9tQXR0cmlidXRlIH07XG4gIC8qKiBFbmFibGUgdGhlIENVU1RPTV9BVVRIIGZsb3cgb24gYXBwIGNsaWVudHMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGVuYWJsZUN1c3RvbUF1dGhGbG93PzogYm9vbGVhbjtcbiAgLyoqIEFjY2VzcyB0b2tlbiB2YWxpZGl0eS4gQGRlZmF1bHQgMSBob3VyICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Rva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogSUQgdG9rZW4gdmFsaWRpdHkuIEBkZWZhdWx0IDEgaG91ciAqL1xuICByZWFkb25seSBpZFRva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogUmVmcmVzaCB0b2tlbiB2YWxpZGl0eS4gQGRlZmF1bHQgMzAgZGF5cyAqL1xuICByZWFkb25seSByZWZyZXNoVG9rZW5WYWxpZGl0eT86IGNvcmUuRHVyYXRpb247XG4gIC8qKiBDb2duaXRvIGdyb3VwcyB0byBjcmVhdGUuICovXG4gIHJlYWRvbmx5IGdyb3Vwcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHJlLXRva2VuLWdlbmVyYXRpb24gTGFtYmRhIChWMikuIEBkZWZhdWx0IGEgYnVuZGxlZCBuby1vcCBsaWJyYXJ5IExhbWJkYSBpc1xuICAgKiBjcmVhdGVkLiBQYXNzIHlvdXIgb3duIHRvIGN1c3RvbWlzZSBlbWl0dGVkIGNsYWltcy5cbiAgICovXG4gIHJlYWRvbmx5IHByZVRva2VuR2VuZXJhdGlvbkxhbWJkYT86IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKlxuICAgKiBFbmFibGUgZW1haWwgb25lLXRpbWUtcGFzc3dvcmQgKGBFTUFJTF9PVFBgKSBhcyB0aGUgTUZBIHNlY29uZCBmYWN0b3IsIGRlbGl2ZXJlZFxuICAgKiBieSB7QGxpbmsgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGF9LiBUaGlzIGlzIHNldCB2aWEgYW4gTDEgb3ZlcnJpZGUgb24gdGhlXG4gICAqIHVuZGVybHlpbmcgYENmblVzZXJQb29sYCAoYEVuYWJsZWRNZmFzOiBbJ0VNQUlMX09UUCddYCkgcmF0aGVyIHRoYW5cbiAgICogYG1mYVNlY29uZEZhY3Rvci5lbWFpbGAsIGJlY2F1c2UgdGhlIENESyBMMiByZXF1aXJlcyBhIG1hbmFnZWQgKGBERVZFTE9QRVJgKSBTRVNcbiAgICogYGVtYWlsYCBjb25maWcgZm9yIGBtZmFTZWNvbmRGYWN0b3IuZW1haWxgIOKAlCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhXG4gICAqIGN1c3RvbS1lbWFpbC1zZW5kZXItb25seSBkZWxpdmVyeSBwYXRoLiBSZXF1aXJlcyB7QGxpbmsgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGF9XG4gICAqIGFuZCB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fSwgYW5kIGEgcG9vbCBmZWF0dXJlIHBsYW4gb2YgRXNzZW50aWFscyBvciBoaWdoZXIuXG4gICAqIFdoZW4gdHJ1ZSwgYW55IGBvdHBgL2BzbXNgIGluIHtAbGluayBtZmFTZWNvbmRGYWN0b3J9IGlzIGlnbm9yZWQg4oCUIEVNQUlMX09UUCBpc1xuICAgKiB0aGUgc29sZSBmYWN0b3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbWFpbE90cE1mYT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gRW1haWwgU2VuZGVyIExhbWJkYS4gV2hlbiBzZXQgKHRvZ2V0aGVyIHdpdGgge0BsaW5rIGN1c3RvbVNlbmRlckttc0tleX0pLFxuICAgKiBpdCBpcyB3aXJlZCB0byB0aGUgcG9vbCB2aWEgdGhlIGBDVVNUT01fRU1BSUxfU0VOREVSYCB0cmlnZ2VyIGFuZCBDb2duaXRvXG4gICAqIGRlbGl2ZXJzIGFsbCBjdXN0b21lciBlbWFpbHMgKE1GQSBjb2RlcywgdmVyaWZpY2F0aW9uLCB0ZW1wb3JhcnkgcGFzc3dvcmRzKVxuICAgKiB0aHJvdWdoIHRoaXMgTGFtYmRhIGluc3RlYWQgb2YgaXRzIGRlZmF1bHQgc2VuZGVyIG9yIGEgbWFuYWdlZCBTRVMgc2VuZGVyLlxuICAgKiBDb2duaXRvIGVuY3J5cHRzIGVhY2ggY29kZSB0byB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fTsgdGhlIExhbWJkYSBkZWNyeXB0c1xuICAgKiBpdCB3aXRoIHRoZSBBV1MgRW5jcnlwdGlvbiBTREsgYmVmb3JlIHNlbmRpbmcuIFJlcXVpcmVzIHtAbGluayBjdXN0b21TZW5kZXJLbXNLZXl9LlxuICAgKiBAZGVmYXVsdCAtIENvZ25pdG8ncyBkZWZhdWx0IGVtYWlsIGRlbGl2ZXJ5XG4gICAqL1xuICByZWFkb25seSBjdXN0b21FbWFpbFNlbmRlckxhbWJkYT86IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTeW1tZXRyaWMgS01TIGtleSBDb2duaXRvIHVzZXMgdG8gZW5jcnlwdCBjb2RlcyBmb3Ige0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfS5cbiAgICogUmVxdWlyZWQgd2hlbiBhIGN1c3RvbSBlbWFpbCBzZW5kZXIgaXMgcHJvdmlkZWQ7IGlnbm9yZWQgb3RoZXJ3aXNlLiBDb2duaXRvIGlzXG4gICAqIGdyYW50ZWQgZW5jcnlwdC9kZWNyeXB0IG9uIGl0OyB0aGUgTGFtYmRhIG11c3QgYmUgc2VwYXJhdGVseSBncmFudGVkIGRlY3J5cHQuXG4gICAqIEBkZWZhdWx0IC0gbm8ga2V5IChvbmx5IHZhbGlkIHdoZW4gbm8gY3VzdG9tIGVtYWlsIHNlbmRlciBpcyBzZXQpXG4gICAqL1xuICByZWFkb25seSBjdXN0b21TZW5kZXJLbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIEwxIGFjY291bnQtdGFrZW92ZXIgcmlzayBjb25maWd1cmF0aW9uIChyZXF1aXJlcyB7QGxpbmsgYWR2YW5jZWRTZWN1cml0eU1vZGV9XG4gICAqIEVORk9SQ0VEL0FVRElUKS4gUGFzc2VkIHRocm91Z2ggdG8gQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbj86IEFjY291bnRUYWtlb3ZlclJpc2tDb25maWc7XG4gIC8qKiBMMSBjb21wcm9taXNlZC1jcmVkZW50aWFscyByaXNrIGNvbmZpZ3VyYXRpb24uICovXG4gIHJlYWRvbmx5IGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbj86IENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnO1xuICAvKiogT3B0aW9uYWwgaWRlbnRpdHkgcG9vbCArIEFCQUMgY29uZmlndXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogQ29nbml0b0lkZW50aXR5UG9vbEFiYWNDb25maWc7XG4gIC8qKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHBvb2wuIEBkZWZhdWx0IFJFVEFJTiAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY29yZS5SZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYywgcmV1c2FibGUgc2VjdXJlIENvZ25pdG8gKipjdXN0b21lcioqIHVzZXIgcG9vbCBmb3IgdGhlIGN1c3RvbS1VSVxuICogKGNsaWVudC1zaWRlIFNSUCkgYXV0aGVudGljYXRpb24gcGF0dGVybjogcHVibGljIFBLQ0UgYXBwIGNsaWVudHMsIE1GQSxcbiAqIHN0cm9uZyBwYXNzd29yZCBwb2xpY3ksIG9wdGlvbmFsIGFkdmFuY2VkLXNlY3VyaXR5IHRocmVhdCBwcm90ZWN0aW9uLFxuICogcGVyLWNsaWVudCAocGVyLWJyYW5kKSBhcHAgY2xpZW50cywgYW5kIGFuIG9wdGlvbmFsIGlkZW50aXR5IHBvb2wgd2l0aCBBQkFDLlxuICpcbiAqIFByb3Zpc2lvbnMgT05MWSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIEl0IGtub3dzIG5vdGhpbmcgYWJvdXQgQ2xvdWRGcm9udCxcbiAqIHNlc3Npb25zLCBvciBhbnkgc3BlY2lmaWMgcHJvamVjdCDigJQgcGFpciBpdCB3aXRoIGBDb2duaXRvU2Vzc2lvbkJhY2tlbmRgXG4gKiAoc2Vzc2lvbiBzdWJzdHJhdGUpIGFuZCBgQ29nbml0b0N1c3RvbVVpQXV0aGAgKGVkZ2UvQ0ROKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9DdXN0b21lclBvb2wgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbDogY29nbml0by5Vc2VyUG9vbDtcbiAgLyoqIEFwcCBjbGllbnRzIGtleWVkIGJ5IHtAbGluayBDb2duaXRvQXBwQ2xpZW50U3BlYy5rZXl9LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnRzOiBSZWNvcmQ8c3RyaW5nLCBjb2duaXRvLlVzZXJQb29sQ2xpZW50PjtcbiAgLyoqIFRoZSBmaXJzdCBhcHAgY2xpZW50LCBmb3IgY29udmVuaWVuY2UuICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbENsaWVudDogY29nbml0by5Vc2VyUG9vbENsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sRG9tYWluOiBjb2duaXRvLlVzZXJQb29sRG9tYWluO1xuICAvKiogSG9zdGVkLVVJIGRvbWFpbiBVUkwsIGUuZy4gYDxwcmVmaXg+LmF1dGguPHJlZ2lvbj4uYW1hem9uY29nbml0by5jb21gLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29nbml0b0RvbWFpblVybDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogY29nbml0by5DZm5JZGVudGl0eVBvb2w7XG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdGVkUm9sZT86IGlhbS5Sb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZ25pdG9DdXN0b21lclBvb2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLmFwcENsaWVudHMgfHwgcHJvcHMuYXBwQ2xpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29nbml0b0N1c3RvbWVyUG9vbCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXBwIGNsaWVudCcpO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMuY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgPT09IHVuZGVmaW5lZCkgIT09IChwcm9wcy5jdXN0b21TZW5kZXJLbXNLZXkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvZ25pdG9DdXN0b21lclBvb2w6IGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhIGFuZCBjdXN0b21TZW5kZXJLbXNLZXkgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlciDigJQgJ1xuICAgICAgICArICdhIGN1c3RvbSBlbWFpbCBzZW5kZXIgcmVxdWlyZXMgYSBLTVMga2V5IGZvciBDb2duaXRvIHRvIGVuY3J5cHQgY29kZXMgdG8sIGFuZCB0aGUga2V5IGlzIHVudXNlZCB3aXRob3V0IHRoZSBMYW1iZGEuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVtYWlsT3RwTWZhICYmICFwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogZW1haWxPdHBNZmEgcmVxdWlyZXMgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgKGFuZCBjdXN0b21TZW5kZXJLbXNLZXkpIOKAlCAnXG4gICAgICAgICsgJ0VNQUlMX09UUCBjb2RlcyBhcmUgZGVsaXZlcmVkIGJ5IHRoZSBjdXN0b20gZW1haWwgc2VuZGVyLCBzbyBlbWFpbCBNRkEgY2Fubm90IGJlIGVuYWJsZWQgd2l0aG91dCBpdC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBXaXRoIGVtYWlsT3RwTWZhLCBFTUFJTF9PVFAgaXMgdGhlIHNvbGUgZmFjdG9yIGFuZCBpcyBhcHBsaWVkIHZpYSBhbiBMMVxuICAgIC8vIG92ZXJyaWRlIGJlbG93OyBkbyBOT1QgcGFzcyBtZmFTZWNvbmRGYWN0b3IuZW1haWwgdG8gdGhlIEwyIChpdHMgdmFsaWRhdGVFbWFpbE1mYVxuICAgIC8vIGRlbWFuZHMgYSBtYW5hZ2VkIERFVkVMT1BFUiBTRVMgY29uZmlnLCB3aGljaCB0aGUgY3VzdG9tLXNlbmRlciBwYXRoIGF2b2lkcykuXG4gICAgY29uc3QgbDJNZmFTZWNvbmRGYWN0b3IgPSBwcm9wcy5lbWFpbE90cE1mYVxuICAgICAgPyB7IG90cDogZmFsc2UsIHNtczogZmFsc2UgfVxuICAgICAgOiAocHJvcHMubWZhU2Vjb25kRmFjdG9yID8/IHsgb3RwOiB0cnVlLCBzbXM6IGZhbHNlIH0pO1xuXG4gICAgLy8gQWNjb3VudCByZWNvdmVyeSBtdXN0IG5vdCBiZSBlbWFpbC1vbmx5IHdoZW4gRU1BSUxfT1RQIE1GQSBpcyBlbmFibGVkOlxuICAgIC8vIENvZ25pdG8gcmVqZWN0cyBFbWFpbE1mYUNvbmZpZ3VyYXRpb24gdW5sZXNzIEFjY291bnRSZWNvdmVyeVNldHRpbmcgaGFzIGF0XG4gICAgLy8gbGVhc3Qgb25lIG1lY2hhbmlzbSBvdGhlciB0aGFuIHZlcmlmaWVkX2VtYWlsIChyZWNvdmVyaW5nIGVtYWlsLWJhc2VkIE1GQSB2aWFcbiAgICAvLyBlbWFpbCBpcyBjaXJjdWxhcikuIEFjY291bnRSZWNvdmVyeS5OT05FIG1hcHMgdG8gdGhlIGFkbWluX29ubHkgbWVjaGFuaXNtLCB3aGljaFxuICAgIC8vIHNhdGlzZmllcyB0aGUgY29uc3RyYWludCB3aXRob3V0IGludHJvZHVjaW5nIGFuIFNNUy9waG9uZSBmYWN0b3IgaW50byB0aGlzXG4gICAgLy8gcGFzc3dvcmRsZXNzLWVtYWlsIGRlc2lnbi4gT3RoZXJ3aXNlIGtlZXAgdGhlIGVtYWlsLW9ubHkgZGVmYXVsdC5cbiAgICBjb25zdCBhY2NvdW50UmVjb3ZlcnkgPSBwcm9wcy5lbWFpbE90cE1mYVxuICAgICAgPyBjb2duaXRvLkFjY291bnRSZWNvdmVyeS5OT05FXG4gICAgICA6IGNvZ25pdG8uQWNjb3VudFJlY292ZXJ5LkVNQUlMX09OTFk7XG5cbiAgICB0aGlzLnVzZXJQb29sID0gbmV3IGNvZ25pdG8uVXNlclBvb2wodGhpcywgJ1VzZXJQb29sJywge1xuICAgICAgdXNlclBvb2xOYW1lOiBwcm9wcy51c2VyUG9vbE5hbWUsXG4gICAgICBzZWxmU2lnblVwRW5hYmxlZDogcHJvcHMuc2VsZlNpZ25VcEVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICBzaWduSW5BbGlhc2VzOiB7IGVtYWlsOiB0cnVlIH0sXG4gICAgICBzaWduSW5DYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgIG1mYTogcHJvcHMubWZhID8/IGNvZ25pdG8uTWZhLlJFUVVJUkVELFxuICAgICAgbWZhU2Vjb25kRmFjdG9yOiBsMk1mYVNlY29uZEZhY3RvcixcbiAgICAgIHBhc3N3b3JkUG9saWN5OiBwcm9wcy5wYXNzd29yZFBvbGljeSA/PyB7XG4gICAgICAgIG1pbkxlbmd0aDogMTIsXG4gICAgICAgIHJlcXVpcmVMb3dlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlcXVpcmVVcHBlcmNhc2U6IHRydWUsXG4gICAgICAgIHJlcXVpcmVEaWdpdHM6IHRydWUsXG4gICAgICAgIHJlcXVpcmVTeW1ib2xzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGFkdmFuY2VkU2VjdXJpdHlNb2RlOiBwcm9wcy5hZHZhbmNlZFNlY3VyaXR5TW9kZSA/PyBjb2duaXRvLkFkdmFuY2VkU2VjdXJpdHlNb2RlLk9GRixcbiAgICAgIHN0YW5kYXJkQXR0cmlidXRlczogcHJvcHMuc3RhbmRhcmRBdHRyaWJ1dGVzLFxuICAgICAgY3VzdG9tQXR0cmlidXRlczogcHJvcHMuY3VzdG9tQXR0cmlidXRlcyxcbiAgICAgIGF1dG9WZXJpZnk6IHsgZW1haWw6IHRydWUgfSxcbiAgICAgIGFjY291bnRSZWNvdmVyeSxcbiAgICAgIC8vIEN1c3RvbSBFbWFpbCBTZW5kZXI6IHdoZW4gcHJvdmlkZWQsIENvZ25pdG8gcm91dGVzIGV2ZXJ5IGN1c3RvbWVyIGVtYWlsXG4gICAgICAvLyB0aHJvdWdoIHRoaXMgTGFtYmRhIGFuZCBlbmNyeXB0cyBjb2RlcyB0byBjdXN0b21TZW5kZXJLbXNLZXkuIEJvdGggbXVzdCBiZVxuICAgICAgLy8gc2V0IG9uIHRoZSBwb29sIGF0IGNvbnN0cnVjdGlvbiDigJQgdGhlIEtNUyBrZXkgaXMgbm90IHNldHRhYmxlIHZpYSBhZGRUcmlnZ2VyLlxuICAgICAgY3VzdG9tU2VuZGVyS21zS2V5OiBwcm9wcy5jdXN0b21TZW5kZXJLbXNLZXksXG4gICAgICBsYW1iZGFUcmlnZ2VyczogcHJvcHMuY3VzdG9tRW1haWxTZW5kZXJMYW1iZGFcbiAgICAgICAgPyB7IGN1c3RvbUVtYWlsU2VuZGVyOiBwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSA/PyBjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgIH0pO1xuXG4gICAgLy8gTDEgZXNjYXBlIGhhdGNoOiBlbmFibGUgRU1BSUxfT1RQIGFzIHRoZSBvbmx5IE1GQSBmYWN0b3IuIFRoZSBMMiBjYW5ub3QgZXhwcmVzc1xuICAgIC8vIFwiZW1haWwgTUZBIGRlbGl2ZXJlZCBzb2xlbHkgYnkgYSBjdXN0b20gc2VuZGVyXCIgKHNlZSBlbWFpbE90cE1mYSBkb2NzKSwgc28gc2V0XG4gICAgLy8gRW5hYmxlZE1mYXMgZGlyZWN0bHkgb24gdGhlIHVuZGVybHlpbmcgQ2ZuVXNlclBvb2wuIFRoZSBjdXN0b20gZW1haWwgc2VuZGVyXG4gICAgLy8gZGVsaXZlcnMgdGhlIGNvZGU7IG5vIG1hbmFnZWQgU0VTIGVtYWlsIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQuXG4gICAgaWYgKHByb3BzLmVtYWlsT3RwTWZhKSB7XG4gICAgICBjb25zdCBjZm5Qb29sID0gdGhpcy51c2VyUG9vbC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjb2duaXRvLkNmblVzZXJQb29sO1xuICAgICAgY2ZuUG9vbC5lbmFibGVkTWZhcyA9IFsnRU1BSUxfT1RQJ107XG4gICAgfVxuXG4gICAgY29uc3QgcHJlVG9rZW5MYW1iZGEgPSBwcm9wcy5wcmVUb2tlbkdlbmVyYXRpb25MYW1iZGEgPz8gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnUHJlVG9rZW5MYW1iZGEnLCB7XG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMixcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhL3ByZS10b2tlbicpKSxcbiAgICAgIHRpbWVvdXQ6IGNvcmUuRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICB9KTtcbiAgICB0aGlzLnVzZXJQb29sLmFkZFRyaWdnZXIoY29nbml0by5Vc2VyUG9vbE9wZXJhdGlvbi5QUkVfVE9LRU5fR0VORVJBVElPTl9DT05GSUcsIHByZVRva2VuTGFtYmRhLCBjb2duaXRvLkxhbWJkYVZlcnNpb24uVjJfMCk7XG5cbiAgICBpZiAocHJvcHMuZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHByb3BzLmdyb3Vwcykge1xuICAgICAgICBuZXcgY29nbml0by5DZm5Vc2VyUG9vbEdyb3VwKHRoaXMsIGBHcm91cCR7Z3JvdXB9YCwge1xuICAgICAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgICAgICBncm91cE5hbWU6IGdyb3VwLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbCBhZHZhbmNlZC1zZWN1cml0eSByaXNrIGNvbmZpZ3VyYXRpb24gKEwxKS5cbiAgICBpZiAocHJvcHMuYWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb24gfHwgcHJvcHMuY29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uKSB7XG4gICAgICBuZXcgY29nbml0by5DZm5Vc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudCh0aGlzLCAnUmlza0NvbmZpZycsIHtcbiAgICAgICAgdXNlclBvb2xJZDogdGhpcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgICBjbGllbnRJZDogJ0FMTCcsXG4gICAgICAgIGFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uOiBwcm9wcy5hY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbixcbiAgICAgICAgY29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uOiBwcm9wcy5jb21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJQb29sQ2xpZW50cyA9IHt9O1xuICAgIGZvciAoY29uc3Qgc3BlYyBvZiBwcm9wcy5hcHBDbGllbnRzKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSBuZXcgY29nbml0by5Vc2VyUG9vbENsaWVudCh0aGlzLCBgQ2xpZW50JHtzcGVjLmtleX1gLCB7XG4gICAgICAgIHVzZXJQb29sOiB0aGlzLnVzZXJQb29sLFxuICAgICAgICBnZW5lcmF0ZVNlY3JldDogc3BlYy5nZW5lcmF0ZVNlY3JldCA/PyBmYWxzZSxcbiAgICAgICAgYXV0aEZsb3dzOiB7XG4gICAgICAgICAgdXNlclNycDogdHJ1ZSxcbiAgICAgICAgICBjdXN0b206IHByb3BzLmVuYWJsZUN1c3RvbUF1dGhGbG93ID8/IGZhbHNlLFxuICAgICAgICAgIC8vIHVzZXJQYXNzd29yZCAvIGFkbWluVXNlclBhc3N3b3JkIGludGVudGlvbmFsbHkgb21pdHRlZCAoZGlzYWJsZWQpLlxuICAgICAgICB9LFxuICAgICAgICBvQXV0aDoge1xuICAgICAgICAgIGZsb3dzOiB7IGF1dGhvcml6YXRpb25Db2RlR3JhbnQ6IHRydWUgfSxcbiAgICAgICAgICBzY29wZXM6IFtjb2duaXRvLk9BdXRoU2NvcGUuT1BFTklELCBjb2duaXRvLk9BdXRoU2NvcGUuRU1BSUwsIGNvZ25pdG8uT0F1dGhTY29wZS5QUk9GSUxFXSxcbiAgICAgICAgICBjYWxsYmFja1VybHM6IHNwZWMuY2FsbGJhY2tVcmxzLFxuICAgICAgICAgIGxvZ291dFVybHM6IHNwZWMubG9nb3V0VXJscyxcbiAgICAgICAgfSxcbiAgICAgICAgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM6IHNwZWMuc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnMgPz8gW2NvZ25pdG8uVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLkNPR05JVE9dLFxuICAgICAgICBwcmV2ZW50VXNlckV4aXN0ZW5jZUVycm9yczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlVG9rZW5SZXZvY2F0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NUb2tlblZhbGlkaXR5OiBwcm9wcy5hY2Nlc3NUb2tlblZhbGlkaXR5ID8/IGNvcmUuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIGlkVG9rZW5WYWxpZGl0eTogcHJvcHMuaWRUb2tlblZhbGlkaXR5ID8/IGNvcmUuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIHJlZnJlc2hUb2tlblZhbGlkaXR5OiBwcm9wcy5yZWZyZXNoVG9rZW5WYWxpZGl0eSA/PyBjb3JlLkR1cmF0aW9uLmRheXMoMzApLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVzZXJQb29sQ2xpZW50c1tzcGVjLmtleV0gPSBjbGllbnQ7XG4gICAgfVxuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSB0aGlzLnVzZXJQb29sQ2xpZW50c1twcm9wcy5hcHBDbGllbnRzWzBdLmtleV07XG5cbiAgICB0aGlzLnVzZXJQb29sRG9tYWluID0gdGhpcy51c2VyUG9vbC5hZGREb21haW4oJ0NvZ25pdG9Eb21haW4nLCB7XG4gICAgICBjb2duaXRvRG9tYWluOiB7IGRvbWFpblByZWZpeDogcHJvcHMuY29nbml0b0RvbWFpblByZWZpeCB9LFxuICAgIH0pO1xuICAgIHRoaXMuY29nbml0b0RvbWFpblVybCA9IGAke3Byb3BzLmNvZ25pdG9Eb21haW5QcmVmaXh9LmF1dGguJHtjb3JlLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uY29nbml0by5jb21gO1xuXG4gICAgaWYgKHByb3BzLmlkZW50aXR5UG9vbCkge1xuICAgICAgY29uc3QgaWRwID0gcHJvcHMuaWRlbnRpdHlQb29sO1xuICAgICAgdGhpcy5pZGVudGl0eVBvb2wgPSBuZXcgY29nbml0by5DZm5JZGVudGl0eVBvb2wodGhpcywgJ0lkZW50aXR5UG9vbCcsIHtcbiAgICAgICAgYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzOiBpZHAuYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzID8/IGZhbHNlLFxuICAgICAgICBjb2duaXRvSWRlbnRpdHlQcm92aWRlcnM6IHByb3BzLmFwcENsaWVudHMubWFwKHNwZWMgPT4gKHtcbiAgICAgICAgICBjbGllbnRJZDogdGhpcy51c2VyUG9vbENsaWVudHNbc3BlYy5rZXldLnVzZXJQb29sQ2xpZW50SWQsXG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sUHJvdmlkZXJOYW1lLFxuICAgICAgICAgIHNlcnZlclNpZGVUb2tlbkNoZWNrOiB0cnVlLFxuICAgICAgICB9KSksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnQXV0aGVudGljYXRlZFJvbGUnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5GZWRlcmF0ZWRQcmluY2lwYWwoXG4gICAgICAgICAgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgJ1N0cmluZ0VxdWFscyc6IHsgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbTphdWQnOiB0aGlzLmlkZW50aXR5UG9vbC5yZWYgfSxcbiAgICAgICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdMaWtlJzogeyAnY29nbml0by1pZGVudGl0eS5hbWF6b25hd3MuY29tOmFtcic6ICdhdXRoZW50aWNhdGVkJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ3N0czpBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5JyxcbiAgICAgICAgKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBpZHAuYXV0aGVudGljYXRlZFJvbGVNYW5hZ2VkUG9saWNpZXMsXG4gICAgICB9KTtcblxuICAgICAgbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sUm9sZUF0dGFjaG1lbnQodGhpcywgJ0lkZW50aXR5UG9vbFJvbGVzJywge1xuICAgICAgICBpZGVudGl0eVBvb2xJZDogdGhpcy5pZGVudGl0eVBvb2wucmVmLFxuICAgICAgICByb2xlczogeyBhdXRoZW50aWNhdGVkOiB0aGlzLmF1dGhlbnRpY2F0ZWRSb2xlLnJvbGVBcm4gfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBQkFDOiBtYXAgY2xhaW1zIHRvIHByaW5jaXBhbCB0YWdzIG9uIHRoZSB1c2VyLXBvb2wgcHJvdmlkZXIuXG4gICAgICBpZiAoaWRwLnByaW5jaXBhbFRhZ3MgJiYgT2JqZWN0LmtleXMoaWRwLnByaW5jaXBhbFRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sUHJpbmNpcGFsVGFnKHRoaXMsICdQcmluY2lwYWxUYWdzJywge1xuICAgICAgICAgIGlkZW50aXR5UG9vbElkOiB0aGlzLmlkZW50aXR5UG9vbC5yZWYsXG4gICAgICAgICAgaWRlbnRpdHlQcm92aWRlck5hbWU6IHRoaXMudXNlclBvb2wudXNlclBvb2xQcm92aWRlck5hbWUsXG4gICAgICAgICAgdXNlRGVmYXVsdHM6IGZhbHNlLFxuICAgICAgICAgIHByaW5jaXBhbFRhZ3M6IGlkcC5wcmluY2lwYWxUYWdzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0b0N1c3RvbWVyUG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbG91ZGZyb250L3BhdHRlcm5zL2NvZ25pdG9DdXN0b21lclBvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FLcUI7QUFDckIsdURBQXlDO0FBd0x6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFvQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBWTNELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBK0I7UUFDbEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvRixNQUFNLElBQUksS0FBSyxDQUNiLGtHQUFrRztrQkFDaEcscUhBQXFILENBQ3hILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0Y7a0JBQzdGLHNHQUFzRyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVB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QWlCLENBQUMsT0FBTyxFQUFFO2FBQ3pELENBQUMsQ0FBQztZQUVILGdFQUFnRTtZQUNoRSxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxJQUFJLHlCQUFPLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtvQkFDN0QsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRztvQkFDckMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0I7b0JBQ3hELFdBQVcsRUFBRSxLQUFLO29CQUNsQixhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWE7aUJBQ2pDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBalFELGtEQWlRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jb2duaXRvIGFzIGNvZ25pdG8sXG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3Nfa21zIGFzIGttcyxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cbnR5cGUgQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZyA9IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuQWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG50eXBlIENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnID0gY29nbml0by5DZm5Vc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudC5Db21wcm9taXNlZENyZWRlbnRpYWxzUmlza0NvbmZpZ3VyYXRpb25UeXBlUHJvcGVydHk7XG5cbi8qKlxuICogU3BlY2lmaWNhdGlvbiBmb3Igb25lIENvZ25pdG8gYXBwIGNsaWVudCAoZS5nLiBvbmUgYnJhbmQgb3Igb25lIGZyb250LWVuZCkuXG4gKiBQdWJsaWMgU1BBIGNsaWVudHM6IG5vIHNlY3JldCwgUEtDRSAoYXV0aG9yaXphdGlvbi1jb2RlIGdyYW50KSwgU1JQLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9BcHBDbGllbnRTcGVjIHtcbiAgLyoqIExvZ2ljYWwga2V5IHVzZWQgYXMgdGhlIGNvbnN0cnVjdCBpZCBhbmQgdGhlIGtleSBpbiB7QGxpbmsgQ29nbml0b0N1c3RvbWVyUG9vbC51c2VyUG9vbENsaWVudHN9LiAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgLyoqIE9BdXRoMiBjYWxsYmFjayBVUkxzIGZvciB0aGlzIGNsaWVudCAodXNlZCBvbmx5IGJ5IHRoZSBzb2NpYWwvaG9zdGVkIHJlZGlyZWN0IGZsb3cpLiAqL1xuICByZWFkb25seSBjYWxsYmFja1VybHM/OiBzdHJpbmdbXTtcbiAgLyoqIExvZ291dCBVUkxzIGZvciB0aGlzIGNsaWVudC4gKi9cbiAgcmVhZG9ubHkgbG9nb3V0VXJscz86IHN0cmluZ1tdO1xuICAvKiogSWRlbnRpdHkgcHJvdmlkZXJzIHRoaXMgY2xpZW50IHN1cHBvcnRzLiBAZGVmYXVsdCBbQ09HTklUT10gKi9cbiAgcmVhZG9ubHkgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM/OiBjb2duaXRvLlVzZXJQb29sQ2xpZW50SWRlbnRpdHlQcm92aWRlcltdO1xuICAvKiogR2VuZXJhdGUgYSBjbGllbnQgc2VjcmV0LiBAZGVmYXVsdCBmYWxzZSAocHVibGljIFNQQSBjbGllbnQpICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlU2VjcmV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTYW1lLWFjY291bnQgU0VTIGVtYWlsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwb29sLiBTeW50aGVzaXNlcyBhblxuICogYEVtYWlsQ29uZmlndXJhdGlvbmAgd2l0aCBgRW1haWxTZW5kaW5nQWNjb3VudDogREVWRUxPUEVSYC4gSXRzIHB1cnBvc2UgaXMgdG9cbiAqIHNhdGlzZnkgQ29nbml0bydzIHByZWNvbmRpdGlvbiBmb3IgZW5hYmxpbmcgRU1BSUxfT1RQIE1GQSDigJQgQ29nbml0byByZXF1aXJlcyBhXG4gKiB2ZXJpZmllZCBzYW1lLWFjY291bnQgU0VTIGlkZW50aXR5IG9uIHRoZSBwb29sIGJlZm9yZSBpdCB3aWxsIGFjY2VwdFxuICogYEVuYWJsZWRNZmFzOiBbJ0VNQUlMX09UUCddYCwgaW5kZXBlbmRlbnRseSBvZiBhbnkgY3VzdG9tIGVtYWlsIHNlbmRlciB0aGF0XG4gKiBvdmVycmlkZXMgYWN0dWFsIGRlbGl2ZXJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9DdXN0b21lclBvb2xFbWFpbENvbmZpZyB7XG4gIC8qKlxuICAgKiBBUk4gb2YgYSBWRVJJRklFRCBTRVMgaWRlbnRpdHkgaW4gdGhlIFBPT0wncyBPV04gYWNjb3VudCAoZG9tYWluIGlkZW50aXR5XG4gICAqIHByZWZlcnJlZDsgYSB2ZXJpZmllZCBlbWFpbC1hZGRyZXNzIGlkZW50aXR5IGFsc28gd29ya3MpLiBQYXNzZWQgdG8gQ29nbml0byBhc1xuICAgKiB0aGUgYEVtYWlsQ29uZmlndXJhdGlvbi5Tb3VyY2VBcm5gLiBNdXN0IGJlIGluIHRoZSBwb29sJ3MgcmVnaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VzVmVyaWZpZWREb21haW5Bcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBGcm9tIGFkZHJlc3MgZm9yIHRoZSBwb29sJ3MgU0VTIGNvbmZpZ3VyYXRpb24sIGUuZy5cbiAgICogYDJmYUBhbHBoYS5mdW5jdGlvbmFsc2VsZi5jb21gLiBBIGxvY2FsLXBhcnQgb24gdGhlIHZlcmlmaWVkIGlkZW50aXR5J3MgZG9tYWluLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbUVtYWlsOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBkaXNwbGF5IG5hbWUsIGUuZy4gXCJGdW5jdGlvbmFsIFNlbGZcIi4gQGRlZmF1bHQgLSBhZGRyZXNzIG9ubHkgKi9cbiAgcmVhZG9ubHkgZnJvbU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9uYWwgQ29nbml0byBJZGVudGl0eSBQb29sICsgQUJBQyAoYXR0cmlidXRlcy1mb3ItYWNjZXNzLWNvbnRyb2wpIGNvbmZpZy5cbiAqIE1hcHMgdG9rZW4gY2xhaW1zIHRvIHByaW5jaXBhbCB0YWdzIHNvIGRvd25zdHJlYW0gSUFNIGNhbiBzY29wZSBvbiB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9JZGVudGl0eVBvb2xBYmFjQ29uZmlnIHtcbiAgLyoqIEFsbG93IHVuYXV0aGVudGljYXRlZCAoZ3Vlc3QpIGlkZW50aXRpZXMuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IGFsbG93VW5hdXRoZW50aWNhdGVkSWRlbnRpdGllcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDbGFpbSDihpIgcHJpbmNpcGFsLXRhZyBtYXBwaW5nLCBlLmcuIGB7IHN1YjogJ2N1c3RvbWVyLWlkJyB9YC4gQXBwbGllZCB0byB0aGVcbiAgICogdXNlci1wb29sIHByb3ZpZGVyIHNvIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbnMgY2FycnkgdGhlc2UgYXMgYGF3czpQcmluY2lwYWxUYWcvKmAuXG4gICAqL1xuICByZWFkb25seSBwcmluY2lwYWxUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIE1hbmFnZWQgcG9saWNpZXMgZm9yIHRoZSBhdXRoZW50aWNhdGVkIHJvbGUuIEBkZWZhdWx0IG5vbmUgKGF0dGFjaCB5b3VyIG93bikuICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0ZWRSb2xlTWFuYWdlZFBvbGljaWVzPzogaWFtLklNYW5hZ2VkUG9saWN5W107XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHtAbGluayBDb2duaXRvQ3VzdG9tZXJQb29sfS4gRXZlcnkgdmFsdWUgaXMgZ2VuZXJpYyDigJQgbm9cbiAqIHByb2plY3QvYnJhbmQvZG9tYWluIHNwZWNpZmljcyBhcmUgYmFrZWQgaW47IHBhc3MgdGhlbSBoZXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZ25pdG9DdXN0b21lclBvb2xQcm9wcyB7XG4gIC8qKiBVc2VyIHBvb2wgbmFtZS4gKi9cbiAgcmVhZG9ubHkgdXNlclBvb2xOYW1lPzogc3RyaW5nO1xuICAvKiogQ29nbml0byBob3N0ZWQtVUkgZG9tYWluIHByZWZpeCAoZ2xvYmFsbHkgdW5pcXVlKS4gKi9cbiAgcmVhZG9ubHkgY29nbml0b0RvbWFpblByZWZpeDogc3RyaW5nO1xuICAvKiogQXBwIGNsaWVudHMgdG8gY3JlYXRlICh0eXBpY2FsbHkgb25lIHBlciBicmFuZC9mcm9udC1lbmQpLiBBdCBsZWFzdCBvbmUuICovXG4gIHJlYWRvbmx5IGFwcENsaWVudHM6IENvZ25pdG9BcHBDbGllbnRTcGVjW107XG4gIC8qKiBFbmFibGUgc2VsZi1zZXJ2aWNlIHNpZ24tdXAuIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IHNlbGZTaWduVXBFbmFibGVkPzogYm9vbGVhbjtcbiAgLyoqIE1GQSBlbmZvcmNlbWVudC4gQGRlZmF1bHQgUkVRVUlSRUQgKi9cbiAgcmVhZG9ubHkgbWZhPzogY29nbml0by5NZmE7XG4gIC8qKiBTZWNvbmQgZmFjdG9ycy4gQGRlZmF1bHQgeyBvdHA6IHRydWUsIHNtczogZmFsc2UgfSAqL1xuICByZWFkb25seSBtZmFTZWNvbmRGYWN0b3I/OiBjb2duaXRvLk1mYVNlY29uZEZhY3RvcjtcbiAgLyoqIFBhc3N3b3JkIHBvbGljeS4gQGRlZmF1bHQgbWluTGVuZ3RoIDEyLCB1cHBlci9sb3dlci9kaWdpdHMvc3ltYm9scy4gKi9cbiAgcmVhZG9ubHkgcGFzc3dvcmRQb2xpY3k/OiBjb2duaXRvLlBhc3N3b3JkUG9saWN5O1xuICAvKiogQWR2YW5jZWQgc2VjdXJpdHkgbW9kZSAodGhyZWF0IHByb3RlY3Rpb24pLiBAZGVmYXVsdCBPRkYgKi9cbiAgcmVhZG9ubHkgYWR2YW5jZWRTZWN1cml0eU1vZGU/OiBjb2duaXRvLkFkdmFuY2VkU2VjdXJpdHlNb2RlO1xuICAvKiogU3RhbmRhcmQgYXR0cmlidXRlcyBjb25maWcuICovXG4gIHJlYWRvbmx5IHN0YW5kYXJkQXR0cmlidXRlcz86IGNvZ25pdG8uU3RhbmRhcmRBdHRyaWJ1dGVzO1xuICAvKiogQ3VzdG9tIGF0dHJpYnV0ZXMuICovXG4gIHJlYWRvbmx5IGN1c3RvbUF0dHJpYnV0ZXM/OiB7IFtrZXk6IHN0cmluZ106IGNvZ25pdG8uSUN1c3RvbUF0dHJpYnV0ZSB9O1xuICAvKiogRW5hYmxlIHRoZSBDVVNUT01fQVVUSCBmbG93IG9uIGFwcCBjbGllbnRzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBlbmFibGVDdXN0b21BdXRoRmxvdz86IGJvb2xlYW47XG4gIC8qKiBBY2Nlc3MgdG9rZW4gdmFsaWRpdHkuIEBkZWZhdWx0IDEgaG91ciAqL1xuICByZWFkb25seSBhY2Nlc3NUb2tlblZhbGlkaXR5PzogY29yZS5EdXJhdGlvbjtcbiAgLyoqIElEIHRva2VuIHZhbGlkaXR5LiBAZGVmYXVsdCAxIGhvdXIgKi9cbiAgcmVhZG9ubHkgaWRUb2tlblZhbGlkaXR5PzogY29yZS5EdXJhdGlvbjtcbiAgLyoqIFJlZnJlc2ggdG9rZW4gdmFsaWRpdHkuIEBkZWZhdWx0IDMwIGRheXMgKi9cbiAgcmVhZG9ubHkgcmVmcmVzaFRva2VuVmFsaWRpdHk/OiBjb3JlLkR1cmF0aW9uO1xuICAvKiogQ29nbml0byBncm91cHMgdG8gY3JlYXRlLiAqL1xuICByZWFkb25seSBncm91cHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFByZS10b2tlbi1nZW5lcmF0aW9uIExhbWJkYSAoVjIpLiBAZGVmYXVsdCBhIGJ1bmRsZWQgbm8tb3AgbGlicmFyeSBMYW1iZGEgaXNcbiAgICogY3JlYXRlZC4gUGFzcyB5b3VyIG93biB0byBjdXN0b21pc2UgZW1pdHRlZCBjbGFpbXMuXG4gICAqL1xuICByZWFkb25seSBwcmVUb2tlbkdlbmVyYXRpb25MYW1iZGE/OiBsYW1iZGEuSUZ1bmN0aW9uO1xuICAvKipcbiAgICogRW5hYmxlIGVtYWlsIG9uZS10aW1lLXBhc3N3b3JkIChgRU1BSUxfT1RQYCkgYXMgdGhlIE1GQSBzZWNvbmQgZmFjdG9yLCBkZWxpdmVyZWRcbiAgICogYnkge0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfS4gVGhpcyBpcyBzZXQgdmlhIGFuIEwxIG92ZXJyaWRlIG9uIHRoZVxuICAgKiB1bmRlcmx5aW5nIGBDZm5Vc2VyUG9vbGAgKGBFbmFibGVkTWZhczogWydFTUFJTF9PVFAnXWApIHJhdGhlciB0aGFuXG4gICAqIGBtZmFTZWNvbmRGYWN0b3IuZW1haWxgLCBiZWNhdXNlIHRoZSBDREsgTDIgcmVxdWlyZXMgYSBtYW5hZ2VkIChgREVWRUxPUEVSYCkgU0VTXG4gICAqIGBlbWFpbGAgY29uZmlnIGZvciBgbWZhU2Vjb25kRmFjdG9yLmVtYWlsYCDigJQgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggYVxuICAgKiBjdXN0b20tZW1haWwtc2VuZGVyLW9ubHkgZGVsaXZlcnkgcGF0aC4gUmVxdWlyZXMge0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfVxuICAgKiBhbmQge0BsaW5rIGN1c3RvbVNlbmRlckttc0tleX0sIGFuZCBhIHBvb2wgZmVhdHVyZSBwbGFuIG9mIEVzc2VudGlhbHMgb3IgaGlnaGVyLlxuICAgKiBXaGVuIHRydWUsIGFueSBgb3RwYC9gc21zYCBpbiB7QGxpbmsgbWZhU2Vjb25kRmFjdG9yfSBpcyBpZ25vcmVkIOKAlCBFTUFJTF9PVFAgaXNcbiAgICogdGhlIHNvbGUgZmFjdG9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxPdHBNZmE/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBwb29sIGZvciBQQVNTV09SRExFU1MgY3VzdG9tZXIgc2lnbi1pbiB1c2luZyBjaG9pY2UtYmFzZWRcbiAgICogYXV0aGVudGljYXRpb24gKGBVU0VSX0FVVEhgKSB3aXRoIGBFTUFJTF9PVFBgIGFzIGEgZmlyc3QgYXV0aCBmYWN0b3IuIFRoZVxuICAgKiBjdXN0b21lciBzaWducyBpbiB3aXRoIGp1c3QgdGhlaXIgZW1haWwgYW5kIGEgb25lLXRpbWUgY29kZSDigJQgbm8gcGFzc3dvcmQgYW5kXG4gICAqIG5vIHNlY29uZCBmYWN0b3IuIERlbGl2ZXJlZCBieSB7QGxpbmsgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGF9OyByZXF1aXJlc1xuICAgKiB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fSBhbmQge0BsaW5rIGVtYWlsQ29uZmlndXJhdGlvbn0gKHNhbWUgZW5hYmxlbWVudFxuICAgKiBwcmVjb25kaXRpb24gYXMge0BsaW5rIGVtYWlsT3RwTWZhfSksIGFuZCBhbiBFc3NlbnRpYWxzLW9yLWhpZ2hlciBmZWF0dXJlIHBsYW4uXG4gICAqXG4gICAqIEhhcmQgQ29nbml0byBjb25zdHJhaW50cyB0aGlzIG1vZGUgZW5jb2RlcyAocHJvdmVuIGFnYWluc3QgYSBsaXZlIHBvb2wpOlxuICAgKiAtIGBQQVNTV09SRGAgaXMgTUFOREFUT1JZIGluIGBBbGxvd2VkRmlyc3RBdXRoRmFjdG9yc2A7IENvZ25pdG8gcmVqZWN0cyBhIGxpc3RcbiAgICogICB3aXRob3V0IGl0LiBTbyB0aGUgcG9vbCBhbGxvd3MgYFtQQVNTV09SRCwgRU1BSUxfT1RQXWAgYW5kIHRoZSBDT05TVU1FUidzIFVJXG4gICAqICAgbXVzdCBuZXZlciBvZmZlciB0aGUgcGFzc3dvcmQgcGF0aCAoYWx3YXlzIGBJbml0aWF0ZUF1dGgoVVNFUl9BVVRILFxuICAgKiAgIFBSRUZFUlJFRF9DSEFMTEVOR0U9RU1BSUxfT1RQKWApLiBUbyBrZWVwIHRoZSBwYXNzd29yZCB1bnJlYWNoYWJsZSB0aHJvdWdoIHRoZVxuICAgKiAgIGFwcCBjbGllbnQgdG9vLCB0aGlzIG1vZGUgYWxzbyBkcm9wcyB0aGUgYHVzZXJTcnBgIGF1dGggZmxvdyBhbmQgZW5hYmxlcyB0aGVcbiAgICogICBgdXNlcmAgKGNob2ljZS1iYXNlZCBgQUxMT1dfVVNFUl9BVVRIYCkgZmxvdyBvbiB0aGUgYXBwIGNsaWVudHMuXG4gICAqIC0gYEVNQUlMX09UUGAgYXMgYSBmaXJzdCBmYWN0b3IgaXMgSU5DT01QQVRJQkxFIHdpdGggYE1mYUNvbmZpZ3VyYXRpb246IE9OYCwgc29cbiAgICogICB0aGlzIG1vZGUgZm9yY2VzIGBtZmE6IE9GRmAuIE5PVEU6IHRoZSBgT0ZGIC0+IE9OYCB0cmFuc2l0aW9uIGlzIGlycmV2ZXJzaWJsZVxuICAgKiAgIHZpYSB0aGUgQVBJLCBzbyBhIHBvb2wgY3JlYXRlZCB3aXRoIHRoaXMgbW9kZSBjYW5ub3QgbGF0ZXIgZ2FpbiBNRkEgaW4gcGxhY2UuXG4gICAqXG4gICAqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIHtAbGluayBlbWFpbE90cE1mYX0gKGVtYWlsIGlzIGEgZmlyc3QgZmFjdG9yIGhlcmUsIGFcbiAgICogc2Vjb25kIGZhY3RvciB0aGVyZSkuIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZGxlc3NFbWFpbE90cD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gRW1haWwgU2VuZGVyIExhbWJkYS4gV2hlbiBzZXQgKHRvZ2V0aGVyIHdpdGgge0BsaW5rIGN1c3RvbVNlbmRlckttc0tleX0pLFxuICAgKiBpdCBpcyB3aXJlZCB0byB0aGUgcG9vbCB2aWEgdGhlIGBDVVNUT01fRU1BSUxfU0VOREVSYCB0cmlnZ2VyIGFuZCBDb2duaXRvXG4gICAqIGRlbGl2ZXJzIGFsbCBjdXN0b21lciBlbWFpbHMgKE1GQSBjb2RlcywgdmVyaWZpY2F0aW9uLCB0ZW1wb3JhcnkgcGFzc3dvcmRzKVxuICAgKiB0aHJvdWdoIHRoaXMgTGFtYmRhIGluc3RlYWQgb2YgaXRzIGRlZmF1bHQgc2VuZGVyIG9yIGEgbWFuYWdlZCBTRVMgc2VuZGVyLlxuICAgKiBDb2duaXRvIGVuY3J5cHRzIGVhY2ggY29kZSB0byB7QGxpbmsgY3VzdG9tU2VuZGVyS21zS2V5fTsgdGhlIExhbWJkYSBkZWNyeXB0c1xuICAgKiBpdCB3aXRoIHRoZSBBV1MgRW5jcnlwdGlvbiBTREsgYmVmb3JlIHNlbmRpbmcuIFJlcXVpcmVzIHtAbGluayBjdXN0b21TZW5kZXJLbXNLZXl9LlxuICAgKiBAZGVmYXVsdCAtIENvZ25pdG8ncyBkZWZhdWx0IGVtYWlsIGRlbGl2ZXJ5XG4gICAqL1xuICByZWFkb25seSBjdXN0b21FbWFpbFNlbmRlckxhbWJkYT86IGxhbWJkYS5JRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTeW1tZXRyaWMgS01TIGtleSBDb2duaXRvIHVzZXMgdG8gZW5jcnlwdCBjb2RlcyBmb3Ige0BsaW5rIGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhfS5cbiAgICogUmVxdWlyZWQgd2hlbiBhIGN1c3RvbSBlbWFpbCBzZW5kZXIgaXMgcHJvdmlkZWQ7IGlnbm9yZWQgb3RoZXJ3aXNlLiBDb2duaXRvIGlzXG4gICAqIGdyYW50ZWQgZW5jcnlwdC9kZWNyeXB0IG9uIGl0OyB0aGUgTGFtYmRhIG11c3QgYmUgc2VwYXJhdGVseSBncmFudGVkIGRlY3J5cHQuXG4gICAqIEBkZWZhdWx0IC0gbm8ga2V5IChvbmx5IHZhbGlkIHdoZW4gbm8gY3VzdG9tIGVtYWlsIHNlbmRlciBpcyBzZXQpXG4gICAqL1xuICByZWFkb25seSBjdXN0b21TZW5kZXJLbXNLZXk/OiBrbXMuSUtleTtcbiAgLyoqXG4gICAqIFNhbWUtYWNjb3VudCBTRVMgZW1haWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBvb2wuIFJFUVVJUkVEIHdoZW5cbiAgICoge0BsaW5rIGVtYWlsT3RwTWZhfSBpcyBzZXQ6IENvZ25pdG8gcmVmdXNlcyB0byBlbmFibGUgRU1BSUxfT1RQIE1GQSB1bmxlc3MgdGhlXG4gICAqIHBvb2wgY2FycmllcyBhbiBgRW1haWxTZW5kaW5nQWNjb3VudDogREVWRUxPUEVSYCBjb25maWd1cmF0aW9uIHBvaW50aW5nIGF0IGFcbiAgICogVkVSSUZJRUQgU0VTIGlkZW50aXR5IGluIHRoZSBwb29sJ3MgT1dOIGFjY291bnQg4oCUIHRoaXMgcHJlY29uZGl0aW9uIGlzIHZhbGlkYXRlZFxuICAgKiBhdCB0aGUgcG9vbC1jb25maWcgbGF5ZXIsIEJFRk9SRSBhbnkgZW1haWwgaXMgcm91dGVkLCBzbyBhXG4gICAqIHtAbGluayBjdXN0b21FbWFpbFNlbmRlckxhbWJkYX0gKHdoaWNoIG92ZXJyaWRlcyBkZWxpdmVyeSkgZG9lcyBub3Qgc2F0aXNmeSBpdC5cbiAgICpcbiAgICogVGhlIGlkZW50aXR5IGhlcmUgZXhpc3RzIG9ubHkgdG8gc2F0aXNmeSB0aGF0IGVuYWJsZW1lbnQgcHJlY29uZGl0aW9uOyB3aGVuIGFcbiAgICogY3VzdG9tIGVtYWlsIHNlbmRlciBpcyBhdHRhY2hlZCwgQ29nbml0byBuZXZlciBhY3R1YWxseSBzZW5kcyB0aHJvdWdoIHRoaXNcbiAgICogaWRlbnRpdHkgKHRoZSBMYW1iZGEgaW50ZXJjZXB0cyBldmVyeSBlbWFpbCksIHNvIGEgY3Jvc3MtYWNjb3VudCBvclxuICAgKiBTRVMtc2FuZGJveCBkZWxpdmVyeSBwYXRoIGlzIHVuYWZmZWN0ZWQuIFByZWZlciBhIHZlcmlmaWVkIERPTUFJTiBpZGVudGl0eTtcbiAgICogYSB2ZXJpZmllZCBlbWFpbC1hZGRyZXNzIGlkZW50aXR5IGFsc28gd29ya3MgaWYgQ29nbml0byByZWplY3RzIHRoZSBkb21haW4gZm9ybS5cbiAgICogQGRlZmF1bHQgLSBubyBTRVMgY29uZmlnIChDb2duaXRvIGRlZmF1bHQgc2VuZGVyOyBub3QgdmFsaWQgd2l0aCBlbWFpbE90cE1mYSlcbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsQ29uZmlndXJhdGlvbj86IENvZ25pdG9DdXN0b21lclBvb2xFbWFpbENvbmZpZztcbiAgLyoqXG4gICAqIEwxIGFjY291bnQtdGFrZW92ZXIgcmlzayBjb25maWd1cmF0aW9uIChyZXF1aXJlcyB7QGxpbmsgYWR2YW5jZWRTZWN1cml0eU1vZGV9XG4gICAqIEVORk9SQ0VEL0FVRElUKS4gUGFzc2VkIHRocm91Z2ggdG8gQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbj86IEFjY291bnRUYWtlb3ZlclJpc2tDb25maWc7XG4gIC8qKiBMMSBjb21wcm9taXNlZC1jcmVkZW50aWFscyByaXNrIGNvbmZpZ3VyYXRpb24uICovXG4gIHJlYWRvbmx5IGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbj86IENvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlnO1xuICAvKiogT3B0aW9uYWwgaWRlbnRpdHkgcG9vbCArIEFCQUMgY29uZmlndXJhdGlvbi4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogQ29nbml0b0lkZW50aXR5UG9vbEFiYWNDb25maWc7XG4gIC8qKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIHBvb2wuIEBkZWZhdWx0IFJFVEFJTiAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY29yZS5SZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYywgcmV1c2FibGUgc2VjdXJlIENvZ25pdG8gKipjdXN0b21lcioqIHVzZXIgcG9vbCBmb3IgdGhlIGN1c3RvbS1VSVxuICogKGNsaWVudC1zaWRlIFNSUCkgYXV0aGVudGljYXRpb24gcGF0dGVybjogcHVibGljIFBLQ0UgYXBwIGNsaWVudHMsIE1GQSxcbiAqIHN0cm9uZyBwYXNzd29yZCBwb2xpY3ksIG9wdGlvbmFsIGFkdmFuY2VkLXNlY3VyaXR5IHRocmVhdCBwcm90ZWN0aW9uLFxuICogcGVyLWNsaWVudCAocGVyLWJyYW5kKSBhcHAgY2xpZW50cywgYW5kIGFuIG9wdGlvbmFsIGlkZW50aXR5IHBvb2wgd2l0aCBBQkFDLlxuICpcbiAqIFByb3Zpc2lvbnMgT05MWSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIEl0IGtub3dzIG5vdGhpbmcgYWJvdXQgQ2xvdWRGcm9udCxcbiAqIHNlc3Npb25zLCBvciBhbnkgc3BlY2lmaWMgcHJvamVjdCDigJQgcGFpciBpdCB3aXRoIGBDb2duaXRvU2Vzc2lvbkJhY2tlbmRgXG4gKiAoc2Vzc2lvbiBzdWJzdHJhdGUpIGFuZCBgQ29nbml0b0N1c3RvbVVpQXV0aGAgKGVkZ2UvQ0ROKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9DdXN0b21lclBvb2wgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbDogY29nbml0by5Vc2VyUG9vbDtcbiAgLyoqIEFwcCBjbGllbnRzIGtleWVkIGJ5IHtAbGluayBDb2duaXRvQXBwQ2xpZW50U3BlYy5rZXl9LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclBvb2xDbGllbnRzOiBSZWNvcmQ8c3RyaW5nLCBjb2duaXRvLlVzZXJQb29sQ2xpZW50PjtcbiAgLyoqIFRoZSBmaXJzdCBhcHAgY2xpZW50LCBmb3IgY29udmVuaWVuY2UuICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbENsaWVudDogY29nbml0by5Vc2VyUG9vbENsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJQb29sRG9tYWluOiBjb2duaXRvLlVzZXJQb29sRG9tYWluO1xuICAvKiogSG9zdGVkLVVJIGRvbWFpbiBVUkwsIGUuZy4gYDxwcmVmaXg+LmF1dGguPHJlZ2lvbj4uYW1hem9uY29nbml0by5jb21gLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29nbml0b0RvbWFpblVybDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpdHlQb29sPzogY29nbml0by5DZm5JZGVudGl0eVBvb2w7XG4gIHB1YmxpYyByZWFkb25seSBhdXRoZW50aWNhdGVkUm9sZT86IGlhbS5Sb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZ25pdG9DdXN0b21lclBvb2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLmFwcENsaWVudHMgfHwgcHJvcHMuYXBwQ2xpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29nbml0b0N1c3RvbWVyUG9vbCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXBwIGNsaWVudCcpO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMuY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgPT09IHVuZGVmaW5lZCkgIT09IChwcm9wcy5jdXN0b21TZW5kZXJLbXNLZXkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvZ25pdG9DdXN0b21lclBvb2w6IGN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhIGFuZCBjdXN0b21TZW5kZXJLbXNLZXkgbXVzdCBiZSBwcm92aWRlZCB0b2dldGhlciDigJQgJ1xuICAgICAgICArICdhIGN1c3RvbSBlbWFpbCBzZW5kZXIgcmVxdWlyZXMgYSBLTVMga2V5IGZvciBDb2duaXRvIHRvIGVuY3J5cHQgY29kZXMgdG8sIGFuZCB0aGUga2V5IGlzIHVudXNlZCB3aXRob3V0IHRoZSBMYW1iZGEuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVtYWlsT3RwTWZhICYmICFwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogZW1haWxPdHBNZmEgcmVxdWlyZXMgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEgKGFuZCBjdXN0b21TZW5kZXJLbXNLZXkpIOKAlCAnXG4gICAgICAgICsgJ0VNQUlMX09UUCBjb2RlcyBhcmUgZGVsaXZlcmVkIGJ5IHRoZSBjdXN0b20gZW1haWwgc2VuZGVyLCBzbyBlbWFpbCBNRkEgY2Fubm90IGJlIGVuYWJsZWQgd2l0aG91dCBpdC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW1haWxPdHBNZmEgJiYgIXByb3BzLmVtYWlsQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogZW1haWxPdHBNZmEgcmVxdWlyZXMgZW1haWxDb25maWd1cmF0aW9uIOKAlCAnXG4gICAgICAgICsgJ0NvZ25pdG8gcmVmdXNlcyB0byBlbmFibGUgRU1BSUxfT1RQIE1GQSB1bmxlc3MgdGhlIHBvb2wgY2FycmllcyBhIERFVkVMT1BFUiBTRVMgJ1xuICAgICAgICArICdFbWFpbENvbmZpZ3VyYXRpb24gb24gYSB2ZXJpZmllZCBzYW1lLWFjY291bnQgaWRlbnRpdHkuIFRoaXMgcHJlY29uZGl0aW9uIGlzIGNoZWNrZWQgJ1xuICAgICAgICArICdiZWZvcmUgYW55IGVtYWlsIGlzIHJvdXRlZCwgc28gdGhlIGN1c3RvbSBlbWFpbCBzZW5kZXIgZG9lcyBub3Qgc2F0aXNmeSBpdC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucGFzc3dvcmRsZXNzRW1haWxPdHAgJiYgcHJvcHMuZW1haWxPdHBNZmEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvZ25pdG9DdXN0b21lclBvb2w6IHBhc3N3b3JkbGVzc0VtYWlsT3RwIGFuZCBlbWFpbE90cE1mYSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIOKAlCAnXG4gICAgICAgICsgJ3Bhc3N3b3JkbGVzcyB1c2VzIEVNQUlMX09UUCBhcyBhIEZJUlNUIGF1dGggZmFjdG9yIChNRkEgb2ZmKSwgd2hpbGUgZW1haWxPdHBNZmEgdXNlcyBpdCAnXG4gICAgICAgICsgJ2FzIGEgU0VDT05EIGZhY3RvciAoTUZBIG9uKS4gQ2hvb3NlIG9uZS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucGFzc3dvcmRsZXNzRW1haWxPdHAgJiYgKCFwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYSB8fCAhcHJvcHMuZW1haWxDb25maWd1cmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ29nbml0b0N1c3RvbWVyUG9vbDogcGFzc3dvcmRsZXNzRW1haWxPdHAgcmVxdWlyZXMgY3VzdG9tRW1haWxTZW5kZXJMYW1iZGEsIGN1c3RvbVNlbmRlckttc0tleSAnXG4gICAgICAgICsgJ2FuZCBlbWFpbENvbmZpZ3VyYXRpb24g4oCUIHRoZSBmaXJzdC1mYWN0b3IgRU1BSUxfT1RQIGNvZGUgaXMgZGVsaXZlcmVkIGJ5IHRoZSBjdXN0b20gZW1haWwgJ1xuICAgICAgICArICdzZW5kZXIsIGFuZCBDb2duaXRvIHJlcXVpcmVzIHRoZSBzYW1lIERFVkVMT1BFUiBTRVMgRW1haWxDb25maWd1cmF0aW9uIGVuYWJsZW1lbnQgcHJlY29uZGl0aW9uLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdpdGggZW1haWxPdHBNZmEsIEVNQUlMX09UUCBpcyB0aGUgc29sZSBmYWN0b3IgYW5kIGlzIGFwcGxpZWQgdmlhIGFuIEwxXG4gICAgLy8gb3ZlcnJpZGUgYmVsb3c7IGRvIE5PVCBwYXNzIG1mYVNlY29uZEZhY3Rvci5lbWFpbCB0byB0aGUgTDIgKGl0cyB2YWxpZGF0ZUVtYWlsTWZhXG4gICAgLy8gZGVtYW5kcyBhIGBlbWFpbGAgVXNlclBvb2xFbWFpbCBiZSBzZXQsIHdoaWNoIHdlIHN1cHBseSBzZXBhcmF0ZWx5IHZpYVxuICAgIC8vIGVtYWlsQ29uZmlndXJhdGlvbiDigJQgc2VlIHRoZSBgZW1haWxgIHByb3AgYmVsb3cpLlxuICAgIGNvbnN0IGwyTWZhU2Vjb25kRmFjdG9yID0gcHJvcHMuZW1haWxPdHBNZmFcbiAgICAgID8geyBvdHA6IGZhbHNlLCBzbXM6IGZhbHNlIH1cbiAgICAgIDogKHByb3BzLm1mYVNlY29uZEZhY3RvciA/PyB7IG90cDogdHJ1ZSwgc21zOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IGFjY291bnRSZWNvdmVyeSA9IHByb3BzLmVtYWlsT3RwTWZhXG4gICAgLy8gQ29nbml0byByZWplY3RzIEVtYWlsTWZhQ29uZmlndXJhdGlvbiB1bmxlc3MgQWNjb3VudFJlY292ZXJ5U2V0dGluZyBoYXMgYXRcbiAgICAvLyBsZWFzdCBvbmUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdmVyaWZpZWRfZW1haWwgKHJlY292ZXJpbmcgZW1haWwtYmFzZWQgTUZBIHZpYVxuICAgIC8vIGVtYWlsIGlzIGNpcmN1bGFyKS4gQWNjb3VudFJlY292ZXJ5Lk5PTkUgbWFwcyB0byB0aGUgYWRtaW5fb25seSBtZWNoYW5pc20sIHdoaWNoXG4gICAgLy8gc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50IHdpdGhvdXQgaW50cm9kdWNpbmcgYW4gU01TL3Bob25lIGZhY3RvciBpbnRvIHRoaXNcbiAgICAvLyBwYXNzd29yZGxlc3MtZW1haWwgZGVzaWduLiBPdGhlcndpc2Uga2VlcCB0aGUgZW1haWwtb25seSBkZWZhdWx0LlxuICAgICAgPyBjb2duaXRvLkFjY291bnRSZWNvdmVyeS5OT05FXG4gICAgICA6IGNvZ25pdG8uQWNjb3VudFJlY292ZXJ5LkVNQUlMX09OTFk7XG5cbiAgICAvLyBQYXNzd29yZGxlc3MgdXNlcyBFTUFJTF9PVFAgYXMgYSBGSVJTVCBhdXRoIGZhY3Rvciwgd2hpY2ggQ29nbml0byBmb3JiaWRzIHdoaWxlXG4gICAgLy8gTUZBIGlzIE9OIChcIk9ubHkgUEFTU1dPUkQgYW5kIFdFQl9BVVRITiBjYW4gYmUgZW5hYmxlZCBhcyBhbiBhdXRoIGZhY3RvciBpZiBNRkFcbiAgICAvLyBpcyBlbmFibGVkXCIpLiBTbyBwYXNzd29yZGxlc3MgZm9yY2VzIE1GQSBPRkYuIE5COiB0aGUgT0ZGLT5PTiB0cmFuc2l0aW9uIGlzXG4gICAgLy8gaXJyZXZlcnNpYmxlIHZpYSB0aGUgQVBJIOKAlCBhIHBvb2wgY3JlYXRlZCBwYXNzd29yZGxlc3MgY2Fubm90IGxhdGVyIGdhaW4gTUZBIGluIHBsYWNlLlxuICAgIGNvbnN0IG1mYUNvbmZpZyA9IHByb3BzLnBhc3N3b3JkbGVzc0VtYWlsT3RwXG4gICAgICA/IGNvZ25pdG8uTWZhLk9GRlxuICAgICAgOiAocHJvcHMubWZhID8/IGNvZ25pdG8uTWZhLlJFUVVJUkVEKTtcblxuICAgIHRoaXMudXNlclBvb2wgPSBuZXcgY29nbml0by5Vc2VyUG9vbCh0aGlzLCAnVXNlclBvb2wnLCB7XG4gICAgICB1c2VyUG9vbE5hbWU6IHByb3BzLnVzZXJQb29sTmFtZSxcbiAgICAgIHNlbGZTaWduVXBFbmFibGVkOiBwcm9wcy5zZWxmU2lnblVwRW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIHNpZ25JbkFsaWFzZXM6IHsgZW1haWw6IHRydWUgfSxcbiAgICAgIHNpZ25JbkNhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICAgICAgbWZhOiBtZmFDb25maWcsXG4gICAgICBtZmFTZWNvbmRGYWN0b3I6IGwyTWZhU2Vjb25kRmFjdG9yLFxuICAgICAgcGFzc3dvcmRQb2xpY3k6IHByb3BzLnBhc3N3b3JkUG9saWN5ID8/IHtcbiAgICAgICAgbWluTGVuZ3RoOiAxMixcbiAgICAgICAgcmVxdWlyZUxvd2VyY2FzZTogdHJ1ZSxcbiAgICAgICAgcmVxdWlyZVVwcGVyY2FzZTogdHJ1ZSxcbiAgICAgICAgcmVxdWlyZURpZ2l0czogdHJ1ZSxcbiAgICAgICAgcmVxdWlyZVN5bWJvbHM6IHRydWUsXG4gICAgICB9LFxuICAgICAgYWR2YW5jZWRTZWN1cml0eU1vZGU6IHByb3BzLmFkdmFuY2VkU2VjdXJpdHlNb2RlID8/IGNvZ25pdG8uQWR2YW5jZWRTZWN1cml0eU1vZGUuT0ZGLFxuICAgICAgc3RhbmRhcmRBdHRyaWJ1dGVzOiBwcm9wcy5zdGFuZGFyZEF0dHJpYnV0ZXMsXG4gICAgICBjdXN0b21BdHRyaWJ1dGVzOiBwcm9wcy5jdXN0b21BdHRyaWJ1dGVzLFxuICAgICAgYXV0b1ZlcmlmeTogeyBlbWFpbDogdHJ1ZSB9LFxuICAgICAgYWNjb3VudFJlY292ZXJ5LFxuICAgICAgLy8gQ3VzdG9tIEVtYWlsIFNlbmRlcjogd2hlbiBwcm92aWRlZCwgQ29nbml0byByb3V0ZXMgZXZlcnkgY3VzdG9tZXIgZW1haWxcbiAgICAgIC8vIHRocm91Z2ggdGhpcyBMYW1iZGEgYW5kIGVuY3J5cHRzIGNvZGVzIHRvIGN1c3RvbVNlbmRlckttc0tleS4gQm90aCBtdXN0IGJlXG4gICAgICAvLyBzZXQgb24gdGhlIHBvb2wgYXQgY29uc3RydWN0aW9uIOKAlCB0aGUgS01TIGtleSBpcyBub3Qgc2V0dGFibGUgdmlhIGFkZFRyaWdnZXIuXG4gICAgICBjdXN0b21TZW5kZXJLbXNLZXk6IHByb3BzLmN1c3RvbVNlbmRlckttc0tleSxcbiAgICAgIGxhbWJkYVRyaWdnZXJzOiBwcm9wcy5jdXN0b21FbWFpbFNlbmRlckxhbWJkYVxuICAgICAgICA/IHsgY3VzdG9tRW1haWxTZW5kZXI6IHByb3BzLmN1c3RvbUVtYWlsU2VuZGVyTGFtYmRhIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNvcmUuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgfSk7XG5cbiAgICAvLyBMMSBlc2NhcGUgaGF0Y2g6IGVuYWJsZSBFTUFJTF9PVFAgYXMgdGhlIG9ubHkgTUZBIGZhY3Rvci4gVGhlIEwyIGNhbm5vdCBleHByZXNzXG4gICAgLy8gXCJlbWFpbCBNRkEgZGVsaXZlcmVkIHNvbGVseSBieSBhIGN1c3RvbSBzZW5kZXJcIiAoc2VlIGVtYWlsT3RwTWZhIGRvY3MpLCBzbyBzZXRcbiAgICAvLyBFbmFibGVkTWZhcyBkaXJlY3RseSBvbiB0aGUgdW5kZXJseWluZyBDZm5Vc2VyUG9vbC4gVGhlIGN1c3RvbSBlbWFpbCBzZW5kZXJcbiAgICAvLyBkZWxpdmVycyB0aGUgY29kZSwgYnV0IENvZ25pdG8gc3RpbGwgcmVxdWlyZXMgYSBERVZFTE9QRVIgU0VTIEVtYWlsQ29uZmlndXJhdGlvblxuICAgIC8vIG9uIGEgdmVyaWZpZWQgc2FtZS1hY2NvdW50IGlkZW50aXR5IGFzIGFuIEVOQUJMRU1FTlQgcHJlY29uZGl0aW9uIChiZWxvdykuXG4gICAgaWYgKHByb3BzLmVtYWlsQ29uZmlndXJhdGlvbikge1xuICAgICAgLy8gU2V0IEVtYWlsQ29uZmlndXJhdGlvbiB2aWEgTDEgd2l0aCB0aGUgY2FsbGVyJ3MgZXhhY3QgdmVyaWZpZWQgc2FtZS1hY2NvdW50XG4gICAgICAvLyBpZGVudGl0eSBBUk4g4oCUIGFjY2VwdGluZyBlaXRoZXIgYSBkb21haW4gb3IgYW4gZW1haWwtYWRkcmVzcyBpZGVudGl0eSB3aXRob3V0XG4gICAgICAvLyBDREsgcmUtZGVyaXZpbmcgdGhlIEFSTiBmcm9tIHRoZSBGcm9tIGFkZHJlc3MuIFRoaXMgc2F0aXNmaWVzIENvZ25pdG8nc1xuICAgICAgLy8gRU1BSUxfT1RQIGVuYWJsZW1lbnQgcHJlY29uZGl0aW9uOyB0aGUgY3VzdG9tIGVtYWlsIHNlbmRlciBzdGlsbCBvdmVycmlkZXNcbiAgICAgIC8vIGFjdHVhbCBkZWxpdmVyeSwgc28gdGhpcyBpZGVudGl0eSBpcyBuZXZlciBzZW50IHRocm91Z2guXG4gICAgICBjb25zdCBjZm5Qb29sID0gdGhpcy51c2VyUG9vbC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjb2duaXRvLkNmblVzZXJQb29sO1xuICAgICAgY2ZuUG9vbC5lbWFpbENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgIGVtYWlsU2VuZGluZ0FjY291bnQ6ICdERVZFTE9QRVInLFxuICAgICAgICBzb3VyY2VBcm46IHByb3BzLmVtYWlsQ29uZmlndXJhdGlvbi5zZXNWZXJpZmllZERvbWFpbkFybixcbiAgICAgICAgZnJvbTogcHJvcHMuZW1haWxDb25maWd1cmF0aW9uLmZyb21OYW1lXG4gICAgICAgICAgPyBgJHtwcm9wcy5lbWFpbENvbmZpZ3VyYXRpb24uZnJvbU5hbWV9IDwke3Byb3BzLmVtYWlsQ29uZmlndXJhdGlvbi5mcm9tRW1haWx9PmBcbiAgICAgICAgICA6IHByb3BzLmVtYWlsQ29uZmlndXJhdGlvbi5mcm9tRW1haWwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbWFpbE90cE1mYSkge1xuICAgICAgY29uc3QgY2ZuUG9vbCA9IHRoaXMudXNlclBvb2wubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29nbml0by5DZm5Vc2VyUG9vbDtcbiAgICAgIGNmblBvb2wuZW5hYmxlZE1mYXMgPSBbJ0VNQUlMX09UUCddO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5wYXNzd29yZGxlc3NFbWFpbE90cCkge1xuICAgICAgLy8gQ2hvaWNlLWJhc2VkIHNpZ24taW46IEVNQUlMX09UUCBhcyBhIGZpcnN0IGF1dGggZmFjdG9yLiBQQVNTV09SRCBpcyBNQU5EQVRPUllcbiAgICAgIC8vIGluIEFsbG93ZWRGaXJzdEF1dGhGYWN0b3JzIChDb2duaXRvIHJlamVjdHMgYSBsaXN0IHdpdGhvdXQgaXQpLCBzbyBpdCBzdGF5cyDigJRcbiAgICAgIC8vIGJ1dCB0aGUgYXBwIGNsaWVudCBiZWxvdyBkcm9wcyB0aGUgcGFzc3dvcmQgKHVzZXJTcnApIGZsb3cgYW5kIHRoZSBjb25zdW1lcidzXG4gICAgICAvLyBVSSBuZXZlciBvZmZlcnMgaXQsIHNvIHRoZSBwYXNzd29yZCBwYXRoIGlzIHVucmVhY2hhYmxlIHRocm91Z2ggdGhpcyBjbGllbnQuXG4gICAgICBjb25zdCBjZm5Qb29sID0gdGhpcy51c2VyUG9vbC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjb2duaXRvLkNmblVzZXJQb29sO1xuICAgICAgY2ZuUG9vbC5wb2xpY2llcyA9IHtcbiAgICAgICAgLi4uKGNmblBvb2wucG9saWNpZXMgYXMgY29nbml0by5DZm5Vc2VyUG9vbC5Qb2xpY2llc1Byb3BlcnR5IHwgdW5kZWZpbmVkKSxcbiAgICAgICAgc2lnbkluUG9saWN5OiB7IGFsbG93ZWRGaXJzdEF1dGhGYWN0b3JzOiBbJ1BBU1NXT1JEJywgJ0VNQUlMX09UUCddIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHByZVRva2VuTGFtYmRhID0gcHJvcHMucHJlVG9rZW5HZW5lcmF0aW9uTGFtYmRhID8/IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ1ByZVRva2VuTGFtYmRhJywge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTIsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS9wcmUtdG9rZW4nKSksXG4gICAgICB0aW1lb3V0OiBjb3JlLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgfSk7XG4gICAgdGhpcy51c2VyUG9vbC5hZGRUcmlnZ2VyKGNvZ25pdG8uVXNlclBvb2xPcGVyYXRpb24uUFJFX1RPS0VOX0dFTkVSQVRJT05fQ09ORklHLCBwcmVUb2tlbkxhbWJkYSwgY29nbml0by5MYW1iZGFWZXJzaW9uLlYyXzApO1xuXG4gICAgaWYgKHByb3BzLmdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBwcm9wcy5ncm91cHMpIHtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xHcm91cCh0aGlzLCBgR3JvdXAke2dyb3VwfWAsIHtcbiAgICAgICAgICB1c2VyUG9vbElkOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICAgICAgZ3JvdXBOYW1lOiBncm91cCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uYWwgYWR2YW5jZWQtc2VjdXJpdHkgcmlzayBjb25maWd1cmF0aW9uIChMMSkuXG4gICAgaWYgKHByb3BzLmFjY291bnRUYWtlb3ZlclJpc2tDb25maWd1cmF0aW9uIHx8IHByb3BzLmNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbikge1xuICAgICAgbmV3IGNvZ25pdG8uQ2ZuVXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnQodGhpcywgJ1Jpc2tDb25maWcnLCB7XG4gICAgICAgIHVzZXJQb29sSWQ6IHRoaXMudXNlclBvb2wudXNlclBvb2xJZCxcbiAgICAgICAgY2xpZW50SWQ6ICdBTEwnLFxuICAgICAgICBhY2NvdW50VGFrZW92ZXJSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuYWNjb3VudFRha2VvdmVyUmlza0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGNvbXByb21pc2VkQ3JlZGVudGlhbHNSaXNrQ29uZmlndXJhdGlvbjogcHJvcHMuY29tcHJvbWlzZWRDcmVkZW50aWFsc1Jpc2tDb25maWd1cmF0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyUG9vbENsaWVudHMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHNwZWMgb2YgcHJvcHMuYXBwQ2xpZW50cykge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IGNvZ25pdG8uVXNlclBvb2xDbGllbnQodGhpcywgYENsaWVudCR7c3BlYy5rZXl9YCwge1xuICAgICAgICB1c2VyUG9vbDogdGhpcy51c2VyUG9vbCxcbiAgICAgICAgZ2VuZXJhdGVTZWNyZXQ6IHNwZWMuZ2VuZXJhdGVTZWNyZXQgPz8gZmFsc2UsXG4gICAgICAgIGF1dGhGbG93czogcHJvcHMucGFzc3dvcmRsZXNzRW1haWxPdHBcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIC8vIFBhc3N3b3JkbGVzczogZW5hYmxlIGNob2ljZS1iYXNlZCBBTExPV19VU0VSX0FVVEggYW5kIERST1AgdXNlclNycCBzbyB0aGVcbiAgICAgICAgICAgIC8vIHBhc3N3b3JkIGNoYWxsZW5nZSBjYW5ub3QgYmUgaW5pdGlhdGVkIHRocm91Z2ggdGhpcyBjbGllbnQg4oCUIGV2ZW4gYnkgYVxuICAgICAgICAgICAgLy8gZGlyZWN0IEFQSSBjYWxsLiBQQVNTV09SRCBzdGF5cyBhIHBvb2wgZmFjdG9yIChDb2duaXRvJ3MgcnVsZSkgYnV0IGlzXG4gICAgICAgICAgICAvLyB1bnJlYWNoYWJsZSB2aWEgdGhlIHN0b3JlZnJvbnQgY2xpZW50LlxuICAgICAgICAgICAgdXNlcjogdHJ1ZSxcbiAgICAgICAgICAgIGN1c3RvbTogcHJvcHMuZW5hYmxlQ3VzdG9tQXV0aEZsb3cgPz8gZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgdXNlclNycDogdHJ1ZSxcbiAgICAgICAgICAgIGN1c3RvbTogcHJvcHMuZW5hYmxlQ3VzdG9tQXV0aEZsb3cgPz8gZmFsc2UsXG4gICAgICAgICAgICAvLyB1c2VyUGFzc3dvcmQgLyBhZG1pblVzZXJQYXNzd29yZCBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKGRpc2FibGVkKS5cbiAgICAgICAgICB9LFxuICAgICAgICBvQXV0aDoge1xuICAgICAgICAgIGZsb3dzOiB7IGF1dGhvcml6YXRpb25Db2RlR3JhbnQ6IHRydWUgfSxcbiAgICAgICAgICBzY29wZXM6IFtjb2duaXRvLk9BdXRoU2NvcGUuT1BFTklELCBjb2duaXRvLk9BdXRoU2NvcGUuRU1BSUwsIGNvZ25pdG8uT0F1dGhTY29wZS5QUk9GSUxFXSxcbiAgICAgICAgICBjYWxsYmFja1VybHM6IHNwZWMuY2FsbGJhY2tVcmxzLFxuICAgICAgICAgIGxvZ291dFVybHM6IHNwZWMubG9nb3V0VXJscyxcbiAgICAgICAgfSxcbiAgICAgICAgc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnM6IHNwZWMuc3VwcG9ydGVkSWRlbnRpdHlQcm92aWRlcnMgPz8gW2NvZ25pdG8uVXNlclBvb2xDbGllbnRJZGVudGl0eVByb3ZpZGVyLkNPR05JVE9dLFxuICAgICAgICBwcmV2ZW50VXNlckV4aXN0ZW5jZUVycm9yczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlVG9rZW5SZXZvY2F0aW9uOiB0cnVlLFxuICAgICAgICBhY2Nlc3NUb2tlblZhbGlkaXR5OiBwcm9wcy5hY2Nlc3NUb2tlblZhbGlkaXR5ID8/IGNvcmUuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIGlkVG9rZW5WYWxpZGl0eTogcHJvcHMuaWRUb2tlblZhbGlkaXR5ID8/IGNvcmUuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIHJlZnJlc2hUb2tlblZhbGlkaXR5OiBwcm9wcy5yZWZyZXNoVG9rZW5WYWxpZGl0eSA/PyBjb3JlLkR1cmF0aW9uLmRheXMoMzApLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnVzZXJQb29sQ2xpZW50c1tzcGVjLmtleV0gPSBjbGllbnQ7XG4gICAgfVxuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSB0aGlzLnVzZXJQb29sQ2xpZW50c1twcm9wcy5hcHBDbGllbnRzWzBdLmtleV07XG5cbiAgICB0aGlzLnVzZXJQb29sRG9tYWluID0gdGhpcy51c2VyUG9vbC5hZGREb21haW4oJ0NvZ25pdG9Eb21haW4nLCB7XG4gICAgICBjb2duaXRvRG9tYWluOiB7IGRvbWFpblByZWZpeDogcHJvcHMuY29nbml0b0RvbWFpblByZWZpeCB9LFxuICAgIH0pO1xuICAgIHRoaXMuY29nbml0b0RvbWFpblVybCA9IGAke3Byb3BzLmNvZ25pdG9Eb21haW5QcmVmaXh9LmF1dGguJHtjb3JlLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uY29nbml0by5jb21gO1xuXG4gICAgaWYgKHByb3BzLmlkZW50aXR5UG9vbCkge1xuICAgICAgY29uc3QgaWRwID0gcHJvcHMuaWRlbnRpdHlQb29sO1xuICAgICAgdGhpcy5pZGVudGl0eVBvb2wgPSBuZXcgY29nbml0by5DZm5JZGVudGl0eVBvb2wodGhpcywgJ0lkZW50aXR5UG9vbCcsIHtcbiAgICAgICAgYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzOiBpZHAuYWxsb3dVbmF1dGhlbnRpY2F0ZWRJZGVudGl0aWVzID8/IGZhbHNlLFxuICAgICAgICBjb2duaXRvSWRlbnRpdHlQcm92aWRlcnM6IHByb3BzLmFwcENsaWVudHMubWFwKHNwZWMgPT4gKHtcbiAgICAgICAgICBjbGllbnRJZDogdGhpcy51c2VyUG9vbENsaWVudHNbc3BlYy5rZXldLnVzZXJQb29sQ2xpZW50SWQsXG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiB0aGlzLnVzZXJQb29sLnVzZXJQb29sUHJvdmlkZXJOYW1lLFxuICAgICAgICAgIHNlcnZlclNpZGVUb2tlbkNoZWNrOiB0cnVlLFxuICAgICAgICB9KSksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnQXV0aGVudGljYXRlZFJvbGUnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5GZWRlcmF0ZWRQcmluY2lwYWwoXG4gICAgICAgICAgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgJ1N0cmluZ0VxdWFscyc6IHsgJ2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbTphdWQnOiB0aGlzLmlkZW50aXR5UG9vbC5yZWYgfSxcbiAgICAgICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdMaWtlJzogeyAnY29nbml0by1pZGVudGl0eS5hbWF6b25hd3MuY29tOmFtcic6ICdhdXRoZW50aWNhdGVkJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ3N0czpBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5JyxcbiAgICAgICAgKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBpZHAuYXV0aGVudGljYXRlZFJvbGVNYW5hZ2VkUG9saWNpZXMsXG4gICAgICB9KTtcblxuICAgICAgbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sUm9sZUF0dGFjaG1lbnQodGhpcywgJ0lkZW50aXR5UG9vbFJvbGVzJywge1xuICAgICAgICBpZGVudGl0eVBvb2xJZDogdGhpcy5pZGVudGl0eVBvb2wucmVmLFxuICAgICAgICByb2xlczogeyBhdXRoZW50aWNhdGVkOiB0aGlzLmF1dGhlbnRpY2F0ZWRSb2xlLnJvbGVBcm4gfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBQkFDOiBtYXAgY2xhaW1zIHRvIHByaW5jaXBhbCB0YWdzIG9uIHRoZSB1c2VyLXBvb2wgcHJvdmlkZXIuXG4gICAgICBpZiAoaWRwLnByaW5jaXBhbFRhZ3MgJiYgT2JqZWN0LmtleXMoaWRwLnByaW5jaXBhbFRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IGNvZ25pdG8uQ2ZuSWRlbnRpdHlQb29sUHJpbmNpcGFsVGFnKHRoaXMsICdQcmluY2lwYWxUYWdzJywge1xuICAgICAgICAgIGlkZW50aXR5UG9vbElkOiB0aGlzLmlkZW50aXR5UG9vbC5yZWYsXG4gICAgICAgICAgaWRlbnRpdHlQcm92aWRlck5hbWU6IHRoaXMudXNlclBvb2wudXNlclBvb2xQcm92aWRlck5hbWUsXG4gICAgICAgICAgdXNlRGVmYXVsdHM6IGZhbHNlLFxuICAgICAgICAgIHByaW5jaXBhbFRhZ3M6IGlkcC5wcmluY2lwYWxUYWdzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "main": "lib/index.js",
61
61
  "license": "Apache-2.0",
62
- "version": "0.0.42",
62
+ "version": "0.0.44",
63
63
  "jest": {
64
64
  "coverageProvider": "v8",
65
65
  "testMatch": [