raindancers-cloudfront 0.0.43 → 0.0.45

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 (438) hide show
  1. package/lib/cloudfront/edgeAssetHash.d.ts +27 -9
  2. package/lib/cloudfront/edgeAssetHash.js +42 -10
  3. package/lib/cloudfront/lambda-bundled/cognito-auth/__pycache__/six.cpython-312.pyc +0 -0
  4. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  5. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  6. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  7. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  8. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  9. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  10. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  11. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  12. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  13. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  14. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  15. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  16. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  17. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  18. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  19. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  20. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  21. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  22. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  23. package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  24. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  25. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  26. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  27. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  28. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  29. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  30. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  31. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  32. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  33. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  34. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  35. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  36. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  37. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  38. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  39. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  40. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  41. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  42. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  43. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  44. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  45. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  46. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  47. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  48. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  49. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  50. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  51. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  52. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  53. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  54. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  55. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  56. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  57. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  58. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  59. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  60. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  61. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  62. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  63. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  64. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  65. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  66. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  67. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  68. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  69. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  70. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  71. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  72. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  73. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  74. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  75. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  76. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  77. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  78. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  79. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  80. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  81. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  82. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  83. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  84. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  85. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  86. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  87. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  88. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  89. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  90. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  91. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  92. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  93. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  94. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  95. package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  96. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  97. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  98. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  99. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  100. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  101. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  102. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  103. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  104. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  105. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  106. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  107. package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  108. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  109. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  110. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  111. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  112. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  113. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  114. package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  115. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/__init__.cpython-312.pyc +0 -0
  116. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/debug.cpython-312.pyc +0 -0
  117. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/error.cpython-312.pyc +0 -0
  118. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/__init__.cpython-312.pyc +0 -0
  119. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/streaming.cpython-312.pyc +0 -0
  120. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/__init__.cpython-312.pyc +0 -0
  121. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/decoder.cpython-312.pyc +0 -0
  122. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/encoder.cpython-312.pyc +0 -0
  123. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/eoo.cpython-312.pyc +0 -0
  124. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/__init__.cpython-312.pyc +0 -0
  125. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/decoder.cpython-312.pyc +0 -0
  126. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/encoder.cpython-312.pyc +0 -0
  127. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/__init__.cpython-312.pyc +0 -0
  128. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/decoder.cpython-312.pyc +0 -0
  129. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/encoder.cpython-312.pyc +0 -0
  130. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/__init__.cpython-312.pyc +0 -0
  131. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/decoder.cpython-312.pyc +0 -0
  132. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/encoder.cpython-312.pyc +0 -0
  133. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/__init__.cpython-312.pyc +0 -0
  134. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/integer.cpython-312.pyc +0 -0
  135. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/__init__.cpython-312.pyc +0 -0
  136. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/base.cpython-312.pyc +0 -0
  137. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/char.cpython-312.pyc +0 -0
  138. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/constraint.cpython-312.pyc +0 -0
  139. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/error.cpython-312.pyc +0 -0
  140. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedtype.cpython-312.pyc +0 -0
  141. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedval.cpython-312.pyc +0 -0
  142. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/opentype.cpython-312.pyc +0 -0
  143. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tag.cpython-312.pyc +0 -0
  144. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tagmap.cpython-312.pyc +0 -0
  145. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/univ.cpython-312.pyc +0 -0
  146. package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/useful.cpython-312.pyc +0 -0
  147. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/__init__.cpython-312.pyc +0 -0
  148. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/asn1.cpython-312.pyc +0 -0
  149. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/cli.cpython-312.pyc +0 -0
  150. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/common.cpython-312.pyc +0 -0
  151. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/core.cpython-312.pyc +0 -0
  152. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/key.cpython-312.pyc +0 -0
  153. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/parallel.cpython-312.pyc +0 -0
  154. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pem.cpython-312.pyc +0 -0
  155. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1.cpython-312.pyc +0 -0
  156. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1_v2.cpython-312.pyc +0 -0
  157. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/prime.cpython-312.pyc +0 -0
  158. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/randnum.cpython-312.pyc +0 -0
  159. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/transform.cpython-312.pyc +0 -0
  160. package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/util.cpython-312.pyc +0 -0
  161. package/lib/cloudfront/lambda-bundled/edge-auth/__pycache__/six.cpython-312.pyc +0 -0
  162. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
  163. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
  164. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
  165. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
  166. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
  167. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
  168. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
  169. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
  170. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
  171. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
  172. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
  173. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
  174. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
  175. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
  176. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
  177. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
  178. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
  179. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
  180. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
  181. package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
  182. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
  183. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
  184. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
  185. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
  186. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
  187. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
  188. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
  189. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
  190. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  191. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
  192. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
  193. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
  194. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
  195. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
  196. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
  197. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
  198. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
  199. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
  200. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
  201. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
  202. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
  203. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
  204. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
  205. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
  206. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
  207. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
  208. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
  209. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
  210. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
  211. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
  212. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
  213. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
  214. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
  215. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
  216. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
  217. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
  218. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
  219. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
  220. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
  221. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
  222. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
  223. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
  224. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
  225. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
  226. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
  227. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
  228. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
  229. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
  230. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
  231. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
  232. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
  233. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
  234. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
  235. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
  236. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
  237. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
  238. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
  239. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
  240. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
  241. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
  242. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
  243. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
  244. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
  245. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
  246. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
  247. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
  248. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
  249. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
  250. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
  251. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
  252. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
  253. package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
  254. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
  255. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
  256. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
  257. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
  258. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
  259. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
  260. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
  261. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
  262. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
  263. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
  264. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
  265. package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
  266. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
  267. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
  268. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
  269. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
  270. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
  271. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
  272. package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
  273. package/lib/cloudfront/lambda-bundled/hmacSecret/__pycache__/six.cpython-312.pyc +0 -0
  274. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/__init__.cpython-312.pyc +0 -0
  275. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_aws_iot_metrics.cpython-312.pyc +0 -0
  276. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_test.cpython-312.pyc +0 -0
  277. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/auth.cpython-312.pyc +0 -0
  278. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/cbor.cpython-312.pyc +0 -0
  279. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/checksums.cpython-312.pyc +0 -0
  280. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/common.cpython-312.pyc +0 -0
  281. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/crypto.cpython-312.pyc +0 -0
  282. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/exceptions.cpython-312.pyc +0 -0
  283. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/http.cpython-312.pyc +0 -0
  284. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/io.cpython-312.pyc +0 -0
  285. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/logging.cpython-312.pyc +0 -0
  286. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt.cpython-312.pyc +0 -0
  287. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt5.cpython-312.pyc +0 -0
  288. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt_request_response.cpython-312.pyc +0 -0
  289. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/s3.cpython-312.pyc +0 -0
  290. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/websocket.cpython-312.pyc +0 -0
  291. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/__init__.cpython-312.pyc +0 -0
  292. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/http.cpython-312.pyc +0 -0
  293. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/__init__.cpython-312.pyc +0 -0
  294. package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/rpc.cpython-312.pyc +0 -0
  295. package/lib/cloudfront/lambda-bundled/hmacSecret/bin/__pycache__/jp.cpython-312.pyc +0 -0
  296. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/__init__.cpython-312.pyc +0 -0
  297. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/args.cpython-312.pyc +0 -0
  298. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/auth.cpython-312.pyc +0 -0
  299. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/awsrequest.cpython-312.pyc +0 -0
  300. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/client.cpython-312.pyc +0 -0
  301. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compat.cpython-312.pyc +0 -0
  302. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compress.cpython-312.pyc +0 -0
  303. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/config.cpython-312.pyc +0 -0
  304. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configloader.cpython-312.pyc +0 -0
  305. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configprovider.cpython-312.pyc +0 -0
  306. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/context.cpython-312.pyc +0 -0
  307. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/credentials.cpython-312.pyc +0 -0
  308. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/discovery.cpython-312.pyc +0 -0
  309. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint.cpython-312.pyc +0 -0
  310. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint_provider.cpython-312.pyc +0 -0
  311. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/errorfactory.cpython-312.pyc +0 -0
  312. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/eventstream.cpython-312.pyc +0 -0
  313. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/exceptions.cpython-312.pyc +0 -0
  314. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/handlers.cpython-312.pyc +0 -0
  315. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/history.cpython-312.pyc +0 -0
  316. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/hooks.cpython-312.pyc +0 -0
  317. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpchecksum.cpython-312.pyc +0 -0
  318. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpsession.cpython-312.pyc +0 -0
  319. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/loaders.cpython-312.pyc +0 -0
  320. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/model.cpython-312.pyc +0 -0
  321. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/monitoring.cpython-312.pyc +0 -0
  322. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/paginate.cpython-312.pyc +0 -0
  323. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/parsers.cpython-312.pyc +0 -0
  324. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/plugin.cpython-312.pyc +0 -0
  325. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/regions.cpython-312.pyc +0 -0
  326. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/response.cpython-312.pyc +0 -0
  327. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/retryhandler.cpython-312.pyc +0 -0
  328. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/serialize.cpython-312.pyc +0 -0
  329. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/session.cpython-312.pyc +0 -0
  330. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/signers.cpython-312.pyc +0 -0
  331. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/stub.cpython-312.pyc +0 -0
  332. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/tokens.cpython-312.pyc +0 -0
  333. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/translate.cpython-312.pyc +0 -0
  334. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/useragent.cpython-312.pyc +0 -0
  335. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/utils.cpython-312.pyc +0 -0
  336. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/validate.cpython-312.pyc +0 -0
  337. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/waiter.cpython-312.pyc +0 -0
  338. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/__init__.cpython-312.pyc +0 -0
  339. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/auth.cpython-312.pyc +0 -0
  340. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/__init__.cpython-312.pyc +0 -0
  341. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/client.cpython-312.pyc +0 -0
  342. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/docstring.cpython-312.pyc +0 -0
  343. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/example.cpython-312.pyc +0 -0
  344. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/method.cpython-312.pyc +0 -0
  345. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/paginator.cpython-312.pyc +0 -0
  346. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/params.cpython-312.pyc +0 -0
  347. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/service.cpython-312.pyc +0 -0
  348. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/shape.cpython-312.pyc +0 -0
  349. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/sharedexample.cpython-312.pyc +0 -0
  350. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/translator.cpython-312.pyc +0 -0
  351. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/utils.cpython-312.pyc +0 -0
  352. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/waiter.cpython-312.pyc +0 -0
  353. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/__init__.cpython-312.pyc +0 -0
  354. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-312.pyc +0 -0
  355. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/restdoc.cpython-312.pyc +0 -0
  356. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/style.cpython-312.pyc +0 -0
  357. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/__init__.cpython-312.pyc +0 -0
  358. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/adaptive.cpython-312.pyc +0 -0
  359. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/base.cpython-312.pyc +0 -0
  360. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/bucket.cpython-312.pyc +0 -0
  361. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/quota.cpython-312.pyc +0 -0
  362. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/special.cpython-312.pyc +0 -0
  363. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/standard.cpython-312.pyc +0 -0
  364. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/throttling.cpython-312.pyc +0 -0
  365. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/__init__.cpython-312.pyc +0 -0
  366. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/six.cpython-312.pyc +0 -0
  367. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/__init__.cpython-312.pyc +0 -0
  368. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
  369. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/__pycache__/__init__.cpython-312.pyc +0 -0
  370. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  371. package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  372. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/__init__.cpython-312.pyc +0 -0
  373. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_common.cpython-312.pyc +0 -0
  374. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_version.cpython-312.pyc +0 -0
  375. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/easter.cpython-312.pyc +0 -0
  376. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/relativedelta.cpython-312.pyc +0 -0
  377. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/rrule.cpython-312.pyc +0 -0
  378. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/tzwin.cpython-312.pyc +0 -0
  379. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/utils.cpython-312.pyc +0 -0
  380. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/__init__.cpython-312.pyc +0 -0
  381. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/_parser.cpython-312.pyc +0 -0
  382. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/isoparser.cpython-312.pyc +0 -0
  383. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/__init__.cpython-312.pyc +0 -0
  384. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_common.cpython-312.pyc +0 -0
  385. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_factories.cpython-312.pyc +0 -0
  386. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/tz.cpython-312.pyc +0 -0
  387. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/win.cpython-312.pyc +0 -0
  388. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc +0 -0
  389. package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc +0 -0
  390. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc +0 -0
  391. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/ast.cpython-312.pyc +0 -0
  392. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc +0 -0
  393. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc +0 -0
  394. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc +0 -0
  395. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/lexer.cpython-312.pyc +0 -0
  396. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc +0 -0
  397. package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc +0 -0
  398. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
  399. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_base_connection.cpython-312.pyc +0 -0
  400. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
  401. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_request_methods.cpython-312.pyc +0 -0
  402. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
  403. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
  404. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
  405. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
  406. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
  407. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
  408. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
  409. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc +0 -0
  410. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
  411. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
  412. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
  413. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc +0 -0
  414. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc +0 -0
  415. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc +0 -0
  416. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc +0 -0
  417. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc +0 -0
  418. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc +0 -0
  419. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/connection.cpython-312.pyc +0 -0
  420. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc +0 -0
  421. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
  422. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
  423. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
  424. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
  425. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
  426. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
  427. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
  428. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
  429. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
  430. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
  431. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
  432. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc +0 -0
  433. package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
  434. package/lib/cloudfront/patterns/cognito-customui-auth.js +5 -5
  435. package/lib/cloudfront/patterns/cognitoCustomerPool.d.ts +23 -0
  436. package/lib/cloudfront/patterns/cognitoCustomerPool.js +44 -7
  437. package/lib/cloudfront/patterns/securedCloudFront.js +6 -5
  438. package/package.json +1 -1
@@ -35,7 +35,6 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.CognitoCustomUiAuth = void 0;
37
37
  const fs = __importStar(require("fs"));
38
- const os = __importStar(require("os"));
39
38
  const path = __importStar(require("path"));
40
39
  const core = __importStar(require("aws-cdk-lib"));
