* contrib/hbssl/evpmd.c
* contrib/hbssl/hbssl.h
* moved hb_EVP_MD_ptr_to_id() function from static to public area
* contrib/hbssl/hbssl.hbx
* contrib/hbssl/hbssl.hbm
+ contrib/hbssl/d2i.c
* added new functions to extract asynchronous keys and certificates
from DER data:
D2I_PUBKEY( <cDER> ) -> <pEVPKey>
D2I_RSAPUBLICKEY( <cDER> ) -> <pRSAKey>
D2I_X509( <cDER> ) -> <pX509Cert>
* contrib/hbssl/hbssl.hbx
* contrib/hbssl/evppkey.c
+ added new functions to get/set RSA asymmetric keys parameters
encapsulated in EVP_PKEY structures:
EVP_PKEY_CTX_get_RSA_padding()
EVP_PKEY_CTX_set_RSA_padding()
EVP_PKEY_CTX_get_RSA_OAEP_md()
EVP_PKEY_CTX_set_RSA_OAEP_md()
EVP_PKEY_CTX_get_RSA_MGF1_md()
EVP_PKEY_CTX_set_RSA_MGF1_md()
* src/common/hbdate.c
* accept up to 9 fractional digits (nanoseconds) in timestamp strings
though only first three ones (milliseconds) are significant.
Recently some tools begin to generate such timestamp values and
Harbour had problems with decoding them correctly.
* src/compiler/hbmain.c
+ allow to pass file name for source code compiled by hb_compileFromBuf()
It works like in all other versions of hb_compile*() functions - it's
enough to pass it as argument without option prefix (option prefix
is "-" on all platforms and also "/" on DOS, OS2, MS-Win).
Please remember that first parameter after control ones is used as
compiler name in generated output messages regardless of its option
prefix.
409 lines
11 KiB
Plaintext
409 lines
11 KiB
Plaintext
/* --------------------------------------------------------------------
|
|
* NOTE: You can add manual override which functions to include or
|
|
* exclude from automatically generated EXTERNAL/DYNAMIC list.
|
|
* Syntax: // HB_FUNC_INCLUDE <func>
|
|
* // HB_FUNC_EXCLUDE <func>
|
|
*/
|
|
|
|
/* --------------------------------------------------------------------
|
|
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
|
|
* Regenerate using hbmk2 '-hbx=' option.
|
|
*/
|
|
|
|
#ifndef __HBEXTERN_CH__HBSSL__
|
|
#define __HBEXTERN_CH__HBSSL__
|
|
|
|
#if defined( __HBEXTREQ__ ) .OR. defined( __HBEXTERN__HBSSL__ANNOUNCE )
|
|
ANNOUNCE __HBEXTERN__HBSSL__
|
|
#endif
|
|
|
|
#if defined( __HBEXTREQ__ ) .OR. defined( __HBEXTERN__HBSSL__REQUEST )
|
|
#command DYNAMIC <fncs,...> => EXTERNAL <fncs>
|
|
#endif
|
|
|
|
DYNAMIC BIO_clear_flags
|
|
DYNAMIC BIO_ctrl_pending
|
|
DYNAMIC BIO_ctrl_wpending
|
|
DYNAMIC BIO_do_connect
|
|
DYNAMIC BIO_eof
|
|
DYNAMIC BIO_flush
|
|
DYNAMIC BIO_free
|
|
DYNAMIC BIO_free_all
|
|
DYNAMIC BIO_gets
|
|
DYNAMIC BIO_get_close
|
|
DYNAMIC BIO_get_conn_address
|
|
DYNAMIC BIO_get_conn_hostname
|
|
DYNAMIC BIO_get_conn_int_port
|
|
DYNAMIC BIO_get_conn_ip
|
|
DYNAMIC BIO_get_conn_port
|
|
DYNAMIC BIO_get_fd
|
|
DYNAMIC BIO_get_flags
|
|
DYNAMIC BIO_get_retry_reason
|
|
DYNAMIC BIO_new
|
|
DYNAMIC BIO_new_accept
|
|
DYNAMIC BIO_new_connect
|
|
DYNAMIC BIO_new_dgram
|
|
DYNAMIC BIO_new_fd
|
|
DYNAMIC BIO_new_file
|
|
DYNAMIC BIO_new_mem_buf
|
|
DYNAMIC BIO_new_socket
|
|
DYNAMIC BIO_puts
|
|
DYNAMIC BIO_read
|
|
DYNAMIC BIO_reset
|
|
DYNAMIC BIO_retry_type
|
|
DYNAMIC BIO_seek
|
|
DYNAMIC BIO_set
|
|
DYNAMIC BIO_set_close
|
|
DYNAMIC BIO_set_conn_hostname
|
|
DYNAMIC BIO_set_conn_int_port
|
|
DYNAMIC BIO_set_conn_ip
|
|
DYNAMIC BIO_set_conn_port
|
|
DYNAMIC BIO_set_fd
|
|
DYNAMIC BIO_set_flags
|
|
DYNAMIC BIO_set_nbio
|
|
DYNAMIC BIO_set_retry_read
|
|
DYNAMIC BIO_set_retry_special
|
|
DYNAMIC BIO_set_retry_write
|
|
DYNAMIC BIO_should_io_special
|
|
DYNAMIC BIO_should_read
|
|
DYNAMIC BIO_should_retry
|
|
DYNAMIC BIO_should_write
|
|
DYNAMIC BIO_tell
|
|
DYNAMIC BIO_test_flags
|
|
DYNAMIC BIO_vfree
|
|
DYNAMIC BIO_write
|
|
DYNAMIC D2I_PUBKEY
|
|
DYNAMIC D2I_RSAPUBLICKEY
|
|
DYNAMIC D2I_X509
|
|
DYNAMIC ERR_error_string
|
|
DYNAMIC ERR_free_strings
|
|
DYNAMIC ERR_func_error_string
|
|
DYNAMIC ERR_get_error
|
|
DYNAMIC ERR_get_error_line
|
|
DYNAMIC ERR_get_error_line_data
|
|
DYNAMIC ERR_lib_error_string
|
|
DYNAMIC ERR_load_BIO_strings
|
|
DYNAMIC ERR_load_crypto_strings
|
|
DYNAMIC ERR_load_EVP_strings
|
|
DYNAMIC ERR_load_PEM_strings
|
|
DYNAMIC ERR_peek_error
|
|
DYNAMIC ERR_peek_error_line
|
|
DYNAMIC ERR_peek_error_line_data
|
|
DYNAMIC ERR_peek_last_error
|
|
DYNAMIC ERR_peek_last_error_line
|
|
DYNAMIC ERR_peek_last_error_line_data
|
|
DYNAMIC ERR_print_errors
|
|
DYNAMIC ERR_reason_error_string
|
|
DYNAMIC EVP_BytesToKey
|
|
DYNAMIC EVP_CipherFinal
|
|
DYNAMIC EVP_CipherFinal_ex
|
|
DYNAMIC EVP_CipherInit
|
|
DYNAMIC EVP_CipherInit_ex
|
|
DYNAMIC EVP_CipherUpdate
|
|
DYNAMIC EVP_CIPHER_block_size
|
|
DYNAMIC EVP_CIPHER_CTX_cipher
|
|
DYNAMIC EVP_CIPHER_CTX_cleanup
|
|
DYNAMIC EVP_CIPHER_CTX_ctrl
|
|
DYNAMIC EVP_CIPHER_CTX_init
|
|
DYNAMIC EVP_CIPHER_CTX_key_length
|
|
DYNAMIC EVP_CIPHER_CTX_new
|
|
DYNAMIC EVP_CIPHER_CTX_reset
|
|
DYNAMIC EVP_CIPHER_CTX_set_key_length
|
|
DYNAMIC EVP_CIPHER_CTX_set_padding
|
|
DYNAMIC EVP_CIPHER_flags
|
|
DYNAMIC EVP_CIPHER_iv_length
|
|
DYNAMIC EVP_CIPHER_key_length
|
|
DYNAMIC EVP_CIPHER_mode
|
|
DYNAMIC EVP_CIPHER_nid
|
|
DYNAMIC EVP_CIPHER_type
|
|
DYNAMIC EVP_cleanup
|
|
DYNAMIC EVP_DecodeFinal
|
|
DYNAMIC EVP_DecodeInit
|
|
DYNAMIC EVP_DecodeUpdate
|
|
DYNAMIC EVP_DecryptFinal
|
|
DYNAMIC EVP_DecryptFinal_ex
|
|
DYNAMIC EVP_DecryptInit
|
|
DYNAMIC EVP_DecryptInit_ex
|
|
DYNAMIC EVP_DecryptUpdate
|
|
DYNAMIC EVP_DigestFinal
|
|
DYNAMIC EVP_DigestFinal_ex
|
|
DYNAMIC EVP_DigestInit
|
|
DYNAMIC EVP_DigestInit_ex
|
|
DYNAMIC EVP_DigestUpdate
|
|
DYNAMIC EVP_EncodeFinal
|
|
DYNAMIC EVP_EncodeInit
|
|
DYNAMIC EVP_EncodeUpdate
|
|
DYNAMIC EVP_ENCODE_CTX_new
|
|
DYNAMIC EVP_EncryptFinal
|
|
DYNAMIC EVP_EncryptFinal_ex
|
|
DYNAMIC EVP_EncryptInit
|
|
DYNAMIC EVP_EncryptInit_ex
|
|
DYNAMIC EVP_EncryptUpdate
|
|
DYNAMIC EVP_get_cipherbyname
|
|
DYNAMIC EVP_get_cipherbynid
|
|
DYNAMIC EVP_get_digestbyname
|
|
DYNAMIC EVP_get_digestbynid
|
|
DYNAMIC EVP_MD_block_size
|
|
DYNAMIC EVP_MD_CTX_cleanup
|
|
DYNAMIC EVP_MD_CTX_copy
|
|
DYNAMIC EVP_MD_CTX_copy_ex
|
|
DYNAMIC EVP_MD_CTX_create
|
|
DYNAMIC EVP_MD_CTX_init
|
|
DYNAMIC EVP_MD_CTX_md
|
|
DYNAMIC EVP_MD_CTX_new
|
|
DYNAMIC EVP_MD_CTX_reset
|
|
DYNAMIC EVP_MD_nid
|
|
DYNAMIC EVP_MD_pkey_type
|
|
DYNAMIC EVP_MD_size
|
|
DYNAMIC EVP_MD_type
|
|
DYNAMIC EVP_OpenFinal
|
|
DYNAMIC EVP_OpenInit
|
|
DYNAMIC EVP_OpenUpdate
|
|
DYNAMIC EVP_PKEY_assign
|
|
DYNAMIC EVP_PKEY_assign_DH
|
|
DYNAMIC EVP_PKEY_assign_DSA
|
|
DYNAMIC EVP_PKEY_assign_RSA
|
|
DYNAMIC EVP_PKEY_base_id
|
|
DYNAMIC EVP_PKEY_bits
|
|
DYNAMIC EVP_PKEY_CTX_get_RSA_MGF1_md
|
|
DYNAMIC EVP_PKEY_CTX_get_RSA_OAEP_md
|
|
DYNAMIC EVP_PKEY_CTX_get_RSA_padding
|
|
DYNAMIC EVP_PKEY_CTX_new
|
|
DYNAMIC EVP_PKEY_CTX_set_RSA_MGF1_md
|
|
DYNAMIC EVP_PKEY_CTX_set_RSA_OAEP_md
|
|
DYNAMIC EVP_PKEY_CTX_set_RSA_padding
|
|
DYNAMIC EVP_PKEY_decrypt
|
|
DYNAMIC EVP_PKEY_decrypt_init
|
|
DYNAMIC EVP_PKEY_encrypt
|
|
DYNAMIC EVP_PKEY_encrypt_init
|
|
DYNAMIC EVP_PKEY_free
|
|
DYNAMIC EVP_PKEY_new
|
|
DYNAMIC EVP_PKEY_size
|
|
DYNAMIC EVP_PKEY_type
|
|
DYNAMIC EVP_SealFinal
|
|
DYNAMIC EVP_SealInit
|
|
DYNAMIC EVP_SealUpdate
|
|
DYNAMIC EVP_SignFinal
|
|
DYNAMIC EVP_SignInit
|
|
DYNAMIC EVP_SignInit_ex
|
|
DYNAMIC EVP_SignUpdate
|
|
DYNAMIC EVP_VerifyFinal
|
|
DYNAMIC EVP_VerifyInit
|
|
DYNAMIC EVP_VerifyInit_ex
|
|
DYNAMIC EVP_VerifyUpdate
|
|
DYNAMIC hb_EVP_CIPHER_ctx_create
|
|
DYNAMIC hb_EVP_ENCODE_ctx_create
|
|
DYNAMIC hb_inetSSL_accept
|
|
DYNAMIC hb_inetSSL_connect
|
|
DYNAMIC hb_socketNewSSL_accept
|
|
DYNAMIC hb_socketNewSSL_connect
|
|
DYNAMIC hb_SSL_APPLINK
|
|
DYNAMIC hb_SSL_connect_inet
|
|
DYNAMIC hb_SSL_connect_socket
|
|
DYNAMIC hb_SSL_new
|
|
DYNAMIC hb_SSL_read_all
|
|
DYNAMIC hb_SSL_read_line
|
|
DYNAMIC hb_SSL_STATIC
|
|
DYNAMIC OpenSSL_add_all_algorithms
|
|
DYNAMIC OpenSSL_add_all_ciphers
|
|
DYNAMIC OpenSSL_add_all_digests
|
|
DYNAMIC OpenSSL_version
|
|
DYNAMIC OpenSSL_version_num
|
|
DYNAMIC OpenSSL_version_number
|
|
DYNAMIC PEM_READ_BIO_DHPARAMS
|
|
DYNAMIC PEM_READ_BIO_DSAPARAMS
|
|
DYNAMIC PEM_READ_BIO_DSAPRIVATEKEY
|
|
DYNAMIC PEM_READ_BIO_DSA_PUBKEY
|
|
DYNAMIC PEM_READ_BIO_PKCS7
|
|
DYNAMIC PEM_READ_BIO_PRIVATEKEY
|
|
DYNAMIC PEM_READ_BIO_PUBKEY
|
|
DYNAMIC PEM_READ_BIO_RSAPRIVATEKEY
|
|
DYNAMIC PEM_READ_BIO_RSAPUBLICKEY
|
|
DYNAMIC PEM_READ_BIO_RSA_PUBKEY
|
|
DYNAMIC PEM_READ_BIO_X509
|
|
DYNAMIC PEM_READ_BIO_X509_AUX
|
|
DYNAMIC PEM_READ_BIO_X509_CRL
|
|
DYNAMIC PEM_READ_BIO_X509_REQ
|
|
DYNAMIC PEM_READ_PRIVATEKEY
|
|
DYNAMIC PEM_READ_PUBKEY
|
|
DYNAMIC PEM_READ_X509
|
|
DYNAMIC PEM_READ_X509_AUX
|
|
DYNAMIC RAND_add
|
|
DYNAMIC RAND_event
|
|
DYNAMIC RAND_poll
|
|
DYNAMIC RAND_screen
|
|
DYNAMIC RAND_seed
|
|
DYNAMIC RAND_status
|
|
DYNAMIC RSA_private_decrypt
|
|
DYNAMIC RSA_private_encrypt
|
|
DYNAMIC RSA_public_decrypt
|
|
DYNAMIC RSA_public_encrypt
|
|
DYNAMIC RSA_size
|
|
DYNAMIC SSLeay
|
|
DYNAMIC SSLeay_version
|
|
DYNAMIC SSL_accept
|
|
DYNAMIC SSL_add_client_CA
|
|
DYNAMIC SSL_alert_desc_string
|
|
DYNAMIC SSL_alert_desc_string_long
|
|
DYNAMIC SSL_alert_type_string
|
|
DYNAMIC SSL_alert_type_string_long
|
|
DYNAMIC SSL_check_private_key
|
|
DYNAMIC SSL_CIPHER_description
|
|
DYNAMIC SSL_CIPHER_get_bits
|
|
DYNAMIC SSL_CIPHER_get_name
|
|
DYNAMIC SSL_CIPHER_get_version
|
|
DYNAMIC SSL_clear
|
|
DYNAMIC SSL_clear_num_renegotiations
|
|
DYNAMIC SSL_connect
|
|
DYNAMIC SSL_copy_session_id
|
|
DYNAMIC SSL_CTX_add_client_CA
|
|
DYNAMIC SSL_CTX_add_extra_chain_cert
|
|
DYNAMIC SSL_CTX_add_session
|
|
DYNAMIC SSL_CTX_check_private_key
|
|
DYNAMIC SSL_CTX_flush_sessions
|
|
DYNAMIC SSL_CTX_get_client_CA_list
|
|
DYNAMIC SSL_CTX_get_mode
|
|
DYNAMIC SSL_CTX_get_options
|
|
DYNAMIC SSL_CTX_get_quiet_shutdown
|
|
DYNAMIC SSL_CTX_get_session_cache_mode
|
|
DYNAMIC SSL_CTX_get_timeout
|
|
DYNAMIC SSL_CTX_get_verify_mode
|
|
DYNAMIC SSL_CTX_load_verify_locations
|
|
DYNAMIC SSL_CTX_need_tmp_RSA
|
|
DYNAMIC SSL_CTX_new
|
|
DYNAMIC SSL_CTX_remove_session
|
|
DYNAMIC SSL_CTX_sess_accept
|
|
DYNAMIC SSL_CTX_sess_accept_good
|
|
DYNAMIC SSL_CTX_sess_accept_renegotiate
|
|
DYNAMIC SSL_CTX_sess_cache_full
|
|
DYNAMIC SSL_CTX_sess_cb_hits
|
|
DYNAMIC SSL_CTX_sess_connect
|
|
DYNAMIC SSL_CTX_sess_connect_good
|
|
DYNAMIC SSL_CTX_sess_connect_renegotiate
|
|
DYNAMIC SSL_CTX_sess_get_cache_size
|
|
DYNAMIC SSL_CTX_sess_hits
|
|
DYNAMIC SSL_CTX_sess_misses
|
|
DYNAMIC SSL_CTX_sess_number
|
|
DYNAMIC SSL_CTX_sess_set_cache_size
|
|
DYNAMIC SSL_CTX_sess_timeouts
|
|
DYNAMIC SSL_CTX_set_cipher_list
|
|
DYNAMIC SSL_CTX_set_default_read_ahead
|
|
DYNAMIC SSL_CTX_set_default_verify_paths
|
|
DYNAMIC SSL_CTX_set_mode
|
|
DYNAMIC SSL_CTX_set_options
|
|
DYNAMIC SSL_CTX_set_quiet_shutdown
|
|
DYNAMIC SSL_CTX_set_session_cache_mode
|
|
DYNAMIC SSL_CTX_set_ssl_version
|
|
DYNAMIC SSL_CTX_set_timeout
|
|
DYNAMIC SSL_CTX_use_certificate
|
|
DYNAMIC SSL_CTX_use_certificate_ASN1
|
|
DYNAMIC SSL_CTX_use_certificate_chain_file
|
|
DYNAMIC SSL_CTX_use_certificate_file
|
|
DYNAMIC SSL_CTX_use_PrivateKey
|
|
DYNAMIC SSL_CTX_use_PrivateKey_ASN1
|
|
DYNAMIC SSL_CTX_use_PrivateKey_file
|
|
DYNAMIC SSL_CTX_use_RSAPrivateKey
|
|
DYNAMIC SSL_CTX_use_RSAPrivateKey_ASN1
|
|
DYNAMIC SSL_CTX_use_RSAPrivateKey_file
|
|
DYNAMIC SSL_do_handshake
|
|
DYNAMIC SSL_dup
|
|
DYNAMIC SSL_get_certificate
|
|
DYNAMIC SSL_get_cipher
|
|
DYNAMIC SSL_get_ciphers
|
|
DYNAMIC SSL_get_cipher_bits
|
|
DYNAMIC SSL_get_cipher_list
|
|
DYNAMIC SSL_get_cipher_name
|
|
DYNAMIC SSL_get_cipher_version
|
|
DYNAMIC SSL_get_client_CA_list
|
|
DYNAMIC SSL_get_current_cipher
|
|
DYNAMIC SSL_get_default_timeout
|
|
DYNAMIC SSL_get_error
|
|
DYNAMIC SSL_get_fd
|
|
DYNAMIC SSL_get_mode
|
|
DYNAMIC SSL_get_options
|
|
DYNAMIC SSL_get_peer_certificate
|
|
DYNAMIC SSL_get_quiet_shutdown
|
|
DYNAMIC SSL_get_rbio
|
|
DYNAMIC SSL_get_read_ahead
|
|
DYNAMIC SSL_get_rfd
|
|
DYNAMIC SSL_get_shared_ciphers
|
|
DYNAMIC SSL_get_shutdown
|
|
DYNAMIC SSL_get_ssl_method
|
|
DYNAMIC SSL_get_state
|
|
DYNAMIC SSL_get_verify_mode
|
|
DYNAMIC SSL_get_verify_result
|
|
DYNAMIC SSL_get_version
|
|
DYNAMIC SSL_get_wbio
|
|
DYNAMIC SSL_get_wfd
|
|
DYNAMIC SSL_init
|
|
DYNAMIC SSL_in_accept_init
|
|
DYNAMIC SSL_in_before
|
|
DYNAMIC SSL_in_connect_init
|
|
DYNAMIC SSL_in_init
|
|
DYNAMIC SSL_is_init_finished
|
|
DYNAMIC SSL_load_client_CA_file
|
|
DYNAMIC SSL_new
|
|
DYNAMIC SSL_num_renegotiations
|
|
DYNAMIC SSL_peek
|
|
DYNAMIC SSL_pending
|
|
DYNAMIC SSL_read
|
|
DYNAMIC SSL_renegotiate
|
|
DYNAMIC SSL_rstate_string
|
|
DYNAMIC SSL_rstate_string_long
|
|
DYNAMIC SSL_SESSION_cmp
|
|
DYNAMIC SSL_SESSION_get_time
|
|
DYNAMIC SSL_SESSION_get_timeout
|
|
DYNAMIC SSL_SESSION_hash
|
|
DYNAMIC SSL_SESSION_new
|
|
DYNAMIC SSL_SESSION_reused
|
|
DYNAMIC SSL_SESSION_set_time
|
|
DYNAMIC SSL_SESSION_set_timeout
|
|
DYNAMIC SSL_set_accept_state
|
|
DYNAMIC SSL_set_bio
|
|
DYNAMIC SSL_set_cipher_list
|
|
DYNAMIC SSL_set_connect_state
|
|
DYNAMIC SSL_set_fd
|
|
DYNAMIC SSL_set_mode
|
|
DYNAMIC SSL_set_msg_callback
|
|
DYNAMIC SSL_set_mtu
|
|
DYNAMIC SSL_set_options
|
|
DYNAMIC SSL_set_quiet_shutdown
|
|
DYNAMIC SSL_set_read_ahead
|
|
DYNAMIC SSL_set_rfd
|
|
DYNAMIC SSL_set_shutdown
|
|
DYNAMIC SSL_set_ssl_method
|
|
DYNAMIC SSL_set_tlsext_host_name
|
|
DYNAMIC SSL_set_verify
|
|
DYNAMIC SSL_set_verify_result
|
|
DYNAMIC SSL_set_wfd
|
|
DYNAMIC SSL_shutdown
|
|
DYNAMIC SSL_state
|
|
DYNAMIC SSL_state_string
|
|
DYNAMIC SSL_state_string_long
|
|
DYNAMIC SSL_total_renegotiations
|
|
DYNAMIC SSL_use_certificate
|
|
DYNAMIC SSL_use_certificate_ASN1
|
|
DYNAMIC SSL_use_certificate_file
|
|
DYNAMIC SSL_use_PrivateKey
|
|
DYNAMIC SSL_use_PrivateKey_ASN1
|
|
DYNAMIC SSL_use_PrivateKey_file
|
|
DYNAMIC SSL_use_RSAPrivateKey_ASN1
|
|
DYNAMIC SSL_use_RSAPrivateKey_file
|
|
DYNAMIC SSL_version
|
|
DYNAMIC SSL_want
|
|
DYNAMIC SSL_want_nothing
|
|
DYNAMIC SSL_want_read
|
|
DYNAMIC SSL_want_write
|
|
DYNAMIC SSL_want_x509_lookup
|
|
DYNAMIC SSL_write
|
|
DYNAMIC X509_get_issuer_name
|
|
DYNAMIC X509_get_PubKey
|
|
DYNAMIC X509_get_subject_name
|
|
DYNAMIC X509_name_oneline
|
|
|
|
#if defined( __HBEXTREQ__ ) .OR. defined( __HBEXTERN__HBSSL__REQUEST )
|
|
#uncommand DYNAMIC <fncs,...> => EXTERNAL <fncs>
|
|
#endif
|
|
|
|
#endif
|