raindancers-cloudfront 0.0.34 → 0.0.36
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.
- package/lib/cloudfront/lambda-bundled/cognito-auth/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/bin/pyrsa-decrypt +8 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/bin/pyrsa-encrypt +8 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/bin/pyrsa-keygen +8 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/bin/pyrsa-priv2pub +8 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/bin/pyrsa-sign +8 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/bin/pyrsa-verify +8 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__init__.py +2 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/debug.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/__pycache__/error.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__init__.py +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/__pycache__/streaming.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__init__.py +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/decoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/encoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/__pycache__/eoo.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/decoder.py +2189 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/encoder.py +954 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/ber/eoo.py +28 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__init__.py +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/decoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/__pycache__/encoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/decoder.py +149 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/cer/encoder.py +331 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__init__.py +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/decoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/__pycache__/encoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/decoder.py +120 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/der/encoder.py +126 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__init__.py +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/decoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/__pycache__/encoder.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/decoder.py +244 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/native/encoder.py +285 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/codec/streaming.py +234 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__init__.py +4 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/__pycache__/integer.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/compat/integer.py +13 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/debug.py +146 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/error.py +116 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__init__.py +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/char.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/constraint.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/error.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedtype.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/namedval.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/opentype.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tag.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/tagmap.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/univ.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/__pycache__/useful.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/base.py +699 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/char.py +288 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/constraint.py +751 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/error.py +11 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/namedtype.py +550 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/namedval.py +192 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/opentype.py +104 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/tag.py +335 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/tagmap.py +96 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/univ.py +3327 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1/type/useful.py +189 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/INSTALLER +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/LICENSE.rst +24 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/METADATA +228 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/RECORD +72 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/REQUESTED +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/WHEEL +5 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/top_level.txt +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/pyasn1-0.6.1.dist-info/zip-safe +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__init__.py +60 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/asn1.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/cli.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/common.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/core.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/key.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/parallel.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pem.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/pkcs1_v2.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/prime.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/randnum.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/transform.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/__pycache__/util.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/asn1.py +52 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/cli.py +321 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/common.py +184 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/core.py +53 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/key.py +858 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/parallel.py +96 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/pem.py +134 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/pkcs1.py +485 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/pkcs1_v2.py +100 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/prime.py +198 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/py.typed +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/randnum.py +95 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/transform.py +72 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa/util.py +97 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa-4.9.dist-info/INSTALLER +1 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa-4.9.dist-info/LICENSE +13 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa-4.9.dist-info/METADATA +106 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa-4.9.dist-info/RECORD +42 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa-4.9.dist-info/REQUESTED +0 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa-4.9.dist-info/WHEEL +4 -0
- package/lib/cloudfront/lambda-bundled/cognito-customui-session/rsa-4.9.dist-info/entry_points.txt +8 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_cffi_gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_imp_emulation.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/_shimmed_dist_utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/api.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/backend_ctypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cffi_opcode.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/commontypes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/cparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/error.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/ffiplatform.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/gen_src.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/lock.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/model.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/pkgconfig.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/recompiler.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/setuptools_ext.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_cpy.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/vengine_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cffi/__pycache__/verifier.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__about__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/fernet.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/extensions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/general_name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/name.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/ocsp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/cryptography/x509/__pycache__/oid.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/algorithms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwk.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jws.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/api_jwt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/help.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwk_set_cache.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/jwks_client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/types.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/jwt/__pycache__/warnings.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/_ast_gen.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/ast_transforms.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_ast.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_generator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_lexer.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/edge-auth/pycparser/__pycache__/c_parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_aws_iot_metrics.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/_test.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/auth.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/cbor.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/checksums.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/common.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/crypto.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/http.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/io.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/logging.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt5.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/mqtt_request_response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/s3.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/__pycache__/websocket.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/aio/__pycache__/http.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/awscrt/eventstream/__pycache__/rpc.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/bin/__pycache__/jp.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/args.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/auth.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/awsrequest.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compat.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/compress.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/config.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configloader.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/configprovider.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/context.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/credentials.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/discovery.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/endpoint_provider.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/errorfactory.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/eventstream.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/handlers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/history.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/hooks.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpchecksum.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/httpsession.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/loaders.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/model.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/monitoring.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/paginate.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/parsers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/plugin.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/regions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/retryhandler.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/serialize.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/session.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/signers.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/stub.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/tokens.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/translate.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/useragent.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/validate.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/__pycache__/waiter.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/crt/__pycache__/auth.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/client.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/docstring.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/example.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/method.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/paginator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/params.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/service.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/shape.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/sharedexample.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/translator.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/__pycache__/waiter.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/docstringparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/restdoc.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/docs/bcdoc/__pycache__/style.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/adaptive.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/base.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/bucket.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/quota.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/special.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/standard.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/retries/__pycache__/throttling.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/__pycache__/six.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/botocore/vendored/requests/packages/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_common.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/_version.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/easter.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/relativedelta.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/rrule.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/tzwin.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/__pycache__/utils.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/_parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/parser/__pycache__/isoparser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_common.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/_factories.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/tz.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/tz/__pycache__/win.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/ast.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/lexer.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_base_connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_request_methods.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/fields.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/fetch.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/request.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/emscripten/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssltransport.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc +0 -0
- package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc +0 -0
- package/lib/cloudfront/patterns/cognito-customui-auth.js +21 -10
- package/package.json +1 -1
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/__init__.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/compat.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/exceptions.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/functions.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/parser.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/jmespath/__pycache__/visitor.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/__init__.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_collections.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/_version.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connection.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/connectionpool.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/exceptions.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/filepost.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/poolmanager.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/__pycache__/response.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/contrib/__pycache__/socks.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/__init__.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/http2/__pycache__/probe.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/__init__.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/connection.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/proxy.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/request.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/response.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/retry.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/ssl_.cpython-312.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/timeout.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/url.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/util.cpython-312.pyc
CHANGED
|
Binary file
|
package/lib/cloudfront/lambda-bundled/hmacSecret/urllib3/util/__pycache__/wait.cpython-312.pyc
CHANGED
|
Binary file
|
|
@@ -82,8 +82,16 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
82
82
|
const sessionIssuancePath = props.sessionIssuancePath ?? '/auth/session';
|
|
83
83
|
// Extra config secret for values that are CDK tokens at synth time (and so
|
|
84
84
|
// cannot be baked into config_generated.py) — Lambda@Edge forbids env vars.
|
|
85
|
+
// Bake the LITERAL name below, NOT `extraConfigSecret.secretName`: that
|
|
86
|
+
// property is a deploy-time token (CloudFormation derives it by parsing the
|
|
87
|
+
// secret ARN), so baking it into config_generated.py at synth renders it as
|
|
88
|
+
// `${Token[Fn::Join.NNNN]}`. The edge's `get_secret_value(SecretId=...)`
|
|
89
|
+
// then fails with `ValidationException: Invalid name`, the extra config
|
|
90
|
+
// (post_auth_hook_url, kvs_arn, post_auth_hook_secret_arn) never loads, and
|
|
91
|
+
// the identity-linking hook is silently never called.
|
|
92
|
+
const extraConfigSecretName = `cloudfront-customui-config-${canonicalDomain}`;
|
|
85
93
|
const extraConfigSecret = new aws_cdk_lib_1.aws_secretsmanager.Secret(this, 'CustomUiConfigSecret', {
|
|
86
|
-
secretName:
|
|
94
|
+
secretName: extraConfigSecretName,
|
|
87
95
|
secretObjectValue: {
|
|
88
96
|
kvs_arn: core.SecretValue.unsafePlainText(kvsArn),
|
|
89
97
|
post_auth_hook_url: core.SecretValue.unsafePlainText(props.identityLinkingHookUrl),
|
|
@@ -99,7 +107,7 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
99
107
|
post_logout_redirect_path: props.postLogoutRedirectPath ?? '/',
|
|
100
108
|
config_region: props.authRegion,
|
|
101
109
|
};
|
|
102
|
-
const configPy = this.renderConfigPy(baseSecretName,
|
|
110
|
+
const configPy = this.renderConfigPy(baseSecretName, extraConfigSecretName, props.authRegion, staticOverrides);
|
|
103
111
|
// Shared IAM grants factory for the edge Lambdas.
|
|
104
112
|
const grantCommon = (role, opts) => {
|
|
105
113
|
role.addToPrincipalPolicy(new aws_cdk_lib_1.aws_iam.PolicyStatement({
|
|
@@ -149,22 +157,25 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
149
157
|
aws_cdk_lib_1.aws_iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
|
|
150
158
|
],
|
|
151
159
|
});
|
|
152
|
-
// Session-issuance Lambda
|
|
160
|
+
// Session-issuance Lambda: verifies the Cognito id_token with the pure-Python
|
|
161
|
+
// `rsa` library, bundled from its own cognito-customui-session deps dir (NOT the
|
|
162
|
+
// fat PyJWT/cryptography cognito-auth bundle) so it fits the 1 MB viewer-request
|
|
163
|
+
// Lambda@Edge code limit.
|
|
153
164
|
const issuanceRole = edgeRole('IssuanceRole');
|
|
154
165
|
grantCommon(issuanceRole, { kms: true, ddb: true, kvs: false, cognito: false, hookSecret: true });
|
|
155
|
-
const issuanceFn = this.makeEdgeFunction('SessionIssuance', 'cognito-customui-session', configPy, issuanceRole,
|
|
166
|
+
const issuanceFn = this.makeEdgeFunction('SessionIssuance', 'cognito-customui-session', configPy, issuanceRole, 'cognito-customui-session');
|
|
156
167
|
// Refresh + logout Lambdas (boto3 only — no bundled deps).
|
|
157
168
|
let refreshFn;
|
|
158
169
|
if (this.enableRefresh) {
|
|
159
170
|
const refreshRole = edgeRole('RefreshRole');
|
|
160
171
|
grantCommon(refreshRole, { kms: true, ddb: true, kvs: false, cognito: true, hookSecret: false });
|
|
161
|
-
refreshFn = this.makeEdgeFunction('SessionRefresh', 'cognito-customui-refresh', configPy, refreshRole
|
|
172
|
+
refreshFn = this.makeEdgeFunction('SessionRefresh', 'cognito-customui-refresh', configPy, refreshRole);
|
|
162
173
|
}
|
|
163
174
|
let logoutFn;
|
|
164
175
|
if (props.enableLogoutEndpoint ?? true) {
|
|
165
176
|
const logoutRole = edgeRole('LogoutRole');
|
|
166
177
|
grantCommon(logoutRole, { kms: true, ddb: true, kvs: true, cognito: true, hookSecret: false });
|
|
167
|
-
logoutFn = this.makeEdgeFunction('SessionLogout', 'cognito-customui-logout', configPy, logoutRole
|
|
178
|
+
logoutFn = this.makeEdgeFunction('SessionLogout', 'cognito-customui-logout', configPy, logoutRole);
|
|
168
179
|
}
|
|
169
180
|
// Retain old Lambda@Edge versions on a real update/delete — edge replicas
|
|
170
181
|
// take hours to drain — but let CloudFormation delete a version whose
|
|
@@ -371,9 +382,9 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
371
382
|
'',
|
|
372
383
|
].join('\n');
|
|
373
384
|
}
|
|
374
|
-
makeEdgeFunction(id, sourceDirName, configPy, role,
|
|
385
|
+
makeEdgeFunction(id, sourceDirName, configPy, role, bundledDepsName) {
|
|
375
386
|
const sourceDir = path.join(__dirname, '../lambda', sourceDirName);
|
|
376
|
-
const bundledDepsDir = path.join(__dirname, '../lambda-bundled
|
|
387
|
+
const bundledDepsDir = bundledDepsName ? path.join(__dirname, '../lambda-bundled', bundledDepsName) : undefined;
|
|
377
388
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'customui-auth-'));
|
|
378
389
|
const configPyPath = path.join(tempDir, 'config_generated.py');
|
|
379
390
|
fs.writeFileSync(configPyPath, configPy);
|
|
@@ -387,7 +398,7 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
387
398
|
bundling: {
|
|
388
399
|
local: {
|
|
389
400
|
tryBundle(outputDir) {
|
|
390
|
-
if (
|
|
401
|
+
if (bundledDepsDir && fs.existsSync(bundledDepsDir)) {
|
|
391
402
|
fs.cpSync(bundledDepsDir, outputDir, { recursive: true });
|
|
392
403
|
}
|
|
393
404
|
for (const file of fs.readdirSync(sourceDir)) {
|
|
@@ -411,4 +422,4 @@ class CognitoCustomUiAuth extends constructs.Construct {
|
|
|
411
422
|
}
|
|
412
423
|
}
|
|
413
424
|
exports.CognitoCustomUiAuth = CognitoCustomUiAuth;
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1jdXN0b211aS1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nsb3VkZnJvbnQvcGF0dGVybnMvY29nbml0by1jdXN0b211aS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FPcUI7QUFDckIsdURBQXlDO0FBQ3pDLDJEQUFvRztBQUNwRyxpRkFBNkU7QUEwSDdFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsbUJBQW1ELFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFZMUYsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFzQztRQUN6RixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDO1FBQ3BELElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcscUJBQUcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sU0FBUyxHQUFHLHFCQUFHLENBQUMs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RUFBRSxDQUFDO2dDQUM3QyxJQUFJLElBQUksS0FBSyxrQkFBa0I7b0NBQUUsU0FBUztnQ0FDMUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RixDQUFDOzRCQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDeEUsT0FBTyxJQUFJLENBQUM7d0JBQ2QsQ0FBQztxQkFDRjtvQkFDRCxLQUFLLEVBQUUsd0JBQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWE7b0JBQy9DLE9BQU8sRUFBRTt3QkFDUCxNQUFNLEVBQUUsSUFBSTt3QkFDWiw0SUFBNEk7cUJBQzdJO29CQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztpQkFDakY7YUFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaGJELGtEQWdiQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIgYXMgYWNtLFxuICBhd3NfY2xvdWRmcm9udCBhcyBjbG91ZGZyb250LFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX3NzbSBhcyBzc20sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBFeHRlbnNpb24sIEV4dGVuc2lvbkNvbmZpZywgQWRkQmVoYXZpb3JPcHRpb25zLCBSb2xlTWF0Y2hNb2RlIH0gZnJvbSAnLi9zZWN1cmVkQ2xvdWRGcm9udCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNvbXBvc2VyIH0gZnJvbSAnLi4vY2xvdWRmcm9udC1mdW5jdGlvbnMvZnVuY3Rpb24tY29tcG9zZXInO1xuXG4vKipcbiAqIFByb3BzIGZvciB7QGxpbmsgQ29nbml0b0N1c3RvbVVpQXV0aH0uXG4gKlxuICogQ29uZmlndXJlcyBjdXN0b21lciBhdXRoZW50aWNhdGlvbiBmb3IgYSBzdG9yZWZyb250IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uXG4gKiB1c2luZyBBV1MgQ29nbml0byB3aXRoIGEgZmlyc3QtcGFydHkgKGN1c3RvbSkgbG9naW4gVUkuIFVuYXV0aGVudGljYXRlZFxuICogcmVxdWVzdHMgdG8gcHJvdGVjdGVkIHBhdGhzIGFyZSByZWRpcmVjdGVkIHRvIHtAbGluayB1bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGh9XG4gKiBvbiB0aGUgYnJhbmQncyBvd24gZG9tYWluIOKAlCBuZXZlciB0byBhIENvZ25pdG8gaG9zdGVkIFVJLiBUaGUgbG9naW4gcGFnZVxuICogcGVyZm9ybXMgU1JQIGNsaWVudC1zaWRlIGFuZCBQT1NUcyB0aGUgcmVzdWx0aW5nIHRva2VucyB0byB0aGUgc2Vzc2lvbi1pc3N1YW5jZVxuICogZW5kcG9pbnQ7IENvZ25pdG8gdG9rZW5zIGFyZSBuZXZlciBzdG9yZWQgaW4gdGhlIGJyb3dzZXIuXG4gKlxuICogVGhlIGJhY2tlbmQgKHVzZXIgcG9vbCwgSE1BQyBrZXksIGF1dGggdGFibGUsIEtWUywgY29uZmlnIHNlY3JldCkgaXMgcHJvdmlkZWRcbiAqIGJ5IHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfSBhbmQgcmVmZXJlbmNlZCBoZXJlIHZpYSBTU00gcGFyYW1ldGVyc1xuICogd3JpdHRlbiB1bmRlciB7QGxpbmsgYXV0aFNzbVBhcmFtUHJlZml4fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2duaXRvQ3VzdG9tVWlBdXRoUHJvcHM8VFJvbGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIENSRUFURSBNT0RFOiBkZWZhdWx0IGNhY2hlIGJlaGF2aW91ciBmb3IgYSBkaXN0cmlidXRpb24gdGhpcyBjb25zdHJ1Y3Qgd2lsbFxuICAgKiBjcmVhdGUuIFByb3ZpZGUgd2l0aCB7QGxpbmsgY2VydGlmaWNhdGV9LiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgKiB7QGxpbmsgZGlzdHJpYnV0aW9ufS4gWW91IE1BWSBzZXQgYGZ1bmN0aW9uQXNzb2NpYXRpb25zYCBoZXJlIChlLmcuIGFcbiAgICogZ2VvLXJvdXRpbmcgdmlld2VyLXJlcXVlc3QgZnVuY3Rpb24pIOKAlCBpdCBpcyBtZXJnZWQgd2l0aCB0aGUgYXV0aC1jaGVja1xuICAgKiBmdW5jdGlvbjsgQ2xvdWRGcm9udCdzIG9uZS1mdW5jdGlvbi1wZXItZXZlbnQtdHlwZSBydWxlIGlzIGVuZm9yY2VkIHdpdGggYVxuICAgKiBjbGVhciBlcnJvciByYXRoZXIgdGhhbiBhbiBMMSBvdmVycmlkZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCZWhhdmlvcj86IGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zO1xuICAvKiogRG9tYWluIG5hbWVzIGZvciB0aGUgYXV0aCBjb25maWcgKGFsbG93ZWRfZG9tYWlucyk7IGZpcnN0IGlzIGNhbm9uaWNhbC4gUmVxdWlyZWQgaW4gYm90aCBtb2Rlcy4gKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgc2hhcmVkIHNlc3Npb24gY29uZmlnIHNlY3JldCB0aGUgZWRnZSBMYW1iZGFzIGZldGNoIGJ5IG5hbWUuXG4gICAqIE1VU1QgbWF0Y2ggdGhlIG5hbWUgdGhlIHtAbGluayBDb2duaXRvU2Vzc2lvbkJhY2tlbmR9IGNyZWF0ZWQgaXQgdW5kZXIuXG4gICAqIE92ZXJyaWRlIHRvIGRlY291cGxlIGZyb20gdGhlIGNhbm9uaWNhbCBkb21haW4uXG4gICAqIEBkZWZhdWx0IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7ZG9tYWluTmFtZXNbMF19YFxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU2VjcmV0TmFtZT86IHN0cmluZztcbiAgLyoqIENSRUFURSBNT0RFOiBBQ00gY2VydGlmaWNhdGUgKHVzLWVhc3QtMSkgY292ZXJpbmcge0BsaW5rIGRvbWFpbk5hbWVzfS4gKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBhY20uSUNlcnRpZmljYXRlO1xuICAvKiogQ1JFQVRFIE1PREU6IFdBRiB3ZWIgQUNMIEFSTiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY3JlYXRlZCBkaXN0cmlidXRpb24uICovXG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xuICAvKipcbiAgICogQVRUQUNIIE1PREU6IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiB0byBhZGQgdGhlIGF1dGggZW5kcG9pbnQgKyBwcm90ZWN0ZWRcbiAgICogYmVoYXZpb3VycyB0bywgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoXG4gICAqIHtAbGluayBkZWZhdWx0QmVoYXZpb3J9L3tAbGluayBjZXJ0aWZpY2F0ZX0uIENsb3VkRnJvbnQgYWxsb3dzIG9ubHkgb25lXG4gICAqIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIsIHNvIHRoZSBhdXRoLWNoZWNrIGlzIGFkZGVkIHRvIHByb3RlY3RlZFxuICAgKiBQQVRIIGJlaGF2aW91cnMgKHZpYSB7QGxpbmsgcHJvdGVjdH0pIOKAlCBpdCBpcyBOT1QgZm9yY2VkIG9udG8gdGhlIGV4aXN0aW5nXG4gICAqIGRlZmF1bHQgYmVoYXZpb3VyLiBVc2Uge0BsaW5rIGF1dGhGdW5jdGlvbn0gdG8gY29tcG9zZSBpdCB0aGVyZSB5b3Vyc2VsZi5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogT3JpZ2luIGZvciB0aGUgYXV0aCBlbmRwb2ludCBiZWhhdmlvdXJzIChpc3N1YW5jZSAvIHJlZnJlc2ggLyBsb2dvdXQpLiBUaGVzZVxuICAgKiBlbmRwb2ludHMgYXJlIGdlbmVyYXRlZCBlbnRpcmVseSBieSBMYW1iZGFARWRnZSBhbmQgbmV2ZXIgcmVhY2ggdGhlIG9yaWdpbixcbiAgICogYnV0IGEgQ2xvdWRGcm9udCBiZWhhdmlvdXIgc3RpbGwgcmVxdWlyZXMgb25lLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0aGUge0BsaW5rIGRlZmF1bHRCZWhhdmlvcn0gb3JpZ2luLiBTZXQgdGhpcyB0byBhIE5PTi1WUEMgb3JpZ2luXG4gICAqIChmb3IgZXhhbXBsZSBhbiBTMyBvcmlnaW4gYWxyZWFkeSBvbiB0aGUgZGlzdHJpYnV0aW9uKSB3aGVuIHRoZSBkZWZhdWx0XG4gICAqIGJlaGF2aW91cidzIG9yaWdpbiBpcyBhIENsb3VkRnJvbnQgVlBDIG9yaWdpbjogQVdTIGRvZXMgbm90IGFsbG93IGFuXG4gICAqIG9yaWdpbi1yZXF1ZXN0IExhbWJkYUBFZGdlIGFzc29jaWF0aW9uIG9uIGEgVlBDLW9yaWdpbiBiZWhhdmlvdXIsIGFuZCB0aGVzZVxuICAgKiBlbmRwb2ludHMgcnVuIGF0IG9yaWdpbi1yZXF1ZXN0LiBSRVFVSVJFRCBpbiBBVFRBQ0ggTU9ERSAod2hlblxuICAgKiB7QGxpbmsgZGlzdHJpYnV0aW9ufSBpcyBzZXQpLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aEVuZHBvaW50T3JpZ2luPzogY2xvdWRmcm9udC5JT3JpZ2luO1xuICAvKipcbiAgICogU1NNIHBhcmFtZXRlciBwcmVmaXggdW5kZXIgd2hpY2gge0BsaW5rIENvZ25pdG9BdXRoSW5mcmFzdHJ1Y3R1cmV9IHB1Ymxpc2hlZFxuICAgKiBgY29uZmlnU2VjcmV0QXJuYCwgYGttc0tleUFybmAsIGBhdXRoVGFibGVBcm5gLCBga3ZzQXJuYCwgYGNvZ25pdG9Eb21haW5gLFxuICAgKiBgY2xpZW50SWRgIGFuZCBgdXNlclBvb2xJZGAuXG4gICAqL1xuICByZWFkb25seSBhdXRoU3NtUGFyYW1QcmVmaXg6IHN0cmluZztcbiAgLyoqIFJlZ2lvbiB0aGUgYXV0aCBiYWNrZW5kIChjb25maWcgc2VjcmV0LCBhdXRoIHRhYmxlKSBsaXZlcyBpbi4gKi9cbiAgcmVhZG9ubHkgYXV0aFJlZ2lvbjogc3RyaW5nO1xuICAvKiogRmlyc3QtcGFydHkgcGF0aCB1bmF1dGhlbnRpY2F0ZWQgdXNlcnMgYXJlIHJlZGlyZWN0ZWQgdG8uIEBkZWZhdWx0ICcvbG9naW4nICovXG4gIHJlYWRvbmx5IHVuYXV0aGVudGljYXRlZFJlZGlyZWN0UGF0aD86IHN0cmluZztcbiAgLyoqIEV4dGVuc2lvbnMgYXBwbGllZCB0byB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuIEBkZWZhdWx0IFtdIChwdWJsaWMpICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeHRlbnNpb25zPzogRXh0ZW5zaW9uW107XG4gIC8qKiBSb2xlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEV4dGVuc2lvbkNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT47XG4gIC8qKiBJbmplY3QgdmFsaWRhdGVkIGlkZW50aXR5IGNsYWltcyBhcyBvcmlnaW4gaGVhZGVycy4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBlbmFibGVIZWFkZXJJbmplY3Rpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFwIG9mIG9yaWdpbiBoZWFkZXIgbmFtZSB0byBzZXNzaW9uLUpXVCBjbGFpbSBrZXkuXG4gICAqIEBkZWZhdWx0IHsgJ3gtY3VzdG9tZXItaWQnOiAnY3VzdG9tZXJfaWQnLCAneC1jdXN0b21lci1lbWFpbCc6ICdlbWFpbCcgfVxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBhdGggb2YgdGhlIHNlc3Npb24taXNzdWFuY2UgZW5kcG9pbnQgKFBPU1QpLiBAZGVmYXVsdCAnL2F1dGgvc2Vzc2lvbicgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbklzc3VhbmNlUGF0aD86IHN0cmluZztcbiAgLyoqIE1vdW50IHRoZSBzaWxlbnQtcmVmcmVzaCBlbmRwb2ludCBhdCAnL29hdXRoMi9yZWZyZXNoJy4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBlbmFibGVSZWZyZXNoRW5kcG9pbnQ/OiBib29sZWFuO1xuICAvKiogTW91bnQgdGhlIGxvZ291dCBlbmRwb2ludCBhdCAnL29hdXRoMi9sb2dvdXQnIChQT1NUKS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZWFkb25seSBlbmFibGVMb2dvdXRFbmRwb2ludD86IGJvb2xlYW47XG4gIC8qKiBVUkwgb2YgdGhlIGlkZW50aXR5LWxpbmtpbmcgaG9vayB0aGUgaXNzdWFuY2UgZW5kcG9pbnQgY2FsbHMgdG8gcmVzb2x2ZSBjdXN0b21lcl9pZC4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlMaW5raW5nSG9va1VybDogc3RyaW5nO1xuICAvKiogU2VjcmV0cyBNYW5hZ2VyIEFSTiBvZiB0aGUgc2hhcmVkIHNlY3JldCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgaG9vay4gKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHlMaW5raW5nSG9va1NlY3JldEFybj86IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSldUIGxpZmV0aW1lLCBzZWNvbmRzLiBAZGVmYXVsdCAzNjAwICovXG4gIHJlYWRvbmx5IHNlc3Npb25UdGxTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogU3RvcmVkIHJlZnJlc2gtdG9rZW4gbGlmZXRpbWUsIGRheXMuIEBkZWZhdWx0IDMwICovXG4gIHJlYWRvbmx5IHJlZnJlc2hUdGxEYXlzPzogbnVtYmVyO1xuICAvKiogUGF0aCB0byByZWRpcmVjdCB0byBhZnRlciBsb2dvdXQuIEBkZWZhdWx0ICcvJyAqL1xuICByZWFkb25seSBwb3N0TG9nb3V0UmVkaXJlY3RQYXRoPzogc3RyaW5nO1xuICAvKiogQWRkIFNQQSBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBlbmFibGVFcnJvclJlc3BvbnNlcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBwYWdlIHBhdGggd2hlbiB7QGxpbmsgZW5hYmxlRXJyb3JSZXNwb25zZXN9IGlzIHNldC4gQGRlZmF1bHQgJy9lcnJvci5odG1sJyAqL1xuICByZWFkb25seSBlcnJvclJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IHJvb3Qgb2JqZWN0LiBAZGVmYXVsdCAnaW5kZXguaHRtbCcgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFJvb3RPYmplY3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDUkVBVEUgTU9ERTogbWluaW11bSBUTFMgc2VjdXJpdHkgcG9saWN5IGZvciB0aGUgY3JlYXRlZCBkaXN0cmlidXRpb24nc1xuICAgKiB2aWV3ZXIgY29ubmVjdGlvbnMuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50LWdlbmVyYXRpb24gcG9saWN5OyBvdmVycmlkZSBvbmx5XG4gICAqIHRvIHJlbGF4IGl0IChub3QgcmVjb21tZW5kZWQpLiBJZ25vcmVkIGluIEFUVEFDSCBNT0RFIOKAlCB0aGUgcGFzc2VkLWluXG4gICAqIGRpc3RyaWJ1dGlvbiBhbHJlYWR5IGZpeGVzIGl0cyBvd24gcG9saWN5LlxuICAgKiBAZGVmYXVsdCBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2wuVExTX1YxXzJfMjAyNVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVByb3RvY29sVmVyc2lvbj86IGNsb3VkZnJvbnQuU2VjdXJpdHlQb2xpY3lQcm90b2NvbDtcbiAgLyoqXG4gICAqIEFsbG93ZWQgdmlld2VyIEhUVFAgbWV0aG9kcyBmb3IgdGhlIGF1dGggZW5kcG9pbnQgYmVoYXZpb3VycyAoc2Vzc2lvblxuICAgKiBpc3N1YW5jZSwgcmVmcmVzaCwgbG9nb3V0KS4gVGhlc2UgZW5kcG9pbnRzIGFyZSBQT1NULWRyaXZlbiwgc28gdGhlIGRlZmF1bHRcbiAgICogcGVybWl0cyBhbGwgbWV0aG9kczsgQ2xvdWRGcm9udCdzIEdFVC9IRUFEIGRlZmF1bHQgd291bGQgb3RoZXJ3aXNlIHJlamVjdCB0aGVcbiAgICogUE9TVCB0aGV5IHJlcXVpcmUuIE92ZXJyaWRlIHRvIG5hcnJvdyBpdCAobXVzdCBzdGlsbCBpbmNsdWRlIFBPU1QpLlxuICAgKiBAZGVmYXVsdCBjbG91ZGZyb250LkFsbG93ZWRNZXRob2RzLkFMTE9XX0FMTFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHM/OiBjbG91ZGZyb250LkFsbG93ZWRNZXRob2RzO1xufVxuXG4vKipcbiAqIEN1c3RvbWVyIGF1dGhlbnRpY2F0aW9uIGZvciBhIHN0b3JlZnJvbnQgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdXNpbmcgQ29nbml0b1xuICogd2l0aCBhIGN1c3RvbSwgYnJhbmQtZG9tYWluIGxvZ2luIFVJLlxuICpcbiAqIE9XTlMgKGluIHRoaXMgbGlicmFyeSk6IHRoZSBlZGdlIHNlc3Npb24tdmFsaWRhdGlvbiBmdW5jdGlvbiAocmV1c2VkIHNoYXJlZFxuICogbW9kdWxlLCByZWRpcmVjdGluZyB0byBhIGZpcnN0LXBhcnR5IC9sb2dpbiksIHRoZSBzZXNzaW9uLWlzc3VhbmNlIC8gcmVmcmVzaCAvXG4gKiBsb2dvdXQgTGFtYmRhQEVkZ2UgZnVuY3Rpb25zLCBhbmQgdGhlaXIgSUFNIHdpcmluZy4gQ09OU1VNRVM6IHRoZSBDb2duaXRvXG4gKiBiYWNrZW5kIGZyb20ge0BsaW5rIENvZ25pdG9BdXRoSW5mcmFzdHJ1Y3R1cmV9LiBEb2VzIE5PVCBwcm92aXNpb24gdGhlIHVzZXJcbiAqIHBvb2wg4oCUIHRoYXQgaXMgdGhlIGJhY2tlbmQgY29uc3RydWN0J3Mgam9iLlxuICovXG5leHBvcnQgY2xhc3MgQ29nbml0b0N1c3RvbVVpQXV0aDxUUm9sZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9zZXI6IEZ1bmN0aW9uQ29tcG9zZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tcG9zZWRGdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGNsb3VkZnJvbnQuRnVuY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGt2czogY2xvdWRmcm9udC5JS2V5VmFsdWVTdG9yZTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dpblJlZGlyZWN0UGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZUhlYWRlckluamVjdGlvbjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJJbmplY3Rpb25DbGFpbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlUmVmcmVzaDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsYXN0Q3JlYXRlZEZ1bmN0aW9uOiBjbG91ZGZyb250LkZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvZ25pdG9DdXN0b21VaUF1dGhQcm9wczxUUm9sZT4pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgYXR0YWNoTW9kZSA9IHByb3BzLmRpc3RyaWJ1dGlvbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChhdHRhY2hNb2RlICYmICFwcm9wcy5hdXRoRW5kcG9pbnRPcmlnaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXV0aEVuZHBvaW50T3JpZ2luIGlzIHJlcXVpcmVkIHdoZW4gYXR0YWNoaW5nIHRvIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbicpO1xuICAgIH1cbiAgICBpZiAoIWF0dGFjaE1vZGUgJiYgKCFwcm9wcy5kZWZhdWx0QmVoYXZpb3IgfHwgIXByb3BzLmNlcnRpZmljYXRlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWZhdWx0QmVoYXZpb3IgYW5kIGNlcnRpZmljYXRlIGFyZSByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIGEgZGlzdHJpYnV0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcCA9IHByb3BzLmF1dGhTc21QYXJhbVByZWZpeDtcbiAgICBjb25zdCBjb25maWdTZWNyZXRBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2NvbmZpZ1NlY3JldEFybmApO1xuICAgIGNvbnN0IGttc0tleUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0va21zS2V5QXJuYCk7XG4gICAgY29uc3QgYXV0aFRhYmxlQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9hdXRoVGFibGVBcm5gKTtcbiAgICBjb25zdCBrdnNBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2t2c0FybmApO1xuXG4gICAgdGhpcy5rdnMgPSBjbG91ZGZyb250LktleVZhbHVlU3RvcmUuZnJvbUtleVZhbHVlU3RvcmVBcm4odGhpcywgJ0tWUycsIGt2c0Fybik7XG4gICAgdGhpcy5sb2dpblJlZGlyZWN0UGF0aCA9IHByb3BzLnVuYXV0aGVudGljYXRlZFJlZGlyZWN0UGF0aCA/PyAnL2xvZ2luJztcbiAgICB0aGlzLmVuYWJsZUhlYWRlckluamVjdGlvbiA9IHByb3BzLmVuYWJsZUhlYWRlckluamVjdGlvbiA/PyB0cnVlO1xuICAgIHRoaXMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zID0gcHJvcHMuaGVhZGVySW5qZWN0aW9uQ2xhaW1zID8/IHtcbiAgICAgICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJyxcbiAgICAgICd4LWN1c3RvbWVyLWVtYWlsJzogJ2VtYWlsJyxcbiAgICB9O1xuICAgIHRoaXMuZW5hYmxlUmVmcmVzaCA9IHByb3BzLmVuYWJsZVJlZnJlc2hFbmRwb2ludCA/PyB0cnVlO1xuICAgIHRoaXMuY29tcG9zZXIgPSBuZXcgRnVuY3Rpb25Db21wb3NlcigpO1xuICAgIHRoaXMuY29tcG9zZWRGdW5jdGlvbnMgPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdCBjYW5vbmljYWxEb21haW4gPSBwcm9wcy5kb21haW5OYW1lc1swXTtcbiAgICBjb25zdCBiYXNlU2VjcmV0TmFtZSA9IHByb3BzLmNvbmZpZ1NlY3JldE5hbWUgPz8gYGNsb3VkZnJvbnQtYXV0aC1jb25maWctJHtjYW5vbmljYWxEb21haW59YDtcbiAgICBjb25zdCBzZXNzaW9uSXNzdWFuY2VQYXRoID0gcHJvcHMuc2Vzc2lvbklzc3VhbmNlUGF0aCA/PyAnL2F1dGgvc2Vzc2lvbic7XG5cbiAgICAvLyBFeHRyYSBjb25maWcgc2VjcmV0IGZvciB2YWx1ZXMgdGhhdCBhcmUgQ0RLIHRva2VucyBhdCBzeW50aCB0aW1lIChhbmQgc29cbiAgICAvLyBjYW5ub3QgYmUgYmFrZWQgaW50byBjb25maWdfZ2VuZXJhdGVkLnB5KSDigJQgTGFtYmRhQEVkZ2UgZm9yYmlkcyBlbnYgdmFycy5cbiAgICBjb25zdCBleHRyYUNvbmZpZ1NlY3JldCA9IG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgJ0N1c3RvbVVpQ29uZmlnU2VjcmV0Jywge1xuICAgICAgc2VjcmV0TmFtZTogYGNsb3VkZnJvbnQtY3VzdG9tdWktY29uZmlnLSR7Y2Fub25pY2FsRG9tYWlufWAsXG4gICAgICBzZWNyZXRPYmplY3RWYWx1ZToge1xuICAgICAgICBrdnNfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChrdnNBcm4pLFxuICAgICAgICBwb3N0X2F1dGhfaG9va191cmw6IGNvcmUuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tVcmwpLFxuICAgICAgICBwb3N0X2F1dGhfaG9va19zZWNyZXRfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuID8/ICcnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogYEN1c3RvbS1VSSBhdXRoIGNvbmZpZyBvdmVycmlkZXMgZm9yICR7Y2Fub25pY2FsRG9tYWlufWAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGF0aWNPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBsb2dpbl9yZWRpcmVjdF9wYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgYWxsb3dlZF9kb21haW5zOiBKU09OLnN0cmluZ2lmeShwcm9wcy5kb21haW5OYW1lcyksXG4gICAgICBzZXNzaW9uX3R0bF9zZWNvbmRzOiBTdHJpbmcocHJvcHMuc2Vzc2lvblR0bFNlY29uZHMgPz8gMzYwMCksXG4gICAgICByZWZyZXNoX3R0bF9kYXlzOiBTdHJpbmcocHJvcHMucmVmcmVzaFR0bERheXMgPz8gMzApLFxuICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfcGF0aDogcHJvcHMucG9zdExvZ291dFJlZGlyZWN0UGF0aCA/PyAnLycsXG4gICAgICBjb25maWdfcmVnaW9uOiBwcm9wcy5hdXRoUmVnaW9uLFxuICAgIH07XG5cbiAgICBjb25zdCBjb25maWdQeSA9IHRoaXMucmVuZGVyQ29uZmlnUHkoYmFzZVNlY3JldE5hbWUsIGV4dHJhQ29uZmlnU2VjcmV0LnNlY3JldE5hbWUsIHByb3BzLmF1dGhSZWdpb24sIHN0YXRpY092ZXJyaWRlcyk7XG5cbiAgICAvLyBTaGFyZWQgSUFNIGdyYW50cyBmYWN0b3J5IGZvciB0aGUgZWRnZSBMYW1iZGFzLlxuICAgIGNvbnN0IGdyYW50Q29tbW9uID0gKHJvbGU6IGlhbS5JUm9sZSwgb3B0czogeyBrbXM6IGJvb2xlYW47IGRkYjogYm9vbGVhbjsga3ZzOiBib29sZWFuOyBjb2duaXRvOiBib29sZWFuOyBob29rU2VjcmV0OiBib29sZWFuIH0pOiB2b2lkID0+IHtcbiAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnLCAnc2VjcmV0c21hbmFnZXI6RGVzY3JpYmVTZWNyZXQnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbY29uZmlnU2VjcmV0QXJuLCBleHRyYUNvbmZpZ1NlY3JldC5zZWNyZXRBcm5dLFxuICAgICAgfSkpO1xuICAgICAgaWYgKG9wdHMuaG9va1NlY3JldCAmJiBwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuaWRlbnRpdHlMaW5raW5nSG9va1NlY3JldEFybl0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmttcykge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydrbXM6RGVjcnlwdCddLFxuICAgICAgICAgIHJlc291cmNlczogW2ttc0tleUFybl0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmRkYikge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydkeW5hbW9kYjpHZXRJdGVtJywgJ2R5bmFtb2RiOlB1dEl0ZW0nLCAnZHluYW1vZGI6RGVsZXRlSXRlbScsICdkeW5hbW9kYjpRdWVyeSddLFxuICAgICAgICAgIHJlc291cmNlczogW2F1dGhUYWJsZUFybiwgYCR7YXV0aFRhYmxlQXJufS9pbmRleC8qYF0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmt2cykge1xuICAgICAgICByb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogWydjbG91ZGZyb250LWtleXZhbHVlc3RvcmU6UHV0S2V5JywgJ2Nsb3VkZnJvbnQta2V5dmFsdWVzdG9yZTpEZXNjcmliZUtleVZhbHVlU3RvcmUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtrdnNBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5jb2duaXRvKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NvZ25pdG8taWRwOkluaXRpYXRlQXV0aCcsICdjb2duaXRvLWlkcDpSZXZva2VUb2tlbiddLFxuICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZWRnZVJvbGUgPSAocm9sZUlkOiBzdHJpbmcpOiBpYW0uUm9sZSA9PiBuZXcgaWFtLlJvbGUodGhpcywgcm9sZUlkLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWRnZWxhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICApLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIFNlc3Npb24taXNzdWFuY2UgTGFtYmRhIChuZWVkcyBQeUpXVCBmb3IgUlMyNTYg4oCUIHJldXNlIHRoZSBjb2duaXRvLWF1dGggYnVuZGxlKS5cbiAgICBjb25zdCBpc3N1YW5jZVJvbGUgPSBlZGdlUm9sZSgnSXNzdWFuY2VSb2xlJyk7XG4gICAgZ3JhbnRDb21tb24oaXNzdWFuY2VSb2xlLCB7IGttczogdHJ1ZSwgZGRiOiB0cnVlLCBrdnM6IGZhbHNlLCBjb2duaXRvOiBmYWxzZSwgaG9va1NlY3JldDogdHJ1ZSB9KTtcbiAgICBjb25zdCBpc3N1YW5jZUZuID0gdGhpcy5tYWtlRWRnZUZ1bmN0aW9uKCdTZXNzaW9uSXNzdWFuY2UnLCAnY29nbml0by1jdXN0b211aS1zZXNzaW9uJywgY29uZmlnUHksIGlzc3VhbmNlUm9sZSwgdHJ1ZSk7XG5cbiAgICAvLyBSZWZyZXNoICsgbG9nb3V0IExhbWJkYXMgKGJvdG8zIG9ubHkg4oCUIG5vIGJ1bmRsZWQgZGVwcykuXG4gICAgbGV0IHJlZnJlc2hGbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmVuYWJsZVJlZnJlc2gpIHtcbiAgICAgIGNvbnN0IHJlZnJlc2hSb2xlID0gZWRnZVJvbGUoJ1JlZnJlc2hSb2xlJyk7XG4gICAgICBncmFudENvbW1vbihyZWZyZXNoUm9sZSwgeyBrbXM6IHRydWUsIGRkYjogdHJ1ZSwga3ZzOiBmYWxzZSwgY29nbml0bzogdHJ1ZSwgaG9va1NlY3JldDogZmFsc2UgfSk7XG4gICAgICByZWZyZXNoRm4gPSB0aGlzLm1ha2VFZGdlRnVuY3Rpb24oJ1Nlc3Npb25SZWZyZXNoJywgJ2NvZ25pdG8tY3VzdG9tdWktcmVmcmVzaCcsIGNvbmZpZ1B5LCByZWZyZXNoUm9sZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGxldCBsb2dvdXRGbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5lbmFibGVMb2dvdXRFbmRwb2ludCA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBsb2dvdXRSb2xlID0gZWRnZVJvbGUoJ0xvZ291dFJvbGUnKTtcbiAgICAgIGdyYW50Q29tbW9uKGxvZ291dFJvbGUsIHsga21zOiB0cnVlLCBkZGI6IHRydWUsIGt2czogdHJ1ZSwgY29nbml0bzogdHJ1ZSwgaG9va1NlY3JldDogZmFsc2UgfSk7XG4gICAgICBsb2dvdXRGbiA9IHRoaXMubWFrZUVkZ2VGdW5jdGlvbignU2Vzc2lvbkxvZ291dCcsICdjb2duaXRvLWN1c3RvbXVpLWxvZ291dCcsIGNvbmZpZ1B5LCBsb2dvdXRSb2xlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gUmV0YWluIG9sZCBMYW1iZGFARWRnZSB2ZXJzaW9ucyBvbiBhIHJlYWwgdXBkYXRlL2RlbGV0ZSDigJQgZWRnZSByZXBsaWNhc1xuICAgIC8vIHRha2UgaG91cnMgdG8gZHJhaW4g4oCUIGJ1dCBsZXQgQ2xvdWRGb3JtYXRpb24gZGVsZXRlIGEgdmVyc2lvbiB3aG9zZVxuICAgIC8vIENSRUFURSB3YXMgcm9sbGVkIGJhY2sgKFJldGFpbkV4Y2VwdE9uQ3JlYXRlKS4gQSBwbGFpbiBSRVRBSU4gb3JwaGFucyB0aGVcbiAgICAvLyB2ZXJzaW9uIChhbmQsIHRocm91Z2ggaXQsIHRoZSBmdW5jdGlvbiBhbmQgaXRzIElBTSByb2xlKSBvbiBhIGZhaWxlZFxuICAgIC8vIGNyZWF0ZSwgYmxvY2tpbmcgdGhlIG5leHQgZGVwbG95J3MgaW1wb3J0OyBSRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURVxuICAgIC8vIGtlZXBzIHRoZSBkcmFpbi1zYWZlIHJldGFpbiBiZWhhdmlvdXIgd2l0aG91dCB0aGUgb3JwaGFuLlxuICAgIGZvciAoY29uc3QgZm4gb2YgW2lzc3VhbmNlRm4sIHJlZnJlc2hGbiwgbG9nb3V0Rm5dKSB7XG4gICAgICBpZiAoIWZuKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBmbi5jdXJyZW50VmVyc2lvbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjb3JlLkNmblJlc291cmNlO1xuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbi5hcHBseVJlbW92YWxQb2xpY3koY29yZS5SZW1vdmFsUG9saWN5LlJFVEFJTl9PTl9VUERBVEVfT1JfREVMRVRFKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmRwb2ludCBiZWhhdmlvdXJzIHVzZSBhdXRoRW5kcG9pbnRPcmlnaW4gd2hlbiBzdXBwbGllZCAoYSBub24tVlBDIG9yaWdpbixcbiAgICAvLyByZXF1aXJlZCB3aGVuIHRoZSBkZWZhdWx0IGJlaGF2aW91cidzIG9yaWdpbiBpcyBhIFZQQyBvcmlnaW4pLCBlbHNlIHRoZVxuICAgIC8vIGRlZmF1bHQgYmVoYXZpb3VyJ3Mgb3JpZ2luLiBBdHRhY2ggbW9kZSBndWFyYW50ZWVzIGF1dGhFbmRwb2ludE9yaWdpbiBpcyBzZXQuXG4gICAgY29uc3QgZW5kcG9pbnRPcmlnaW46IGNsb3VkZnJvbnQuSU9yaWdpbiA9IHByb3BzLmF1dGhFbmRwb2ludE9yaWdpbiA/PyBwcm9wcy5kZWZhdWx0QmVoYXZpb3IhLm9yaWdpbjtcblxuICAgIC8vIEF1dGggZW5kcG9pbnRzIGFyZSBQT1NULWRyaXZlbjsgQ2xvdWRGcm9udCBvdGhlcndpc2UgZGVmYXVsdHMgdG8gR0VUL0hFQURcbiAgICAvLyBhbmQgcmVqZWN0cyB0aGUgUE9TVCB0aGVzZSBlbmRwb2ludHMgcmVxdWlyZS4gQWxsb3cgYWxsIG1ldGhvZHMgYnkgZGVmYXVsdC5cbiAgICBjb25zdCBhdXRoRW5kcG9pbnRBbGxvd2VkTWV0aG9kcyA9IHByb3BzLmF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzID8/IGNsb3VkZnJvbnQuQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMO1xuXG4gICAgY29uc3QgZW5kcG9pbnRPcHRzID0gKGZuOiBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24sIGluY2x1ZGVCb2R5OiBib29sZWFuKTogY2xvdWRmcm9udC5BZGRCZWhhdmlvck9wdGlvbnMgPT4gKHtcbiAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgYWxsb3dlZE1ldGhvZHM6IGF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzLFxuICAgICAgLy8gU2V0LUNvb2tpZSBtdXN0IHJlYWNoIHRoZSB2aWV3ZXIg4oCUIGNhY2hpbmcgZGlzYWJsZWQuXG4gICAgICBjYWNoZVBvbGljeTogY2xvdWRmcm9udC5DYWNoZVBvbGljeS5DQUNISU5HX0RJU0FCTEVELFxuICAgICAgZWRnZUxhbWJkYXM6IFt7XG4gICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogZm4uY3VycmVudFZlcnNpb24sXG4gICAgICAgIC8vIFZpZXdlci1yZXF1ZXN0OiB0aGVzZSBmdW5jdGlvbnMgZ2VuZXJhdGUgdGhlIHJlc3BvbnNlIGVudGlyZWx5IGF0IHRoZVxuICAgICAgICAvLyBlZGdlIGFuZCBuZXZlciBjb250YWN0IHRoZSBvcmlnaW4uIFZpZXdlci1yZXF1ZXN0IGZpcmVzIHJlbGlhYmx5IG9uIGFcbiAgICAgICAgLy8gY2FjaGUgbWlzcyByZWdhcmRsZXNzIG9mIG9yaWdpbiB0eXBlICh1bmxpa2Ugb3JpZ2luLXJlcXVlc3QsIHdoaWNoIGlzXG4gICAgICAgIC8vIGlsbGVnYWwgb24gYSBWUEMtb3JpZ2luIGJlaGF2aW91ciBhbmQg4oCUIGFzIG9ic2VydmVkIG9uIGF0dGFjaC1tb2RlXG4gICAgICAgIC8vIGRpc3RyaWJ1dGlvbnMg4oCUIGNvdWxkIHNpbGVudGx5IGZhaWwgdG8gaW50ZXJjZXB0LCBsZXR0aW5nIHRoZSByZXF1ZXN0XG4gICAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgcGxhY2Vob2xkZXIgb3JpZ2luKS4gSXQgY2FwcyBjb2RlIGF0IDEgTUIsIHdoaWNoXG4gICAgICAgIC8vIHRoZSBzZXNzaW9uLWlzc3VhbmNlIGZ1bmN0aW9uIG5vdyBmaXRzIGFmdGVyIGRyb3BwaW5nIFB5SldUL2NyeXB0b2dyYXBoeVxuICAgICAgICAvLyBmb3IgdGhlIHB1cmUtUHl0aG9uIGByc2FgIGxpYnJhcnkuIFRoZSBiZWhhdmlvdXIgc3RpbGwgbmVlZHMgYSB0YXJnZXRcbiAgICAgICAgLy8gb3JpZ2luIChlbmRwb2ludE9yaWdpbiksIGJ1dCBpdCBpcyBhIG5ldmVyLWNvbnRhY3RlZCBwbGFjZWhvbGRlci5cbiAgICAgICAgZXZlbnRUeXBlOiBjbG91ZGZyb250LkxhbWJkYUVkZ2VFdmVudFR5cGUuVklFV0VSX1JFUVVFU1QsXG4gICAgICAgIGluY2x1ZGVCb2R5OiBpbmNsdWRlQm9keSxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgaWYgKGF0dGFjaE1vZGUpIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gcHJvcHMuZGlzdHJpYnV0aW9uITtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKHNlc3Npb25Jc3N1YW5jZVBhdGgsIGVuZHBvaW50T3JpZ2luLCBlbmRwb2ludE9wdHMoaXNzdWFuY2VGbiwgdHJ1ZSkpO1xuICAgICAgaWYgKHJlZnJlc2hGbikge1xuICAgICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcignL29hdXRoMi9yZWZyZXNoJywgZW5kcG9pbnRPcmlnaW4sIGVuZHBvaW50T3B0cyhyZWZyZXNoRm4sIGZhbHNlKSk7XG4gICAgICB9XG4gICAgICBpZiAobG9nb3V0Rm4pIHtcbiAgICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IoJy9vYXV0aDIvbG9nb3V0JywgZW5kcG9pbnRPcmlnaW4sIGVuZHBvaW50T3B0cyhsb2dvdXRGbiwgdHJ1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsQmVoYXZpb3JzOiBSZWNvcmQ8c3RyaW5nLCBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucz4gPSB7XG4gICAgICAgIFtzZXNzaW9uSXNzdWFuY2VQYXRoXTogeyBvcmlnaW46IGVuZHBvaW50T3JpZ2luLCAuLi5lbmRwb2ludE9wdHMoaXNzdWFuY2VGbiwgdHJ1ZSkgfSxcbiAgICAgIH07XG4gICAgICBpZiAocmVmcmVzaEZuKSB7XG4gICAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnNbJy9vYXV0aDIvcmVmcmVzaCddID0geyBvcmlnaW46IGVuZHBvaW50T3JpZ2luLCAuLi5lbmRwb2ludE9wdHMocmVmcmVzaEZuLCBmYWxzZSkgfTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2dvdXRGbikge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzWycvb2F1dGgyL2xvZ291dCddID0geyBvcmlnaW46IGVuZHBvaW50T3JpZ2luLCAuLi5lbmRwb2ludE9wdHMobG9nb3V0Rm4sIHRydWUpIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uKHRoaXMsICdEaXN0cmlidXRpb24nLCB7XG4gICAgICAgIGh0dHBWZXJzaW9uOiBjbG91ZGZyb250Lkh0dHBWZXJzaW9uLkhUVFAyX0FORF8zLFxuICAgICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uOiBwcm9wcy5taW5pbXVtUHJvdG9jb2xWZXJzaW9uID8/IGNsb3VkZnJvbnQuU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDI1LFxuICAgICAgICBkZWZhdWx0QmVoYXZpb3I6IHtcbiAgICAgICAgICAuLi5wcm9wcy5kZWZhdWx0QmVoYXZpb3IhLFxuICAgICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiB0aGlzLm1lcmdlRnVuY3Rpb25Bc3NvY2lhdGlvbnMoXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRnVuY3Rpb25Bc3NvY2lhdGlvbnMocHJvcHMuZGVmYXVsdEV4dGVuc2lvbnMsIHByb3BzLmRlZmF1bHRFeHRlbnNpb25Db25maWcpLFxuICAgICAgICAgICAgcHJvcHMuZGVmYXVsdEJlaGF2aW9yIS5mdW5jdGlvbkFzc29jaWF0aW9ucyxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOiBhZGRpdGlvbmFsQmVoYXZpb3JzLFxuICAgICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jZXJ0aWZpY2F0ZSEsXG4gICAgICAgIHdlYkFjbElkOiBwcm9wcy53ZWJBY2xJZCxcbiAgICAgICAgZGVmYXVsdFJvb3RPYmplY3Q6IHByb3BzLmRlZmF1bHRSb290T2JqZWN0ID8/ICdpbmRleC5odG1sJyxcbiAgICAgICAgZXJyb3JSZXNwb25zZXM6IHByb3BzLmVuYWJsZUVycm9yUmVzcG9uc2VzID8gW1xuICAgICAgICAgIHsgaHR0cFN0YXR1czogNDAzLCByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCwgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMuZXJyb3JSZXNwb25zZVBhZ2VQYXRoID8/ICcvZXJyb3IuaHRtbCcsIHR0bDogY29yZS5EdXJhdGlvbi5taW51dGVzKDUpIH0sXG4gICAgICAgICAgeyBodHRwU3RhdHVzOiA0MDQsIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLCByZXNwb25zZVBhZ2VQYXRoOiBwcm9wcy5lcnJvclJlc3BvbnNlUGFnZVBhdGggPz8gJy9lcnJvci5odG1sJywgdHRsOiBjb3JlLkR1cmF0aW9uLm1pbnV0ZXMoNSkgfSxcbiAgICAgICAgXSA6IFtdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGJlaGF2aW91ci4gUGFzcyBgb3B0aW9ucy5leHRlbnNpb25zID0gW0V4dGVuc2lvbi5SRVFVSVJFX0FVVEhdYCB0b1xuICAgKiBwcm90ZWN0IHRoZSBwYXRoICh1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2UgYW5kXG4gICAqIHZhbGlkYXRlZCBpZGVudGl0eSBjbGFpbXMgYXJlIGluamVjdGVkIGFzIG9yaWdpbiBoZWFkZXJzKS5cbiAgICovXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luLFxuICAgIG9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9uczxUUm9sZT4gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3IocGF0aFBhdHRlcm4sIG9yaWdpbiwge1xuICAgICAgLi4ub3B0aW9ucy5iZWhhdmlvck9wdGlvbnMsXG4gICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogdGhpcy5tZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgICAgICB0aGlzLmJ1aWxkRnVuY3Rpb25Bc3NvY2lhdGlvbnMob3B0aW9ucy5leHRlbnNpb25zLCBvcHRpb25zLmV4dGVuc2lvbkNvbmZpZyksXG4gICAgICAgIG9wdGlvbnMuYmVoYXZpb3JPcHRpb25zPy5mdW5jdGlvbkFzc29jaWF0aW9ucyxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdHdvIHNldHMgb2YgZnVuY3Rpb24gYXNzb2NpYXRpb25zLCBlbmZvcmNpbmcgQ2xvdWRGcm9udCdzIHJ1bGUgb2Ygb25lXG4gICAqIGZ1bmN0aW9uIHBlciBldmVudCB0eXBlIHBlciBiZWhhdmlvdXIuIFRoZSBsaWJyYXJ5IG5ldmVyIGNvbXBvc2VzIG9yIGluc3BlY3RzXG4gICAqIGEgY29uc3VtZXIncyBmdW5jdGlvbiDigJQgaXQgb25seSBhdHRhY2hlcyBpdDsgY29tYmluaW5nIHR3byBmdW5jdGlvbnMgb24gdGhlXG4gICAqIHNhbWUgZXZlbnQgdHlwZSBpcyB0aGUgY29uc3VtZXIncyByZXNwb25zaWJpbGl0eSAoYSBzaW5nbGUgZnVuY3Rpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSBtZXJnZUZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgIGF1dGg/OiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSxcbiAgICBjb25zdW1lcj86IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdLFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWxsID0gWy4uLihhdXRoID8/IFtdKSwgLi4uKGNvbnN1bWVyID8/IFtdKV07XG4gICAgaWYgKGFsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PGNsb3VkZnJvbnQuRnVuY3Rpb25FdmVudFR5cGU+KCk7XG4gICAgZm9yIChjb25zdCBmYSBvZiBhbGwpIHtcbiAgICAgIGlmIChzZWVuLmhhcyhmYS5ldmVudFR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2xvdWRGcm9udCBhbGxvd3Mgb25seSBvbmUgZnVuY3Rpb24gcGVyIGV2ZW50IHR5cGUgcGVyIGJlaGF2aW91ciwgYnV0IHR3byAnJHtmYS5ldmVudFR5cGV9JyBgICtcbiAgICAgICAgICAnZnVuY3Rpb25zIHdlcmUgc3VwcGxpZWQgKGUuZy4gUkVRVUlSRV9BVVRIIHBsdXMgeW91ciBvd24gZnVuY3Rpb24pLiBLZWVwIGF1dGggYW5kIHlvdXIgb3RoZXIgJyArXG4gICAgICAgICAgJ2Z1bmN0aW9uIG9uIHNlcGFyYXRlIHBhdGggYmVoYXZpb3Vycywgb3IgY29tYmluZSB0aGVtIGludG8gYSBzaW5nbGUgZnVuY3Rpb24geW91cnNlbGYuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGZhLmV2ZW50VHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBhbGw7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgUFJPVEVDVEVEIGJlaGF2aW91cjogdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzIHJlZGlyZWN0IHRvIHRoZSBsb2dpblxuICAgKiBwYWdlIGFuZCB2YWxpZGF0ZWQgaWRlbnRpdHkgY2xhaW1zIGFyZSBpbmplY3RlZCBhcyBvcmlnaW4gaGVhZGVycy5cbiAgICogQ29udmVuaWVuY2Ugd3JhcHBlciBvdmVyIHtAbGluayBhZGRCZWhhdmlvcn0gdGhhdCBlbnN1cmVzIFJFUVVJUkVfQVVUSC5cbiAgICovXG4gIHB1YmxpYyBwcm90ZWN0KFxuICAgIHBhdGhQYXR0ZXJuOiBzdHJpbmcsXG4gICAgb3JpZ2luOiBjbG91ZGZyb250LklPcmlnaW4sXG4gICAgb3B0aW9uczogQWRkQmVoYXZpb3JPcHRpb25zPFRSb2xlPiA9IHt9LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBleHRlbnNpb25zID0gb3B0aW9ucy5leHRlbnNpb25zID8gWy4uLm9wdGlvbnMuZXh0ZW5zaW9uc10gOiBbXTtcbiAgICBpZiAoIWV4dGVuc2lvbnMuaW5jbHVkZXMoRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCkpIHtcbiAgICAgIGV4dGVuc2lvbnMucHVzaChFeHRlbnNpb24uUkVRVUlSRV9BVVRIKTtcbiAgICB9XG4gICAgdGhpcy5hZGRCZWhhdmlvcihwYXRoUGF0dGVybiwgb3JpZ2luLCB7IC4uLm9wdGlvbnMsIGV4dGVuc2lvbnM6IGV4dGVuc2lvbnMgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbXBvc2VkIHZpZXdlci1yZXF1ZXN0IGF1dGgtY2hlY2sgZnVuY3Rpb24gKFJFUVVJUkVfQVVUSCkuIFVzZWZ1bCBpblxuICAgKiBBVFRBQ0ggTU9ERSB0byBhc3NvY2lhdGUgb3IgY29tcG9zZSBhdXRoIG9udG8gYSBiZWhhdmlvdXIgdGhpcyBjb25zdHJ1Y3QgZG9lc1xuICAgKiBub3Qgb3duIOKAlCBlLmcuIGFuIGV4aXN0aW5nIGRlZmF1bHQgYmVoYXZpb3VyLCB2aWEgYW4gTDEgb3ZlcnJpZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dGhGdW5jdGlvbigpOiBjbG91ZGZyb250LkZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NlZEF1dGhGdW5jdGlvbihbRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZ1bmN0aW9uQXNzb2NpYXRpb25zKFxuICAgIGV4dGVuc2lvbnM/OiBFeHRlbnNpb25bXSxcbiAgICBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+LFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uQXNzb2NpYXRpb25bXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFleHRlbnNpb25zIHx8IGV4dGVuc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gW3sgZnVuY3Rpb246IHRoaXMuY29tcG9zZWRBdXRoRnVuY3Rpb24oZXh0ZW5zaW9ucywgY29uZmlnKSwgZXZlbnRUeXBlOiBjbG91ZGZyb250LkZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNUIH1dO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wb3NlZEF1dGhGdW5jdGlvbihcbiAgICBleHRlbnNpb25zOiBFeHRlbnNpb25bXSxcbiAgICBjb25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+LFxuICApOiBjbG91ZGZyb250LkZ1bmN0aW9uIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZnVuY3Rpb25DYWNoZUtleShleHRlbnNpb25zLCBjb25maWcpO1xuICAgIGxldCBmdW5jID0gdGhpcy5jb21wb3NlZEZ1bmN0aW9ucy5nZXQoY2FjaGVLZXkpO1xuICAgIGlmICghZnVuYykge1xuICAgICAgY29uc3QgY29kZSA9IHRoaXMuY29tcG9zZXIuY29tcG9zZShleHRlbnNpb25zLCBjb25maWcsIHtcbiAgICAgICAgbG9naW5SZWRpcmVjdFBhdGg6IHRoaXMubG9naW5SZWRpcmVjdFBhdGgsXG4gICAgICAgIGVuYWJsZUhlYWRlckluamVjdGlvbjogdGhpcy5lbmFibGVIZWFkZXJJbmplY3Rpb24sXG4gICAgICAgIGhlYWRlckluamVjdGlvbkNsYWltczogdGhpcy5oZWFkZXJJbmplY3Rpb25DbGFpbXMsXG4gICAgICAgIGVuYWJsZVJlZnJlc2g6IHRoaXMuZW5hYmxlUmVmcmVzaCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IGBDb21wb3NlZEZuJHtleHRlbnNpb25zLm1hcChlID0+IGUucmVwbGFjZSgnUkVRVUlSRV8nLCAnJykpLmpvaW4oJycpfSR7dGhpcy5jb21wb3NlZEZ1bmN0aW9ucy5zaXplfWA7XG4gICAgICBjb25zdCBuZWVkc0t2cyA9IGV4dGVuc2lvbnMuaW5jbHVkZXMoRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSCk7XG4gICAgICBmdW5jID0gbmV3IGNsb3VkZnJvbnQuRnVuY3Rpb24odGhpcywgZnVuY3Rpb25JZCwgbmVlZHNLdnNcbiAgICAgICAgPyB7IGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoY29kZSksIHJ1bnRpbWU6IGNsb3VkZnJvbnQuRnVuY3Rpb25SdW50aW1lLkpTXzJfMCwgY29tbWVudDogYEN1c3RvbS1VSTogJHtleHRlbnNpb25zLmpvaW4oJywgJyl9YCwga2V5VmFsdWVTdG9yZTogdGhpcy5rdnMgfVxuICAgICAgICA6IHsgY29kZTogY2xvdWRmcm9udC5GdW5jdGlvbkNvZGUuZnJvbUlubGluZShjb2RlKSwgcnVudGltZTogY2xvdWRmcm9udC5GdW5jdGlvblJ1bnRpbWUuSlNfMl8wLCBjb21tZW50OiBgQ3VzdG9tLVVJOiAke2V4dGVuc2lvbnMuam9pbignLCAnKX1gIH0pO1xuICAgICAgaWYgKHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbikge1xuICAgICAgICBmdW5jLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uID0gZnVuYztcbiAgICAgIHRoaXMuY29tcG9zZWRGdW5jdGlvbnMuc2V0KGNhY2hlS2V5LCBmdW5jKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cblxuICBwcml2YXRlIGZ1bmN0aW9uQ2FjaGVLZXkoZXh0ZW5zaW9uczogRXh0ZW5zaW9uW10sIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gW2V4dGVuc2lvbnMuc2xpY2UoKS5zb3J0KCkuam9pbignLCcpXTtcbiAgICBpZiAoY29uZmlnPy5yZXF1aXJlZFJvbGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGNvbmZpZy5yZXF1aXJlZFJvbGVzLnNsaWNlKCkuc29ydCgpLmpvaW4oJywnKSk7XG4gICAgfVxuICAgIGlmIChjb25maWc/LnJvbGVNYXRjaE1vZGUgJiYgY29uZmlnLnJvbGVNYXRjaE1vZGUgIT09IFJvbGVNYXRjaE1vZGUuT1IpIHtcbiAgICAgIHBhcnRzLnB1c2goY29uZmlnLnJvbGVNYXRjaE1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignfCcpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDb25maWdQeShcbiAgICBiYXNlU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIGV4dHJhU2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHN0YXRpY092ZXJyaWRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgJ2ltcG9ydCBqc29uJyxcbiAgICAgICdpbXBvcnQgbG9nZ2luZycsXG4gICAgICAnaW1wb3J0IGJvdG8zJyxcbiAgICAgICcnLFxuICAgICAgJ2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCknLFxuICAgICAgYEJBU0VfU0VDUkVUX05BTUUgPSAke0pTT04uc3RyaW5naWZ5KGJhc2VTZWNyZXROYW1lKX1gLFxuICAgICAgYEVYVFJBX1NFQ1JFVF9OQU1FID0gJHtKU09OLnN0cmluZ2lmeShleHRyYVNlY3JldE5hbWUpfWAsXG4gICAgICBgQ09ORklHX1JFR0lPTiA9ICR7SlNPTi5zdHJpbmdpZnkocmVnaW9uKX1gLFxuICAgICAgYFNUQVRJQ19PVkVSUklERVMgPSAke0pTT04uc3RyaW5naWZ5KHN0YXRpY092ZXJyaWRlcyl9YCxcbiAgICAgICcnLFxuICAgICAgJ19zbSA9IE5vbmUnLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICdkZWYgX2NsaWVudCgpOicsXG4gICAgICAnICAgIGdsb2JhbCBfc20nLFxuICAgICAgJyAgICBpZiBfc20gaXMgTm9uZTonLFxuICAgICAgJyAgICAgICAgX3NtID0gYm90bzMuY2xpZW50KFwic2VjcmV0c21hbmFnZXJcIiwgcmVnaW9uX25hbWU9Q09ORklHX1JFR0lPTiknLFxuICAgICAgJyAgICByZXR1cm4gX3NtJyxcbiAgICAgICcnLFxuICAgICAgJycsXG4gICAgICAnZGVmIGdldF9jb25maWcoKTonLFxuICAgICAgJyAgICBjZmcgPSBqc29uLmxvYWRzKF9jbGllbnQoKS5nZXRfc2VjcmV0X3ZhbHVlKFNlY3JldElkPUJBU0VfU0VDUkVUX05BTUUpW1wiU2VjcmV0U3RyaW5nXCJdKScsXG4gICAgICAnICAgIHRyeTonLFxuICAgICAgJyAgICAgICAgY2ZnLnVwZGF0ZShqc29uLmxvYWRzKF9jbGllbnQoKS5nZXRfc2VjcmV0X3ZhbHVlKFNlY3JldElkPUVYVFJBX1NFQ1JFVF9OQU1FKVtcIlNlY3JldFN0cmluZ1wiXSkpJyxcbiAgICAgICcgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOicsXG4gICAgICAnICAgICAgICBsb2dnZXIuZXJyb3IoXCJleHRyYSBjb25maWcgbG9hZCBmYWlsZWQ6ICVzXCIsIGUpJyxcbiAgICAgICcgICAgY2ZnLnVwZGF0ZShTVEFUSUNfT1ZFUlJJREVTKScsXG4gICAgICAnICAgIHJldHVybiBjZmcnLFxuICAgICAgJycsXG4gICAgXS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUVkZ2VGdW5jdGlvbihcbiAgICBpZDogc3RyaW5nLFxuICAgIHNvdXJjZURpck5hbWU6IHN0cmluZyxcbiAgICBjb25maWdQeTogc3RyaW5nLFxuICAgIHJvbGU6IGlhbS5JUm9sZSxcbiAgICByZXVzZUNvZ25pdG9CdW5kbGU6IGJvb2xlYW4sXG4gICk6IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYScsIHNvdXJjZURpck5hbWUpO1xuICAgIGNvbnN0IGJ1bmRsZWREZXBzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2xhbWJkYS1idW5kbGVkL2NvZ25pdG8tYXV0aCcpO1xuICAgIGNvbnN0IHRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjdXN0b211aS1hdXRoLScpKTtcbiAgICBjb25zdCBjb25maWdQeVBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1B5UGF0aCwgY29uZmlnUHkpO1xuXG4gICAgcmV0dXJuIG5ldyBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24odGhpcywgaWQsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmxhbWJkYV9oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHNvdXJjZURpciwge1xuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICB0cnlCdW5kbGUob3V0cHV0RGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgaWYgKHJldXNlQ29nbml0b0J1bmRsZSAmJiBmcy5leGlzdHNTeW5jKGJ1bmRsZWREZXBzRGlyKSkge1xuICAgICAgICAgICAgICAgIGZzLmNwU3luYyhidW5kbGVkRGVwc0Rpciwgb3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZnMucmVhZGRpclN5bmMoc291cmNlRGlyKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlID09PSAncmVxdWlyZW1lbnRzLnR4dCcpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZzLmNwU3luYyhwYXRoLmpvaW4oc291cmNlRGlyLCBmaWxlKSwgcGF0aC5qb2luKG91dHB1dERpciwgZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dHB1dERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKSwgY29uZmlnUHkpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbWFnZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTEuYnVuZGxpbmdJbWFnZSxcbiAgICAgICAgICBjb21tYW5kOiBbXG4gICAgICAgICAgICAnYmFzaCcsICctYycsXG4gICAgICAgICAgICAncGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dCAtdCAvYXNzZXQtb3V0cHV0ICYmIGNwIC1yIC4gL2Fzc2V0LW91dHB1dCAmJiBjcCAvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHkgL2Fzc2V0LW91dHB1dC9jb25maWdfZ2VuZXJhdGVkLnB5JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHZvbHVtZXM6IFt7IGhvc3RQYXRoOiBjb25maWdQeVBhdGgsIGNvbnRhaW5lclBhdGg6ICcvdG1wL2NvbmZpZ19nZW5lcmF0ZWQucHknIH1dLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
425
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by1jdXN0b211aS1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Nsb3VkZnJvbnQvcGF0dGVybnMvY29nbml0by1jdXN0b211aS1hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGtEQUFvQztBQUNwQyw2Q0FPcUI7QUFDckIsdURBQXlDO0FBQ3pDLDJEQUFvRztBQUNwRyxpRkFBNkU7QUEwSDdFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsbUJBQW1ELFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFZMUYsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFzQztRQUN6RixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDO1FBQ3BELElBQUksVUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcscUJBQUcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sU0FBUyxHQUFHLHFCQUFHLENBQUMs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QUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dDQUNwRCxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDNUQsQ0FBQzs0QkFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQ0FDN0MsSUFBSSxJQUFJLEtBQUssa0JBQWtCO29DQUFFLFNBQVM7Z0NBQzFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzs0QkFDekYsQ0FBQzs0QkFDRCxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7NEJBQ3hFLE9BQU8sSUFBSSxDQUFDO3dCQUNkLENBQUM7cUJBQ0Y7b0JBQ0QsS0FBSyxFQUFFLHdCQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhO29CQUMvQyxPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLElBQUk7d0JBQ1osNElBQTRJO3FCQUM3STtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLDBCQUEwQixFQUFFLENBQUM7aUJBQ2pGO2FBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNiRCxrREEyYkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyIGFzIGFjbSxcbiAgYXdzX2Nsb3VkZnJvbnQgYXMgY2xvdWRmcm9udCxcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19sYW1iZGEgYXMgbGFtYmRhLFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0c21hbmFnZXIsXG4gIGF3c19zc20gYXMgc3NtLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uLCBFeHRlbnNpb25Db25maWcsIEFkZEJlaGF2aW9yT3B0aW9ucywgUm9sZU1hdGNoTW9kZSB9IGZyb20gJy4vc2VjdXJlZENsb3VkRnJvbnQnO1xuaW1wb3J0IHsgRnVuY3Rpb25Db21wb3NlciB9IGZyb20gJy4uL2Nsb3VkZnJvbnQtZnVuY3Rpb25zL2Z1bmN0aW9uLWNvbXBvc2VyJztcblxuLyoqXG4gKiBQcm9wcyBmb3Ige0BsaW5rIENvZ25pdG9DdXN0b21VaUF1dGh9LlxuICpcbiAqIENvbmZpZ3VyZXMgY3VzdG9tZXIgYXV0aGVudGljYXRpb24gZm9yIGEgc3RvcmVmcm9udCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICogdXNpbmcgQVdTIENvZ25pdG8gd2l0aCBhIGZpcnN0LXBhcnR5IChjdXN0b20pIGxvZ2luIFVJLiBVbmF1dGhlbnRpY2F0ZWRcbiAqIHJlcXVlc3RzIHRvIHByb3RlY3RlZCBwYXRocyBhcmUgcmVkaXJlY3RlZCB0byB7QGxpbmsgdW5hdXRoZW50aWNhdGVkUmVkaXJlY3RQYXRofVxuICogb24gdGhlIGJyYW5kJ3Mgb3duIGRvbWFpbiDigJQgbmV2ZXIgdG8gYSBDb2duaXRvIGhvc3RlZCBVSS4gVGhlIGxvZ2luIHBhZ2VcbiAqIHBlcmZvcm1zIFNSUCBjbGllbnQtc2lkZSBhbmQgUE9TVHMgdGhlIHJlc3VsdGluZyB0b2tlbnMgdG8gdGhlIHNlc3Npb24taXNzdWFuY2VcbiAqIGVuZHBvaW50OyBDb2duaXRvIHRva2VucyBhcmUgbmV2ZXIgc3RvcmVkIGluIHRoZSBicm93c2VyLlxuICpcbiAqIFRoZSBiYWNrZW5kICh1c2VyIHBvb2wsIEhNQUMga2V5LCBhdXRoIHRhYmxlLCBLVlMsIGNvbmZpZyBzZWNyZXQpIGlzIHByb3ZpZGVkXG4gKiBieSB7QGxpbmsgQ29nbml0b0F1dGhJbmZyYXN0cnVjdHVyZX0gYW5kIHJlZmVyZW5jZWQgaGVyZSB2aWEgU1NNIHBhcmFtZXRlcnNcbiAqIHdyaXR0ZW4gdW5kZXIge0BsaW5rIGF1dGhTc21QYXJhbVByZWZpeH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29nbml0b0N1c3RvbVVpQXV0aFByb3BzPFRSb2xlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBDUkVBVEUgTU9ERTogZGVmYXVsdCBjYWNoZSBiZWhhdmlvdXIgZm9yIGEgZGlzdHJpYnV0aW9uIHRoaXMgY29uc3RydWN0IHdpbGxcbiAgICogY3JlYXRlLiBQcm92aWRlIHdpdGgge0BsaW5rIGNlcnRpZmljYXRlfS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGhcbiAgICoge0BsaW5rIGRpc3RyaWJ1dGlvbn0uIFlvdSBNQVkgc2V0IGBmdW5jdGlvbkFzc29jaWF0aW9uc2AgaGVyZSAoZS5nLiBhXG4gICAqIGdlby1yb3V0aW5nIHZpZXdlci1yZXF1ZXN0IGZ1bmN0aW9uKSDigJQgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIGF1dGgtY2hlY2tcbiAgICogZnVuY3Rpb247IENsb3VkRnJvbnQncyBvbmUtZnVuY3Rpb24tcGVyLWV2ZW50LXR5cGUgcnVsZSBpcyBlbmZvcmNlZCB3aXRoIGFcbiAgICogY2xlYXIgZXJyb3IgcmF0aGVyIHRoYW4gYW4gTDEgb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QmVoYXZpb3I/OiBjbG91ZGZyb250LkJlaGF2aW9yT3B0aW9ucztcbiAgLyoqIERvbWFpbiBuYW1lcyBmb3IgdGhlIGF1dGggY29uZmlnIChhbGxvd2VkX2RvbWFpbnMpOyBmaXJzdCBpcyBjYW5vbmljYWwuIFJlcXVpcmVkIGluIGJvdGggbW9kZXMuICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNoYXJlZCBzZXNzaW9uIGNvbmZpZyBzZWNyZXQgdGhlIGVkZ2UgTGFtYmRhcyBmZXRjaCBieSBuYW1lLlxuICAgKiBNVVNUIG1hdGNoIHRoZSBuYW1lIHRoZSB7QGxpbmsgQ29nbml0b1Nlc3Npb25CYWNrZW5kfSBjcmVhdGVkIGl0IHVuZGVyLlxuICAgKiBPdmVycmlkZSB0byBkZWNvdXBsZSBmcm9tIHRoZSBjYW5vbmljYWwgZG9tYWluLlxuICAgKiBAZGVmYXVsdCBgY2xvdWRmcm9udC1hdXRoLWNvbmZpZy0ke2RvbWFpbk5hbWVzWzBdfWBcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ1NlY3JldE5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDUkVBVEUgTU9ERTogQUNNIGNlcnRpZmljYXRlICh1cy1lYXN0LTEpIGNvdmVyaW5nIHtAbGluayBkb21haW5OYW1lc30uICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogYWNtLklDZXJ0aWZpY2F0ZTtcbiAgLyoqIENSRUFURSBNT0RFOiBXQUYgd2ViIEFDTCBBUk4gdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNyZWF0ZWQgZGlzdHJpYnV0aW9uLiAqL1xuICByZWFkb25seSB3ZWJBY2xJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEFUVEFDSCBNT0RFOiBhbiBleGlzdGluZyBkaXN0cmlidXRpb24gdG8gYWRkIHRoZSBhdXRoIGVuZHBvaW50ICsgcHJvdGVjdGVkXG4gICAqIGJlaGF2aW91cnMgdG8sIGluc3RlYWQgb2YgY3JlYXRpbmcgb25lLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aFxuICAgKiB7QGxpbmsgZGVmYXVsdEJlaGF2aW9yfS97QGxpbmsgY2VydGlmaWNhdGV9LiBDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZVxuICAgKiBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLCBzbyB0aGUgYXV0aC1jaGVjayBpcyBhZGRlZCB0byBwcm90ZWN0ZWRcbiAgICogUEFUSCBiZWhhdmlvdXJzICh2aWEge0BsaW5rIHByb3RlY3R9KSDigJQgaXQgaXMgTk9UIGZvcmNlZCBvbnRvIHRoZSBleGlzdGluZ1xuICAgKiBkZWZhdWx0IGJlaGF2aW91ci4gVXNlIHtAbGluayBhdXRoRnVuY3Rpb259IHRvIGNvbXBvc2UgaXQgdGhlcmUgeW91cnNlbGYuXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb24/OiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE9yaWdpbiBmb3IgdGhlIGF1dGggZW5kcG9pbnQgYmVoYXZpb3VycyAoaXNzdWFuY2UgLyByZWZyZXNoIC8gbG9nb3V0KS4gVGhlc2VcbiAgICogZW5kcG9pbnRzIGFyZSBnZW5lcmF0ZWQgZW50aXJlbHkgYnkgTGFtYmRhQEVkZ2UgYW5kIG5ldmVyIHJlYWNoIHRoZSBvcmlnaW4sXG4gICAqIGJ1dCBhIENsb3VkRnJvbnQgYmVoYXZpb3VyIHN0aWxsIHJlcXVpcmVzIG9uZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIHtAbGluayBkZWZhdWx0QmVoYXZpb3J9IG9yaWdpbi4gU2V0IHRoaXMgdG8gYSBOT04tVlBDIG9yaWdpblxuICAgKiAoZm9yIGV4YW1wbGUgYW4gUzMgb3JpZ2luIGFscmVhZHkgb24gdGhlIGRpc3RyaWJ1dGlvbikgd2hlbiB0aGUgZGVmYXVsdFxuICAgKiBiZWhhdmlvdXIncyBvcmlnaW4gaXMgYSBDbG91ZEZyb250IFZQQyBvcmlnaW46IEFXUyBkb2VzIG5vdCBhbGxvdyBhblxuICAgKiBvcmlnaW4tcmVxdWVzdCBMYW1iZGFARWRnZSBhc3NvY2lhdGlvbiBvbiBhIFZQQy1vcmlnaW4gYmVoYXZpb3VyLCBhbmQgdGhlc2VcbiAgICogZW5kcG9pbnRzIHJ1biBhdCBvcmlnaW4tcmVxdWVzdC4gUkVRVUlSRUQgaW4gQVRUQUNIIE1PREUgKHdoZW5cbiAgICoge0BsaW5rIGRpc3RyaWJ1dGlvbn0gaXMgc2V0KS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhFbmRwb2ludE9yaWdpbj86IGNsb3VkZnJvbnQuSU9yaWdpbjtcbiAgLyoqXG4gICAqIFNTTSBwYXJhbWV0ZXIgcHJlZml4IHVuZGVyIHdoaWNoIHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfSBwdWJsaXNoZWRcbiAgICogYGNvbmZpZ1NlY3JldEFybmAsIGBrbXNLZXlBcm5gLCBgYXV0aFRhYmxlQXJuYCwgYGt2c0FybmAsIGBjb2duaXRvRG9tYWluYCxcbiAgICogYGNsaWVudElkYCBhbmQgYHVzZXJQb29sSWRgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aFNzbVBhcmFtUHJlZml4OiBzdHJpbmc7XG4gIC8qKiBSZWdpb24gdGhlIGF1dGggYmFja2VuZCAoY29uZmlnIHNlY3JldCwgYXV0aCB0YWJsZSkgbGl2ZXMgaW4uICovXG4gIHJlYWRvbmx5IGF1dGhSZWdpb246IHN0cmluZztcbiAgLyoqIEZpcnN0LXBhcnR5IHBhdGggdW5hdXRoZW50aWNhdGVkIHVzZXJzIGFyZSByZWRpcmVjdGVkIHRvLiBAZGVmYXVsdCAnL2xvZ2luJyAqL1xuICByZWFkb25seSB1bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBFeHRlbnNpb25zIGFwcGxpZWQgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3VyLiBAZGVmYXVsdCBbXSAocHVibGljKSAqL1xuICByZWFkb25seSBkZWZhdWx0RXh0ZW5zaW9ucz86IEV4dGVuc2lvbltdO1xuICAvKiogUm9sZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeHRlbnNpb25Db25maWc/OiBFeHRlbnNpb25Db25maWc8VFJvbGU+O1xuICAvKiogSW5qZWN0IHZhbGlkYXRlZCBpZGVudGl0eSBjbGFpbXMgYXMgb3JpZ2luIGhlYWRlcnMuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSGVhZGVySW5qZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1hcCBvZiBvcmlnaW4gaGVhZGVyIG5hbWUgdG8gc2Vzc2lvbi1KV1QgY2xhaW0ga2V5LlxuICAgKiBAZGVmYXVsdCB7ICd4LWN1c3RvbWVyLWlkJzogJ2N1c3RvbWVyX2lkJywgJ3gtY3VzdG9tZXItZW1haWwnOiAnZW1haWwnIH1cbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlckluamVjdGlvbkNsYWltcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBQYXRoIG9mIHRoZSBzZXNzaW9uLWlzc3VhbmNlIGVuZHBvaW50IChQT1NUKS4gQGRlZmF1bHQgJy9hdXRoL3Nlc3Npb24nICovXG4gIHJlYWRvbmx5IHNlc3Npb25Jc3N1YW5jZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBNb3VudCB0aGUgc2lsZW50LXJlZnJlc2ggZW5kcG9pbnQgYXQgJy9vYXV0aDIvcmVmcmVzaCcuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUmVmcmVzaEVuZHBvaW50PzogYm9vbGVhbjtcbiAgLyoqIE1vdW50IHRoZSBsb2dvdXQgZW5kcG9pbnQgYXQgJy9vYXV0aDIvbG9nb3V0JyAoUE9TVCkuIEBkZWZhdWx0IHRydWUgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTG9nb3V0RW5kcG9pbnQ/OiBib29sZWFuO1xuICAvKiogVVJMIG9mIHRoZSBpZGVudGl0eS1saW5raW5nIGhvb2sgdGhlIGlzc3VhbmNlIGVuZHBvaW50IGNhbGxzIHRvIHJlc29sdmUgY3VzdG9tZXJfaWQuICovXG4gIHJlYWRvbmx5IGlkZW50aXR5TGlua2luZ0hvb2tVcmw6IHN0cmluZztcbiAgLyoqIFNlY3JldHMgTWFuYWdlciBBUk4gb2YgdGhlIHNoYXJlZCBzZWNyZXQgdXNlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIGhvb2suICovXG4gIHJlYWRvbmx5IGlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm4/OiBzdHJpbmc7XG4gIC8qKiBTZXNzaW9uIEpXVCBsaWZldGltZSwgc2Vjb25kcy4gQGRlZmF1bHQgMzYwMCAqL1xuICByZWFkb25seSBzZXNzaW9uVHRsU2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIFN0b3JlZCByZWZyZXNoLXRva2VuIGxpZmV0aW1lLCBkYXlzLiBAZGVmYXVsdCAzMCAqL1xuICByZWFkb25seSByZWZyZXNoVHRsRGF5cz86IG51bWJlcjtcbiAgLyoqIFBhdGggdG8gcmVkaXJlY3QgdG8gYWZ0ZXIgbG9nb3V0LiBAZGVmYXVsdCAnLycgKi9cbiAgcmVhZG9ubHkgcG9zdExvZ291dFJlZGlyZWN0UGF0aD86IHN0cmluZztcbiAgLyoqIEFkZCBTUEEgY3VzdG9tIGVycm9yIHJlc3BvbnNlcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRXJyb3JSZXNwb25zZXM/OiBib29sZWFuO1xuICAvKiogRXJyb3IgcGFnZSBwYXRoIHdoZW4ge0BsaW5rIGVuYWJsZUVycm9yUmVzcG9uc2VzfSBpcyBzZXQuIEBkZWZhdWx0ICcvZXJyb3IuaHRtbCcgKi9cbiAgcmVhZG9ubHkgZXJyb3JSZXNwb25zZVBhZ2VQYXRoPzogc3RyaW5nO1xuICAvKiogRGVmYXVsdCByb290IG9iamVjdC4gQGRlZmF1bHQgJ2luZGV4Lmh0bWwnICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSb290T2JqZWN0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQ1JFQVRFIE1PREU6IG1pbmltdW0gVExTIHNlY3VyaXR5IHBvbGljeSBmb3IgdGhlIGNyZWF0ZWQgZGlzdHJpYnV0aW9uJ3NcbiAgICogdmlld2VyIGNvbm5lY3Rpb25zLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudC1nZW5lcmF0aW9uIHBvbGljeTsgb3ZlcnJpZGUgb25seVxuICAgKiB0byByZWxheCBpdCAobm90IHJlY29tbWVuZGVkKS4gSWdub3JlZCBpbiBBVFRBQ0ggTU9ERSDigJQgdGhlIHBhc3NlZC1pblxuICAgKiBkaXN0cmlidXRpb24gYWxyZWFkeSBmaXhlcyBpdHMgb3duIHBvbGljeS5cbiAgICogQGRlZmF1bHQgY2xvdWRmcm9udC5TZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjVcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Qcm90b2NvbFZlcnNpb24/OiBjbG91ZGZyb250LlNlY3VyaXR5UG9saWN5UHJvdG9jb2w7XG4gIC8qKlxuICAgKiBBbGxvd2VkIHZpZXdlciBIVFRQIG1ldGhvZHMgZm9yIHRoZSBhdXRoIGVuZHBvaW50IGJlaGF2aW91cnMgKHNlc3Npb25cbiAgICogaXNzdWFuY2UsIHJlZnJlc2gsIGxvZ291dCkuIFRoZXNlIGVuZHBvaW50cyBhcmUgUE9TVC1kcml2ZW4sIHNvIHRoZSBkZWZhdWx0XG4gICAqIHBlcm1pdHMgYWxsIG1ldGhvZHM7IENsb3VkRnJvbnQncyBHRVQvSEVBRCBkZWZhdWx0IHdvdWxkIG90aGVyd2lzZSByZWplY3QgdGhlXG4gICAqIFBPU1QgdGhleSByZXF1aXJlLiBPdmVycmlkZSB0byBuYXJyb3cgaXQgKG11c3Qgc3RpbGwgaW5jbHVkZSBQT1NUKS5cbiAgICogQGRlZmF1bHQgY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcy5BTExPV19BTExcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzPzogY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcztcbn1cblxuLyoqXG4gKiBDdXN0b21lciBhdXRoZW50aWNhdGlvbiBmb3IgYSBzdG9yZWZyb250IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHVzaW5nIENvZ25pdG9cbiAqIHdpdGggYSBjdXN0b20sIGJyYW5kLWRvbWFpbiBsb2dpbiBVSS5cbiAqXG4gKiBPV05TIChpbiB0aGlzIGxpYnJhcnkpOiB0aGUgZWRnZSBzZXNzaW9uLXZhbGlkYXRpb24gZnVuY3Rpb24gKHJldXNlZCBzaGFyZWRcbiAqIG1vZHVsZSwgcmVkaXJlY3RpbmcgdG8gYSBmaXJzdC1wYXJ0eSAvbG9naW4pLCB0aGUgc2Vzc2lvbi1pc3N1YW5jZSAvIHJlZnJlc2ggL1xuICogbG9nb3V0IExhbWJkYUBFZGdlIGZ1bmN0aW9ucywgYW5kIHRoZWlyIElBTSB3aXJpbmcuIENPTlNVTUVTOiB0aGUgQ29nbml0b1xuICogYmFja2VuZCBmcm9tIHtAbGluayBDb2duaXRvQXV0aEluZnJhc3RydWN0dXJlfS4gRG9lcyBOT1QgcHJvdmlzaW9uIHRoZSB1c2VyXG4gKiBwb29sIOKAlCB0aGF0IGlzIHRoZSBiYWNrZW5kIGNvbnN0cnVjdCdzIGpvYi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvZ25pdG9DdXN0b21VaUF1dGg8VFJvbGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VyOiBGdW5jdGlvbkNvbXBvc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvc2VkRnVuY3Rpb25zOiBNYXA8c3RyaW5nLCBjbG91ZGZyb250LkZ1bmN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBrdnM6IGNsb3VkZnJvbnQuSUtleVZhbHVlU3RvcmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9naW5SZWRpcmVjdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVIZWFkZXJJbmplY3Rpb246IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZVJlZnJlc2g6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdENyZWF0ZWRGdW5jdGlvbjogY2xvdWRmcm9udC5GdW5jdGlvbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb2duaXRvQ3VzdG9tVWlBdXRoUHJvcHM8VFJvbGU+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGF0dGFjaE1vZGUgPSBwcm9wcy5kaXN0cmlidXRpb24gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoYXR0YWNoTW9kZSAmJiAhcHJvcHMuYXV0aEVuZHBvaW50T3JpZ2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F1dGhFbmRwb2ludE9yaWdpbiBpcyByZXF1aXJlZCB3aGVuIGF0dGFjaGluZyB0byBhbiBleGlzdGluZyBkaXN0cmlidXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFhdHRhY2hNb2RlICYmICghcHJvcHMuZGVmYXVsdEJlaGF2aW9yIHx8ICFwcm9wcy5jZXJ0aWZpY2F0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVmYXVsdEJlaGF2aW9yIGFuZCBjZXJ0aWZpY2F0ZSBhcmUgcmVxdWlyZWQgd2hlbiBjcmVhdGluZyBhIGRpc3RyaWJ1dGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHAgPSBwcm9wcy5hdXRoU3NtUGFyYW1QcmVmaXg7XG4gICAgY29uc3QgY29uZmlnU2VjcmV0QXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9jb25maWdTZWNyZXRBcm5gKTtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKHRoaXMsIGAke3B9L2ttc0tleUFybmApO1xuICAgIGNvbnN0IGF1dGhUYWJsZUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7cH0vYXV0aFRhYmxlQXJuYCk7XG4gICAgY29uc3Qga3ZzQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtwfS9rdnNBcm5gKTtcblxuICAgIHRoaXMua3ZzID0gY2xvdWRmcm9udC5LZXlWYWx1ZVN0b3JlLmZyb21LZXlWYWx1ZVN0b3JlQXJuKHRoaXMsICdLVlMnLCBrdnNBcm4pO1xuICAgIHRoaXMubG9naW5SZWRpcmVjdFBhdGggPSBwcm9wcy51bmF1dGhlbnRpY2F0ZWRSZWRpcmVjdFBhdGggPz8gJy9sb2dpbic7XG4gICAgdGhpcy5lbmFibGVIZWFkZXJJbmplY3Rpb24gPSBwcm9wcy5lbmFibGVIZWFkZXJJbmplY3Rpb24gPz8gdHJ1ZTtcbiAgICB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyA9IHByb3BzLmhlYWRlckluamVjdGlvbkNsYWltcyA/PyB7XG4gICAgICAneC1jdXN0b21lci1pZCc6ICdjdXN0b21lcl9pZCcsXG4gICAgICAneC1jdXN0b21lci1lbWFpbCc6ICdlbWFpbCcsXG4gICAgfTtcbiAgICB0aGlzLmVuYWJsZVJlZnJlc2ggPSBwcm9wcy5lbmFibGVSZWZyZXNoRW5kcG9pbnQgPz8gdHJ1ZTtcbiAgICB0aGlzLmNvbXBvc2VyID0gbmV3IEZ1bmN0aW9uQ29tcG9zZXIoKTtcbiAgICB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgY2Fub25pY2FsRG9tYWluID0gcHJvcHMuZG9tYWluTmFtZXNbMF07XG4gICAgY29uc3QgYmFzZVNlY3JldE5hbWUgPSBwcm9wcy5jb25maWdTZWNyZXROYW1lID8/IGBjbG91ZGZyb250LWF1dGgtY29uZmlnLSR7Y2Fub25pY2FsRG9tYWlufWA7XG4gICAgY29uc3Qgc2Vzc2lvbklzc3VhbmNlUGF0aCA9IHByb3BzLnNlc3Npb25Jc3N1YW5jZVBhdGggPz8gJy9hdXRoL3Nlc3Npb24nO1xuXG4gICAgLy8gRXh0cmEgY29uZmlnIHNlY3JldCBmb3IgdmFsdWVzIHRoYXQgYXJlIENESyB0b2tlbnMgYXQgc3ludGggdGltZSAoYW5kIHNvXG4gICAgLy8gY2Fubm90IGJlIGJha2VkIGludG8gY29uZmlnX2dlbmVyYXRlZC5weSkg4oCUIExhbWJkYUBFZGdlIGZvcmJpZHMgZW52IHZhcnMuXG4gICAgLy8gQmFrZSB0aGUgTElURVJBTCBuYW1lIGJlbG93LCBOT1QgYGV4dHJhQ29uZmlnU2VjcmV0LnNlY3JldE5hbWVgOiB0aGF0XG4gICAgLy8gcHJvcGVydHkgaXMgYSBkZXBsb3ktdGltZSB0b2tlbiAoQ2xvdWRGb3JtYXRpb24gZGVyaXZlcyBpdCBieSBwYXJzaW5nIHRoZVxuICAgIC8vIHNlY3JldCBBUk4pLCBzbyBiYWtpbmcgaXQgaW50byBjb25maWdfZ2VuZXJhdGVkLnB5IGF0IHN5bnRoIHJlbmRlcnMgaXQgYXNcbiAgICAvLyBgJHtUb2tlbltGbjo6Sm9pbi5OTk5OXX1gLiBUaGUgZWRnZSdzIGBnZXRfc2VjcmV0X3ZhbHVlKFNlY3JldElkPS4uLilgXG4gICAgLy8gdGhlbiBmYWlscyB3aXRoIGBWYWxpZGF0aW9uRXhjZXB0aW9uOiBJbnZhbGlkIG5hbWVgLCB0aGUgZXh0cmEgY29uZmlnXG4gICAgLy8gKHBvc3RfYXV0aF9ob29rX3VybCwga3ZzX2FybiwgcG9zdF9hdXRoX2hvb2tfc2VjcmV0X2FybikgbmV2ZXIgbG9hZHMsIGFuZFxuICAgIC8vIHRoZSBpZGVudGl0eS1saW5raW5nIGhvb2sgaXMgc2lsZW50bHkgbmV2ZXIgY2FsbGVkLlxuICAgIGNvbnN0IGV4dHJhQ29uZmlnU2VjcmV0TmFtZSA9IGBjbG91ZGZyb250LWN1c3RvbXVpLWNvbmZpZy0ke2Nhbm9uaWNhbERvbWFpbn1gO1xuICAgIGNvbnN0IGV4dHJhQ29uZmlnU2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCAnQ3VzdG9tVWlDb25maWdTZWNyZXQnLCB7XG4gICAgICBzZWNyZXROYW1lOiBleHRyYUNvbmZpZ1NlY3JldE5hbWUsXG4gICAgICBzZWNyZXRPYmplY3RWYWx1ZToge1xuICAgICAgICBrdnNfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChrdnNBcm4pLFxuICAgICAgICBwb3N0X2F1dGhfaG9va191cmw6IGNvcmUuU2VjcmV0VmFsdWUudW5zYWZlUGxhaW5UZXh0KHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tVcmwpLFxuICAgICAgICBwb3N0X2F1dGhfaG9va19zZWNyZXRfYXJuOiBjb3JlLlNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuID8/ICcnKSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogYEN1c3RvbS1VSSBhdXRoIGNvbmZpZyBvdmVycmlkZXMgZm9yICR7Y2Fub25pY2FsRG9tYWlufWAsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGF0aWNPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBsb2dpbl9yZWRpcmVjdF9wYXRoOiB0aGlzLmxvZ2luUmVkaXJlY3RQYXRoLFxuICAgICAgYWxsb3dlZF9kb21haW5zOiBKU09OLnN0cmluZ2lmeShwcm9wcy5kb21haW5OYW1lcyksXG4gICAgICBzZXNzaW9uX3R0bF9zZWNvbmRzOiBTdHJpbmcocHJvcHMuc2Vzc2lvblR0bFNlY29uZHMgPz8gMzYwMCksXG4gICAgICByZWZyZXNoX3R0bF9kYXlzOiBTdHJpbmcocHJvcHMucmVmcmVzaFR0bERheXMgPz8gMzApLFxuICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfcGF0aDogcHJvcHMucG9zdExvZ291dFJlZGlyZWN0UGF0aCA/PyAnLycsXG4gICAgICBjb25maWdfcmVnaW9uOiBwcm9wcy5hdXRoUmVnaW9uLFxuICAgIH07XG5cbiAgICBjb25zdCBjb25maWdQeSA9IHRoaXMucmVuZGVyQ29uZmlnUHkoYmFzZVNlY3JldE5hbWUsIGV4dHJhQ29uZmlnU2VjcmV0TmFtZSwgcHJvcHMuYXV0aFJlZ2lvbiwgc3RhdGljT3ZlcnJpZGVzKTtcblxuICAgIC8vIFNoYXJlZCBJQU0gZ3JhbnRzIGZhY3RvcnkgZm9yIHRoZSBlZGdlIExhbWJkYXMuXG4gICAgY29uc3QgZ3JhbnRDb21tb24gPSAocm9sZTogaWFtLklSb2xlLCBvcHRzOiB7IGttczogYm9vbGVhbjsgZGRiOiBib29sZWFuOyBrdnM6IGJvb2xlYW47IGNvZ25pdG86IGJvb2xlYW47IGhvb2tTZWNyZXQ6IGJvb2xlYW4gfSk6IHZvaWQgPT4ge1xuICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsICdzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldCddLFxuICAgICAgICByZXNvdXJjZXM6IFtjb25maWdTZWNyZXRBcm4sIGV4dHJhQ29uZmlnU2VjcmV0LnNlY3JldEFybl0sXG4gICAgICB9KSk7XG4gICAgICBpZiAob3B0cy5ob29rU2VjcmV0ICYmIHByb3BzLmlkZW50aXR5TGlua2luZ0hvb2tTZWNyZXRBcm4pIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtwcm9wcy5pZGVudGl0eUxpbmtpbmdIb29rU2VjcmV0QXJuXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMua21zKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBba21zS2V5QXJuXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuZGRiKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2R5bmFtb2RiOkdldEl0ZW0nLCAnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpEZWxldGVJdGVtJywgJ2R5bmFtb2RiOlF1ZXJ5J10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbYXV0aFRhYmxlQXJuLCBgJHthdXRoVGFibGVBcm59L2luZGV4LypgXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMua3ZzKSB7XG4gICAgICAgIHJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZnJvbnQta2V5dmFsdWVzdG9yZTpQdXRLZXknLCAnY2xvdWRmcm9udC1rZXl2YWx1ZXN0b3JlOkRlc2NyaWJlS2V5VmFsdWVTdG9yZSddLFxuICAgICAgICAgIHJlc291cmNlczogW2t2c0Fybl0sXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmNvZ25pdG8pIHtcbiAgICAgICAgcm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnY29nbml0by1pZHA6SW5pdGlhdGVBdXRoJywgJ2NvZ25pdG8taWRwOlJldm9rZVRva2VuJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBlZGdlUm9sZSA9IChyb2xlSWQ6IHN0cmluZyk6IGlhbS5Sb2xlID0+IG5ldyBpYW0uUm9sZSh0aGlzLCByb2xlSWQsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5Db21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlZGdlbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gU2Vzc2lvbi1pc3N1YW5jZSBMYW1iZGE6IHZlcmlmaWVzIHRoZSBDb2duaXRvIGlkX3Rva2VuIHdpdGggdGhlIHB1cmUtUHl0aG9uXG4gICAgLy8gYHJzYWAgbGlicmFyeSwgYnVuZGxlZCBmcm9tIGl0cyBvd24gY29nbml0by1jdXN0b211aS1zZXNzaW9uIGRlcHMgZGlyIChOT1QgdGhlXG4gICAgLy8gZmF0IFB5SldUL2NyeXB0b2dyYXBoeSBjb2duaXRvLWF1dGggYnVuZGxlKSBzbyBpdCBmaXRzIHRoZSAxIE1CIHZpZXdlci1yZXF1ZXN0XG4gICAgLy8gTGFtYmRhQEVkZ2UgY29kZSBsaW1pdC5cbiAgICBjb25zdCBpc3N1YW5jZVJvbGUgPSBlZGdlUm9sZSgnSXNzdWFuY2VSb2xlJyk7XG4gICAgZ3JhbnRDb21tb24oaXNzdWFuY2VSb2xlLCB7IGttczogdHJ1ZSwgZGRiOiB0cnVlLCBrdnM6IGZhbHNlLCBjb2duaXRvOiBmYWxzZSwgaG9va1NlY3JldDogdHJ1ZSB9KTtcbiAgICBjb25zdCBpc3N1YW5jZUZuID0gdGhpcy5tYWtlRWRnZUZ1bmN0aW9uKCdTZXNzaW9uSXNzdWFuY2UnLCAnY29nbml0by1jdXN0b211aS1zZXNzaW9uJywgY29uZmlnUHksIGlzc3VhbmNlUm9sZSwgJ2NvZ25pdG8tY3VzdG9tdWktc2Vzc2lvbicpO1xuXG4gICAgLy8gUmVmcmVzaCArIGxvZ291dCBMYW1iZGFzIChib3RvMyBvbmx5IOKAlCBubyBidW5kbGVkIGRlcHMpLlxuICAgIGxldCByZWZyZXNoRm46IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5lbmFibGVSZWZyZXNoKSB7XG4gICAgICBjb25zdCByZWZyZXNoUm9sZSA9IGVkZ2VSb2xlKCdSZWZyZXNoUm9sZScpO1xuICAgICAgZ3JhbnRDb21tb24ocmVmcmVzaFJvbGUsIHsga21zOiB0cnVlLCBkZGI6IHRydWUsIGt2czogZmFsc2UsIGNvZ25pdG86IHRydWUsIGhvb2tTZWNyZXQ6IGZhbHNlIH0pO1xuICAgICAgcmVmcmVzaEZuID0gdGhpcy5tYWtlRWRnZUZ1bmN0aW9uKCdTZXNzaW9uUmVmcmVzaCcsICdjb2duaXRvLWN1c3RvbXVpLXJlZnJlc2gnLCBjb25maWdQeSwgcmVmcmVzaFJvbGUpO1xuICAgIH1cblxuICAgIGxldCBsb2dvdXRGbjogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5lbmFibGVMb2dvdXRFbmRwb2ludCA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBsb2dvdXRSb2xlID0gZWRnZVJvbGUoJ0xvZ291dFJvbGUnKTtcbiAgICAgIGdyYW50Q29tbW9uKGxvZ291dFJvbGUsIHsga21zOiB0cnVlLCBkZGI6IHRydWUsIGt2czogdHJ1ZSwgY29nbml0bzogdHJ1ZSwgaG9va1NlY3JldDogZmFsc2UgfSk7XG4gICAgICBsb2dvdXRGbiA9IHRoaXMubWFrZUVkZ2VGdW5jdGlvbignU2Vzc2lvbkxvZ291dCcsICdjb2duaXRvLWN1c3RvbXVpLWxvZ291dCcsIGNvbmZpZ1B5LCBsb2dvdXRSb2xlKTtcbiAgICB9XG5cbiAgICAvLyBSZXRhaW4gb2xkIExhbWJkYUBFZGdlIHZlcnNpb25zIG9uIGEgcmVhbCB1cGRhdGUvZGVsZXRlIOKAlCBlZGdlIHJlcGxpY2FzXG4gICAgLy8gdGFrZSBob3VycyB0byBkcmFpbiDigJQgYnV0IGxldCBDbG91ZEZvcm1hdGlvbiBkZWxldGUgYSB2ZXJzaW9uIHdob3NlXG4gICAgLy8gQ1JFQVRFIHdhcyByb2xsZWQgYmFjayAoUmV0YWluRXhjZXB0T25DcmVhdGUpLiBBIHBsYWluIFJFVEFJTiBvcnBoYW5zIHRoZVxuICAgIC8vIHZlcnNpb24gKGFuZCwgdGhyb3VnaCBpdCwgdGhlIGZ1bmN0aW9uIGFuZCBpdHMgSUFNIHJvbGUpIG9uIGEgZmFpbGVkXG4gICAgLy8gY3JlYXRlLCBibG9ja2luZyB0aGUgbmV4dCBkZXBsb3kncyBpbXBvcnQ7IFJFVEFJTl9PTl9VUERBVEVfT1JfREVMRVRFXG4gICAgLy8ga2VlcHMgdGhlIGRyYWluLXNhZmUgcmV0YWluIGJlaGF2aW91ciB3aXRob3V0IHRoZSBvcnBoYW4uXG4gICAgZm9yIChjb25zdCBmbiBvZiBbaXNzdWFuY2VGbiwgcmVmcmVzaEZuLCBsb2dvdXRGbl0pIHtcbiAgICAgIGlmICghZm4pIGNvbnRpbnVlO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGZuLmN1cnJlbnRWZXJzaW9uLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNvcmUuQ2ZuUmVzb3VyY2U7XG4gICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uLmFwcGx5UmVtb3ZhbFBvbGljeShjb3JlLlJlbW92YWxQb2xpY3kuUkVUQUlOX09OX1VQREFURV9PUl9ERUxFVEUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVuZHBvaW50IGJlaGF2aW91cnMgdXNlIGF1dGhFbmRwb2ludE9yaWdpbiB3aGVuIHN1cHBsaWVkIChhIG5vbi1WUEMgb3JpZ2luLFxuICAgIC8vIHJlcXVpcmVkIHdoZW4gdGhlIGRlZmF1bHQgYmVoYXZpb3VyJ3Mgb3JpZ2luIGlzIGEgVlBDIG9yaWdpbiksIGVsc2UgdGhlXG4gICAgLy8gZGVmYXVsdCBiZWhhdmlvdXIncyBvcmlnaW4uIEF0dGFjaCBtb2RlIGd1YXJhbnRlZXMgYXV0aEVuZHBvaW50T3JpZ2luIGlzIHNldC5cbiAgICBjb25zdCBlbmRwb2ludE9yaWdpbjogY2xvdWRmcm9udC5JT3JpZ2luID0gcHJvcHMuYXV0aEVuZHBvaW50T3JpZ2luID8/IHByb3BzLmRlZmF1bHRCZWhhdmlvciEub3JpZ2luO1xuXG4gICAgLy8gQXV0aCBlbmRwb2ludHMgYXJlIFBPU1QtZHJpdmVuOyBDbG91ZEZyb250IG90aGVyd2lzZSBkZWZhdWx0cyB0byBHRVQvSEVBRFxuICAgIC8vIGFuZCByZWplY3RzIHRoZSBQT1NUIHRoZXNlIGVuZHBvaW50cyByZXF1aXJlLiBBbGxvdyBhbGwgbWV0aG9kcyBieSBkZWZhdWx0LlxuICAgIGNvbnN0IGF1dGhFbmRwb2ludEFsbG93ZWRNZXRob2RzID0gcHJvcHMuYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHMgPz8gY2xvdWRmcm9udC5BbGxvd2VkTWV0aG9kcy5BTExPV19BTEw7XG5cbiAgICBjb25zdCBlbmRwb2ludE9wdHMgPSAoZm46IGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiwgaW5jbHVkZUJvZHk6IGJvb2xlYW4pOiBjbG91ZGZyb250LkFkZEJlaGF2aW9yT3B0aW9ucyA9PiAoe1xuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IGNsb3VkZnJvbnQuVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICBhbGxvd2VkTWV0aG9kczogYXV0aEVuZHBvaW50QWxsb3dlZE1ldGhvZHMsXG4gICAgICAvLyBTZXQtQ29va2llIG11c3QgcmVhY2ggdGhlIHZpZXdlciDigJQgY2FjaGluZyBkaXNhYmxlZC5cbiAgICAgIGNhY2hlUG9saWN5OiBjbG91ZGZyb250LkNhY2hlUG9saWN5LkNBQ0hJTkdfRElTQUJMRUQsXG4gICAgICBlZGdlTGFtYmRhczogW3tcbiAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiBmbi5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgLy8gVmlld2VyLXJlcXVlc3Q6IHRoZXNlIGZ1bmN0aW9ucyBnZW5lcmF0ZSB0aGUgcmVzcG9uc2UgZW50aXJlbHkgYXQgdGhlXG4gICAgICAgIC8vIGVkZ2UgYW5kIG5ldmVyIGNvbnRhY3QgdGhlIG9yaWdpbi4gVmlld2VyLXJlcXVlc3QgZmlyZXMgcmVsaWFibHkgb24gYVxuICAgICAgICAvLyBjYWNoZSBtaXNzIHJlZ2FyZGxlc3Mgb2Ygb3JpZ2luIHR5cGUgKHVubGlrZSBvcmlnaW4tcmVxdWVzdCwgd2hpY2ggaXNcbiAgICAgICAgLy8gaWxsZWdhbCBvbiBhIFZQQy1vcmlnaW4gYmVoYXZpb3VyIGFuZCDigJQgYXMgb2JzZXJ2ZWQgb24gYXR0YWNoLW1vZGVcbiAgICAgICAgLy8gZGlzdHJpYnV0aW9ucyDigJQgY291bGQgc2lsZW50bHkgZmFpbCB0byBpbnRlcmNlcHQsIGxldHRpbmcgdGhlIHJlcXVlc3RcbiAgICAgICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBwbGFjZWhvbGRlciBvcmlnaW4pLiBJdCBjYXBzIGNvZGUgYXQgMSBNQiwgd2hpY2hcbiAgICAgICAgLy8gdGhlIHNlc3Npb24taXNzdWFuY2UgZnVuY3Rpb24gbm93IGZpdHMgYWZ0ZXIgZHJvcHBpbmcgUHlKV1QvY3J5cHRvZ3JhcGh5XG4gICAgICAgIC8vIGZvciB0aGUgcHVyZS1QeXRob24gYHJzYWAgbGlicmFyeS4gVGhlIGJlaGF2aW91ciBzdGlsbCBuZWVkcyBhIHRhcmdldFxuICAgICAgICAvLyBvcmlnaW4gKGVuZHBvaW50T3JpZ2luKSwgYnV0IGl0IGlzIGEgbmV2ZXItY29udGFjdGVkIHBsYWNlaG9sZGVyLlxuICAgICAgICBldmVudFR5cGU6IGNsb3VkZnJvbnQuTGFtYmRhRWRnZUV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVCxcbiAgICAgICAgaW5jbHVkZUJvZHk6IGluY2x1ZGVCb2R5LFxuICAgICAgfV0sXG4gICAgfSk7XG5cbiAgICBpZiAoYXR0YWNoTW9kZSkge1xuICAgICAgdGhpcy5kaXN0cmlidXRpb24gPSBwcm9wcy5kaXN0cmlidXRpb24hO1xuICAgICAgdGhpcy5kaXN0cmlidXRpb24uYWRkQmVoYXZpb3Ioc2Vzc2lvbklzc3VhbmNlUGF0aCwgZW5kcG9pbnRPcmlnaW4sIGVuZHBvaW50T3B0cyhpc3N1YW5jZUZuLCB0cnVlKSk7XG4gICAgICBpZiAocmVmcmVzaEZuKSB7XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uLmFkZEJlaGF2aW9yKCcvb2F1dGgyL3JlZnJlc2gnLCBlbmRwb2ludE9yaWdpbiwgZW5kcG9pbnRPcHRzKHJlZnJlc2hGbiwgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2dvdXRGbikge1xuICAgICAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcignL29hdXRoMi9sb2dvdXQnLCBlbmRwb2ludE9yaWdpbiwgZW5kcG9pbnRPcHRzKGxvZ291dEZuLCB0cnVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxCZWhhdmlvcnM6IFJlY29yZDxzdHJpbmcsIGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zPiA9IHtcbiAgICAgICAgW3Nlc3Npb25Jc3N1YW5jZVBhdGhdOiB7IG9yaWdpbjogZW5kcG9pbnRPcmlnaW4sIC4uLmVuZHBvaW50T3B0cyhpc3N1YW5jZUZuLCB0cnVlKSB9LFxuICAgICAgfTtcbiAgICAgIGlmIChyZWZyZXNoRm4pIHtcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1snL29hdXRoMi9yZWZyZXNoJ10gPSB7IG9yaWdpbjogZW5kcG9pbnRPcmlnaW4sIC4uLmVuZHBvaW50T3B0cyhyZWZyZXNoRm4sIGZhbHNlKSB9O1xuICAgICAgfVxuICAgICAgaWYgKGxvZ291dEZuKSB7XG4gICAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnNbJy9vYXV0aDIvbG9nb3V0J10gPSB7IG9yaWdpbjogZW5kcG9pbnRPcmlnaW4sIC4uLmVuZHBvaW50T3B0cyhsb2dvdXRGbiwgdHJ1ZSkgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXN0cmlidXRpb24gPSBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24odGhpcywgJ0Rpc3RyaWJ1dGlvbicsIHtcbiAgICAgICAgaHR0cFZlcnNpb246IGNsb3VkZnJvbnQuSHR0cFZlcnNpb24uSFRUUDJfQU5EXzMsXG4gICAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IHByb3BzLm1pbmltdW1Qcm90b2NvbFZlcnNpb24gPz8gY2xvdWRmcm9udC5TZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjUsXG4gICAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICAgIC4uLnByb3BzLmRlZmF1bHRCZWhhdmlvciEsXG4gICAgICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnM6IHRoaXMubWVyZ2VGdW5jdGlvbkFzc29jaWF0aW9ucyhcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhwcm9wcy5kZWZhdWx0RXh0ZW5zaW9ucywgcHJvcHMuZGVmYXVsdEV4dGVuc2lvbkNvbmZpZyksXG4gICAgICAgICAgICBwcm9wcy5kZWZhdWx0QmVoYXZpb3IhLmZ1bmN0aW9uQXNzb2NpYXRpb25zLFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6IGFkZGl0aW9uYWxCZWhhdmlvcnMsXG4gICAgICAgIGRvbWFpbk5hbWVzOiBwcm9wcy5kb21haW5OYW1lcyxcbiAgICAgICAgY2VydGlmaWNhdGU6IHByb3BzLmNlcnRpZmljYXRlISxcbiAgICAgICAgd2ViQWNsSWQ6IHByb3BzLndlYkFjbElkLFxuICAgICAgICBkZWZhdWx0Um9vdE9iamVjdDogcHJvcHMuZGVmYXVsdFJvb3RPYmplY3QgPz8gJ2luZGV4Lmh0bWwnLFxuICAgICAgICBlcnJvclJlc3BvbnNlczogcHJvcHMuZW5hYmxlRXJyb3JSZXNwb25zZXMgPyBbXG4gICAgICAgICAgeyBodHRwU3RhdHVzOiA0MDMsIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLCByZXNwb25zZVBhZ2VQYXRoOiBwcm9wcy5lcnJvclJlc3BvbnNlUGFnZVBhdGggPz8gJy9lcnJvci5odG1sJywgdHRsOiBjb3JlLkR1cmF0aW9uLm1pbnV0ZXMoNSkgfSxcbiAgICAgICAgICB7IGh0dHBTdGF0dXM6IDQwNCwgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLmVycm9yUmVzcG9uc2VQYWdlUGF0aCA/PyAnL2Vycm9yLmh0bWwnLCB0dGw6IGNvcmUuRHVyYXRpb24ubWludXRlcyg1KSB9LFxuICAgICAgICBdIDogW10sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgYmVoYXZpb3VyLiBQYXNzIGBvcHRpb25zLmV4dGVuc2lvbnMgPSBbRXh0ZW5zaW9uLlJFUVVJUkVfQVVUSF1gIHRvXG4gICAqIHByb3RlY3QgdGhlIHBhdGggKHVuYXV0aGVudGljYXRlZCByZXF1ZXN0cyByZWRpcmVjdCB0byB0aGUgbG9naW4gcGFnZSBhbmRcbiAgICogdmFsaWRhdGVkIGlkZW50aXR5IGNsYWltcyBhcmUgaW5qZWN0ZWQgYXMgb3JpZ2luIGhlYWRlcnMpLlxuICAgKi9cbiAgcHVibGljIGFkZEJlaGF2aW9yKFxuICAgIHBhdGhQYXR0ZXJuOiBzdHJpbmcsXG4gICAgb3JpZ2luOiBjbG91ZGZyb250LklPcmlnaW4sXG4gICAgb3B0aW9uczogQWRkQmVoYXZpb3JPcHRpb25zPFRSb2xlPiA9IHt9LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmRpc3RyaWJ1dGlvbi5hZGRCZWhhdmlvcihwYXRoUGF0dGVybiwgb3JpZ2luLCB7XG4gICAgICAuLi5vcHRpb25zLmJlaGF2aW9yT3B0aW9ucyxcbiAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiB0aGlzLm1lcmdlRnVuY3Rpb25Bc3NvY2lhdGlvbnMoXG4gICAgICAgIHRoaXMuYnVpbGRGdW5jdGlvbkFzc29jaWF0aW9ucyhvcHRpb25zLmV4dGVuc2lvbnMsIG9wdGlvbnMuZXh0ZW5zaW9uQ29uZmlnKSxcbiAgICAgICAgb3B0aW9ucy5iZWhhdmlvck9wdGlvbnM/LmZ1bmN0aW9uQXNzb2NpYXRpb25zLFxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSB0d28gc2V0cyBvZiBmdW5jdGlvbiBhc3NvY2lhdGlvbnMsIGVuZm9yY2luZyBDbG91ZEZyb250J3MgcnVsZSBvZiBvbmVcbiAgICogZnVuY3Rpb24gcGVyIGV2ZW50IHR5cGUgcGVyIGJlaGF2aW91ci4gVGhlIGxpYnJhcnkgbmV2ZXIgY29tcG9zZXMgb3IgaW5zcGVjdHNcbiAgICogYSBjb25zdW1lcidzIGZ1bmN0aW9uIOKAlCBpdCBvbmx5IGF0dGFjaGVzIGl0OyBjb21iaW5pbmcgdHdvIGZ1bmN0aW9ucyBvbiB0aGVcbiAgICogc2FtZSBldmVudCB0eXBlIGlzIHRoZSBjb25zdW1lcidzIHJlc3BvbnNpYmlsaXR5IChhIHNpbmdsZSBmdW5jdGlvbikuXG4gICAqL1xuICBwcml2YXRlIG1lcmdlRnVuY3Rpb25Bc3NvY2lhdGlvbnMoXG4gICAgYXV0aD86IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdLFxuICAgIGNvbnN1bWVyPzogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10sXG4gICk6IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhbGwgPSBbLi4uKGF1dGggPz8gW10pLCAuLi4oY29uc3VtZXIgPz8gW10pXTtcbiAgICBpZiAoYWxsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8Y2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZT4oKTtcbiAgICBmb3IgKGNvbnN0IGZhIG9mIGFsbCkge1xuICAgICAgaWYgKHNlZW4uaGFzKGZhLmV2ZW50VHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZSBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSBwZXIgYmVoYXZpb3VyLCBidXQgdHdvICcke2ZhLmV2ZW50VHlwZX0nIGAgK1xuICAgICAgICAgICdmdW5jdGlvbnMgd2VyZSBzdXBwbGllZCAoZS5nLiBSRVFVSVJFX0FVVEggcGx1cyB5b3VyIG93biBmdW5jdGlvbikuIEtlZXAgYXV0aCBhbmQgeW91ciBvdGhlciAnICtcbiAgICAgICAgICAnZnVuY3Rpb24gb24gc2VwYXJhdGUgcGF0aCBiZWhhdmlvdXJzLCBvciBjb21iaW5lIHRoZW0gaW50byBhIHNpbmdsZSBmdW5jdGlvbiB5b3Vyc2VsZi4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoZmEuZXZlbnRUeXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBQUk9URUNURUQgYmVoYXZpb3VyOiB1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMgcmVkaXJlY3QgdG8gdGhlIGxvZ2luXG4gICAqIHBhZ2UgYW5kIHZhbGlkYXRlZCBpZGVudGl0eSBjbGFpbXMgYXJlIGluamVjdGVkIGFzIG9yaWdpbiBoZWFkZXJzLlxuICAgKiBDb252ZW5pZW5jZSB3cmFwcGVyIG92ZXIge0BsaW5rIGFkZEJlaGF2aW9yfSB0aGF0IGVuc3VyZXMgUkVRVUlSRV9BVVRILlxuICAgKi9cbiAgcHVibGljIHByb3RlY3QoXG4gICAgcGF0aFBhdHRlcm46IHN0cmluZyxcbiAgICBvcmlnaW46IGNsb3VkZnJvbnQuSU9yaWdpbixcbiAgICBvcHRpb25zOiBBZGRCZWhhdmlvck9wdGlvbnM8VFJvbGU+ID0ge30sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBvcHRpb25zLmV4dGVuc2lvbnMgPyBbLi4ub3B0aW9ucy5leHRlbnNpb25zXSA6IFtdO1xuICAgIGlmICghZXh0ZW5zaW9ucy5pbmNsdWRlcyhFeHRlbnNpb24uUkVRVUlSRV9BVVRIKSkge1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKEV4dGVuc2lvbi5SRVFVSVJFX0FVVEgpO1xuICAgIH1cbiAgICB0aGlzLmFkZEJlaGF2aW9yKHBhdGhQYXR0ZXJuLCBvcmlnaW4sIHsgLi4ub3B0aW9ucywgZXh0ZW5zaW9uczogZXh0ZW5zaW9ucyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9zZWQgdmlld2VyLXJlcXVlc3QgYXV0aC1jaGVjayBmdW5jdGlvbiAoUkVRVUlSRV9BVVRIKS4gVXNlZnVsIGluXG4gICAqIEFUVEFDSCBNT0RFIHRvIGFzc29jaWF0ZSBvciBjb21wb3NlIGF1dGggb250byBhIGJlaGF2aW91ciB0aGlzIGNvbnN0cnVjdCBkb2VzXG4gICAqIG5vdCBvd24g4oCUIGUuZy4gYW4gZXhpc3RpbmcgZGVmYXVsdCBiZWhhdmlvdXIsIHZpYSBhbiBMMSBvdmVycmlkZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0aEZ1bmN0aW9uKCk6IGNsb3VkZnJvbnQuRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2VkQXV0aEZ1bmN0aW9uKFtFeHRlbnNpb24uUkVRVUlSRV9BVVRIXSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnVuY3Rpb25Bc3NvY2lhdGlvbnMoXG4gICAgZXh0ZW5zaW9ucz86IEV4dGVuc2lvbltdLFxuICAgIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT4sXG4gICk6IGNsb3VkZnJvbnQuRnVuY3Rpb25Bc3NvY2lhdGlvbltdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWV4dGVuc2lvbnMgfHwgZXh0ZW5zaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBbeyBmdW5jdGlvbjogdGhpcy5jb21wb3NlZEF1dGhGdW5jdGlvbihleHRlbnNpb25zLCBjb25maWcpLCBldmVudFR5cGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25FdmVudFR5cGUuVklFV0VSX1JFUVVFU1QgfV07XG4gIH1cblxuICBwcml2YXRlIGNvbXBvc2VkQXV0aEZ1bmN0aW9uKFxuICAgIGV4dGVuc2lvbnM6IEV4dGVuc2lvbltdLFxuICAgIGNvbmZpZz86IEV4dGVuc2lvbkNvbmZpZzxUUm9sZT4sXG4gICk6IGNsb3VkZnJvbnQuRnVuY3Rpb24ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5mdW5jdGlvbkNhY2hlS2V5KGV4dGVuc2lvbnMsIGNvbmZpZyk7XG4gICAgbGV0IGZ1bmMgPSB0aGlzLmNvbXBvc2VkRnVuY3Rpb25zLmdldChjYWNoZUtleSk7XG4gICAgaWYgKCFmdW5jKSB7XG4gICAgICBjb25zdCBjb2RlID0gdGhpcy5jb21wb3Nlci5jb21wb3NlKGV4dGVuc2lvbnMsIGNvbmZpZywge1xuICAgICAgICBsb2dpblJlZGlyZWN0UGF0aDogdGhpcy5sb2dpblJlZGlyZWN0UGF0aCxcbiAgICAgICAgZW5hYmxlSGVhZGVySW5qZWN0aW9uOiB0aGlzLmVuYWJsZUhlYWRlckluamVjdGlvbixcbiAgICAgICAgaGVhZGVySW5qZWN0aW9uQ2xhaW1zOiB0aGlzLmhlYWRlckluamVjdGlvbkNsYWltcyxcbiAgICAgICAgZW5hYmxlUmVmcmVzaDogdGhpcy5lbmFibGVSZWZyZXNoLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmdW5jdGlvbklkID0gYENvbXBvc2VkRm4ke2V4dGVuc2lvbnMubWFwKGUgPT4gZS5yZXBsYWNlKCdSRVFVSVJFXycsICcnKSkuam9pbignJyl9JHt0aGlzLmNvbXBvc2VkRnVuY3Rpb25zLnNpemV9YDtcbiAgICAgIGNvbnN0IG5lZWRzS3ZzID0gZXh0ZW5zaW9ucy5pbmNsdWRlcyhFeHRlbnNpb24uUkVRVUlSRV9BVVRIKTtcbiAgICAgIGZ1bmMgPSBuZXcgY2xvdWRmcm9udC5GdW5jdGlvbih0aGlzLCBmdW5jdGlvbklkLCBuZWVkc0t2c1xuICAgICAgICA/IHsgY29kZTogY2xvdWRmcm9udC5GdW5jdGlvbkNvZGUuZnJvbUlubGluZShjb2RlKSwgcnVudGltZTogY2xvdWRmcm9udC5GdW5jdGlvblJ1bnRpbWUuSlNfMl8wLCBjb21tZW50OiBgQ3VzdG9tLVVJOiAke2V4dGVuc2lvbnMuam9pbignLCAnKX1gLCBrZXlWYWx1ZVN0b3JlOiB0aGlzLmt2cyB9XG4gICAgICAgIDogeyBjb2RlOiBjbG91ZGZyb250LkZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGNvZGUpLCBydW50aW1lOiBjbG91ZGZyb250LkZ1bmN0aW9uUnVudGltZS5KU18yXzAsIGNvbW1lbnQ6IGBDdXN0b20tVUk6ICR7ZXh0ZW5zaW9ucy5qb2luKCcsICcpfWAgfSk7XG4gICAgICBpZiAodGhpcy5sYXN0Q3JlYXRlZEZ1bmN0aW9uKSB7XG4gICAgICAgIGZ1bmMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMubGFzdENyZWF0ZWRGdW5jdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RDcmVhdGVkRnVuY3Rpb24gPSBmdW5jO1xuICAgICAgdGhpcy5jb21wb3NlZEZ1bmN0aW9ucy5zZXQoY2FjaGVLZXksIGZ1bmMpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYztcbiAgfVxuXG4gIHByaXZhdGUgZnVuY3Rpb25DYWNoZUtleShleHRlbnNpb25zOiBFeHRlbnNpb25bXSwgY29uZmlnPzogRXh0ZW5zaW9uQ29uZmlnPFRSb2xlPik6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBbZXh0ZW5zaW9ucy5zbGljZSgpLnNvcnQoKS5qb2luKCcsJyldO1xuICAgIGlmIChjb25maWc/LnJlcXVpcmVkUm9sZXMpIHtcbiAgICAgIHBhcnRzLnB1c2goY29uZmlnLnJlcXVpcmVkUm9sZXMuc2xpY2UoKS5zb3J0KCkuam9pbignLCcpKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZz8ucm9sZU1hdGNoTW9kZSAmJiBjb25maWcucm9sZU1hdGNoTW9kZSAhPT0gUm9sZU1hdGNoTW9kZS5PUikge1xuICAgICAgcGFydHMucHVzaChjb25maWcucm9sZU1hdGNoTW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0cy5qb2luKCd8Jyk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbmZpZ1B5KFxuICAgIGJhc2VTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgZXh0cmFTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgc3RhdGljT3ZlcnJpZGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICAnaW1wb3J0IGpzb24nLFxuICAgICAgJ2ltcG9ydCBsb2dnaW5nJyxcbiAgICAgICdpbXBvcnQgYm90bzMnLFxuICAgICAgJycsXG4gICAgICAnbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKScsXG4gICAgICBgQkFTRV9TRUNSRVRfTkFNRSA9ICR7SlNPTi5zdHJpbmdpZnkoYmFzZVNlY3JldE5hbWUpfWAsXG4gICAgICBgRVhUUkFfU0VDUkVUX05BTUUgPSAke0pTT04uc3RyaW5naWZ5KGV4dHJhU2VjcmV0TmFtZSl9YCxcbiAgICAgIGBDT05GSUdfUkVHSU9OID0gJHtKU09OLnN0cmluZ2lmeShyZWdpb24pfWAsXG4gICAgICBgU1RBVElDX09WRVJSSURFUyA9ICR7SlNPTi5zdHJpbmdpZnkoc3RhdGljT3ZlcnJpZGVzKX1gLFxuICAgICAgJycsXG4gICAgICAnX3NtID0gTm9uZScsXG4gICAgICAnJyxcbiAgICAgICcnLFxuICAgICAgJ2RlZiBfY2xpZW50KCk6JyxcbiAgICAgICcgICAgZ2xvYmFsIF9zbScsXG4gICAgICAnICAgIGlmIF9zbSBpcyBOb25lOicsXG4gICAgICAnICAgICAgICBfc20gPSBib3RvMy5jbGllbnQoXCJzZWNyZXRzbWFuYWdlclwiLCByZWdpb25fbmFtZT1DT05GSUdfUkVHSU9OKScsXG4gICAgICAnICAgIHJldHVybiBfc20nLFxuICAgICAgJycsXG4gICAgICAnJyxcbiAgICAgICdkZWYgZ2V0X2NvbmZpZygpOicsXG4gICAgICAnICAgIGNmZyA9IGpzb24ubG9hZHMoX2NsaWVudCgpLmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9QkFTRV9TRUNSRVRfTkFNRSlbXCJTZWNyZXRTdHJpbmdcIl0pJyxcbiAgICAgICcgICAgdHJ5OicsXG4gICAgICAnICAgICAgICBjZmcudXBkYXRlKGpzb24ubG9hZHMoX2NsaWVudCgpLmdldF9zZWNyZXRfdmFsdWUoU2VjcmV0SWQ9RVhUUkFfU0VDUkVUX05BTUUpW1wiU2VjcmV0U3RyaW5nXCJdKSknLFxuICAgICAgJyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6JyxcbiAgICAgICcgICAgICAgIGxvZ2dlci5lcnJvcihcImV4dHJhIGNvbmZpZyBsb2FkIGZhaWxlZDogJXNcIiwgZSknLFxuICAgICAgJyAgICBjZmcudXBkYXRlKFNUQVRJQ19PVkVSUklERVMpJyxcbiAgICAgICcgICAgcmV0dXJuIGNmZycsXG4gICAgICAnJyxcbiAgICBdLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRWRnZUZ1bmN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc291cmNlRGlyTmFtZTogc3RyaW5nLFxuICAgIGNvbmZpZ1B5OiBzdHJpbmcsXG4gICAgcm9sZTogaWFtLklSb2xlLFxuICAgIGJ1bmRsZWREZXBzTmFtZT86IHN0cmluZyxcbiAgKTogY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIHtcbiAgICBjb25zdCBzb3VyY2VEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhJywgc291cmNlRGlyTmFtZSk7XG4gICAgY29uc3QgYnVuZGxlZERlcHNEaXIgPSBidW5kbGVkRGVwc05hbWUgPyBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vbGFtYmRhLWJ1bmRsZWQnLCBidW5kbGVkRGVwc05hbWUpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRlbXBEaXIgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjdXN0b211aS1hdXRoLScpKTtcbiAgICBjb25zdCBjb25maWdQeVBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgJ2NvbmZpZ19nZW5lcmF0ZWQucHknKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ1B5UGF0aCwgY29uZmlnUHkpO1xuXG4gICAgcmV0dXJuIG5ldyBjbG91ZGZyb250LmV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24odGhpcywgaWQsIHtcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzExLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmxhbWJkYV9oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IGNvcmUuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHNvdXJjZURpciwge1xuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICB0cnlCdW5kbGUob3V0cHV0RGlyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgaWYgKGJ1bmRsZWREZXBzRGlyICYmIGZzLmV4aXN0c1N5bmMoYnVuZGxlZERlcHNEaXIpKSB7XG4gICAgICAgICAgICAgICAgZnMuY3BTeW5jKGJ1bmRsZWREZXBzRGlyLCBvdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmcy5yZWFkZGlyU3luYyhzb3VyY2VEaXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUgPT09ICdyZXF1aXJlbWVudHMudHh0JykgY29udGludWU7XG4gICAgICAgICAgICAgICAgZnMuY3BTeW5jKHBhdGguam9pbihzb3VyY2VEaXIsIGZpbGUpLCBwYXRoLmpvaW4ob3V0cHV0RGlyLCBmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0cHV0RGlyLCAnY29uZmlnX2dlbmVyYXRlZC5weScpLCBjb25maWdQeSk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGltYWdlOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMS5idW5kbGluZ0ltYWdlLFxuICAgICAgICAgIGNvbW1hbmQ6IFtcbiAgICAgICAgICAgICdiYXNoJywgJy1jJyxcbiAgICAgICAgICAgICdwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMudHh0IC10IC9hc3NldC1vdXRwdXQgJiYgY3AgLXIgLiAvYXNzZXQtb3V0cHV0ICYmIGNwIC90bXAvY29uZmlnX2dlbmVyYXRlZC5weSAvYXNzZXQtb3V0cHV0L2NvbmZpZ19nZW5lcmF0ZWQucHknLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdm9sdW1lczogW3sgaG9zdFBhdGg6IGNvbmZpZ1B5UGF0aCwgY29udGFpbmVyUGF0aDogJy90bXAvY29uZmlnX2dlbmVyYXRlZC5weScgfV0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|