41
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
@@ -404,9 +403,10 @@ class CognitoCustomUiAuth extends constructs.Construct {
404
403
  makeEdgeFunction(id, sourceDirName, configPy, role, bundledDepsName) {
405
404
  const sourceDir = path.join(__dirname, '../lambda', sourceDirName);
406
405
  const bundledDepsDir = bundledDepsName ? path.join(__dirname, '../lambda-bundled', bundledDepsName) : undefined;
407
- const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'customui-auth-'));
408
- const configPyPath = path.join(tempDir, 'config_generated.py');
409
- fs.writeFileSync(configPyPath, configPy);
406
+ // Deterministic path for the Docker-fallback config volume — a random temp
407
+ // dir here would churn the CUSTOM asset hash on every synth. See
408
+ // deterministicConfigDir for the full explanation.
409
+ const configPyPath = (0, edgeAssetHash_1.deterministicConfigDir)(id, configPy);
410
410
  return new aws_cdk_lib_1.aws_cloudfront.experimental.EdgeFunction(this, id, {
411
411
  runtime: aws_cdk_lib_1.aws_lambda.Runtime.PYTHON_3_11,
412
412
  handler: 'index.lambda_handler',
@@ -447,4 +447,4 @@ class CognitoCustomUiAuth extends constructs.Construct {
447
447
  }
448
448
  }
449
449
  exports.CognitoCustomUiAuth = CognitoCustomUiAuth;
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1jdXN0b211aS1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nsb3VkZnJvbnQvcGF0dGVybnMvY29nbml0by1jdXN0b211aS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FPcUI7QUFDckIsdURBQXlDO0FBQ3pDLDJEQUFvRztBQUNwRyxpRkFBNkU7QUFDN0Usb0RBQXdEO0FBMEh4RDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLG1CQUFtRCxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBWTFGLFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBc0M7UUFDekYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQztRQUNwRCxJQUFJLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ25DLE1BQU0sZUFBZSxHQUFHLHFCQUFHLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRyxNQUFNLFNBQVMsR0FBRyxxQkFBRyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sWUFBWSxHQUFHLHFCQUFHLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUYsTUFBTSxNQUFNLEdBQUcscUJBQUcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVoRixJQUFJLENBQUMsR0FBRyxHQUFHLDRCQUFVLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxRQUFRLENBQUM7UUFDdkUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUM7UUFDakUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxxQkFBcUIsSUFBSTtZQUMxRCxlQUFlLEVBQUUsYUFBYTtZQUM5QixrQkFBa0IsRUFBRSxPQUFPO1NBQzVCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG9DQUFnQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFFbkMsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksMEJBQTBCLGVBQWUsRUFBRSxDQUFDO1FBQzdGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixJQUFJLGVBQWUsQ0FBQztRQUV6RSwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLHdFQUF3RTtRQUN4RSw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLHlFQUF5RTtRQUN6RSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHNEQUFzRDtRQUN0RCxNQUFNLHFCQUFxQixHQUFHLDhCQUE4QixlQUFlLEVBQUUsQ0FBQztRQUM5RSxNQUFNLGlCQUFpQixHQUFHLElBQUksZ0NBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQ2hGLFVBQVUsRUFBRSxxQkFBcUI7WUFDakMsaUJBQWlCLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7Z0JBQ2pELGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztnQkFDbEYseUJBQXlCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLDRCQUE0QixJQUFJLEVBQUUsQ0FBQzthQUN0RztZQUNELFdBQVcsRUFBRSx1Q0FBdUMsZUFBZSxFQUFFO1NBQ3RFLENBQUMsQ0FBQztRQUVILE1BQU0sZUFBZSxHQUEyQjtZQUM5QyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQzNDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDbEQsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUM7WUFDNUQsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1lBQ3BELHlCQUF5QixFQUFFLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxHQUFHO1lBQzlELGFBQWEsRUFBRSxLQUFLLENBQUMsVUFBVTtTQUNoQyxDQUFDO1FBRUYsK0VBQStFO1FBQy9FLCtFQUErRTtRQUMvRSxpRkFBaUY7UUFDakYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUVsSSxrREFBa0Q7UUFDbEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFlLEVBQUUsSUFBeUYsRUFBUSxFQUFFO1lBQ3ZJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUFDO2dCQUNoRCxNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztnQkFDeEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLEVBQUUsK0JBQStCLENBQUM7Z0JBQzNFLFNBQVMsRUFBRSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7YUFDMUQsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLDRCQUE0QixFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUFDO29CQUNoRCxNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztvQkFDeEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7b0JBQzFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQztpQkFDaEQsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUkscUJBQUcsQ0FBQyxlQUFlLENBQUM7b0JBQ2hELE1BQU0sRUFBRSxxQkFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUN4QixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FBQztpQkFDdkIsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUkscUJBQUcsQ0FBQyxlQUFlLENBQUM7b0JBQ2hELE1BQU0sRUFBRSxxQkFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUN4QixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQztvQkFDMUYsU0FBUyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsWUFBWSxVQUFVLENBQUM7aUJBQ3JELENBQUMsQ0FBQyxDQUFDO1lBQ04sQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUFDO29CQUNoRCxNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztvQkFDeEIsT0FBTyxFQUFFLENBQUMsaUNBQWlDLEVBQUUsZ0RBQWdELENBQUM7b0JBQzlGLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQztpQkFDcEIsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUFDO29CQUNoRCxNQUFNLEVBQUUscUJBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztvQkFDeEIsT0FBTyxFQUFFLENBQUMsMEJBQTBCLEVBQUUseUJBQXlCLENBQUM7b0JBQ2hFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFjLEVBQVksRUFBRSxDQUFDLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RSxTQUFTLEVBQUUsSUFBSSxxQkFBRyxDQUFDLGtCQUFrQixDQUNuQyxJQUFJLHFCQUFHLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsRUFDaEQsSUFBSSxxQkFBRyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLENBQ3JEO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLHFCQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDBDQUEwQyxDQUFDO2FBQ3ZGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsOEVBQThFO1FBQzlFLGlGQUFpRjtRQUNqRixpRkFBaUY7UUFDakYsMEJBQTBCO1FBQzFCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBRTVJLDJEQUEyRDtRQUMzRCxJQUFJLFNBQTJELENBQUM7UUFDaEUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2pHLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFFRCxJQUFJLFFBQTBELENBQUM7UUFDL0QsSUFBSSxLQUFLLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSw0RUFBNEU7UUFDNUUsdUVBQXVFO1FBQ3ZFLHdFQUF3RTtRQUN4RSw0REFBNEQ7UUFDNUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsRUFBRTtnQkFBRSxTQUFTO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQWdDLENBQUM7WUFDeEUsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQzVFLENBQUM7UUFDSCxDQUFDO1FBRUQsOEVBQThFO1FBQzlFLDBFQUEwRTtRQUMxRSxnRkFBZ0Y7UUFDaEYsTUFBTSxjQUFjLEdBQXVCLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsZUFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFFckcsNEVBQTRFO1FBQzVFLDhFQUE4RTtRQUM5RSxNQUFNLDBCQUEwQixHQUFHLEtBQUssQ0FBQywwQkFBMEIsSUFBSSw0QkFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFFM0csTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUF3QyxFQUFFLFdBQW9CLEVBQWlDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZILG9CQUFvQixFQUFFLDRCQUFVLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCO1lBQ3ZFLGNBQWMsRUFBRSwwQkFBMEI7WUFDMUMsdURBQXVEO1lBQ3ZELFdBQVcsRUFBRSw0QkFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0I7WUFDcEQsV0FBVyxFQUFFLENBQUM7b0JBQ1osZUFBZSxFQUFFLEVBQUUsQ0FBQyxjQUFjO29CQUNsQyx3RUFBd0U7b0JBQ3hFLHdFQUF3RTtvQkFDeEUsd0VBQXdFO29CQUN4RSxxRUFBcUU7b0JBQ3JFLHdFQUF3RTtvQkFDeEUsdUVBQXVFO29CQUN2RSwyRUFBMkU7b0JBQzNFLHdFQUF3RTtvQkFDeEUsb0VBQW9FO29CQUNwRSxTQUFTLEVBQUUsNEJBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjO29CQUN4RCxXQUFXLEVBQUUsV0FBVztpQkFDekIsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbkcsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLG1CQUFtQixHQUErQztnQkFDdEUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUU7YUFDckYsQ0FBQztZQUNGLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekcsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEcsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw0QkFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO2dCQUNwRSxXQUFXLEVBQUUsNEJBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVztnQkFDL0Msc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixJQUFJLDRCQUFVLENBQUMsc0JBQXNCLENBQUMsYUFBYTtnQkFDdkcsZUFBZSxFQUFFO29CQUNmLEdBQUcsS0FBSyxDQUFDLGVBQWdCO29CQUN6QixvQkFBb0IsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQ2xELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEVBQ3JGLEtBQUssQ0FBQyxlQUFnQixDQUFDLG9CQUFvQixDQUM1QztpQkFDRjtnQkFDRCxtQkFBbUIsRUFBRSxtQkFBbUI7Z0JBQ3hDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFZO2dCQUMvQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7Z0JBQ3hCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxZQUFZO2dCQUMxRCxjQUFjLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMscUJBQXFCLElBQUksYUFBYSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDM0ksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMscUJBQXFCLElBQUksYUFBYSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtpQkFDNUksQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNQLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FDaEIsV0FBbUIsRUFDbkIsTUFBMEIsRUFDMUIsVUFBcUMsRUFBRTtRQUV2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFO1lBQ2pELEdBQUcsT0FBTyxDQUFDLGVBQWU7WUFDMUIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUNsRCxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQzNFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQzlDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0sseUJBQXlCLENBQy9CLElBQXVDLEVBQ3ZDLFFBQTJDO1FBRTNDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUNyRCxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FDYiw4RUFBOEUsRUFBRSxDQUFDLFNBQVMsSUFBSTtvQkFDOUYsK0ZBQStGO29CQUMvRix3RkFBd0YsQ0FDekYsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FDWixXQUFtQixFQUNuQixNQUEwQixFQUMxQixVQUFxQyxFQUFFO1FBRXZDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyw2QkFBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDakQsVUFBVSxDQUFDLElBQUksQ0FBQyw2QkFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLDZCQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8seUJBQXlCLENBQy9CLFVBQXdCLEVBQ3hCLE1BQStCO1FBRS9CLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLDRCQUFVLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUMvSCxDQUFDO0lBRU8sb0JBQW9CLENBQzFCLFVBQXVCLEVBQ3ZCLE1BQStCO1FBRS9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFO2dCQUNyRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUN6QyxxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCO2dCQUNqRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCO2dCQUNqRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7YUFDbEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsYUFBYSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hILE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsNkJBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxJQUFJLEdBQUcsSUFBSSw0QkFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVE7Z0JBQ3ZELENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSw0QkFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRCQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pLLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSw0QkFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRCQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BKLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxVQUF1QixFQUFFLE1BQStCO1FBQy9FLE1BQU0sS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEVBQUUsYUFBYSxJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssaUNBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2RSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxjQUFjLENBQ3BCLGNBQXNCLEVBQ3RCLGVBQXVCLEVBQ3ZCLE1BQWMsRUFDZCxpQkFBeUIsRUFDekIsZUFBdUM7UUFFdkMsT0FBTztZQUNMLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLEVBQUU7WUFDRiw4QkFBOEI7WUFDOUIsc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDdEQsdUJBQXVCLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDeEQsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDM0MseUJBQXlCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUM1RCxzQkFBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN2RCxFQUFFO1lBQ0YsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQixFQUFFO1lBQ0YsRUFBRTtZQUNGLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIscUJBQXFCO1lBQ3JCLHlFQUF5RTtZQUN6RSxnQkFBZ0I7WUFDaEIsRUFBRTtZQUNGLEVBQUU7WUFDRixzQkFBc0I7WUFDdEIscUZBQXFGO1lBQ3JGLG1GQUFtRjtZQUNuRix3RkFBd0Y7WUFDeEYsc0JBQXNCO1lBQ3RCLDhDQUE4QztZQUM5QywwQkFBMEI7WUFDMUIsMkJBQTJCO1lBQzNCLHFGQUFxRjtZQUNyRixzQkFBc0I7WUFDdEIsRUFBRTtZQUNGLEVBQUU7WUFDRixtQkFBbUI7WUFDbkIsNkZBQTZGO1lBQzdGLFVBQVU7WUFDViw4R0FBOEc7WUFDOUcsNEJBQTRCO1lBQzVCLHlEQUF5RDtZQUN6RCxrQ0FBa0M7WUFDbEMsZ0JBQWdCO1lBQ2hCLEVBQUU7U0FDSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTyxnQkFBZ0IsQ0FDdEIsRUFBVSxFQUNWLGFBQXFCLEVBQ3JCLFFBQWdCLEVBQ2hCLElBQWUsRUFDZixlQUF3QjtRQUV4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbkUsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hILE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDL0QsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFekMsT0FBTyxJQUFJLDRCQUFVLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3hELE9BQU8sRUFBRSx3QkFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxVQUFVLEVBQUUsR0FBRztZQUNmLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLHdCQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3JDLHFFQUFxRTtnQkFDckUsMEVBQTBFO2dCQUMxRSwyRUFBMkU7Z0JBQzNFLG1FQUFtRTtnQkFDbkUsU0FBUyxFQUFFLElBQUEsb0NBQW9CLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUM7Z0JBQ3BFLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07Z0JBQ3hDLFFBQVEsRUFBRTtvQkFDUixLQUFLLEVBQUU7d0JBQ0wsU0FBUyxDQUFDLFNBQWlCOzRCQUN6QixJQUFJLGNBQWMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3BELEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUM1RCxDQUFDOzRCQUNELEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dDQUM3QyxJQUFJLElBQUksS0FBSyxrQkFBa0I7b0NBQUUsU0FBUztnQ0FDMUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RixDQUFDOzRCQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDeEUsT0FBTyxJQUFJLENBQUM7d0JBQ2QsQ0FBQztxQkFDRjtvQkFDRCxLQUFLLEVBQUUsd0JBQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWE7b0JBQy9DLE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsSUFBSTt3QkFDWiw0SUFBNEk7cUJBQzdJO29CQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztpQkFDakY7YUFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBcGRELGtEQW9kQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIgYXMgYWNtLFxuICBhd3NfY2xvdWRmcm9udCBhcyBjbG91ZGZyb250LFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX3NzbSBhcyBzc20sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBFeHRlbnNpb24sIEV4dGVuc2lvbkNvbmZpZywgQWRkQmVoYXZpb3JPcHRpb25zLCBSb2xlTWF0Y2hNb2RlIH0gZnJvbSAnLi9zZWN1cmVkQ2xvdWRGcm9udCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNvbXBvc2VyIH0gZnJvbSAnLi4vY2xvdWRmcm9udC1mdW5jdGlvbnMvZnVuY3Rpb24tY29tcG9zZXInO1xuaW1wb3J0IHsgY29tcHV0ZUVkZ2VBc3NldEhhc2ggfSBmcm9tICcuLi9lZGdlQXNzZXRIYXNoJztcblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIENvZ25pdG9DdXN0b21VaUF1dGh9LlxuICpcbiAqIENvbmZpZ3VyZXMgY3VzdG9tZXIgYXV0aGVudGljYXRpb24gZm9yIGEgc3RvcmVmcm9udCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICogdXNpbmcgQVdTIENvZ25pdG8gd2l0aCBhIGZpcnN0LXBhcnR5IChjdXN0b20pIGxvZ2luIFVJLiBVbmF1dGhlbnRpY2F0ZWRcbiAqIHJlcXVlc3RzIHRvIHByb3RlY3RlZCBwYXRocyBhcmUgcmVkaXJlY3RlZCB0byB7QGxpbmsgdW5hdXRoZW50aWNhdGVkUmVkaXJlY3RQYXRofVxuICogb24gdGhlIGJyYW5kJ3Mgb3duIGRvbWFpbiDigJQgbmV2ZXIgdG8gYSBDb2duaXRvIGhvc3RlZCBVSS4gVGhlIGxvZ2luIHBhZ2VcbiAqIHBlcmZvcm1zIFNSUCBjbGllbnQtc2lkZSBhbmQgUE9TVHMgdGhlIHJlc3VsdGluZyB0b2tlbnMgdG8gdGhlIHNlc3Npb24taXNzdWFuY2VcbiAqIGVuZHBvaW50OyBDb2duaXRvIHRva2VucyBhcmUgbmV2ZXIgc3RvcmVkIGluIHRoZSBicm93c2VyLlxuICpcbiAqIFRoZSBiYWNrZW5kICh1c2VyIHBvb2wsIEhNQUMga2V5LCBhdXRoIHRhYmxlLCBLVlMsIGNvbmZpZyBzZWNyZXQpIGlzIHByb3ZpZGVkXG4gKiBieSB7QGxpbmsgQ29nbml0b0F1dGhJbmZyYXN0cnVjdHVyZX0gYW5kIHJlZmVyZW5jZWQgaGVyZSB2aWEgU1NNIHBhcmFtZXRlcnNcbiAqIHdyaXR0ZW4gdW5kZXIge0BsaW5rIGF1dGhTc21QYXJhbVByZWZpeH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0N1c3RvbVVpQXV0aFByb3BzPFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBDUkVBVEUgTU9ERTogZGVmYXVsdCBjYWNoZSBiZWhhdmlvdXIgZm9yIGEgZGlzdHJpYnV0aW9uIHRoaXMgY29uc3RydWN0IHdpbGxcbiAgICogY3JlYXRlLiBQcm92aWRlIHdpdGgge0BsaW5rIGNlcnRpZmljYXRlfS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGhcbiAgICoge0BsaW5rIGRpc3RyaWJ1dGlvbn0uIFlvdSBNQVkgc2V0IGBmdW5jdGlvbkFzc29jaWF0aW9uc2AgaGVyZSAoZS5nLiBhXG4gICAqIGdlby1yb3V0aW5nIHZpZXdlci1yZXF1ZXN0IGZ1bmN0aW9uKSDigJQgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIGF1dGgtY2hlY2tcbiAgICogZnVuY3Rpb247IENsb3VkRnJvbnQncyBvbmUtZnVuY3Rpb24tcGVyLWV2ZW50LXR5cGUgcnVsZSBpcyBlbmZvcmNlZCB3aXRoIGFcbiAgICogY2xlYXIgZXJyb3IgcmF0aGVyIHRoYW4gYW4gTDEgb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QmVoYXZpb3I/OiBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucztcbiAgLyoqIERvbWFpbiBuYW1lcyBmb3IgdGhlIGF1dGggY29uZmlnIChhbGxvd2VkX2RvbWFpbnMpOyBmaXJzdCBpcyBjYW5vbmljYWwuIFJlcXVpcmVkIGluIGJvdGggbW9kZXMuICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNoYXJlZCBzZXNzaW9uIGNvbmZpZyBzZWNyZXQgdGhlIGVkZ2UgTGFtYmRhcyBmZXRjaCBieSBuYW1lLlxuICAgKiBNVVNUIG1hdGNoIHRoZSBuYW1lIHRoZSB7QGxpbmsgQ29nbml0b1Nlc3Npb25CYWNrZW5kfSBjcmVhdGVkIGl0IHVuZGVyLlxuICAgKiBPdmVycmlkZSB0byBkZWNvdXBsZSBmcm9tIHRoZSBjYW5vbmljYWwgZG9tYWluLlxuICAgKiBAZGVmYXVsdCBgY2xvdWRmcm9udC1hdXRoLWNvbmZpZy0ke2RvbWFpbk5hbWVzWzBdfWBcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ1NlY3JldE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDUkVBVEUgTU9ERTogQUNNIGNlcnRpZmljYXRlICh1cy1lYXN0LTEpIGNvdmVyaW5nIHtAbGluayBkb21haW5OYW1lc30uICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogYWNtLklDZXJ0aWZpY2F0ZTtcbiAgLyoqIENSRUFURSBNT0RFOiBXQUYgd2ViIEFDTCBBUk4gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNyZWF0ZWQgZGlzdHJpYnV0aW9uLiAqL1xuICByZWFkb25seSB3ZWJBY2xJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEFUVEFDSCBNT0RFOiBhbiBleGlzdGluZyBkaXN0cmlidXRpb24gdG8gYWRkIHRoZSBhdXRoIGVuZHBvaW50ICsgcHJvdGVjdGVkXG4gICAqIGJlaGF2aW91cnMgdG8sIGluc3RlYWQgb2YgY3JlYXRpbmcgb25lLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgKiB7QGxpbmsgZGVmYXVsdEJlaGF2aW9yfS97QGxpbmsgY2VydGlmaWNhdGV9LiBDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLCBzbyB0aGUgYXV0aC1jaGVjayBpcyBhZGRlZCB0byBwcm90ZWN0ZWRcbiAgICogUEFUSCBiZWhhdmlvdXJzICh2aWEge0BsaW5rIHByb3RlY3R9KSDigJQgaXQgaXMgTk9UIGZvcmNlZCBvbnRvIHRoZSBleGlzdGluZ1xuICAgKiBkZWZhdWx0IGJlaGF2aW91ci4gVXNlIHtAbGluayBhdXRoRnVuY3Rpb259IHRvIGNvbXBvc2UgaXQgdGhlcmUgeW91cnNlbGYuXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb24/OiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE9yaWdpbiBmb3IgdGhlIGF1dGggZW5kcG9pbnQgYmVoYXZpb3VycyAoaXNzdWFuY2UgLyByZWZyZXNoIC8gbG9nb3V0KS4gVGhlc2VcbiAgICogZW5kcG9pbnRzIGFyZSBnZW5lcmF0ZWQgZW50aXJlbHkgYnkgTGFtYmRhQEVkZ2UgYW5kIG5ldmVyIHJlYWNoIHRoZSBvcmlnaW4sXG4gICAqIGJ1dCBhIENsb3VkRnJvbnQgYmVoYXZpb3VyIHN0aWxsIHJlcXVpcmVzIG9uZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIHtAbGluayBkZWZhdWx0QmVoYXZpb3J9IG9yaWdpbi4gU2V0IHRoaXMgdG8gYSBOT04tVlBDIG9yaWdpblxuICAgKiAoZm9yIGV4YW1wbGUgYW4gUzMgb3JpZ2luIGFscmVhZHkgb24gdGhlIGRpc3RyaWJ1dGlvbikgd2hlbiB0aGUgZGVmYXVsdFxuICAgKiBiZWhhdmlvdXIncyBvcmlnaW4gaXMgYSBDbG91ZEZyb250IFZQQyBvcmlnaW46IEFXUyBkb2VzIG5vdCBhbGxvdyBhblxuICAgKiBvcmlnaW4tcmVxdWVzdCBMYW1iZGFARWRnZSBhc3NvY2lhdGlvbiBvbiBhIFZQQy1vcmlnaW4gYmVoYXZpb3VyLCBhbmQgdGhlc2VcbiAgICogZW5kcG9pbnRzIHJ1biBhdCBvcmlnaW4tcmVxdWVzdC4gUkVRVUlSRUQgaW4gQVRUQUNIIE1PREUgKHdoZW5cbiAgICoge0BsaW5rIGRpc3RyaWJ1dGlvbn0gaXMgc2V0KS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhFbmRwb2ludE9yaWdpbj86IGNsb3VkZnJvbnQuSU9yaWdpbjtcbiAgLyoqXG4gICAqIFNTTSBwYXJhbWV0ZXIgcHJlZml4IHVuZGVyIHdoaWNoIHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfSBwdWJsaXNoZWRcbiAgICogYGNvbmZpZ1NlY3JldEFybmAsIGBrbXNLZXlBcm5gLCBgYXV0aFRhYmxlQXJuYCwgYGt2c0FybmAsIGBjb2duaXRvRG9tYWluYCxcbiAgICogYGNsaWVudElkYCBhbmQgYHVzZXJQb29sSWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aFNzbVBhcmFtUHJlZml4OiBzdHJpbmc7XG4gIC8qKiBSZWdpb24gdGhlIGF1dGggYmFja2VuZCAoY29uZmlnIHNlY3JldCwgYXV0aCB0YWJsZSkgbGl2ZXMgaW4uICovXG4gIHJlYWRvbmx5IGF1dGhSZWdpb246IHN0cmluZztcbiAgLyoqIEZpcnN0LXBhcnR5IHBhdGggdW5hdXRoZW50aWNhdGVkIHVzZXJzIGFyZSByZWRpcmVjdGVkIHRvLiBAZGVmYXVsdCAnL2xvZ2luJyAqL1xuICByZWFkb25seSB1bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBFeHRlbnNpb25zIGFwcGxpZWQgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3VyLiBAZGVmYXVsdCBbXSAocHVibGljKSAqL1xuICByZWFkb25seSBkZWZhdWx0RXh0ZW5zaW9ucz86IEV4dGVuc2lvbltdO1xuICAvKiogUm9sZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeHRlbnNpb25Db25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+O1xuICAvKiogSW5qZWN0IHZhbGlkYXRlZCBpZGVudGl0eSBjbGFpbXMgYXMgb3JpZ2luIGhlYWRlcnMuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSGVhZGVySW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1hcCBvZiBvcmlnaW4gaGVhZGVyIG5hbWUgdG8gc2Vzc2lvbi1KV1QgY2xhaW0ga2V5LlxuICAgKiBAZGVmYXVsdCB7ICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJywgJ3gtY3VzdG9tZXItZW1haWwnOiAnZW1haWwnIH1cbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlckluamVjdGlvbkNsYWltcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBQYXRoIG9mIHRoZSBzZXNzaW9uLWlzc3VhbmNlIGVuZHBvaW50IChQT1NUKS4gQGRlZmF1bHQgJy9hdXRoL3Nlc3Npb24nICovXG4gIHJlYWRvbmx5IHNlc3Npb25Jc3N1YW5jZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBNb3VudCB0aGUgc2lsZW50LXJlZnJlc2ggZW5kcG9pbnQgYXQgJy9vYXV0aDIvcmVmcmVzaCcuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUmVmcmVzaEVuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqIE1vdW50IHRoZSBsb2dvdXQgZW5kcG9pbnQgYXQgJy9vYXV0aDIvbG9nb3V0JyAoUE9TVCkuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTG9nb3V0RW5kcG9pbnQ/OiBib29sZWFuO1xuICAvKiogVVJMIG9mIHRoZSBpZGVudGl0eS1saW5raW5nIGhvb2sgdGhlIGlzc3VhbmNlIGVuZHBvaW50IGNhbGxzIHRvIHJlc29sdmUgY3VzdG9tZXJfaWQuICovXG4gIHJlYWRvbmx5IGlkZW50aXR5TGlua2luZ0hvb2tVcmw6IHN0cmluZztcbiAgLyoqIFNlY3JldHMgTWFuYWdlciBBUk4gb2YgdGhlIHNoYXJlZCBzZWNyZXQgdXNlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIGhvb2suICovXG4gIHJlYWRvbmx5IGlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm4/OiBzdHJpbmc7XG4gIC8qKiBTZXNzaW9uIEpXVCBsaWZldGltZSwgc2Vjb25kcy4gQGRlZmF1bHQgMzYwMCAqL1xuICByZWFkb25seSBzZXNzaW9uVHRsU2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIFN0b3JlZCByZWZyZXNoLXRva2VuIGxpZmV0aW1lLCBkYXlzLiBAZGVmYXVsdCAzMCAqL1xuICByZWFkb25seSByZWZyZXNoVHRsRGF5cz86IG51bWJlcjtcbiAgLyoqIFBhdGggdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9nb3V0LiBAZGVmYXVsdCAnLycgKi9cbiAgcmVhZG9ubHkgcG9zdExvZ291dFJlZGlyZWN0UGF0aD86IHN0cmluZztcbiAgLyoqIEFkZCBTUEEgY3VzdG9tIGVycm9yIHJlc3BvbnNlcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRXJyb3JSZXNwb25zZXM/OiBib29sZWFuO1xuICAvKiogRXJyb3IgcGFnZSBwYXRoIHdoZW4ge0BsaW5rIGVuYWJsZUVycm9yUmVzcG9uc2VzfSBpcyBzZXQuIEBkZWZhdWx0ICcvZXJyb3IuaHRtbCcgKi9cbiAgcmVhZG9ubHkgZXJyb3JSZXNwb25zZVBhZ2VQYXRoPzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCByb290IG9iamVjdC4gQGRlZmF1bHQgJ2luZGV4Lmh0bWwnICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSb290T2JqZWN0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQ1JFQVRFIE1PREU6IG1pbmltdW0gVExTIHNlY3VyaXR5IHBvbGljeSBmb3IgdGhlIGNyZWF0ZWQgZGlzdHJpYnV0aW9uJ3NcbiAgICogdmlld2VyIGNvbm5lY3Rpb25zLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudC1nZW5lcmF0aW9uIHBvbGljeTsgb3ZlcnJpZGUgb25seVxuICAgKiB0byByZWxheCBpdCAobm90IHJlY29tbWVuZGVkKS4gSWdub3JlZCBpbiBBVFRBQ0ggTU9ERSDigJQgdGhlIHBhc3NlZC1pblxuICAgKiBkaXN0cmlidXRpb24gYWxyZWFkeSBmaXhlcyBpdHMgb3duIHBvbGljeS5cbiAgICogQGRlZmF1bHQgY2xvdWRmcm9udC5TZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjVcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Qcm90b2NvbFZlcnNpb24/OiBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2w7XG4gIC8qKlxuICAgKiBBbGxvd2VkIHZpZXdlciBIVFRQIG1ldGhvZHMgZm9yIHRoZSBhdXRoIGVuZHBvaW50IGJlaGF2aW91cnMgKHNlc3Npb25cbiAgICogaXNzdWFuY2UsIHJlZnJlc2gsIGxvZ291dCkuIFRoZXNlIGVuZHBvaW50cyBhcmUgUE9TVC1kcml2ZW4sIHNvIHRoZSBkZWZhdWx0XG4gICAqIHBlcm1pdHMgYWxsIG1ldGhvZHM7IENsb3VkRnJvbnQncyBHRVQvSEVBRCBkZWZhdWx0IHdvdWxkIG90aGVyd2lzZSByZWplY3QgdGhlXG4gICAqIFBPU1QgdGhleSByZXF1aXJlLiBPdmVycmlkZSB0byBuYXJyb3cgaXQgKG11c3Qgc3RpbGwgaW5jbHVkZSBQT1NUKS5cbiAgICogQGRlZmF1bHQgY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcy5BTExPV19BTExcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzPzogY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcztcbn1cblxuLyoqXG4gKiBDdXN0b21lciBhdXRoZW50aWNhdGlvbiBmb3IgYSBzdG9yZWZyb250IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHVzaW5nIENvZ25pdG9cbiAqIHdpdGggYSBjdXN0b20sIGJyYW5kLWRvbWFpbiBsb2dpbiBVSS5cbiAqXG4gKiBPV05TIChpbiB0aGlzIGxpYnJhcnkpOiB0aGUgZWRnZSBzZXNzaW9uLXZhbGlkYXRpb24gZnVuY3Rpb24gKHJldXNlZCBzaGFyZWRcbiAqIG1vZHVsZSwgcmVkaXJlY3RpbmcgdG8gYSBmaXJzdC1wYXJ0eSAvbG9naW4pLCB0aGUgc2Vzc2lvbi1pc3N1YW5jZSAvIHJlZnJlc2ggL1xuICogbG9nb3V0IExhbWJkYUBFZGdlIGZ1bmN0aW9ucywgYW5kIHRoZWlyIElBTSB3aXJpbmcuIENPTlNVTUVTOiB0aGUgQ29nbml0b1xuICogYmFja2VuZCBmcm9tIHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfS4gRG9lcyBOT1QgcHJvdmlzaW9uIHRoZSB1c2VyXG4gKiBwb29sIOKAlCB0aGF0IGlzIHRoZSBiYWNrZW5kIGNvbnN0cnVjdCdzIGpvYi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9DdXN0b21VaUF1dGg8VFJvbGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VyOiBGdW5jdGlvbkNvbXBvc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VkRnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBjbG91ZGZyb250LkZ1bmN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBrdnM6IGNsb3VkZnJvbnQuSUtleVZhbHVlU3RvcmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5SZWRpcmVjdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVIZWFkZXJJbmplY3Rpb246IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVJlZnJlc2g6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdENyZWF0ZWRGdW5jdGlvbjogY2xvdWRmcm9udC5GdW5jdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvQ3VzdG9tVWlBdXRoUHJvcHM8VFJvbGU+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGF0dGFjaE1vZGUgPSBwcm9wcy5kaXN0cmlidXRpb24gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoYXR0YWNoTW9kZSAmJiAhcHJvcHMuYXV0aEVuZHBvaW50T3JpZ2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhFbmRwb2ludE9yaWdpbiBpcyByZXF1aXJlZCB3aGVuIGF0dGFjaGluZyB0byBhbiBleGlzdGluZyBkaXN0cmlidXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFhdHRhY2hNb2RlICYmICghcHJvcHMuZGVmYXVsdEJlaGF2aW9yIHx8ICFwcm9wcy5jZXJ0aWZpY2F0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVmYXVsdEJlaGF2aW9yIGFuZCBjZXJ0aWZpY2F0ZSBhcmUgcmVxdWlyZWQgd2hlbiBjcmVhdGluZyBhIGRpc3RyaWJ1dGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHAgPSBwcm9wcy5hdXRoU3NtUGFyYW1QcmVmaXg7XG4gICAgY29uc3QgY29uZmlnU2VjcmV0QXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9jb25maWdTZWNyZXRBcm5gKTtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2ttc0tleUFybmApO1xuICAgIGNvbnN0IGF1dGhUYWJsZUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0vYXV0aFRhYmxlQXJuYCk7XG4gICAgY29uc3Qga3ZzQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9rdnNBcm5gKTtcblxuICAgIHRoaXMua3ZzID0gY2xvdWRmcm9udC5LZXlWYWx1ZVN0b3JlLmZyb21LZXlWYWx1ZVN0b3JlQXJuKHRoaXMsICdLVlMnLCBrdnNBcm4pO1xuICAgIHRoaXMubG9naW5SZWRpcmVjdFBhdGggPSBwcm9wcy51bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGggPz8gJy9sb2dpbic7XG4gICAgdGhpcy5lbmFibGVIZWFkZXJJbmplY3Rpb24gPSBwcm9wcy5lbmFibGVIZWFkZXJJbmplY3Rpb24gPz8gdHJ1ZTtcbiAgICB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyA9IHByb3BzLmhlYWRlckluamVjdGlvbkNsYWltcyA/PyB7XG4gICAgICAneC1jdXN0b21lci1pZCc6ICdjdXN0b21lcl9pZCcsXG4gICAgICAneC1jdXN0b21lci1lbWFpbCc6ICdlbWFpbCcsXG4gICAgfTtcbiAgICB0aGlzLmVuYWJsZVJlZnJlc2ggPSBwcm9wcy5lbmFibGVSZWZyZXNoRW5kcG9pbnQgPz8gdHJ1ZTtcbiAgICB0aGlzLmNvbXBvc2VyID0gbmV3IEZ1bmN0aW9uQ29tcG9zZXIoKTtcbiAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgY2Fub25pY2FsRG9tYWluID0gcHJvcHMuZG9tYWluTmFtZXNbMF07XG4gICAgY29uc3QgYmFzZVNlY3JldE5hbWUgPSBwcm9wcy5jb25maWdTZWNyZXROYW1lID8/IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7Y2Fub25pY2FsRG9tYWlufWA7XG4gICAgY29uc3Qgc2Vzc2lvbklzc3VhbmNlUGF0aCA9IHByb3BzLnNlc3Npb25Jc3N1YW5jZVBhdGggPz8gJy9hdXRoL3Nlc3Npb24nO1xuXG4gICAgLy8gRXh0cmEgY29uZmlnIHNlY3JldCBmb3IgdmFsdWVzIHRoYXQgYXJlIENESyB0b2tlbnMgYXQgc3ludGggdGltZSAoYW5kIHNvXG4gICAgLy8gY2Fubm90IGJlIGJha2VkIGludG8gY29uZmlnX2dlbmVyYXRlZC5weSkg4oCUIExhbWJkYUBFZGdlIGZvcmJpZHMgZW52IHZhcnMuXG4gICAgLy8gQmFrZSB0aGUgTElURVJBTCBuYW1lIGJlbG93LCBOT1QgYGV4dHJhQ29uZmlnU2VjcmV0LnNlY3JldE5hbWVgOiB0aGF0XG4gICAgLy8gcHJvcGVydHkgaXMgYSBkZXBsb3ktdGltZSB0b2tlbiAoQ2xvdWRGb3JtYXRpb24gZGVyaXZlcyBpdCBieSBwYXJzaW5nIHRoZVxuICAgIC8vIHNlY3JldCBBUk4pLCBzbyBiYWtpbmcgaXQgaW50byBjb25maWdfZ2VuZXJhdGVkLnB5IGF0IHN5bnRoIHJlbmRlcnMgaXQgYXNcbiAgICAvLyBgJHtUb2tlbltGbjo6Sm9pbi5OTk5OXX1gLiBUaGUgZWRnZSdzIGBnZXRfc2VjcmV0X3ZhbHVlKFNlY3JldElkPS4uLilgXG4gICAgLy8gdGhlbiBmYWlscyB3aXRoIGBWYWxpZGF0aW9uRXhjZXB0aW9uOiBJbnZhbGlkIG5hbWVgLCB0aGUgZXh0cmEgY29uZmlnXG4gICAgLy8gKHBvc3RfYXV0aF9ob29rX3VybCwga3ZzX2FybiwgcG9zdF9hdXRoX2hvb2tfc2VjcmV0X2FybikgbmV2ZXIgbG9hZHMsIGFuZFxuICAgIC8vIHRoZSBpZGVudGl0eS1saW5raW5nIGhvb2sgaXMgc2lsZW50bHkgbmV2ZXIgY2FsbGVkLlxuICAgIGNvbnN0IGV4dHJhQ29uZmlnU2VjcmV0TmFtZSA9IGBjbG91ZGZyb250LWN1c3RvbXVpLWNvbmZpZy0ke2Nhbm9uaWNhbERvbWFpbn1gO1xuICAgIGNvbnN0IGV4dHJhQ29uZmlnU2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCAnQ3VzdG9tVWlDb25maWdTZWNyZXQnLCB7XG4gICAgICBzZWNyZXROYW1lOiBleHRyYUNvbmZpZ1NlY3JldE5hbWUsXG4gICAgICBzZWNyZXRPYmplY3RWYWx1ZToge1xuICAgICAgICBrdnNfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChrdnNBcm4pLFxuICAgICAgICBwb3N0X2F1dGhfaG9va191cmw6IGNvcmUuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tVcmwpLFxuICAgICAgICBwb3N0X2F1dGhfaG9va19zZWNyZXRfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuID8/ICcnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogYEN1c3RvbS1VSSBhdXRoIGNvbmZpZyBvdmVycmlkZXMgZm9yICR7Y2Fub25pY2FsRG9tYWlufWAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGF0aWNPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBsb2dpbl9yZWRpcmVjdF9wYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgYWxsb3dlZF9kb21haW5zOiBKU09OLnN0cmluZ2lmeShwcm9wcy5kb21haW5OYW1lcyksXG4gICAgICBzZXNzaW9uX3R0bF9zZWNvbmRzOiBTdHJpbmcocHJvcHMuc2Vzc2lvblR0bFNlY29uZHMgPz8gMzYwMCksXG4gICAgICByZWZyZXNoX3R0bF9kYXlzOiBTdHJpbmcocHJvcHMucmVmcmVzaFR0bERheXMgPz8gMzApLFxuICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfcGF0aDogcHJvcHMucG9zdExvZ291dFJlZGlyZWN0UGF0aCA/PyAnLycsXG4gICAgICBjb25maWdfcmVnaW9uOiBwcm9wcy5hdXRoUmVnaW9uLFxuICAgIH07XG5cbiAgICAvLyBUaGUgYmFzZSBjb25maWcgc2VjcmV0IGxpdmVzIGluIGF1dGhSZWdpb24sIGJ1dCBleHRyYUNvbmZpZ1NlY3JldCBpcyBjcmVhdGVkXG4gICAgLy8gaW4gVEhJUyBjb25zdHJ1Y3QncyBvd24gc3RhY2sgKHVzLWVhc3QtMSBmb3IgdGhlIENsb3VkRnJvbnQgZWRnZSBzdGFjaykuIFRoZVxuICAgIC8vIGVkZ2UgbXVzdCBsb29rIGVhY2ggc2VjcmV0IHVwIGluIGl0cyBvd24gcmVnaW9uLCBzbyBwYXNzIGJvdGggcmVnaW9ucyB0aHJvdWdoLlxuICAgIGNvbnN0IGV4dHJhU2VjcmV0UmVnaW9uID0gY29yZS5TdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgY29uZmlnUHkgPSB0aGlzLnJlbmRlckNvbmZpZ1B5KGJhc2VTZWNyZXROYW1lLCBleHRyYUNvbmZpZ1NlY3JldE5hbWUsIHByb3BzLmF1dGhSZWdpb24sIGV4dHJhU2VjcmV0UmVnaW9uLCBzdGF0aWNPdmVycmlkZXMpO1xuXG4gICAgLy8gU2hhcmVkIElBTSBncmFudHMgZmFjdG9yeSBmb3IgdGhlIGVkZ2UgTGFtYmRhcy5cbiAgICBjb25zdCBncmFudENvbW1vbiA9IChyb2xlOiBpYW0uSVJvbGUsIG9wdHM6IHsga21zOiBib29sZWFuOyBkZGI6IGJvb2xlYW47IGt2czogYm9vbGVhbjsgY29nbml0bzogYm9vbGVhbjsgaG9va1NlY3JldDogYm9vbGVhbiB9KTogdm9pZCA9PiB7XG4gICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJywgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0J10sXG4gICAgICAgIHJlc291cmNlczogW2NvbmZpZ1NlY3JldEFybiwgZXh0cmFDb25maWdTZWNyZXQuc2VjcmV0QXJuXSxcbiAgICAgIH0pKTtcbiAgICAgIGlmIChvcHRzLmhvb2tTZWNyZXQgJiYgcHJvcHMuaWRlbnRpdHlMaW5raW5nSG9va1NlY3JldEFybikge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgICAgIHJlc291cmNlczogW3Byb3BzLmlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5rbXMpIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsna21zOkRlY3J5cHQnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtrbXNLZXlBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5kZGIpIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnZHluYW1vZGI6R2V0SXRlbScsICdkeW5hbW9kYjpQdXRJdGVtJywgJ2R5bmFtb2RiOkRlbGV0ZUl0ZW0nLCAnZHluYW1vZGI6UXVlcnknXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFthdXRoVGFibGVBcm4sIGAke2F1dGhUYWJsZUFybn0vaW5kZXgvKmBdLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5rdnMpIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnY2xvdWRmcm9udC1rZXl2YWx1ZXN0b3JlOlB1dEtleScsICdjbG91ZGZyb250LWtleXZhbHVlc3RvcmU6RGVzY3JpYmVLZXlWYWx1ZVN0b3JlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBba3ZzQXJuXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuY29nbml0bykge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydjb2duaXRvLWlkcDpJbml0aWF0ZUF1dGgnLCAnY29nbml0by1pZHA6UmV2b2tlVG9rZW4nXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGVkZ2VSb2xlID0gKHJvbGVJZDogc3RyaW5nKTogaWFtLlJvbGUgPT4gbmV3IGlhbS5Sb2xlKHRoaXMsIHJvbGVJZCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2VkZ2VsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBTZXNzaW9uLWlzc3VhbmNlIExhbWJkYTogdmVyaWZpZXMgdGhlIENvZ25pdG8gaWRfdG9rZW4gd2l0aCB0aGUgcHVyZS1QeXRob25cbiAgICAvLyBgcnNhYCBsaWJyYXJ5LCBidW5kbGVkIGZyb20gaXRzIG93biBjb2duaXRvLWN1c3RvbXVpLXNlc3Npb24gZGVwcyBkaXIgKE5PVCB0aGVcbiAgICAvLyBmYXQgUHlKV1QvY3J5cHRvZ3JhcGh5IGNvZ25pdG8tYXV0aCBidW5kbGUpIHNvIGl0IGZpdHMgdGhlIDEgTUIgdmlld2VyLXJlcXVlc3RcbiAgICAvLyBMYW1iZGFARWRnZSBjb2RlIGxpbWl0LlxuICAgIGNvbnN0IGlzc3VhbmNlUm9sZSA9IGVkZ2VSb2xlKCdJc3N1YW5jZVJvbGUnKTtcbiAgICBncmFudENvbW1vbihpc3N1YW5jZVJvbGUsIHsga21zOiB0cnVlLCBkZGI6IHRydWUsIGt2czogZmFsc2UsIGNvZ25pdG86IGZhbHNlLCBob29rU2VjcmV0OiB0cnVlIH0pO1xuICAgIGNvbnN0IGlzc3VhbmNlRm4gPSB0aGlzLm1ha2VFZGdlRnVuY3Rpb24oJ1Nlc3Npb25Jc3N1YW5jZScsICdjb2duaXRvLWN1c3RvbXVpLXNlc3Npb24nLCBjb25maWdQeSwgaXNzdWFuY2VSb2xlLCAnY29nbml0by1jdXN0b211aS1zZXNzaW9uJyk7XG5cbiAgICAvLyBSZWZyZXNoICsgbG9nb3V0IExhbWJkYXMgKGJvdG8zIG9ubHkg4oCUIG5vIGJ1bmRsZWQgZGVwcykuXG4gICAgbGV0IHJlZnJlc2hGbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmVuYWJsZVJlZnJlc2gpIHtcbiAgICAgIGNvbnN0IHJlZnJlc2hSb2xlID0gZWRnZVJvbGUoJ1JlZnJlc2hSb2xlJyk7XG4gICAgICBncmFudENvbW1vbihyZWZyZXNoUm9sZSwgeyBrbXM6IHRydWUsIGRkYjogdHJ1ZSwga3ZzOiBmYWxzZSwgY29nbml0bzogdHJ1ZSwgaG9va1NlY3JldDogZmFsc2UgfSk7XG4gICAgICByZWZyZXNoRm4gPSB0aGlzLm1ha2VFZGdlRnVuY3Rpb24oJ1Nlc3Npb25SZWZyZXNoJywgJ2NvZ25pdG8tY3VzdG9tdWktcmVmcmVzaCcsIGNvbmZpZ1B5LCByZWZyZXNoUm9sZSk7XG4gICAgfVxuXG4gICAgbGV0IGxvZ291dEZuOiBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmVuYWJsZUxvZ291dEVuZHBvaW50ID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvZ291dFJvbGUgPSBlZGdlUm9sZSgnTG9nb3V0Um9sZScpO1xuICAgICAgZ3JhbnRDb21tb24obG9nb3V0Um9sZSwgeyBrbXM6IHRydWUsIGRkYjogdHJ1ZSwga3ZzOiB0cnVlLCBjb2duaXRvOiB0cnVlLCBob29rU2VjcmV0OiBmYWxzZSB9KTtcbiAgICAgIGxvZ291dEZuID0gdGhpcy5tYWtlRWRnZUZ1bmN0aW9uKCdTZXNzaW9uTG9nb3V0JywgJ2NvZ25pdG8tY3VzdG9tdWktbG9nb3V0JywgY29uZmlnUHksIGxvZ291dFJvbGUpO1xuICAgIH1cblxuICAgIC8vIFJldGFpbiBvbGQgTGFtYmRhQEVkZ2UgdmVyc2lvbnMgb24gYSByZWFsIHVwZGF0ZS9kZWxldGUg4oCUIGVkZ2UgcmVwbGljYXNcbiAgICAvLyB0YWtlIGhvdXJzIHRvIGRyYWluIOKAlCBidXQgbGV0IENsb3VkRm9ybWF0aW9uIGRlbGV0ZSBhIHZlcnNpb24gd2hvc2VcbiAgICAvLyBDUkVBVEUgd2FzIHJvbGxlZCBiYWNrIChSZXRhaW5FeGNlcHRPbkNyZWF0ZSkuIEEgcGxhaW4gUkVUQUlOIG9ycGhhbnMgdGhlXG4gICAgLy8gdmVyc2lvbiAoYW5kLCB0aHJvdWdoIGl0LCB0aGUgZnVuY3Rpb24gYW5kIGl0cyBJQU0gcm9sZSkgb24gYSBmYWlsZWRcbiAgICAvLyBjcmVhdGUsIGJsb2NraW5nIHRoZSBuZXh0IGRlcGxveSdzIGltcG9ydDsgUkVUQUlOX09OX1VQREFURV9PUl9ERUxFVEVcbiAgICAvLyBrZWVwcyB0aGUgZHJhaW4tc2FmZSByZXRhaW4gYmVoYXZpb3VyIHdpdGhvdXQgdGhlIG9ycGhhbi5cbiAgICBmb3IgKGNvbnN0IGZuIG9mIFtpc3N1YW5jZUZuLCByZWZyZXNoRm4sIGxvZ291dEZuXSkge1xuICAgICAgaWYgKCFmbikgY29udGludWU7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gZm4uY3VycmVudFZlcnNpb24ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29yZS5DZm5SZXNvdXJjZTtcbiAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgIHZlcnNpb24uYXBwbHlSZW1vdmFsUG9saWN5KGNvcmUuUmVtb3ZhbFBvbGljeS5SRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW5kcG9pbnQgYmVoYXZpb3VycyB1c2UgYXV0aEVuZHBvaW50T3JpZ2luIHdoZW4gc3VwcGxpZWQgKGEgbm9uLVZQQyBvcmlnaW4sXG4gICAgLy8gcmVxdWlyZWQgd2hlbiB0aGUgZGVmYXVsdCBiZWhhdmlvdXIncyBvcmlnaW4gaXMgYSBWUEMgb3JpZ2luKSwgZWxzZSB0aGVcbiAgICAvLyBkZWZhdWx0IGJlaGF2aW91cidzIG9yaWdpbi4gQXR0YWNoIG1vZGUgZ3VhcmFudGVlcyBhdXRoRW5kcG9pbnRPcmlnaW4gaXMgc2V0LlxuICAgIGNvbnN0IGVuZHBvaW50T3JpZ2luOiBjbG91ZGZyb250LklPcmlnaW4gPSBwcm9wcy5hdXRoRW5kcG9pbnRPcmlnaW4gPz8gcHJvcHMuZGVmYXVsdEJlaGF2aW9yIS5vcmlnaW47XG5cbiAgICAvLyBBdXRoIGVuZHBvaW50cyBhcmUgUE9TVC1kcml2ZW47IENsb3VkRnJvbnQgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIEdFVC9IRUFEXG4gICAgLy8gYW5kIHJlamVjdHMgdGhlIFBPU1QgdGhlc2UgZW5kcG9pbnRzIHJlcXVpcmUuIEFsbG93IGFsbCBtZXRob2RzIGJ5IGRlZmF1bHQuXG4gICAgY29uc3QgYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHMgPSBwcm9wcy5hdXRoRW5kcG9pbnRBbGxvd2VkTWV0aG9kcyA/PyBjbG91ZGZyb250LkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTDtcblxuICAgIGNvbnN0IGVuZHBvaW50T3B0cyA9IChmbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uLCBpbmNsdWRlQm9keTogYm9vbGVhbik6IGNsb3VkZnJvbnQuQWRkQmVoYXZpb3JPcHRpb25zID0+ICh7XG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgIGFsbG93ZWRNZXRob2RzOiBhdXRoRW5kcG9pbnRBbGxvd2VkTWV0aG9kcyxcbiAgICAgIC8vIFNldC1Db29raWUgbXVzdCByZWFjaCB0aGUgdmlld2VyIOKAlCBjYWNoaW5nIGRpc2FibGVkLlxuICAgICAgY2FjaGVQb2xpY3k6IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgIGVkZ2VMYW1iZGFzOiBbe1xuICAgICAgICBmdW5jdGlvblZlcnNpb246IGZuLmN1cnJlbnRWZXJzaW9uLFxuICAgICAgICAvLyBWaWV3ZXItcmVxdWVzdDogdGhlc2UgZnVuY3Rpb25zIGdlbmVyYXRlIHRoZSByZXNwb25zZSBlbnRpcmVseSBhdCB0aGVcbiAgICAgICAgLy8gZWRnZSBhbmQgbmV2ZXIgY29udGFjdCB0aGUgb3JpZ2luLiBWaWV3ZXItcmVxdWVzdCBmaXJlcyByZWxpYWJseSBvbiBhXG4gICAgICAgIC8vIGNhY2hlIG1pc3MgcmVnYXJkbGVzcyBvZiBvcmlnaW4gdHlwZSAodW5saWtlIG9yaWdpbi1yZXF1ZXN0LCB3aGljaCBpc1xuICAgICAgICAvLyBpbGxlZ2FsIG9uIGEgVlBDLW9yaWdpbiBiZWhhdmlvdXIgYW5kIOKAlCBhcyBvYnNlcnZlZCBvbiBhdHRhY2gtbW9kZVxuICAgICAgICAvLyBkaXN0cmlidXRpb25zIOKAlCBjb3VsZCBzaWxlbnRseSBmYWlsIHRvIGludGVyY2VwdCwgbGV0dGluZyB0aGUgcmVxdWVzdFxuICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gdGhlIHBsYWNlaG9sZGVyIG9yaWdpbikuIEl0IGNhcHMgY29kZSBhdCAxIE1CLCB3aGljaFxuICAgICAgICAvLyB0aGUgc2Vzc2lvbi1pc3N1YW5jZSBmdW5jdGlvbiBub3cgZml0cyBhZnRlciBkcm9wcGluZyBQeUpXVC9jcnlwdG9ncmFwaHlcbiAgICAgICAgLy8gZm9yIHRoZSBwdXJlLVB5dGhvbiBgcnNhYCBsaWJyYXJ5LiBUaGUgYmVoYXZpb3VyIHN0aWxsIG5lZWRzIGEgdGFyZ2V0XG4gICAgICAgIC8vIG9yaWdpbiAoZW5kcG9pbnRPcmlnaW4pLCBidXQgaXQgaXMgYSBuZXZlci1jb250YWN0ZWQgcGxhY2Vob2xkZXIuXG4gICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICBpbmNsdWRlQm9keTogaW5jbHVkZUJvZHksXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGlmIChhdHRhY2hNb2RlKSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IHByb3BzLmRpc3RyaWJ1dGlvbiE7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcihzZXNzaW9uSXNzdWFuY2VQYXRoLCBlbmRwb2ludE9yaWdpbiwgZW5kcG9pbnRPcHRzKGlzc3VhbmNlRm4sIHRydWUpKTtcbiAgICAgIGlmIChyZWZyZXNoRm4pIHtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoJy9vYXV0aDIvcmVmcmVzaCcsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMocmVmcmVzaEZuLCBmYWxzZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGxvZ291dEZuKSB7XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvb2F1dGgyL2xvZ291dCcsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMobG9nb3V0Rm4sIHRydWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWRkaXRpb25hbEJlaGF2aW9yczogUmVjb3JkPHN0cmluZywgY2xvdWRmcm9udC5CZWhhdmlvck9wdGlvbnM+ID0ge1xuICAgICAgICBbc2Vzc2lvbklzc3VhbmNlUGF0aF06IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKGlzc3VhbmNlRm4sIHRydWUpIH0sXG4gICAgICB9O1xuICAgICAgaWYgKHJlZnJlc2hGbikge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzWycvb2F1dGgyL3JlZnJlc2gnXSA9IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKHJlZnJlc2hGbiwgZmFsc2UpIH07XG4gICAgICB9XG4gICAgICBpZiAobG9nb3V0Rm4pIHtcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9sb2dvdXQnXSA9IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKGxvZ291dEZuLCB0cnVlKSB9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbih0aGlzLCAnRGlzdHJpYnV0aW9uJywge1xuICAgICAgICBodHRwVmVyc2lvbjogY2xvdWRmcm9udC5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgICAgbWluaW11bVByb3RvY29sVmVyc2lvbjogcHJvcHMubWluaW11bVByb3RvY29sVmVyc2lvbiA/PyBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyNSxcbiAgICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgICAgLi4ucHJvcHMuZGVmYXVsdEJlaGF2aW9yISxcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5tZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgICAgICAgICAgdGhpcy5idWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKHByb3BzLmRlZmF1bHRFeHRlbnNpb25zLCBwcm9wcy5kZWZhdWx0RXh0ZW5zaW9uQ29uZmlnKSxcbiAgICAgICAgICAgIHByb3BzLmRlZmF1bHRCZWhhdmlvciEuZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczogYWRkaXRpb25hbEJlaGF2aW9ycyxcbiAgICAgICAgZG9tYWluTmFtZXM6IHByb3BzLmRvbWFpbk5hbWVzLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2VydGlmaWNhdGUhLFxuICAgICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCA/PyAnaW5kZXguaHRtbCcsXG4gICAgICAgIGVycm9yUmVzcG9uc2VzOiBwcm9wcy5lbmFibGVFcnJvclJlc3BvbnNlcyA/IFtcbiAgICAgICAgICB7IGh0dHBTdGF0dXM6IDQwMywgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLmVycm9yUmVzcG9uc2VQYWdlUGF0aCA/PyAnL2Vycm9yLmh0bWwnLCB0dGw6IGNvcmUuRHVyYXRpb24ubWludXRlcyg1KSB9LFxuICAgICAgICAgIHsgaHR0cFN0YXR1czogNDA0LCByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCwgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsIHR0bDogY29yZS5EdXJhdGlvbi5taW51dGVzKDUpIH0sXG4gICAgICAgIF0gOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBiZWhhdmlvdXIuIFBhc3MgYG9wdGlvbnMuZXh0ZW5zaW9ucyA9IFtFeHRlbnNpb24uUkVRVUlSRV9BVVRIXWAgdG9cbiAgICogcHJvdGVjdCB0aGUgcGF0aCAodW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzIHJlZGlyZWN0IHRvIHRoZSBsb2dpbiBwYWdlIGFuZFxuICAgKiB2YWxpZGF0ZWQgaWRlbnRpdHkgY2xhaW1zIGFyZSBpbmplY3RlZCBhcyBvcmlnaW4gaGVhZGVycykuXG4gICAqL1xuICBwdWJsaWMgYWRkQmVoYXZpb3IoXG4gICAgcGF0aFBhdHRlcm46IHN0cmluZyxcbiAgICBvcmlnaW46IGNsb3VkZnJvbnQuSU9yaWdpbixcbiAgICBvcHRpb25zOiBBZGRCZWhhdmlvck9wdGlvbnM8VFJvbGU+ID0ge30sXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKHBhdGhQYXR0ZXJuLCBvcmlnaW4sIHtcbiAgICAgIC4uLm9wdGlvbnMuYmVoYXZpb3JPcHRpb25zLFxuICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHRoaXMubWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICAgICAgdGhpcy5idWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKG9wdGlvbnMuZXh0ZW5zaW9ucywgb3B0aW9ucy5leHRlbnNpb25Db25maWcpLFxuICAgICAgICBvcHRpb25zLmJlaGF2aW9yT3B0aW9ucz8uZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHR3byBzZXRzIG9mIGZ1bmN0aW9uIGFzc29jaWF0aW9ucywgZW5mb3JjaW5nIENsb3VkRnJvbnQncyBydWxlIG9mIG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLiBUaGUgbGlicmFyeSBuZXZlciBjb21wb3NlcyBvciBpbnNwZWN0c1xuICAgKiBhIGNvbnN1bWVyJ3MgZnVuY3Rpb24g4oCUIGl0IG9ubHkgYXR0YWNoZXMgaXQ7IGNvbWJpbmluZyB0d28gZnVuY3Rpb25zIG9uIHRoZVxuICAgKiBzYW1lIGV2ZW50IHR5cGUgaXMgdGhlIGNvbnN1bWVyJ3MgcmVzcG9uc2liaWxpdHkgKGEgc2luZ2xlIGZ1bmN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgbWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBhdXRoPzogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10sXG4gICAgY29uc3VtZXI/OiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSxcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFsbCA9IFsuLi4oYXV0aCA/PyBbXSksIC4uLihjb25zdW1lciA/PyBbXSldO1xuICAgIGlmIChhbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxjbG91ZGZyb250LkZ1bmN0aW9uRXZlbnRUeXBlPigpO1xuICAgIGZvciAoY29uc3QgZmEgb2YgYWxsKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoZmEuZXZlbnRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsb3VkRnJvbnQgYWxsb3dzIG9ubHkgb25lIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIsIGJ1dCB0d28gJyR7ZmEuZXZlbnRUeXBlfScgYCArXG4gICAgICAgICAgJ2Z1bmN0aW9ucyB3ZXJlIHN1cHBsaWVkIChlLmcuIFJFUVVJUkVfQVVUSCBwbHVzIHlvdXIgb3duIGZ1bmN0aW9uKS4gS2VlcCBhdXRoIGFuZCB5b3VyIG90aGVyICcgK1xuICAgICAgICAgICdmdW5jdGlvbiBvbiBzZXBhcmF0ZSBwYXRoIGJlaGF2aW91cnMsIG9yIGNvbWJpbmUgdGhlbSBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIHlvdXJzZWxmLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChmYS5ldmVudFR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFBST1RFQ1RFRCBiZWhhdmlvdXI6IHVuYXV0aGVudGljYXRlZCByZXF1ZXN0cyByZWRpcmVjdCB0byB0aGUgbG9naW5cbiAgICogcGFnZSBhbmQgdmFsaWRhdGVkIGlkZW50aXR5IGNsYWltcyBhcmUgaW5qZWN0ZWQgYXMgb3JpZ2luIGhlYWRlcnMuXG4gICAqIENvbnZlbmllbmNlIHdyYXBwZXIgb3ZlciB7QGxpbmsgYWRkQmVoYXZpb3J9IHRoYXQgZW5zdXJlcyBSRVFVSVJFX0FVVEguXG4gICAqL1xuICBwdWJsaWMgcHJvdGVjdChcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luLFxuICAgIG9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT4gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IG9wdGlvbnMuZXh0ZW5zaW9ucyA/IFsuLi5vcHRpb25zLmV4dGVuc2lvbnNdIDogW107XG4gICAgaWYgKCFleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVFVSVJFX0FVVEgpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCk7XG4gICAgfVxuICAgIHRoaXMuYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwgeyAuLi5vcHRpb25zLCBleHRlbnNpb25zOiBleHRlbnNpb25zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NlZCB2aWV3ZXItcmVxdWVzdCBhdXRoLWNoZWNrIGZ1bmN0aW9uIChSRVFVSVJFX0FVVEgpLiBVc2VmdWwgaW5cbiAgICogQVRUQUNIIE1PREUgdG8gYXNzb2NpYXRlIG9yIGNvbXBvc2UgYXV0aCBvbnRvIGEgYmVoYXZpb3VyIHRoaXMgY29uc3RydWN0IGRvZXNcbiAgICogbm90IG93biDigJQgZS5nLiBhbiBleGlzdGluZyBkZWZhdWx0IGJlaGF2aW91ciwgdmlhIGFuIEwxIG92ZXJyaWRlLlxuICAgKi9cbiAgcHVibGljIGdldCBhdXRoRnVuY3Rpb24oKTogY2xvdWRmcm9udC5GdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9zZWRBdXRoRnVuY3Rpb24oW0V4dGVuc2lvbi5SRVFVSVJFX0FVVEhdKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBleHRlbnNpb25zPzogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghZXh0ZW5zaW9ucyB8fCBleHRlbnNpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIFt7IGZ1bmN0aW9uOiB0aGlzLmNvbXBvc2VkQXV0aEZ1bmN0aW9uKGV4dGVuc2lvbnMsIGNvbmZpZyksIGV2ZW50VHlwZTogY2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCB9XTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZWRBdXRoRnVuY3Rpb24oXG4gICAgZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmZ1bmN0aW9uQ2FjaGVLZXkoZXh0ZW5zaW9ucywgY29uZmlnKTtcbiAgICBsZXQgZnVuYyA9IHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIWZ1bmMpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmNvbXBvc2VyLmNvbXBvc2UoZXh0ZW5zaW9ucywgY29uZmlnLCB7XG4gICAgICAgIGxvZ2luUmVkaXJlY3RQYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgICBlbmFibGVIZWFkZXJJbmplY3Rpb246IHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uLFxuICAgICAgICBoZWFkZXJJbmplY3Rpb25DbGFpbXM6IHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zLFxuICAgICAgICBlbmFibGVSZWZyZXNoOiB0aGlzLmVuYWJsZVJlZnJlc2gsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSBgQ29tcG9zZWRGbiR7ZXh0ZW5zaW9ucy5tYXAoZSA9PiBlLnJlcGxhY2UoJ1JFUVVJUkVfJywgJycpKS5qb2luKCcnKX0ke3RoaXMuY29tcG9zZWRGdW5jdGlvbnMuc2l6ZX1gO1xuICAgICAgY29uc3QgbmVlZHNLdnMgPSBleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVFVSVJFX0FVVEgpO1xuICAgICAgZnVuYyA9IG5ldyBjbG91ZGZyb250LkZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uSWQsIG5lZWRzS3ZzXG4gICAgICAgID8geyBjb2RlOiBjbG91ZGZyb250LkZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGNvZGUpLCBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsIGNvbW1lbnQ6IGBDdXN0b20tVUk6ICR7ZXh0ZW5zaW9ucy5qb2luKCcsICcpfWAsIGtleVZhbHVlU3RvcmU6IHRoaXMua3ZzIH1cbiAgICAgICAgOiB7IGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoY29kZSksIHJ1bnRpbWU6IGNsb3VkZnJvbnQuRnVuY3Rpb25SdW50aW1lLkpTXzJfMCwgY29tbWVudDogYEN1c3RvbS1VSTogJHtleHRlbnNpb25zLmpvaW4oJywgJyl9YCB9KTtcbiAgICAgIGlmICh0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24pIHtcbiAgICAgICAgZnVuYy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbiA9IGZ1bmM7XG4gICAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zLnNldChjYWNoZUtleSwgZnVuYyk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jO1xuICB9XG5cbiAgcHJpdmF0ZSBmdW5jdGlvbkNhY2hlS2V5KGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdLCBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtleHRlbnNpb25zLnNsaWNlKCkuc29ydCgpLmpvaW4oJywnKV07XG4gICAgaWYgKGNvbmZpZz8ucmVxdWlyZWRSb2xlcykge1xuICAgICAgcGFydHMucHVzaChjb25maWcucmVxdWlyZWRSb2xlcy5zbGljZSgpLnNvcnQoKS5qb2luKCcsJykpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy5yb2xlTWF0Y2hNb2RlICYmIGNvbmZpZy5yb2xlTWF0Y2hNb2RlICE9PSBSb2xlTWF0Y2hNb2RlLk9SKSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbmZpZy5yb2xlTWF0Y2hNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29uZmlnUHkoXG4gICAgYmFzZVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBleHRyYVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBleHRyYVNlY3JldFJlZ2lvbjogc3RyaW5nLFxuICAgIHN0YXRpY092ZXJyaWRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2ltcG9ydCBqc29uJyxcbiAgICAgICdpbXBvcnQgbG9nZ2luZycsXG4gICAgICAnaW1wb3J0IGJvdG8zJyxcbiAgICAgICcnLFxuICAgICAgJ2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCknLFxuICAgICAgYEJBU0VfU0VDUkVUX05BTUUgPSAke0pTT04uc3RyaW5naWZ5KGJhc2VTZWNyZXROYW1lKX1gLFxuICAgICAgYEVYVFJBX1NFQ1JFVF9OQU1FID0gJHtKU09OLnN0cmluZ2lmeShleHRyYVNlY3JldE5hbWUpfWAsXG4gICAgICBgQ09ORklHX1JFR0lPTiA9ICR7SlNPTi5zdHJpbmdpZnkocmVnaW9uKX1gLFxuICAgICAgYEVYVFJBX1NFQ1JFVF9SRUdJT04gPSAke0pTT04uc3RyaW5naWZ5KGV4dHJhU2VjcmV0UmVnaW9uKX1gLFxuICAgICAgYFNUQVRJQ19PVkVSUklERVMgPSAke0pTT04uc3RyaW5naWZ5KHN0YXRpY092ZXJyaWRlcyl9YCxcbiAgICAgICcnLFxuICAgICAgJ19zbSA9IE5vbmUnLFxuICAgICAgJ19zbV9leHRyYSA9IE5vbmUnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICdkZWYgX2NsaWVudCgpOicsXG4gICAgICAnICAgIGdsb2JhbCBfc20nLFxuICAgICAgJyAgICBpZiBfc20gaXMgTm9uZTonLFxuICAgICAgJyAgICAgICAgX3NtID0gYm90bzMuY2xpZW50KFwic2VjcmV0c21hbmFnZXJcIiwgcmVnaW9uX25hbWU9Q09ORklHX1JFR0lPTiknLFxuICAgICAgJyAgICByZXR1cm4gX3NtJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnZGVmIF9leHRyYV9jbGllbnQoKTonLFxuICAgICAgJyAgICAjIFRoZSBleHRyYS1jb25maWcgc2VjcmV0IGxpdmVzIGluIEVYVFJBX1NFQ1JFVF9SRUdJT04gKHRoZSBlZGdlIHN0YWNrIHJlZ2lvbiksJyxcbiAgICAgICcgICAgIyB3aGljaCBkaWZmZXJzIGZyb20gQ09ORklHX1JFR0lPTiAodGhlIGJhc2Ugc2VjcmV0IGluIGF1dGhSZWdpb24pLiBSZXVzZSB0aGUnLFxuICAgICAgJyAgICAjIGJhc2UgY2xpZW50IHdoZW4gdGhlIHR3byBoYXBwZW4gdG8gbWF0Y2gsIG90aGVyd2lzZSBidWlsZCBhIHJlZ2lvbi1zcGVjaWZpYyBvbmUuJyxcbiAgICAgICcgICAgZ2xvYmFsIF9zbV9leHRyYScsXG4gICAgICAnICAgIGlmIEVYVFJBX1NFQ1JFVF9SRUdJT04gPT0gQ09ORklHX1JFR0lPTjonLFxuICAgICAgJyAgICAgICAgcmV0dXJuIF9jbGllbnQoKScsXG4gICAgICAnICAgIGlmIF9zbV9leHRyYSBpcyBOb25lOicsXG4gICAgICAnICAgICAgICBfc21fZXh0cmEgPSBib3RvMy5jbGllbnQoXCJzZWNyZXRzbWFuYWdlclwiLCByZWdpb25fbmFtZT1FWFRSQV9TRUNSRVRfUkVHSU9OKScsXG4gICAgICAnICAgIHJldHVybiBfc21fZXh0cmEnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICdkZWYgZ2V0X2NvbmZpZygpOicsXG4gICAgICAnICAgIGNmZyA9IGpzb24ubG9hZHMoX2NsaWVudCgpLmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9QkFTRV9TRUNSRVRfTkFNRSlbXCJTZWNyZXRTdHJpbmdcIl0pJyxcbiAgICAgICcgICAgdHJ5OicsXG4gICAgICAnICAgICAgICBjZmcudXBkYXRlKGpzb24ubG9hZHMoX2V4dHJhX2NsaWVudCgpLmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9RVhUUkFfU0VDUkVUX05BTUUpW1wiU2VjcmV0U3RyaW5nXCJdKSknLFxuICAgICAgJyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6JyxcbiAgICAgICcgICAgICAgIGxvZ2dlci5lcnJvcihcImV4dHJhIGNvbmZpZyBsb2FkIGZhaWxlZDogJXNcIiwgZSknLFxuICAgICAgJyAgICBjZmcudXBkYXRlKFNUQVRJQ19PVkVSUklERVMpJyxcbiAgICAgICcgICAgcmV0dXJuIGNmZycsXG4gICAgICAnJyxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRWRnZUZ1bmN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc291cmNlRGlyTmFtZTogc3RyaW5nLFxuICAgIGNvbmZpZ1B5OiBzdHJpbmcsXG4gICAgcm9sZTogaWFtLklSb2xlLFxuICAgIGJ1bmRsZWREZXBzTmFtZT86IHN0cmluZyxcbiAgKTogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHtcbiAgICBjb25zdCBzb3VyY2VEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhJywgc291cmNlRGlyTmFtZSk7XG4gICAgY29uc3QgYnVuZGxlZERlcHNEaXIgPSBidW5kbGVkRGVwc05hbWUgPyBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhLWJ1bmRsZWQnLCBidW5kbGVkRGVwc05hbWUpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjdXN0b211aS1hdXRoLScpKTtcbiAgICBjb25zdCBjb25maWdQeVBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1B5UGF0aCwgY29uZmlnUHkpO1xuXG4gICAgcmV0dXJuIG5ldyBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24odGhpcywgaWQsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmxhbWJkYV9oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHNvdXJjZURpciwge1xuICAgICAgICAvLyBEZXRlcm1pbmlzdGljIGhhc2ggb3ZlciB0aGUgcmVhbCBpbnB1dHMgKHNvdXJjZSArIGNvbmZpZyArIGJ1bmRsZWRcbiAgICAgICAgLy8gZGVwcykuIFdpdGhvdXQgdGhpcywgQ0RLIGhhc2hlcyB0aGUgYnVuZGxpbmcgT1VUUFVULCB3aGljaCBkcmlmdHMgZXZlcnlcbiAgICAgICAgLy8gc3ludGggKGZzLmNwU3luYyBkb2VzIG5vdCByZXByb2R1Y2UgYSBieXRlLWlkZW50aWNhbCB0cmVlKSwgcHVibGlzaGluZyBhXG4gICAgICAgIC8vIG5ldyBMYW1iZGFARWRnZSB2ZXJzaW9uIG9uIGV2ZXJ5IGRlcGxveSBmb3IgYnl0ZS1pZGVudGljYWwgY29kZS5cbiAgICAgICAgYXNzZXRIYXNoOiBjb21wdXRlRWRnZUFzc2V0SGFzaChzb3VyY2VEaXIsIGNvbmZpZ1B5LCBidW5kbGVkRGVwc0RpciksXG4gICAgICAgIGFzc2V0SGFzaFR5cGU6IGNvcmUuQXNzZXRIYXNoVHlwZS5DVVNUT00sXG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgbG9jYWw6IHtcbiAgICAgICAgICAgIHRyeUJ1bmRsZShvdXRwdXREaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgICBpZiAoYnVuZGxlZERlcHNEaXIgJiYgZnMuZXhpc3RzU3luYyhidW5kbGVkRGVwc0RpcikpIHtcbiAgICAgICAgICAgICAgICBmcy5jcFN5bmMoYnVuZGxlZERlcHNEaXIsIG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZzLnJlYWRkaXJTeW5jKHNvdXJjZURpcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZSA9PT0gJ3JlcXVpcmVtZW50cy50eHQnKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBmcy5jcFN5bmMocGF0aC5qb2luKHNvdXJjZURpciwgZmlsZSksIHBhdGguam9pbihvdXRwdXREaXIsIGZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXRwdXREaXIsICdjb25maWdfZ2VuZXJhdGVkLnB5JyksIGNvbmZpZ1B5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW1hZ2U6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLmJ1bmRsaW5nSW1hZ2UsXG4gICAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICAgJ2Jhc2gnLCAnLWMnLFxuICAgICAgICAgICAgJ3BpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHQgLXQgL2Fzc2V0LW91dHB1dCAmJiBjcCAtciAuIC9hc3NldC1vdXRwdXQgJiYgY3AgL3RtcC9jb25maWdfZ2VuZXJhdGVkLnB5IC9hc3NldC1vdXRwdXQvY29uZmlnX2dlbmVyYXRlZC5weScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICB2b2x1bWVzOiBbeyBob3N0UGF0aDogY29uZmlnUHlQYXRoLCBjb250YWluZXJQYXRoOiAnL3RtcC9jb25maWdfZ2VuZXJhdGVkLnB5JyB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1jdXN0b211aS1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nsb3VkZnJvbnQvcGF0dGVybnMvY29nbml0by1jdXN0b211aS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isa0RBQW9DO0FBQ3BDLDZDQU9xQjtBQUNyQix1REFBeUM7QUFDekMsMkRBQW9HO0FBQ3BHLGlGQUE2RTtBQUM3RSxvREFBZ0Y7QUEwSGhGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsbUJBQW1ELFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFZMUYsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFzQztRQUN6RixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDO1FBQ3BELElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcscUJBQUcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sU0FBUyxHQUFHLHFCQUFHLENBQUMs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d0JBQ2QsQ0FBQztxQkFDRjtvQkFDRCxLQUFLLEVBQUUsd0JBQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWE7b0JBQy9DLE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsSUFBSTt3QkFDWiw0SUFBNEk7cUJBQzdJO29CQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztpQkFDakY7YUFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBcmRELGtEQXFkQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIgYXMgYWNtLFxuICBhd3NfY2xvdWRmcm9udCBhcyBjbG91ZGZyb250LFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX3NzbSBhcyBzc20sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBFeHRlbnNpb24sIEV4dGVuc2lvbkNvbmZpZywgQWRkQmVoYXZpb3JPcHRpb25zLCBSb2xlTWF0Y2hNb2RlIH0gZnJvbSAnLi9zZWN1cmVkQ2xvdWRGcm9udCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNvbXBvc2VyIH0gZnJvbSAnLi4vY2xvdWRmcm9udC1mdW5jdGlvbnMvZnVuY3Rpb24tY29tcG9zZXInO1xuaW1wb3J0IHsgY29tcHV0ZUVkZ2VBc3NldEhhc2gsIGRldGVybWluaXN0aWNDb25maWdEaXIgfSBmcm9tICcuLi9lZGdlQXNzZXRIYXNoJztcblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIENvZ25pdG9DdXN0b21VaUF1dGh9LlxuICpcbiAqIENvbmZpZ3VyZXMgY3VzdG9tZXIgYXV0aGVudGljYXRpb24gZm9yIGEgc3RvcmVmcm9udCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICogdXNpbmcgQVdTIENvZ25pdG8gd2l0aCBhIGZpcnN0LXBhcnR5IChjdXN0b20pIGxvZ2luIFVJLiBVbmF1dGhlbnRpY2F0ZWRcbiAqIHJlcXVlc3RzIHRvIHByb3RlY3RlZCBwYXRocyBhcmUgcmVkaXJlY3RlZCB0byB7QGxpbmsgdW5hdXRoZW50aWNhdGVkUmVkaXJlY3RQYXRofVxuICogb24gdGhlIGJyYW5kJ3Mgb3duIGRvbWFpbiDigJQgbmV2ZXIgdG8gYSBDb2duaXRvIGhvc3RlZCBVSS4gVGhlIGxvZ2luIHBhZ2VcbiAqIHBlcmZvcm1zIFNSUCBjbGllbnQtc2lkZSBhbmQgUE9TVHMgdGhlIHJlc3VsdGluZyB0b2tlbnMgdG8gdGhlIHNlc3Npb24taXNzdWFuY2VcbiAqIGVuZHBvaW50OyBDb2duaXRvIHRva2VucyBhcmUgbmV2ZXIgc3RvcmVkIGluIHRoZSBicm93c2VyLlxuICpcbiAqIFRoZSBiYWNrZW5kICh1c2VyIHBvb2wsIEhNQUMga2V5LCBhdXRoIHRhYmxlLCBLVlMsIGNvbmZpZyBzZWNyZXQpIGlzIHByb3ZpZGVkXG4gKiBieSB7QGxpbmsgQ29nbml0b0F1dGhJbmZyYXN0cnVjdHVyZX0gYW5kIHJlZmVyZW5jZWQgaGVyZSB2aWEgU1NNIHBhcmFtZXRlcnNcbiAqIHdyaXR0ZW4gdW5kZXIge0BsaW5rIGF1dGhTc21QYXJhbVByZWZpeH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0N1c3RvbVVpQXV0aFByb3BzPFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBDUkVBVEUgTU9ERTogZGVmYXVsdCBjYWNoZSBiZWhhdmlvdXIgZm9yIGEgZGlzdHJpYnV0aW9uIHRoaXMgY29uc3RydWN0IHdpbGxcbiAgICogY3JlYXRlLiBQcm92aWRlIHdpdGgge0BsaW5rIGNlcnRpZmljYXRlfS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGhcbiAgICoge0BsaW5rIGRpc3RyaWJ1dGlvbn0uIFlvdSBNQVkgc2V0IGBmdW5jdGlvbkFzc29jaWF0aW9uc2AgaGVyZSAoZS5nLiBhXG4gICAqIGdlby1yb3V0aW5nIHZpZXdlci1yZXF1ZXN0IGZ1bmN0aW9uKSDigJQgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIGF1dGgtY2hlY2tcbiAgICogZnVuY3Rpb247IENsb3VkRnJvbnQncyBvbmUtZnVuY3Rpb24tcGVyLWV2ZW50LXR5cGUgcnVsZSBpcyBlbmZvcmNlZCB3aXRoIGFcbiAgICogY2xlYXIgZXJyb3IgcmF0aGVyIHRoYW4gYW4gTDEgb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QmVoYXZpb3I/OiBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucztcbiAgLyoqIERvbWFpbiBuYW1lcyBmb3IgdGhlIGF1dGggY29uZmlnIChhbGxvd2VkX2RvbWFpbnMpOyBmaXJzdCBpcyBjYW5vbmljYWwuIFJlcXVpcmVkIGluIGJvdGggbW9kZXMuICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNoYXJlZCBzZXNzaW9uIGNvbmZpZyBzZWNyZXQgdGhlIGVkZ2UgTGFtYmRhcyBmZXRjaCBieSBuYW1lLlxuICAgKiBNVVNUIG1hdGNoIHRoZSBuYW1lIHRoZSB7QGxpbmsgQ29nbml0b1Nlc3Npb25CYWNrZW5kfSBjcmVhdGVkIGl0IHVuZGVyLlxuICAgKiBPdmVycmlkZSB0byBkZWNvdXBsZSBmcm9tIHRoZSBjYW5vbmljYWwgZG9tYWluLlxuICAgKiBAZGVmYXVsdCBgY2xvdWRmcm9udC1hdXRoLWNvbmZpZy0ke2RvbWFpbk5hbWVzWzBdfWBcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ1NlY3JldE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDUkVBVEUgTU9ERTogQUNNIGNlcnRpZmljYXRlICh1cy1lYXN0LTEpIGNvdmVyaW5nIHtAbGluayBkb21haW5OYW1lc30uICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogYWNtLklDZXJ0aWZpY2F0ZTtcbiAgLyoqIENSRUFURSBNT0RFOiBXQUYgd2ViIEFDTCBBUk4gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNyZWF0ZWQgZGlzdHJpYnV0aW9uLiAqL1xuICByZWFkb25seSB3ZWJBY2xJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEFUVEFDSCBNT0RFOiBhbiBleGlzdGluZyBkaXN0cmlidXRpb24gdG8gYWRkIHRoZSBhdXRoIGVuZHBvaW50ICsgcHJvdGVjdGVkXG4gICAqIGJlaGF2aW91cnMgdG8sIGluc3RlYWQgb2YgY3JlYXRpbmcgb25lLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgKiB7QGxpbmsgZGVmYXVsdEJlaGF2aW9yfS97QGxpbmsgY2VydGlmaWNhdGV9LiBDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLCBzbyB0aGUgYXV0aC1jaGVjayBpcyBhZGRlZCB0byBwcm90ZWN0ZWRcbiAgICogUEFUSCBiZWhhdmlvdXJzICh2aWEge0BsaW5rIHByb3RlY3R9KSDigJQgaXQgaXMgTk9UIGZvcmNlZCBvbnRvIHRoZSBleGlzdGluZ1xuICAgKiBkZWZhdWx0IGJlaGF2aW91ci4gVXNlIHtAbGluayBhdXRoRnVuY3Rpb259IHRvIGNvbXBvc2UgaXQgdGhlcmUgeW91cnNlbGYuXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb24/OiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE9yaWdpbiBmb3IgdGhlIGF1dGggZW5kcG9pbnQgYmVoYXZpb3VycyAoaXNzdWFuY2UgLyByZWZyZXNoIC8gbG9nb3V0KS4gVGhlc2VcbiAgICogZW5kcG9pbnRzIGFyZSBnZW5lcmF0ZWQgZW50aXJlbHkgYnkgTGFtYmRhQEVkZ2UgYW5kIG5ldmVyIHJlYWNoIHRoZSBvcmlnaW4sXG4gICAqIGJ1dCBhIENsb3VkRnJvbnQgYmVoYXZpb3VyIHN0aWxsIHJlcXVpcmVzIG9uZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIHtAbGluayBkZWZhdWx0QmVoYXZpb3J9IG9yaWdpbi4gU2V0IHRoaXMgdG8gYSBOT04tVlBDIG9yaWdpblxuICAgKiAoZm9yIGV4YW1wbGUgYW4gUzMgb3JpZ2luIGFscmVhZHkgb24gdGhlIGRpc3RyaWJ1dGlvbikgd2hlbiB0aGUgZGVmYXVsdFxuICAgKiBiZWhhdmlvdXIncyBvcmlnaW4gaXMgYSBDbG91ZEZyb250IFZQQyBvcmlnaW46IEFXUyBkb2VzIG5vdCBhbGxvdyBhblxuICAgKiBvcmlnaW4tcmVxdWVzdCBMYW1iZGFARWRnZSBhc3NvY2lhdGlvbiBvbiBhIFZQQy1vcmlnaW4gYmVoYXZpb3VyLCBhbmQgdGhlc2VcbiAgICogZW5kcG9pbnRzIHJ1biBhdCBvcmlnaW4tcmVxdWVzdC4gUkVRVUlSRUQgaW4gQVRUQUNIIE1PREUgKHdoZW5cbiAgICoge0BsaW5rIGRpc3RyaWJ1dGlvbn0gaXMgc2V0KS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhFbmRwb2ludE9yaWdpbj86IGNsb3VkZnJvbnQuSU9yaWdpbjtcbiAgLyoqXG4gICAqIFNTTSBwYXJhbWV0ZXIgcHJlZml4IHVuZGVyIHdoaWNoIHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfSBwdWJsaXNoZWRcbiAgICogYGNvbmZpZ1NlY3JldEFybmAsIGBrbXNLZXlBcm5gLCBgYXV0aFRhYmxlQXJuYCwgYGt2c0FybmAsIGBjb2duaXRvRG9tYWluYCxcbiAgICogYGNsaWVudElkYCBhbmQgYHVzZXJQb29sSWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aFNzbVBhcmFtUHJlZml4OiBzdHJpbmc7XG4gIC8qKiBSZWdpb24gdGhlIGF1dGggYmFja2VuZCAoY29uZmlnIHNlY3JldCwgYXV0aCB0YWJsZSkgbGl2ZXMgaW4uICovXG4gIHJlYWRvbmx5IGF1dGhSZWdpb246IHN0cmluZztcbiAgLyoqIEZpcnN0LXBhcnR5IHBhdGggdW5hdXRoZW50aWNhdGVkIHVzZXJzIGFyZSByZWRpcmVjdGVkIHRvLiBAZGVmYXVsdCAnL2xvZ2luJyAqL1xuICByZWFkb25seSB1bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBFeHRlbnNpb25zIGFwcGxpZWQgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3VyLiBAZGVmYXVsdCBbXSAocHVibGljKSAqL1xuICByZWFkb25seSBkZWZhdWx0RXh0ZW5zaW9ucz86IEV4dGVuc2lvbltdO1xuICAvKiogUm9sZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeHRlbnNpb25Db25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+O1xuICAvKiogSW5qZWN0IHZhbGlkYXRlZCBpZGVudGl0eSBjbGFpbXMgYXMgb3JpZ2luIGhlYWRlcnMuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSGVhZGVySW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1hcCBvZiBvcmlnaW4gaGVhZGVyIG5hbWUgdG8gc2Vzc2lvbi1KV1QgY2xhaW0ga2V5LlxuICAgKiBAZGVmYXVsdCB7ICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJywgJ3gtY3VzdG9tZXItZW1haWwnOiAnZW1haWwnIH1cbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlckluamVjdGlvbkNsYWltcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBQYXRoIG9mIHRoZSBzZXNzaW9uLWlzc3VhbmNlIGVuZHBvaW50IChQT1NUKS4gQGRlZmF1bHQgJy9hdXRoL3Nlc3Npb24nICovXG4gIHJlYWRvbmx5IHNlc3Npb25Jc3N1YW5jZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBNb3VudCB0aGUgc2lsZW50LXJlZnJlc2ggZW5kcG9pbnQgYXQgJy9vYXV0aDIvcmVmcmVzaCcuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUmVmcmVzaEVuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqIE1vdW50IHRoZSBsb2dvdXQgZW5kcG9pbnQgYXQgJy9vYXV0aDIvbG9nb3V0JyAoUE9TVCkuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTG9nb3V0RW5kcG9pbnQ/OiBib29sZWFuO1xuICAvKiogVVJMIG9mIHRoZSBpZGVudGl0eS1saW5raW5nIGhvb2sgdGhlIGlzc3VhbmNlIGVuZHBvaW50IGNhbGxzIHRvIHJlc29sdmUgY3VzdG9tZXJfaWQuICovXG4gIHJlYWRvbmx5IGlkZW50aXR5TGlua2luZ0hvb2tVcmw6IHN0cmluZztcbiAgLyoqIFNlY3JldHMgTWFuYWdlciBBUk4gb2YgdGhlIHNoYXJlZCBzZWNyZXQgdXNlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIGhvb2suICovXG4gIHJlYWRvbmx5IGlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm4/OiBzdHJpbmc7XG4gIC8qKiBTZXNzaW9uIEpXVCBsaWZldGltZSwgc2Vjb25kcy4gQGRlZmF1bHQgMzYwMCAqL1xuICByZWFkb25seSBzZXNzaW9uVHRsU2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIFN0b3JlZCByZWZyZXNoLXRva2VuIGxpZmV0aW1lLCBkYXlzLiBAZGVmYXVsdCAzMCAqL1xuICByZWFkb25seSByZWZyZXNoVHRsRGF5cz86IG51bWJlcjtcbiAgLyoqIFBhdGggdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9nb3V0LiBAZGVmYXVsdCAnLycgKi9cbiAgcmVhZG9ubHkgcG9zdExvZ291dFJlZGlyZWN0UGF0aD86IHN0cmluZztcbiAgLyoqIEFkZCBTUEEgY3VzdG9tIGVycm9yIHJlc3BvbnNlcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRXJyb3JSZXNwb25zZXM/OiBib29sZWFuO1xuICAvKiogRXJyb3IgcGFnZSBwYXRoIHdoZW4ge0BsaW5rIGVuYWJsZUVycm9yUmVzcG9uc2VzfSBpcyBzZXQuIEBkZWZhdWx0ICcvZXJyb3IuaHRtbCcgKi9cbiAgcmVhZG9ubHkgZXJyb3JSZXNwb25zZVBhZ2VQYXRoPzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCByb290IG9iamVjdC4gQGRlZmF1bHQgJ2luZGV4Lmh0bWwnICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSb290T2JqZWN0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQ1JFQVRFIE1PREU6IG1pbmltdW0gVExTIHNlY3VyaXR5IHBvbGljeSBmb3IgdGhlIGNyZWF0ZWQgZGlzdHJpYnV0aW9uJ3NcbiAgICogdmlld2VyIGNvbm5lY3Rpb25zLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudC1nZW5lcmF0aW9uIHBvbGljeTsgb3ZlcnJpZGUgb25seVxuICAgKiB0byByZWxheCBpdCAobm90IHJlY29tbWVuZGVkKS4gSWdub3JlZCBpbiBBVFRBQ0ggTU9ERSDigJQgdGhlIHBhc3NlZC1pblxuICAgKiBkaXN0cmlidXRpb24gYWxyZWFkeSBmaXhlcyBpdHMgb3duIHBvbGljeS5cbiAgICogQGRlZmF1bHQgY2xvdWRmcm9udC5TZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjVcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Qcm90b2NvbFZlcnNpb24/OiBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2w7XG4gIC8qKlxuICAgKiBBbGxvd2VkIHZpZXdlciBIVFRQIG1ldGhvZHMgZm9yIHRoZSBhdXRoIGVuZHBvaW50IGJlaGF2aW91cnMgKHNlc3Npb25cbiAgICogaXNzdWFuY2UsIHJlZnJlc2gsIGxvZ291dCkuIFRoZXNlIGVuZHBvaW50cyBhcmUgUE9TVC1kcml2ZW4sIHNvIHRoZSBkZWZhdWx0XG4gICAqIHBlcm1pdHMgYWxsIG1ldGhvZHM7IENsb3VkRnJvbnQncyBHRVQvSEVBRCBkZWZhdWx0IHdvdWxkIG90aGVyd2lzZSByZWplY3QgdGhlXG4gICAqIFBPU1QgdGhleSByZXF1aXJlLiBPdmVycmlkZSB0byBuYXJyb3cgaXQgKG11c3Qgc3RpbGwgaW5jbHVkZSBQT1NUKS5cbiAgICogQGRlZmF1bHQgY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcy5BTExPV19BTExcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzPzogY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcztcbn1cblxuLyoqXG4gKiBDdXN0b21lciBhdXRoZW50aWNhdGlvbiBmb3IgYSBzdG9yZWZyb250IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHVzaW5nIENvZ25pdG9cbiAqIHdpdGggYSBjdXN0b20sIGJyYW5kLWRvbWFpbiBsb2dpbiBVSS5cbiAqXG4gKiBPV05TIChpbiB0aGlzIGxpYnJhcnkpOiB0aGUgZWRnZSBzZXNzaW9uLXZhbGlkYXRpb24gZnVuY3Rpb24gKHJldXNlZCBzaGFyZWRcbiAqIG1vZHVsZSwgcmVkaXJlY3RpbmcgdG8gYSBmaXJzdC1wYXJ0eSAvbG9naW4pLCB0aGUgc2Vzc2lvbi1pc3N1YW5jZSAvIHJlZnJlc2ggL1xuICogbG9nb3V0IExhbWJkYUBFZGdlIGZ1bmN0aW9ucywgYW5kIHRoZWlyIElBTSB3aXJpbmcuIENPTlNVTUVTOiB0aGUgQ29nbml0b1xuICogYmFja2VuZCBmcm9tIHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfS4gRG9lcyBOT1QgcHJvdmlzaW9uIHRoZSB1c2VyXG4gKiBwb29sIOKAlCB0aGF0IGlzIHRoZSBiYWNrZW5kIGNvbnN0cnVjdCdzIGpvYi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9DdXN0b21VaUF1dGg8VFJvbGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VyOiBGdW5jdGlvbkNvbXBvc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VkRnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBjbG91ZGZyb250LkZ1bmN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBrdnM6IGNsb3VkZnJvbnQuSUtleVZhbHVlU3RvcmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5SZWRpcmVjdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVIZWFkZXJJbmplY3Rpb246IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVJlZnJlc2g6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdENyZWF0ZWRGdW5jdGlvbjogY2xvdWRmcm9udC5GdW5jdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvQ3VzdG9tVWlBdXRoUHJvcHM8VFJvbGU+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGF0dGFjaE1vZGUgPSBwcm9wcy5kaXN0cmlidXRpb24gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoYXR0YWNoTW9kZSAmJiAhcHJvcHMuYXV0aEVuZHBvaW50T3JpZ2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhFbmRwb2ludE9yaWdpbiBpcyByZXF1aXJlZCB3aGVuIGF0dGFjaGluZyB0byBhbiBleGlzdGluZyBkaXN0cmlidXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFhdHRhY2hNb2RlICYmICghcHJvcHMuZGVmYXVsdEJlaGF2aW9yIHx8ICFwcm9wcy5jZXJ0aWZpY2F0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVmYXVsdEJlaGF2aW9yIGFuZCBjZXJ0aWZpY2F0ZSBhcmUgcmVxdWlyZWQgd2hlbiBjcmVhdGluZyBhIGRpc3RyaWJ1dGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHAgPSBwcm9wcy5hdXRoU3NtUGFyYW1QcmVmaXg7XG4gICAgY29uc3QgY29uZmlnU2VjcmV0QXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9jb25maWdTZWNyZXRBcm5gKTtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2ttc0tleUFybmApO1xuICAgIGNvbnN0IGF1dGhUYWJsZUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0vYXV0aFRhYmxlQXJuYCk7XG4gICAgY29uc3Qga3ZzQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9rdnNBcm5gKTtcblxuICAgIHRoaXMua3ZzID0gY2xvdWRmcm9udC5LZXlWYWx1ZVN0b3JlLmZyb21LZXlWYWx1ZVN0b3JlQXJuKHRoaXMsICdLVlMnLCBrdnNBcm4pO1xuICAgIHRoaXMubG9naW5SZWRpcmVjdFBhdGggPSBwcm9wcy51bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGggPz8gJy9sb2dpbic7XG4gICAgdGhpcy5lbmFibGVIZWFkZXJJbmplY3Rpb24gPSBwcm9wcy5lbmFibGVIZWFkZXJJbmplY3Rpb24gPz8gdHJ1ZTtcbiAgICB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyA9IHByb3BzLmhlYWRlckluamVjdGlvbkNsYWltcyA/PyB7XG4gICAgICAneC1jdXN0b21lci1pZCc6ICdjdXN0b21lcl9pZCcsXG4gICAgICAneC1jdXN0b21lci1lbWFpbCc6ICdlbWFpbCcsXG4gICAgfTtcbiAgICB0aGlzLmVuYWJsZVJlZnJlc2ggPSBwcm9wcy5lbmFibGVSZWZyZXNoRW5kcG9pbnQgPz8gdHJ1ZTtcbiAgICB0aGlzLmNvbXBvc2VyID0gbmV3IEZ1bmN0aW9uQ29tcG9zZXIoKTtcbiAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgY2Fub25pY2FsRG9tYWluID0gcHJvcHMuZG9tYWluTmFtZXNbMF07XG4gICAgY29uc3QgYmFzZVNlY3JldE5hbWUgPSBwcm9wcy5jb25maWdTZWNyZXROYW1lID8/IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7Y2Fub25pY2FsRG9tYWlufWA7XG4gICAgY29uc3Qgc2Vzc2lvbklzc3VhbmNlUGF0aCA9IHByb3BzLnNlc3Npb25Jc3N1YW5jZVBhdGggPz8gJy9hdXRoL3Nlc3Npb24nO1xuXG4gICAgLy8gRXh0cmEgY29uZmlnIHNlY3JldCBmb3IgdmFsdWVzIHRoYXQgYXJlIENESyB0b2tlbnMgYXQgc3ludGggdGltZSAoYW5kIHNvXG4gICAgLy8gY2Fubm90IGJlIGJha2VkIGludG8gY29uZmlnX2dlbmVyYXRlZC5weSkg4oCUIExhbWJkYUBFZGdlIGZvcmJpZHMgZW52IHZhcnMuXG4gICAgLy8gQmFrZSB0aGUgTElURVJBTCBuYW1lIGJlbG93LCBOT1QgYGV4dHJhQ29uZmlnU2VjcmV0LnNlY3JldE5hbWVgOiB0aGF0XG4gICAgLy8gcHJvcGVydHkgaXMgYSBkZXBsb3ktdGltZSB0b2tlbiAoQ2xvdWRGb3JtYXRpb24gZGVyaXZlcyBpdCBieSBwYXJzaW5nIHRoZVxuICAgIC8vIHNlY3JldCBBUk4pLCBzbyBiYWtpbmcgaXQgaW50byBjb25maWdfZ2VuZXJhdGVkLnB5IGF0IHN5bnRoIHJlbmRlcnMgaXQgYXNcbiAgICAvLyBgJHtUb2tlbltGbjo6Sm9pbi5OTk5OXX1gLiBUaGUgZWRnZSdzIGBnZXRfc2VjcmV0X3ZhbHVlKFNlY3JldElkPS4uLilgXG4gICAgLy8gdGhlbiBmYWlscyB3aXRoIGBWYWxpZGF0aW9uRXhjZXB0aW9uOiBJbnZhbGlkIG5hbWVgLCB0aGUgZXh0cmEgY29uZmlnXG4gICAgLy8gKHBvc3RfYXV0aF9ob29rX3VybCwga3ZzX2FybiwgcG9zdF9hdXRoX2hvb2tfc2VjcmV0X2FybikgbmV2ZXIgbG9hZHMsIGFuZFxuICAgIC8vIHRoZSBpZGVudGl0eS1saW5raW5nIGhvb2sgaXMgc2lsZW50bHkgbmV2ZXIgY2FsbGVkLlxuICAgIGNvbnN0IGV4dHJhQ29uZmlnU2VjcmV0TmFtZSA9IGBjbG91ZGZyb250LWN1c3RvbXVpLWNvbmZpZy0ke2Nhbm9uaWNhbERvbWFpbn1gO1xuICAgIGNvbnN0IGV4dHJhQ29uZmlnU2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCAnQ3VzdG9tVWlDb25maWdTZWNyZXQnLCB7XG4gICAgICBzZWNyZXROYW1lOiBleHRyYUNvbmZpZ1NlY3JldE5hbWUsXG4gICAgICBzZWNyZXRPYmplY3RWYWx1ZToge1xuICAgICAgICBrdnNfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChrdnNBcm4pLFxuICAgICAgICBwb3N0X2F1dGhfaG9va191cmw6IGNvcmUuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tVcmwpLFxuICAgICAgICBwb3N0X2F1dGhfaG9va19zZWNyZXRfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuID8/ICcnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogYEN1c3RvbS1VSSBhdXRoIGNvbmZpZyBvdmVycmlkZXMgZm9yICR7Y2Fub25pY2FsRG9tYWlufWAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGF0aWNPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBsb2dpbl9yZWRpcmVjdF9wYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgYWxsb3dlZF9kb21haW5zOiBKU09OLnN0cmluZ2lmeShwcm9wcy5kb21haW5OYW1lcyksXG4gICAgICBzZXNzaW9uX3R0bF9zZWNvbmRzOiBTdHJpbmcocHJvcHMuc2Vzc2lvblR0bFNlY29uZHMgPz8gMzYwMCksXG4gICAgICByZWZyZXNoX3R0bF9kYXlzOiBTdHJpbmcocHJvcHMucmVmcmVzaFR0bERheXMgPz8gMzApLFxuICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfcGF0aDogcHJvcHMucG9zdExvZ291dFJlZGlyZWN0UGF0aCA/PyAnLycsXG4gICAgICBjb25maWdfcmVnaW9uOiBwcm9wcy5hdXRoUmVnaW9uLFxuICAgIH07XG5cbiAgICAvLyBUaGUgYmFzZSBjb25maWcgc2VjcmV0IGxpdmVzIGluIGF1dGhSZWdpb24sIGJ1dCBleHRyYUNvbmZpZ1NlY3JldCBpcyBjcmVhdGVkXG4gICAgLy8gaW4gVEhJUyBjb25zdHJ1Y3QncyBvd24gc3RhY2sgKHVzLWVhc3QtMSBmb3IgdGhlIENsb3VkRnJvbnQgZWRnZSBzdGFjaykuIFRoZVxuICAgIC8vIGVkZ2UgbXVzdCBsb29rIGVhY2ggc2VjcmV0IHVwIGluIGl0cyBvd24gcmVnaW9uLCBzbyBwYXNzIGJvdGggcmVnaW9ucyB0aHJvdWdoLlxuICAgIGNvbnN0IGV4dHJhU2VjcmV0UmVnaW9uID0gY29yZS5TdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgY29uZmlnUHkgPSB0aGlzLnJlbmRlckNvbmZpZ1B5KGJhc2VTZWNyZXROYW1lLCBleHRyYUNvbmZpZ1NlY3JldE5hbWUsIHByb3BzLmF1dGhSZWdpb24sIGV4dHJhU2VjcmV0UmVnaW9uLCBzdGF0aWNPdmVycmlkZXMpO1xuXG4gICAgLy8gU2hhcmVkIElBTSBncmFudHMgZmFjdG9yeSBmb3IgdGhlIGVkZ2UgTGFtYmRhcy5cbiAgICBjb25zdCBncmFudENvbW1vbiA9IChyb2xlOiBpYW0uSVJvbGUsIG9wdHM6IHsga21zOiBib29sZWFuOyBkZGI6IGJvb2xlYW47IGt2czogYm9vbGVhbjsgY29nbml0bzogYm9vbGVhbjsgaG9va1NlY3JldDogYm9vbGVhbiB9KTogdm9pZCA9PiB7XG4gICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJywgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0J10sXG4gICAgICAgIHJlc291cmNlczogW2NvbmZpZ1NlY3JldEFybiwgZXh0cmFDb25maWdTZWNyZXQuc2VjcmV0QXJuXSxcbiAgICAgIH0pKTtcbiAgICAgIGlmIChvcHRzLmhvb2tTZWNyZXQgJiYgcHJvcHMuaWRlbnRpdHlMaW5raW5nSG9va1NlY3JldEFybikge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgICAgIHJlc291cmNlczogW3Byb3BzLmlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5rbXMpIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsna21zOkRlY3J5cHQnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtrbXNLZXlBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5kZGIpIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnZHluYW1vZGI6R2V0SXRlbScsICdkeW5hbW9kYjpQdXRJdGVtJywgJ2R5bmFtb2RiOkRlbGV0ZUl0ZW0nLCAnZHluYW1vZGI6UXVlcnknXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFthdXRoVGFibGVBcm4sIGAke2F1dGhUYWJsZUFybn0vaW5kZXgvKmBdLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5rdnMpIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnY2xvdWRmcm9udC1rZXl2YWx1ZXN0b3JlOlB1dEtleScsICdjbG91ZGZyb250LWtleXZhbHVlc3RvcmU6RGVzY3JpYmVLZXlWYWx1ZVN0b3JlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBba3ZzQXJuXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuY29nbml0bykge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydjb2duaXRvLWlkcDpJbml0aWF0ZUF1dGgnLCAnY29nbml0by1pZHA6UmV2b2tlVG9rZW4nXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGVkZ2VSb2xlID0gKHJvbGVJZDogc3RyaW5nKTogaWFtLlJvbGUgPT4gbmV3IGlhbS5Sb2xlKHRoaXMsIHJvbGVJZCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2VkZ2VsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBTZXNzaW9uLWlzc3VhbmNlIExhbWJkYTogdmVyaWZpZXMgdGhlIENvZ25pdG8gaWRfdG9rZW4gd2l0aCB0aGUgcHVyZS1QeXRob25cbiAgICAvLyBgcnNhYCBsaWJyYXJ5LCBidW5kbGVkIGZyb20gaXRzIG93biBjb2duaXRvLWN1c3RvbXVpLXNlc3Npb24gZGVwcyBkaXIgKE5PVCB0aGVcbiAgICAvLyBmYXQgUHlKV1QvY3J5cHRvZ3JhcGh5IGNvZ25pdG8tYXV0aCBidW5kbGUpIHNvIGl0IGZpdHMgdGhlIDEgTUIgdmlld2VyLXJlcXVlc3RcbiAgICAvLyBMYW1iZGFARWRnZSBjb2RlIGxpbWl0LlxuICAgIGNvbnN0IGlzc3VhbmNlUm9sZSA9IGVkZ2VSb2xlKCdJc3N1YW5jZVJvbGUnKTtcbiAgICBncmFudENvbW1vbihpc3N1YW5jZVJvbGUsIHsga21zOiB0cnVlLCBkZGI6IHRydWUsIGt2czogZmFsc2UsIGNvZ25pdG86IGZhbHNlLCBob29rU2VjcmV0OiB0cnVlIH0pO1xuICAgIGNvbnN0IGlzc3VhbmNlRm4gPSB0aGlzLm1ha2VFZGdlRnVuY3Rpb24oJ1Nlc3Npb25Jc3N1YW5jZScsICdjb2duaXRvLWN1c3RvbXVpLXNlc3Npb24nLCBjb25maWdQeSwgaXNzdWFuY2VSb2xlLCAnY29nbml0by1jdXN0b211aS1zZXNzaW9uJyk7XG5cbiAgICAvLyBSZWZyZXNoICsgbG9nb3V0IExhbWJkYXMgKGJvdG8zIG9ubHkg4oCUIG5vIGJ1bmRsZWQgZGVwcykuXG4gICAgbGV0IHJlZnJlc2hGbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmVuYWJsZVJlZnJlc2gpIHtcbiAgICAgIGNvbnN0IHJlZnJlc2hSb2xlID0gZWRnZVJvbGUoJ1JlZnJlc2hSb2xlJyk7XG4gICAgICBncmFudENvbW1vbihyZWZyZXNoUm9sZSwgeyBrbXM6IHRydWUsIGRkYjogdHJ1ZSwga3ZzOiBmYWxzZSwgY29nbml0bzogdHJ1ZSwgaG9va1NlY3JldDogZmFsc2UgfSk7XG4gICAgICByZWZyZXNoRm4gPSB0aGlzLm1ha2VFZGdlRnVuY3Rpb24oJ1Nlc3Npb25SZWZyZXNoJywgJ2NvZ25pdG8tY3VzdG9tdWktcmVmcmVzaCcsIGNvbmZpZ1B5LCByZWZyZXNoUm9sZSk7XG4gICAgfVxuXG4gICAgbGV0IGxvZ291dEZuOiBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmVuYWJsZUxvZ291dEVuZHBvaW50ID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvZ291dFJvbGUgPSBlZGdlUm9sZSgnTG9nb3V0Um9sZScpO1xuICAgICAgZ3JhbnRDb21tb24obG9nb3V0Um9sZSwgeyBrbXM6IHRydWUsIGRkYjogdHJ1ZSwga3ZzOiB0cnVlLCBjb2duaXRvOiB0cnVlLCBob29rU2VjcmV0OiBmYWxzZSB9KTtcbiAgICAgIGxvZ291dEZuID0gdGhpcy5tYWtlRWRnZUZ1bmN0aW9uKCdTZXNzaW9uTG9nb3V0JywgJ2NvZ25pdG8tY3VzdG9tdWktbG9nb3V0JywgY29uZmlnUHksIGxvZ291dFJvbGUpO1xuICAgIH1cblxuICAgIC8vIFJldGFpbiBvbGQgTGFtYmRhQEVkZ2UgdmVyc2lvbnMgb24gYSByZWFsIHVwZGF0ZS9kZWxldGUg4oCUIGVkZ2UgcmVwbGljYXNcbiAgICAvLyB0YWtlIGhvdXJzIHRvIGRyYWluIOKAlCBidXQgbGV0IENsb3VkRm9ybWF0aW9uIGRlbGV0ZSBhIHZlcnNpb24gd2hvc2VcbiAgICAvLyBDUkVBVEUgd2FzIHJvbGxlZCBiYWNrIChSZXRhaW5FeGNlcHRPbkNyZWF0ZSkuIEEgcGxhaW4gUkVUQUlOIG9ycGhhbnMgdGhlXG4gICAgLy8gdmVyc2lvbiAoYW5kLCB0aHJvdWdoIGl0LCB0aGUgZnVuY3Rpb24gYW5kIGl0cyBJQU0gcm9sZSkgb24gYSBmYWlsZWRcbiAgICAvLyBjcmVhdGUsIGJsb2NraW5nIHRoZSBuZXh0IGRlcGxveSdzIGltcG9ydDsgUkVUQUlOX09OX1VQREFURV9PUl9ERUxFVEVcbiAgICAvLyBrZWVwcyB0aGUgZHJhaW4tc2FmZSByZXRhaW4gYmVoYXZpb3VyIHdpdGhvdXQgdGhlIG9ycGhhbi5cbiAgICBmb3IgKGNvbnN0IGZuIG9mIFtpc3N1YW5jZUZuLCByZWZyZXNoRm4sIGxvZ291dEZuXSkge1xuICAgICAgaWYgKCFmbikgY29udGludWU7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gZm4uY3VycmVudFZlcnNpb24ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgY29yZS5DZm5SZXNvdXJjZTtcbiAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgIHZlcnNpb24uYXBwbHlSZW1vdmFsUG9saWN5KGNvcmUuUmVtb3ZhbFBvbGljeS5SRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW5kcG9pbnQgYmVoYXZpb3VycyB1c2UgYXV0aEVuZHBvaW50T3JpZ2luIHdoZW4gc3VwcGxpZWQgKGEgbm9uLVZQQyBvcmlnaW4sXG4gICAgLy8gcmVxdWlyZWQgd2hlbiB0aGUgZGVmYXVsdCBiZWhhdmlvdXIncyBvcmlnaW4gaXMgYSBWUEMgb3JpZ2luKSwgZWxzZSB0aGVcbiAgICAvLyBkZWZhdWx0IGJlaGF2aW91cidzIG9yaWdpbi4gQXR0YWNoIG1vZGUgZ3VhcmFudGVlcyBhdXRoRW5kcG9pbnRPcmlnaW4gaXMgc2V0LlxuICAgIGNvbnN0IGVuZHBvaW50T3JpZ2luOiBjbG91ZGZyb250LklPcmlnaW4gPSBwcm9wcy5hdXRoRW5kcG9pbnRPcmlnaW4gPz8gcHJvcHMuZGVmYXVsdEJlaGF2aW9yIS5vcmlnaW47XG5cbiAgICAvLyBBdXRoIGVuZHBvaW50cyBhcmUgUE9TVC1kcml2ZW47IENsb3VkRnJvbnQgb3RoZXJ3aXNlIGRlZmF1bHRzIHRvIEdFVC9IRUFEXG4gICAgLy8gYW5kIHJlamVjdHMgdGhlIFBPU1QgdGhlc2UgZW5kcG9pbnRzIHJlcXVpcmUuIEFsbG93IGFsbCBtZXRob2RzIGJ5IGRlZmF1bHQuXG4gICAgY29uc3QgYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHMgPSBwcm9wcy5hdXRoRW5kcG9pbnRBbGxvd2VkTWV0aG9kcyA/PyBjbG91ZGZyb250LkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTDtcblxuICAgIGNvbnN0IGVuZHBvaW50T3B0cyA9IChmbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uLCBpbmNsdWRlQm9keTogYm9vbGVhbik6IGNsb3VkZnJvbnQuQWRkQmVoYXZpb3JPcHRpb25zID0+ICh7XG4gICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgIGFsbG93ZWRNZXRob2RzOiBhdXRoRW5kcG9pbnRBbGxvd2VkTWV0aG9kcyxcbiAgICAgIC8vIFNldC1Db29raWUgbXVzdCByZWFjaCB0aGUgdmlld2VyIOKAlCBjYWNoaW5nIGRpc2FibGVkLlxuICAgICAgY2FjaGVQb2xpY3k6IGNsb3VkZnJvbnQuQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRCxcbiAgICAgIGVkZ2VMYW1iZGFzOiBbe1xuICAgICAgICBmdW5jdGlvblZlcnNpb246IGZuLmN1cnJlbnRWZXJzaW9uLFxuICAgICAgICAvLyBWaWV3ZXItcmVxdWVzdDogdGhlc2UgZnVuY3Rpb25zIGdlbmVyYXRlIHRoZSByZXNwb25zZSBlbnRpcmVseSBhdCB0aGVcbiAgICAgICAgLy8gZWRnZSBhbmQgbmV2ZXIgY29udGFjdCB0aGUgb3JpZ2luLiBWaWV3ZXItcmVxdWVzdCBmaXJlcyByZWxpYWJseSBvbiBhXG4gICAgICAgIC8vIGNhY2hlIG1pc3MgcmVnYXJkbGVzcyBvZiBvcmlnaW4gdHlwZSAodW5saWtlIG9yaWdpbi1yZXF1ZXN0LCB3aGljaCBpc1xuICAgICAgICAvLyBpbGxlZ2FsIG9uIGEgVlBDLW9yaWdpbiBiZWhhdmlvdXIgYW5kIOKAlCBhcyBvYnNlcnZlZCBvbiBhdHRhY2gtbW9kZVxuICAgICAgICAvLyBkaXN0cmlidXRpb25zIOKAlCBjb3VsZCBzaWxlbnRseSBmYWlsIHRvIGludGVyY2VwdCwgbGV0dGluZyB0aGUgcmVxdWVzdFxuICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gdGhlIHBsYWNlaG9sZGVyIG9yaWdpbikuIEl0IGNhcHMgY29kZSBhdCAxIE1CLCB3aGljaFxuICAgICAgICAvLyB0aGUgc2Vzc2lvbi1pc3N1YW5jZSBmdW5jdGlvbiBub3cgZml0cyBhZnRlciBkcm9wcGluZyBQeUpXVC9jcnlwdG9ncmFwaHlcbiAgICAgICAgLy8gZm9yIHRoZSBwdXJlLVB5dGhvbiBgcnNhYCBsaWJyYXJ5LiBUaGUgYmVoYXZpb3VyIHN0aWxsIG5lZWRzIGEgdGFyZ2V0XG4gICAgICAgIC8vIG9yaWdpbiAoZW5kcG9pbnRPcmlnaW4pLCBidXQgaXQgaXMgYSBuZXZlci1jb250YWN0ZWQgcGxhY2Vob2xkZXIuXG4gICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5MYW1iZGFFZGdlRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNULFxuICAgICAgICBpbmNsdWRlQm9keTogaW5jbHVkZUJvZHksXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGlmIChhdHRhY2hNb2RlKSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IHByb3BzLmRpc3RyaWJ1dGlvbiE7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcihzZXNzaW9uSXNzdWFuY2VQYXRoLCBlbmRwb2ludE9yaWdpbiwgZW5kcG9pbnRPcHRzKGlzc3VhbmNlRm4sIHRydWUpKTtcbiAgICAgIGlmIChyZWZyZXNoRm4pIHtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoJy9vYXV0aDIvcmVmcmVzaCcsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMocmVmcmVzaEZuLCBmYWxzZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGxvZ291dEZuKSB7XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvb2F1dGgyL2xvZ291dCcsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMobG9nb3V0Rm4sIHRydWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWRkaXRpb25hbEJlaGF2aW9yczogUmVjb3JkPHN0cmluZywgY2xvdWRmcm9udC5CZWhhdmlvck9wdGlvbnM+ID0ge1xuICAgICAgICBbc2Vzc2lvbklzc3VhbmNlUGF0aF06IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKGlzc3VhbmNlRm4sIHRydWUpIH0sXG4gICAgICB9O1xuICAgICAgaWYgKHJlZnJlc2hGbikge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzWycvb2F1dGgyL3JlZnJlc2gnXSA9IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKHJlZnJlc2hGbiwgZmFsc2UpIH07XG4gICAgICB9XG4gICAgICBpZiAobG9nb3V0Rm4pIHtcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9sb2dvdXQnXSA9IHsgb3JpZ2luOiBlbmRwb2ludE9yaWdpbiwgLi4uZW5kcG9pbnRPcHRzKGxvZ291dEZuLCB0cnVlKSB9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbih0aGlzLCAnRGlzdHJpYnV0aW9uJywge1xuICAgICAgICBodHRwVmVyc2lvbjogY2xvdWRmcm9udC5IdHRwVmVyc2lvbi5IVFRQMl9BTkRfMyxcbiAgICAgICAgbWluaW11bVByb3RvY29sVmVyc2lvbjogcHJvcHMubWluaW11bVByb3RvY29sVmVyc2lvbiA/PyBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyNSxcbiAgICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgICAgLi4ucHJvcHMuZGVmYXVsdEJlaGF2aW9yISxcbiAgICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5tZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgICAgICAgICAgdGhpcy5idWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKHByb3BzLmRlZmF1bHRFeHRlbnNpb25zLCBwcm9wcy5kZWZhdWx0RXh0ZW5zaW9uQ29uZmlnKSxcbiAgICAgICAgICAgIHByb3BzLmRlZmF1bHRCZWhhdmlvciEuZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yczogYWRkaXRpb25hbEJlaGF2aW9ycyxcbiAgICAgICAgZG9tYWluTmFtZXM6IHByb3BzLmRvbWFpbk5hbWVzLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2VydGlmaWNhdGUhLFxuICAgICAgICB3ZWJBY2xJZDogcHJvcHMud2ViQWNsSWQsXG4gICAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCA/PyAnaW5kZXguaHRtbCcsXG4gICAgICAgIGVycm9yUmVzcG9uc2VzOiBwcm9wcy5lbmFibGVFcnJvclJlc3BvbnNlcyA/IFtcbiAgICAgICAgICB7IGh0dHBTdGF0dXM6IDQwMywgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLmVycm9yUmVzcG9uc2VQYWdlUGF0aCA/PyAnL2Vycm9yLmh0bWwnLCB0dGw6IGNvcmUuRHVyYXRpb24ubWludXRlcyg1KSB9LFxuICAgICAgICAgIHsgaHR0cFN0YXR1czogNDA0LCByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCwgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsIHR0bDogY29yZS5EdXJhdGlvbi5taW51dGVzKDUpIH0sXG4gICAgICAgIF0gOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBiZWhhdmlvdXIuIFBhc3MgYG9wdGlvbnMuZXh0ZW5zaW9ucyA9IFtFeHRlbnNpb24uUkVRVUlSRV9BVVRIXWAgdG9cbiAgICogcHJvdGVjdCB0aGUgcGF0aCAodW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzIHJlZGlyZWN0IHRvIHRoZSBsb2dpbiBwYWdlIGFuZFxuICAgKiB2YWxpZGF0ZWQgaWRlbnRpdHkgY2xhaW1zIGFyZSBpbmplY3RlZCBhcyBvcmlnaW4gaGVhZGVycykuXG4gICAqL1xuICBwdWJsaWMgYWRkQmVoYXZpb3IoXG4gICAgcGF0aFBhdHRlcm46IHN0cmluZyxcbiAgICBvcmlnaW46IGNsb3VkZnJvbnQuSU9yaWdpbixcbiAgICBvcHRpb25zOiBBZGRCZWhhdmlvck9wdGlvbnM8VFJvbGU+ID0ge30sXG4gICk6IHZvaWQge1xuICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKHBhdGhQYXR0ZXJuLCBvcmlnaW4sIHtcbiAgICAgIC4uLm9wdGlvbnMuYmVoYXZpb3JPcHRpb25zLFxuICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHRoaXMubWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICAgICAgdGhpcy5idWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKG9wdGlvbnMuZXh0ZW5zaW9ucywgb3B0aW9ucy5leHRlbnNpb25Db25maWcpLFxuICAgICAgICBvcHRpb25zLmJlaGF2aW9yT3B0aW9ucz8uZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIHR3byBzZXRzIG9mIGZ1bmN0aW9uIGFzc29jaWF0aW9ucywgZW5mb3JjaW5nIENsb3VkRnJvbnQncyBydWxlIG9mIG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLiBUaGUgbGlicmFyeSBuZXZlciBjb21wb3NlcyBvciBpbnNwZWN0c1xuICAgKiBhIGNvbnN1bWVyJ3MgZnVuY3Rpb24g4oCUIGl0IG9ubHkgYXR0YWNoZXMgaXQ7IGNvbWJpbmluZyB0d28gZnVuY3Rpb25zIG9uIHRoZVxuICAgKiBzYW1lIGV2ZW50IHR5cGUgaXMgdGhlIGNvbnN1bWVyJ3MgcmVzcG9uc2liaWxpdHkgKGEgc2luZ2xlIGZ1bmN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgbWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBhdXRoPzogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10sXG4gICAgY29uc3VtZXI/OiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSxcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFsbCA9IFsuLi4oYXV0aCA/PyBbXSksIC4uLihjb25zdW1lciA/PyBbXSldO1xuICAgIGlmIChhbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxjbG91ZGZyb250LkZ1bmN0aW9uRXZlbnRUeXBlPigpO1xuICAgIGZvciAoY29uc3QgZmEgb2YgYWxsKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoZmEuZXZlbnRUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENsb3VkRnJvbnQgYWxsb3dzIG9ubHkgb25lIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIsIGJ1dCB0d28gJyR7ZmEuZXZlbnRUeXBlfScgYCArXG4gICAgICAgICAgJ2Z1bmN0aW9ucyB3ZXJlIHN1cHBsaWVkIChlLmcuIFJFUVVJUkVfQVVUSCBwbHVzIHlvdXIgb3duIGZ1bmN0aW9uKS4gS2VlcCBhdXRoIGFuZCB5b3VyIG90aGVyICcgK1xuICAgICAgICAgICdmdW5jdGlvbiBvbiBzZXBhcmF0ZSBwYXRoIGJlaGF2aW91cnMsIG9yIGNvbWJpbmUgdGhlbSBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIHlvdXJzZWxmLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChmYS5ldmVudFR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFBST1RFQ1RFRCBiZWhhdmlvdXI6IHVuYXV0aGVudGljYXRlZCByZXF1ZXN0cyByZWRpcmVjdCB0byB0aGUgbG9naW5cbiAgICogcGFnZSBhbmQgdmFsaWRhdGVkIGlkZW50aXR5IGNsYWltcyBhcmUgaW5qZWN0ZWQgYXMgb3JpZ2luIGhlYWRlcnMuXG4gICAqIENvbnZlbmllbmNlIHdyYXBwZXIgb3ZlciB7QGxpbmsgYWRkQmVoYXZpb3J9IHRoYXQgZW5zdXJlcyBSRVFVSVJFX0FVVEguXG4gICAqL1xuICBwdWJsaWMgcHJvdGVjdChcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luLFxuICAgIG9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT4gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IG9wdGlvbnMuZXh0ZW5zaW9ucyA/IFsuLi5vcHRpb25zLmV4dGVuc2lvbnNdIDogW107XG4gICAgaWYgKCFleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVFVSVJFX0FVVEgpKSB7XG4gICAgICBleHRlbnNpb25zLnB1c2goRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCk7XG4gICAgfVxuICAgIHRoaXMuYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwgeyAuLi5vcHRpb25zLCBleHRlbnNpb25zOiBleHRlbnNpb25zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NlZCB2aWV3ZXItcmVxdWVzdCBhdXRoLWNoZWNrIGZ1bmN0aW9uIChSRVFVSVJFX0FVVEgpLiBVc2VmdWwgaW5cbiAgICogQVRUQUNIIE1PREUgdG8gYXNzb2NpYXRlIG9yIGNvbXBvc2UgYXV0aCBvbnRvIGEgYmVoYXZpb3VyIHRoaXMgY29uc3RydWN0IGRvZXNcbiAgICogbm90IG93biDigJQgZS5nLiBhbiBleGlzdGluZyBkZWZhdWx0IGJlaGF2aW91ciwgdmlhIGFuIEwxIG92ZXJyaWRlLlxuICAgKi9cbiAgcHVibGljIGdldCBhdXRoRnVuY3Rpb24oKTogY2xvdWRmcm9udC5GdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9zZWRBdXRoRnVuY3Rpb24oW0V4dGVuc2lvbi5SRVFVSVJFX0FVVEhdKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICBleHRlbnNpb25zPzogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghZXh0ZW5zaW9ucyB8fCBleHRlbnNpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIFt7IGZ1bmN0aW9uOiB0aGlzLmNvbXBvc2VkQXV0aEZ1bmN0aW9uKGV4dGVuc2lvbnMsIGNvbmZpZyksIGV2ZW50VHlwZTogY2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCB9XTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZWRBdXRoRnVuY3Rpb24oXG4gICAgZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sXG4gICAgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPixcbiAgKTogY2xvdWRmcm9udC5GdW5jdGlvbiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmZ1bmN0aW9uQ2FjaGVLZXkoZXh0ZW5zaW9ucywgY29uZmlnKTtcbiAgICBsZXQgZnVuYyA9IHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIWZ1bmMpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmNvbXBvc2VyLmNvbXBvc2UoZXh0ZW5zaW9ucywgY29uZmlnLCB7XG4gICAgICAgIGxvZ2luUmVkaXJlY3RQYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgICBlbmFibGVIZWFkZXJJbmplY3Rpb246IHRoaXMuZW5hYmxlSGVhZGVySW5qZWN0aW9uLFxuICAgICAgICBoZWFkZXJJbmplY3Rpb25DbGFpbXM6IHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zLFxuICAgICAgICBlbmFibGVSZWZyZXNoOiB0aGlzLmVuYWJsZVJlZnJlc2gsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSBgQ29tcG9zZWRGbiR7ZXh0ZW5zaW9ucy5tYXAoZSA9PiBlLnJlcGxhY2UoJ1JFUVVJUkVfJywgJycpKS5qb2luKCcnKX0ke3RoaXMuY29tcG9zZWRGdW5jdGlvbnMuc2l6ZX1gO1xuICAgICAgY29uc3QgbmVlZHNLdnMgPSBleHRlbnNpb25zLmluY2x1ZGVzKEV4dGVuc2lvbi5SRVFVSVJFX0FVVEgpO1xuICAgICAgZnVuYyA9IG5ldyBjbG91ZGZyb250LkZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uSWQsIG5lZWRzS3ZzXG4gICAgICAgID8geyBjb2RlOiBjbG91ZGZyb250LkZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGNvZGUpLCBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsIGNvbW1lbnQ6IGBDdXN0b20tVUk6ICR7ZXh0ZW5zaW9ucy5qb2luKCcsICcpfWAsIGtleVZhbHVlU3RvcmU6IHRoaXMua3ZzIH1cbiAgICAgICAgOiB7IGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoY29kZSksIHJ1bnRpbWU6IGNsb3VkZnJvbnQuRnVuY3Rpb25SdW50aW1lLkpTXzJfMCwgY29tbWVudDogYEN1c3RvbS1VSTogJHtleHRlbnNpb25zLmpvaW4oJywgJyl9YCB9KTtcbiAgICAgIGlmICh0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24pIHtcbiAgICAgICAgZnVuYy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbiA9IGZ1bmM7XG4gICAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zLnNldChjYWNoZUtleSwgZnVuYyk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jO1xuICB9XG5cbiAgcHJpdmF0ZSBmdW5jdGlvbkNhY2hlS2V5KGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdLCBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtleHRlbnNpb25zLnNsaWNlKCkuc29ydCgpLmpvaW4oJywnKV07XG4gICAgaWYgKGNvbmZpZz8ucmVxdWlyZWRSb2xlcykge1xuICAgICAgcGFydHMucHVzaChjb25maWcucmVxdWlyZWRSb2xlcy5zbGljZSgpLnNvcnQoKS5qb2luKCcsJykpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy5yb2xlTWF0Y2hNb2RlICYmIGNvbmZpZy5yb2xlTWF0Y2hNb2RlICE9PSBSb2xlTWF0Y2hNb2RlLk9SKSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbmZpZy5yb2xlTWF0Y2hNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29uZmlnUHkoXG4gICAgYmFzZVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBleHRyYVNlY3JldE5hbWU6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBleHRyYVNlY3JldFJlZ2lvbjogc3RyaW5nLFxuICAgIHN0YXRpY092ZXJyaWRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2ltcG9ydCBqc29uJyxcbiAgICAgICdpbXBvcnQgbG9nZ2luZycsXG4gICAgICAnaW1wb3J0IGJvdG8zJyxcbiAgICAgICcnLFxuICAgICAgJ2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCknLFxuICAgICAgYEJBU0VfU0VDUkVUX05BTUUgPSAke0pTT04uc3RyaW5naWZ5KGJhc2VTZWNyZXROYW1lKX1gLFxuICAgICAgYEVYVFJBX1NFQ1JFVF9OQU1FID0gJHtKU09OLnN0cmluZ2lmeShleHRyYVNlY3JldE5hbWUpfWAsXG4gICAgICBgQ09ORklHX1JFR0lPTiA9ICR7SlNPTi5zdHJpbmdpZnkocmVnaW9uKX1gLFxuICAgICAgYEVYVFJBX1NFQ1JFVF9SRUdJT04gPSAke0pTT04uc3RyaW5naWZ5KGV4dHJhU2VjcmV0UmVnaW9uKX1gLFxuICAgICAgYFNUQVRJQ19PVkVSUklERVMgPSAke0pTT04uc3RyaW5naWZ5KHN0YXRpY092ZXJyaWRlcyl9YCxcbiAgICAgICcnLFxuICAgICAgJ19zbSA9IE5vbmUnLFxuICAgICAgJ19zbV9leHRyYSA9IE5vbmUnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICdkZWYgX2NsaWVudCgpOicsXG4gICAgICAnICAgIGdsb2JhbCBfc20nLFxuICAgICAgJyAgICBpZiBfc20gaXMgTm9uZTonLFxuICAgICAgJyAgICAgICAgX3NtID0gYm90bzMuY2xpZW50KFwic2VjcmV0c21hbmFnZXJcIiwgcmVnaW9uX25hbWU9Q09ORklHX1JFR0lPTiknLFxuICAgICAgJyAgICByZXR1cm4gX3NtJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnZGVmIF9leHRyYV9jbGllbnQoKTonLFxuICAgICAgJyAgICAjIFRoZSBleHRyYS1jb25maWcgc2VjcmV0IGxpdmVzIGluIEVYVFJBX1NFQ1JFVF9SRUdJT04gKHRoZSBlZGdlIHN0YWNrIHJlZ2lvbiksJyxcbiAgICAgICcgICAgIyB3aGljaCBkaWZmZXJzIGZyb20gQ09ORklHX1JFR0lPTiAodGhlIGJhc2Ugc2VjcmV0IGluIGF1dGhSZWdpb24pLiBSZXVzZSB0aGUnLFxuICAgICAgJyAgICAjIGJhc2UgY2xpZW50IHdoZW4gdGhlIHR3byBoYXBwZW4gdG8gbWF0Y2gsIG90aGVyd2lzZSBidWlsZCBhIHJlZ2lvbi1zcGVjaWZpYyBvbmUuJyxcbiAgICAgICcgICAgZ2xvYmFsIF9zbV9leHRyYScsXG4gICAgICAnICAgIGlmIEVYVFJBX1NFQ1JFVF9SRUdJT04gPT0gQ09ORklHX1JFR0lPTjonLFxuICAgICAgJyAgICAgICAgcmV0dXJuIF9jbGllbnQoKScsXG4gICAgICAnICAgIGlmIF9zbV9leHRyYSBpcyBOb25lOicsXG4gICAgICAnICAgICAgICBfc21fZXh0cmEgPSBib3RvMy5jbGllbnQoXCJzZWNyZXRzbWFuYWdlclwiLCByZWdpb25fbmFtZT1FWFRSQV9TRUNSRVRfUkVHSU9OKScsXG4gICAgICAnICAgIHJldHVybiBfc21fZXh0cmEnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICdkZWYgZ2V0X2NvbmZpZygpOicsXG4gICAgICAnICAgIGNmZyA9IGpzb24ubG9hZHMoX2NsaWVudCgpLmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9QkFTRV9TRUNSRVRfTkFNRSlbXCJTZWNyZXRTdHJpbmdcIl0pJyxcbiAgICAgICcgICAgdHJ5OicsXG4gICAgICAnICAgICAgICBjZmcudXBkYXRlKGpzb24ubG9hZHMoX2V4dHJhX2NsaWVudCgpLmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9RVhUUkFfU0VDUkVUX05BTUUpW1wiU2VjcmV0U3RyaW5nXCJdKSknLFxuICAgICAgJyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6JyxcbiAgICAgICcgICAgICAgIGxvZ2dlci5lcnJvcihcImV4dHJhIGNvbmZpZyBsb2FkIGZhaWxlZDogJXNcIiwgZSknLFxuICAgICAgJyAgICBjZmcudXBkYXRlKFNUQVRJQ19PVkVSUklERVMpJyxcbiAgICAgICcgICAgcmV0dXJuIGNmZycsXG4gICAgICAnJyxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRWRnZUZ1bmN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc291cmNlRGlyTmFtZTogc3RyaW5nLFxuICAgIGNvbmZpZ1B5OiBzdHJpbmcsXG4gICAgcm9sZTogaWFtLklSb2xlLFxuICAgIGJ1bmRsZWREZXBzTmFtZT86IHN0cmluZyxcbiAgKTogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHtcbiAgICBjb25zdCBzb3VyY2VEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhJywgc291cmNlRGlyTmFtZSk7XG4gICAgY29uc3QgYnVuZGxlZERlcHNEaXIgPSBidW5kbGVkRGVwc05hbWUgPyBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhLWJ1bmRsZWQnLCBidW5kbGVkRGVwc05hbWUpIDogdW5kZWZpbmVkO1xuICAgIC8vIERldGVybWluaXN0aWMgcGF0aCBmb3IgdGhlIERvY2tlci1mYWxsYmFjayBjb25maWcgdm9sdW1lIOKAlCBhIHJhbmRvbSB0ZW1wXG4gICAgLy8gZGlyIGhlcmUgd291bGQgY2h1cm4gdGhlIENVU1RPTSBhc3NldCBoYXNoIG9uIGV2ZXJ5IHN5bnRoLiBTZWVcbiAgICAvLyBkZXRlcm1pbmlzdGljQ29uZmlnRGlyIGZvciB0aGUgZnVsbCBleHBsYW5hdGlvbi5cbiAgICBjb25zdCBjb25maWdQeVBhdGggPSBkZXRlcm1pbmlzdGljQ29uZmlnRGlyKGlkLCBjb25maWdQeSk7XG5cbiAgICByZXR1cm4gbmV3IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbih0aGlzLCBpZCwge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEsXG4gICAgICBoYW5kbGVyOiAnaW5kZXgubGFtYmRhX2hhbmRsZXInLFxuICAgICAgdGltZW91dDogY29yZS5EdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoc291cmNlRGlyLCB7XG4gICAgICAgIC8vIERldGVybWluaXN0aWMgaGFzaCBvdmVyIHRoZSByZWFsIGlucHV0cyAoc291cmNlICsgY29uZmlnICsgYnVuZGxlZFxuICAgICAgICAvLyBkZXBzKS4gV2l0aG91dCB0aGlzLCBDREsgaGFzaGVzIHRoZSBidW5kbGluZyBPVVRQVVQsIHdoaWNoIGRyaWZ0cyBldmVyeVxuICAgICAgICAvLyBzeW50aCAoZnMuY3BTeW5jIGRvZXMgbm90IHJlcHJvZHVjZSBhIGJ5dGUtaWRlbnRpY2FsIHRyZWUpLCBwdWJsaXNoaW5nIGFcbiAgICAgICAgLy8gbmV3IExhbWJkYUBFZGdlIHZlcnNpb24gb24gZXZlcnkgZGVwbG95IGZvciBieXRlLWlkZW50aWNhbCBjb2RlLlxuICAgICAgICBhc3NldEhhc2g6IGNvbXB1dGVFZGdlQXNzZXRIYXNoKHNvdXJjZURpciwgY29uZmlnUHksIGJ1bmRsZWREZXBzRGlyKSxcbiAgICAgICAgYXNzZXRIYXNoVHlwZTogY29yZS5Bc3NldEhhc2hUeXBlLkNVU1RPTSxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBsb2NhbDoge1xuICAgICAgICAgICAgdHJ5QnVuZGxlKG91dHB1dERpcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgIGlmIChidW5kbGVkRGVwc0RpciAmJiBmcy5leGlzdHNTeW5jKGJ1bmRsZWREZXBzRGlyKSkge1xuICAgICAgICAgICAgICAgIGZzLmNwU3luYyhidW5kbGVkRGVwc0Rpciwgb3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZnMucmVhZGRpclN5bmMoc291cmNlRGlyKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlID09PSAncmVxdWlyZW1lbnRzLnR4dCcpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZzLmNwU3luYyhwYXRoLmpvaW4oc291cmNlRGlyLCBmaWxlKSwgcGF0aC5qb2luKG91dHB1dERpciwgZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKSwgY29uZmlnUHkpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbWFnZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgICAnYmFzaCcsICctYycsXG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0ICYmIGNwIC1yIC4gL2Fzc2V0LW91dHB1dCAmJiBjcCAvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHkgL2Fzc2V0LW91dHB1dC9jb25maWdfZ2VuZXJhdGVkLnB5JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZvbHVtZXM6IFt7IGhvc3RQYXRoOiBjb25maWdQeVBhdGgsIGNvbnRhaW5lclBhdGg6ICcvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHknIH1dLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -112,6 +112,29 @@ export interface CognitoCustomerPoolProps {
112
112
  * @default false
113
113
  */
114
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;
115
138
  /**
116
139
  * Custom Email Sender Lambda. When set (together with {@link customSenderKmsKey}),
117
140
  * it is wired to the pool via the `CUSTOM_EMAIL_SENDER` trigger and Cognito