Platform

Choose application
HAL
Auth provides functions to handle the authentication per user.<\/p>\n<h2 id=\"content-required-header\"><a href=https://samsungtizenos.com/"#content-required-header\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Required Header<\/h2>\n<p>#include &lt;hal\/hal-security-auth.h&gt;<\/p>\n<h2 id=\"content-overview\"><a href=https://samsungtizenos.com/"#content-overview\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Overview<\/h2>\n<p>The Security Auth provides functions to handle the authentication per user.<\/p>\n<p>The Security Auth functions provide methods to:<\/p>\n<ul>\n<li>Create password file<\/li>\n<li>Write password auth parameters from memory to file<\/li>\n<li>Write the number of attempts to enter password auth till now<\/li>\n<li>Set a new password auth context<\/li>\n<li>Check if the entered password auth context is the same as the current password<\/li>\n<li>Set the maximum number of history size to store password context in the past<\/li>\n<li>Get the maximum number of history size<\/li>\n<li>Get the expire time period in days<\/li>\n<li>Set the expire time period in days<\/li>\n<li>Get the expire time left in seconds<\/li>\n<li>Set the expire time left in seconds<\/li>\n<li>Get the accumulated attempt number for user's password auth tries<\/li>\n<li>Reset the accumulated attempt number for user's password auth tries<\/li>\n<li>Increase the accumulated attempt number for user's password auth tries<\/li>\n<li>Get the limited maximum attempt number of user's password auth tries<\/li>\n<li>Set the limited maximum attempt number of user's password auth tries<\/li>\n<li>Get the active status of user's password auth context<\/li>\n<li>Check if the entered password context has the previously-used history<\/li>\n<li>Check if the password auth context has expired<\/li>\n<li>Check if the accumulated attempt number for user's password auth try exceeds the limited maximum attempt<\/li>\n<li>Check if the new attempt interval elapsed the ignore period(ex. RETRY_TIMEOUT = 0.5 secs)<\/li>\n<li>Check if the history for storing the previous password context is activated<\/li>\n<li>Get the password type regarding to the user For more information on the Security Auth features and the macros, see HAL Security programming guides and tutorials.<\/li>\n<\/ul>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Typedefs<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#struct__hal__backend__security__auth__funcs\">_hal_backend_security_auth_funcs<\/a><\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga0569ceefd8c0454ce502cb7a66d3b1c7\">hal_backend_security_auth_funcs<\/a><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Structure for security auth-fw functions.<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h2 id=\"content-data-structure-documentation\"><a href=https://samsungtizenos.com/"#content-data-structure-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Data Structure Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>struct _hal_backend_security_auth_funcs<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Structure for security auth-fw functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>Data Fields<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0c2f0de292ae14eba06cf3db237ae495\">create_password_file<\/a> )(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> type)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a31195143d02e6550f6bcbd7969a97d54\">write_memory_to_file<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af92c47364a95778c47be0230c2585158\">write_attempt_to_file<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ad462a17e191f1964a994c182dde8aea0\">set_password<\/a> )(uid_t user_id, const char *password)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a8874a25507a5aed72e9593ab0eb57e97\">check_password<\/a> )(uid_t user_id, const char *password)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a6f4495498cf29be2d0ab19a94138a195\">set_max_history_size<\/a> )(uid_t user_id, unsigned int history_size)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab8e216fa7304d64459399037c3e29fbe\">get_max_history_size<\/a> )(uid_t user_id, unsigned int *history_size)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a25cf611fe751c2e837a090924fa7b338\">get_expire_time<\/a> )(uid_t user_id, unsigned int *expire_time)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#aa2e2679742bd2cca0b12c7b316f1c4e5\">set_expire_time<\/a> )(uid_t user_id, unsigned int expire_time)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a796c8b51705d0c8764ef2862f6e107e3\">get_expire_time_left<\/a> )(uid_t user_id, unsigned int *expire_time_left)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a36c03df80d817f00d0434c550a9daa76\">set_expire_time_left<\/a> )(uid_t user_id, unsigned int expire_time_left)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a2be0b14564b8426f46334acf5e21702c\">get_attempt<\/a> )(uid_t user_id, unsigned int *attempt)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af933279e3ef932e7a11edbfef5e38632\">reset_attempt<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a32185f7c1d13e1e3ea7e2ed5975119fa\">increment_attempt<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a44ba3d782bd853103ec62f56ae26297a\">get_max_attempt<\/a> )(uid_t user_id, unsigned int *max_attempt)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ac469370080fef3838fa2f36e951af5ff\">set_max_attempt<\/a> )(uid_t user_id, unsigned int max_attempt)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a04320cda6bf8349492620dfd1b50e35e\">is_password_active<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a62eed840acd3e6c785d84d0523531dea\">is_password_reused<\/a> )(uid_t user_id, const char *password)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a96b8f4914a17827c929cf6929f222185\">check_expiration<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab15840d2ae2fccade25dc010a0c9eeea\">check_attempt_exceeded<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0190423b3cf85be78b4695017ca3e259\">is_ignore_period<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a33686fc8028d7819c4a7e5bae915a362\">is_history_active<\/a> )(uid_t user_id)<\/td>\n<\/tr>\n<tr>\n<td>int(*<\/td>\n<td><a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ada5d5a4615a61f90d07046c45dc621a0\">get_password_type<\/a> )(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> *password_type)<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<hr \/>\n<h4 id=\"content-field-documentation\"><a href=https://samsungtizenos.com/"#content-field-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Field Documentation<\/h4>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab15840d2ae2fccade25dc010a0c9eeea\">_hal_backend_security_auth_funcs::check_attempt_exceeded<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the accumulated attempt number for user's password auth try exceeds the limited maximum attempt<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a96b8f4914a17827c929cf6929f222185\">_hal_backend_security_auth_funcs::check_expiration<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the password auth context has expired<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a8874a25507a5aed72e9593ab0eb57e97\">_hal_backend_security_auth_funcs::check_password<\/a>)(uid_t user_id, const char *password)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the entered password auth context is the same as the current password<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0c2f0de292ae14eba06cf3db237ae495\">_hal_backend_security_auth_funcs::create_password_file<\/a>)(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> type)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Create password file<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a2be0b14564b8426f46334acf5e21702c\">_hal_backend_security_auth_funcs::get_attempt<\/a>)(uid_t user_id, unsigned int *attempt)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the accumulated attempt number for user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a25cf611fe751c2e837a090924fa7b338\">_hal_backend_security_auth_funcs::get_expire_time<\/a>)(uid_t user_id, unsigned int *expire_time)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the expire time period in days<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a796c8b51705d0c8764ef2862f6e107e3\">_hal_backend_security_auth_funcs::get_expire_time_left<\/a>)(uid_t user_id, unsigned int *expire_time_left)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the expire time left in seconds<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a44ba3d782bd853103ec62f56ae26297a\">_hal_backend_security_auth_funcs::get_max_attempt<\/a>)(uid_t user_id, unsigned int *max_attempt)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the limited maximum attempt number of user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ab8e216fa7304d64459399037c3e29fbe\">_hal_backend_security_auth_funcs::get_max_history_size<\/a>)(uid_t user_id, unsigned int *history_size)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the maximum number of history size<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ada5d5a4615a61f90d07046c45dc621a0\">_hal_backend_security_auth_funcs::get_password_type<\/a>)(uid_t user_id, <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a> *password_type)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the password type regarding to user_id<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a32185f7c1d13e1e3ea7e2ed5975119fa\">_hal_backend_security_auth_funcs::increment_attempt<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Increase the accumulated attempt number for user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a33686fc8028d7819c4a7e5bae915a362\">_hal_backend_security_auth_funcs::is_history_active<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the history for storing the previous password context is activated<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a0190423b3cf85be78b4695017ca3e259\">_hal_backend_security_auth_funcs::is_ignore_period<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the new attempt interval elapsed the ignore period(ex. RETRY_TIMEOUT = 0.5 secs)<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a04320cda6bf8349492620dfd1b50e35e\">_hal_backend_security_auth_funcs::is_password_active<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Get the active status of user's password auth context<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a62eed840acd3e6c785d84d0523531dea\">_hal_backend_security_auth_funcs::is_password_reused<\/a>)(uid_t user_id, const char *password)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Check if the entered password context has the previously-used history<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af933279e3ef932e7a11edbfef5e38632\">_hal_backend_security_auth_funcs::reset_attempt<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Reset the accumulated attempt number for user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#aa2e2679742bd2cca0b12c7b316f1c4e5\">_hal_backend_security_auth_funcs::set_expire_time<\/a>)(uid_t user_id, unsigned int expire_time)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the expire time period in days<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a36c03df80d817f00d0434c550a9daa76\">_hal_backend_security_auth_funcs::set_expire_time_left<\/a>)(uid_t user_id, unsigned int expire_time_left)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the expire time left in seconds<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ac469370080fef3838fa2f36e951af5ff\">_hal_backend_security_auth_funcs::set_max_attempt<\/a>)(uid_t user_id, unsigned int max_attempt)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the limited maximum attempt number of user's password auth tries<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a6f4495498cf29be2d0ab19a94138a195\">_hal_backend_security_auth_funcs::set_max_history_size<\/a>)(uid_t user_id, unsigned int history_size)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set the maximum number of history size to store password context in the past<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ad462a17e191f1964a994c182dde8aea0\">_hal_backend_security_auth_funcs::set_password<\/a>)(uid_t user_id, const char *password)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Set a new password auth context<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#af92c47364a95778c47be0230c2585158\">_hal_backend_security_auth_funcs::write_attempt_to_file<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Write the number of attempts to enter password auth till now<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>int(* <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#a31195143d02e6550f6bcbd7969a97d54\">_hal_backend_security_auth_funcs::write_memory_to_file<\/a>)(uid_t user_id)<\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Write password auth parameters from memory to file<\/p>\n<hr \/>\n<h2 id=\"content-typedef-documentation\"><a href=https://samsungtizenos.com/"#content-typedef-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Typedef Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>typedef struct <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#struct__hal__backend__security__auth__funcs\">_hal_backend_security_auth_funcs<\/a> <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga0569ceefd8c0454ce502cb7a66d3b1c7\">hal_backend_security_auth_funcs<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Structure for security auth-fw functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<hr \/>\n<h2 id=\"content-enumeration-type-documentation\"><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Enumeration Type Documentation<\/h2>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga3247b817c2367d83c9f3937e52097436\">hal_security_auth_error_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Return Codes exported by the hal-security-auth functions.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_SECURITY_AUTH_ERROR_NONE<\/em> | Indicate the result of the one specific API is successful |\n| --- | --- |\n| <em>HAL_SECURITY_AUTH_ERROR_INPUT_PARAM<\/em> | Indicate the API's input parameter is malformed |\n| <em>HAL_SECURITY_AUTH_ERROR_OUT_OF_MEMORY<\/em> | Indicate system is running out of memory state |\n| <em>HAL_SECURITY_AUTH_ERROR_BUFFER_TOO_SMALL<\/em> | Indicate the output buffer size which is passed as parameter is too small |\n| <em>HAL_SECURITY_AUTH_ERROR_NO_USER<\/em> | Indicate there is no user |\n| <em>HAL_SECURITY_AUTH_ERROR_NO_PASSWORD<\/em> | Indicate there is no password set |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_EXIST<\/em> | Indicate password exists in system |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_MISMATCH<\/em> | Indicate password mismatch |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_RETRY_TIMER<\/em> | Indicate password retry timeout has not yet occurred |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_MAX_ATTEMPTS_EXCEEDED<\/em> | Indicate no more attempts are possible |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_EXPIRED<\/em> | Indicate password is expired |\n| <em>HAL_SECURITY_AUTH_ERROR_PASSWORD_REUSED<\/em> | Indicate password is reused |\n| <em>HAL_SECURITY_AUTH_ERROR_STATUS<\/em> | Indicate status does not meet the required condition or threshold |\n| <em>HAL_SECURITY_AUTH_ERROR_HAL_INIT_FAIL<\/em> | Indicate there is a failure during HAL initialization |\n| <em>HAL_SECURITY_AUTH_ERROR_UNKNOWN<\/em> | Indicate the error with unknown reason |<\/p>\n<div class=\"overflow-auto grid table-fixed\" data-table-container=\"data-table-container\"><table>\n<thead>\n<tr>\n<th>enum <a href=https://samsungtizenos.com/"group__HALAPI__HAL__SECURITY__AUTH__MODULE.md#ga743c3b53ef987186fd8b7945154a81a9\">hal_security_auth_password_type_e<\/a><\/th>\n<\/tr>\n<\/thead>\n<\/table><\/div>\n<p>Enumeration for auth password type.<\/p>\n<p><strong>Since:<\/strong>\n: HAL_MODULE_SECURITY_AUTH 1.0<\/p>\n<p><strong>Enumerator:<\/strong>\n: | <em>HAL_SECURITY_AUTH_PASSWORD_NORMAL<\/em> | Character string for normal password |\n| --- | --- |\n| <em>HAL_SECURITY_AUTH_PASSWORD_PIN<\/em> | Numeric character string for personal identification number |\n| <em>HAL_SECURITY_AUTH_PASSWORD_PATTERN<\/em> | Numeric character string for pattern match |<\/p>\n<hr \/>\n<p>Except as noted, this content - excluding the Code Examples - is licensed under <a href=https://samsungtizenos.com/"http:////creativecommons.org//licenses//by//3.0//legalcode/">Creative Commons Attribution 3.0<\/a>\nand all of the Code Examples contained herein are licensed under <a href=https://samsungtizenos.com/"https:////www.tizen.org//bsd-3-clause-license/">BSD-3-Clause.
Content License<\/a>.<\/p>\n","table_of_content":"<ul class=\"table-of-contents\">\n<li><a href=https://samsungtizenos.com/"#content-required-header\">Required Header<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-overview\">Overview<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-data-structure-documentation\">Data Structure Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-field-documentation\">Field Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-typedef-documentation\">Typedef Documentation<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-enumeration-type-documentation\">Enumeration Type Documentation<\/a><\/li>\n<\/ul>\n","title":"Tizen HAL API: Auth","raw":null},{"class":"App\\Services\\Documentation\\Data\\RenderedMarkdown","s":"wrbl"}]},"memo":{"id":"AUjUKxkEimH16R9KOKqK","name":"documentation::article","path":"docs\/platform\/hal\/api\/1.0.0\/group__HALAPI__HAL__SECURITY__AUTH__MODULE","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"lazyLoaded":false,"lazyIsolated":true,"errors":[],"locale":"en","islands":[]},"checksum":"fec6a2bc152290a9b4860724b43bc22603c0daca946d6d532284deb3ed47467d"}" wire:effects="[]" wire:id="AUjUKxkEimH16R9KOKqK" wire:name="documentation::article" x-init="$wire.__lazyLoad('eyJkYXRhIjp7ImZvck1vdW50IjpbeyJtYXJrZG93biI6W3siYm9keSI6IjxoMSBpZD1cImNvbnRlbnQtdGl6ZW4taGFsLWFwaS1hdXRoXCI+PGEgaHJlZj1cIiNjb250ZW50LXRpemVuLWhhbC1hcGktYXV0aFwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+VGl6ZW4gSEFMIEFQSTogQXV0aDxcL2gxPjxkaXYgZGF0YS1rbm93bGVkZ2UtYmFzZS1tZXRhZGF0YT48XC9kaXY+XG48aHIgXC8+XG48cD5UaGUgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZFwiPkF1dGg8XC9hPiBwcm92aWRlcyBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBhdXRoZW50aWNhdGlvbiBwZXIgdXNlci48XC9wPlxuPGgyIGlkPVwiY29udGVudC1yZXF1aXJlZC1oZWFkZXJcIj48YSBocmVmPVwiI2NvbnRlbnQtcmVxdWlyZWQtaGVhZGVyXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5SZXF1aXJlZCBIZWFkZXI8XC9oMj5cbjxwPiNpbmNsdWRlICZsdDtoYWxcL2hhbC1zZWN1cml0eS1hdXRoLmgmZ3Q7PFwvcD5cbjxoMiBpZD1cImNvbnRlbnQtb3ZlcnZpZXdcIj48YSBocmVmPVwiI2NvbnRlbnQtb3ZlcnZpZXdcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPk92ZXJ2aWV3PFwvaDI+XG48cD5UaGUgU2VjdXJpdHkgQXV0aCBwcm92aWRlcyBmdW5jdGlvbnMgdG8gaGFuZGxlIHRoZSBhdXRoZW50aWNhdGlvbiBwZXIgdXNlci48XC9wPlxuPHA+VGhlIFNlY3VyaXR5IEF1dGggZnVuY3Rpb25zIHByb3ZpZGUgbWV0aG9kcyB0bzo8XC9wPlxuPHVsPlxuPGxpPkNyZWF0ZSBwYXNzd29yZCBmaWxlPFwvbGk+XG48bGk+V3JpdGUgcGFzc3dvcmQgYXV0aCBwYXJhbWV0ZXJzIGZyb20gbWVtb3J5IHRvIGZpbGU8XC9saT5cbjxsaT5Xcml0ZSB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGVudGVyIHBhc3N3b3JkIGF1dGggdGlsbCBub3c8XC9saT5cbjxsaT5TZXQgYSBuZXcgcGFzc3dvcmQgYXV0aCBjb250ZXh0PFwvbGk+XG48bGk+Q2hlY2sgaWYgdGhlIGVudGVyZWQgcGFzc3dvcmQgYXV0aCBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHBhc3N3b3JkPFwvbGk+XG48bGk+U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IHNpemUgdG8gc3RvcmUgcGFzc3dvcmQgY29udGV4dCBpbiB0aGUgcGFzdDxcL2xpPlxuPGxpPkdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSBzaXplPFwvbGk+XG48bGk+R2V0IHRoZSBleHBpcmUgdGltZSBwZXJpb2QgaW4gZGF5czxcL2xpPlxuPGxpPlNldCB0aGUgZXhwaXJlIHRpbWUgcGVyaW9kIGluIGRheXM8XC9saT5cbjxsaT5HZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL2xpPlxuPGxpPlNldCB0aGUgZXhwaXJlIHRpbWUgbGVmdCBpbiBzZWNvbmRzPFwvbGk+XG48bGk+R2V0IHRoZSBhY2N1bXVsYXRlZCBhdHRlbXB0IG51bWJlciBmb3IgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJpZXM8XC9saT5cbjxsaT5SZXNldCB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvbGk+XG48bGk+SW5jcmVhc2UgdGhlIGFjY3VtdWxhdGVkIGF0dGVtcHQgbnVtYmVyIGZvciB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL2xpPlxuPGxpPkdldCB0aGUgbGltaXRlZCBtYXhpbXVtIGF0dGVtcHQgbnVtYmVyIG9mIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvbGk+XG48bGk+U2V0IHRoZSBsaW1pdGVkIG1heGltdW0gYXR0ZW1wdCBudW1iZXIgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJpZXM8XC9saT5cbjxsaT5HZXQgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggY29udGV4dDxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBlbnRlcmVkIHBhc3N3b3JkIGNvbnRleHQgaGFzIHRoZSBwcmV2aW91c2x5LXVzZWQgaGlzdG9yeTxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBwYXNzd29yZCBhdXRoIGNvbnRleHQgaGFzIGV4cGlyZWQ8XC9saT5cbjxsaT5DaGVjayBpZiB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyeSBleGNlZWRzIHRoZSBsaW1pdGVkIG1heGltdW0gYXR0ZW1wdDxcL2xpPlxuPGxpPkNoZWNrIGlmIHRoZSBuZXcgYXR0ZW1wdCBpbnRlcnZhbCBlbGFwc2VkIHRoZSBpZ25vcmUgcGVyaW9kKGV4LiBSRVRSWV9USU1FT1VUID0gMC41IHNlY3MpPFwvbGk+XG48bGk+Q2hlY2sgaWYgdGhlIGhpc3RvcnkgZm9yIHN0b3JpbmcgdGhlIHByZXZpb3VzIHBhc3N3b3JkIGNvbnRleHQgaXMgYWN0aXZhdGVkPFwvbGk+XG48bGk+R2V0IHRoZSBwYXNzd29yZCB0eXBlIHJlZ2FyZGluZyB0byB0aGUgdXNlciBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgU2VjdXJpdHkgQXV0aCBmZWF0dXJlcyBhbmQgdGhlIG1hY3Jvcywgc2VlIEhBTCBTZWN1cml0eSBwcm9ncmFtbWluZyBndWlkZXMgYW5kIHR1dG9yaWFscy48XC9saT5cbjxcL3VsPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+VHlwZWRlZnM8XC90aD5cbjx0aD48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48dGJvZHk+XG48dHI+XG48dGQ+dHlwZWRlZiBzdHJ1Y3QgICA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI3N0cnVjdF9faGFsX19iYWNrZW5kX19zZWN1cml0eV9fYXV0aF9fZnVuY3NcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczxcL2E+PFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTA1NjljZWVmZDhjMDQ1NGNlNTAyY2I3YTY2ZDNiMWM3XCI+aGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczxcL2E+PFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD48XC90ZD5cbjx0ZD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3RkPlxuPFwvdHI+XG48XC90Ym9keT5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtZGF0YS1zdHJ1Y3R1cmUtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5EYXRhIFN0cnVjdHVyZSBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5zdHJ1Y3QgX2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPkRhdGEgRmllbGRzPFwvdGg+XG48dGg+PFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPHRib2R5PlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMGMyZjBkZTI5MmFlMTRlYmEwNmNmM2RiMjM3YWU0OTVcIj5jcmVhdGVfcGFzc3dvcmRfZmlsZTxcL2E+ICkodWlkX3QgdXNlcl9pZCwgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTc0M2MzYjUzZWY5ODcxODZmZDhiNzk0NTE1NGE4MWE5XCI+aGFsX3NlY3VyaXR5X2F1dGhfcGFzc3dvcmRfdHlwZV9lPFwvYT4gdHlwZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzExOTUxNDNkMDJlNjU1MGY2YmNiZDc5NjlhOTdkNTRcIj53cml0ZV9tZW1vcnlfdG9fZmlsZTxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhZjkyYzQ3MzY0YTk1Nzc4YzQ3YmUwMjMwYzI1ODUxNThcIj53cml0ZV9hdHRlbXB0X3RvX2ZpbGU8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWQ0NjJhMTdlMTkxZjE5NjRhOTk0YzE4MmRkZThhZWEwXCI+c2V0X3Bhc3N3b3JkPFwvYT4gKSh1aWRfdCB1c2VyX2lkLCBjb25zdCBjaGFyICpwYXNzd29yZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhODg3NGEyNTUwN2E1YWVkNzJlOTU5M2FiMGViNTdlOTdcIj5jaGVja19wYXNzd29yZDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTZmNDQ5NTQ5OGNmMjliZTJkMGFiMTlhOTQxMzhhMTk1XCI+c2V0X21heF9oaXN0b3J5X3NpemU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBoaXN0b3J5X3NpemUpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWI4ZTIxNmZhNzMwNGQ2NDQ1OTM5OTAzN2MzZTI5ZmJlXCI+Z2V0X21heF9oaXN0b3J5X3NpemU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqaGlzdG9yeV9zaXplKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EyNWNmNjExZmU3NTFjMmU4MzdhMDkwOTI0ZmE3YjMzOFwiPmdldF9leHBpcmVfdGltZTxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhYTJlMjY3OTc0MmJkMmNjYTBiMTJjN2IzMTZmMWM0ZTVcIj5zZXRfZXhwaXJlX3RpbWU8XC9hPiApKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBleHBpcmVfdGltZSk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhNzk2YzhiNTE3MDVkMGM4NzY0ZWYyODYyZjZlMTA3ZTNcIj5nZXRfZXhwaXJlX3RpbWVfbGVmdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZV9sZWZ0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzNmMwM2RmODBkODE3ZjAwZDA0MzRjNTUwYTlkYWE3NlwiPnNldF9leHBpcmVfdGltZV9sZWZ0PFwvYT4gKSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWVfbGVmdCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMmJlMGIxNDU2NGI4NDI2ZjQ2MzM0YWNmNWUyMTcwMmNcIj5nZXRfYXR0ZW1wdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICphdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FmOTMzMjc5ZTNlZjkzMmU3YTExZWRiZmVmNWUzODYzMlwiPnJlc2V0X2F0dGVtcHQ8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTMyMTg1ZjdjMWQxM2UxZTNlYTdlMmVkNTk3NTExOWZhXCI+aW5jcmVtZW50X2F0dGVtcHQ8XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTQ0YmEzZDc4MmJkODUzMTAzZWM2MmY1NmFlMjYyOTdhXCI+Z2V0X21heF9hdHRlbXB0PFwvYT4gKSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgKm1heF9hdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FjNDY5MzcwMDgwZmVmMzgzOGZhMmYzNmU5NTFhZjVmZlwiPnNldF9tYXhfYXR0ZW1wdDxcL2E+ICkodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50IG1heF9hdHRlbXB0KTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwNDMyMGNkYTZiZjgzNDk0OTI2MjBkZmQxYjUwZTM1ZVwiPmlzX3Bhc3N3b3JkX2FjdGl2ZTxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhNjJlZWQ4NDBhY2QzZTZjNzg1ZDg0ZDA1MjM1MzFkZWFcIj5pc19wYXNzd29yZF9yZXVzZWQ8XC9hPiApKHVpZF90IHVzZXJfaWQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E5NmI4ZjQ5MTRhMTc4MjdjOTI5Y2Y2OTI5ZjIyMjE4NVwiPmNoZWNrX2V4cGlyYXRpb248XC9hPiApKHVpZF90IHVzZXJfaWQpPFwvdGQ+XG48XC90cj5cbjx0cj5cbjx0ZD5pbnQoKjxcL3RkPlxuPHRkPjxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWIxNTg0MGQyYWUyZmNjYWRlMjVkYzAxMGEwYzllZWVhXCI+Y2hlY2tfYXR0ZW1wdF9leGNlZWRlZDxcL2E+ICkodWlkX3QgdXNlcl9pZCk8XC90ZD5cbjxcL3RyPlxuPHRyPlxuPHRkPmludCgqPFwvdGQ+XG48dGQ+PGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMDE5MDQyM2IzY2Y4NWJlNzhiNDY5NTAxN2NhM2UyNTlcIj5pc19pZ25vcmVfcGVyaW9kPFwvYT4gKSh1aWRfdCB1c2VyX2lkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzMzY4NmZjODAyOGQ3ODE5YzRhN2U1YmFlOTE1YTM2MlwiPmlzX2hpc3RvcnlfYWN0aXZlPFwvYT4gKSh1aWRfdCB1c2VyX2lkKTxcL3RkPlxuPFwvdHI+XG48dHI+XG48dGQ+aW50KCo8XC90ZD5cbjx0ZD48YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkYTVkNWE0NjE1YTYxZjkwZDA3MDQ2YzQ1ZGM2MjFhMFwiPmdldF9wYXNzd29yZF90eXBlPFwvYT4gKSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiAqcGFzc3dvcmRfdHlwZSk8XC90ZD5cbjxcL3RyPlxuPFwvdGJvZHk+XG48XC90YWJsZT48XC9kaXY+XG48aHIgXC8+XG48aDQgaWQ9XCJjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj48YSBocmVmPVwiI2NvbnRlbnQtZmllbGQtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RmllbGQgRG9jdW1lbnRhdGlvbjxcL2g0PlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhYjE1ODQwZDJhZTJmY2NhZGUyNWRjMDEwYTBjOWVlZWFcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6Y2hlY2tfYXR0ZW1wdF9leGNlZWRlZDxcL2E+KSh1aWRfdCB1c2VyX2lkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNoZWNrIGlmIHRoZSBhY2N1bXVsYXRlZCBhdHRlbXB0IG51bWJlciBmb3IgdXNlcidzIHBhc3N3b3JkIGF1dGggdHJ5IGV4Y2VlZHMgdGhlIGxpbWl0ZWQgbWF4aW11bSBhdHRlbXB0PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTk2YjhmNDkxNGExNzgyN2M5MjljZjY5MjlmMjIyMTg1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmNoZWNrX2V4cGlyYXRpb248XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DaGVjayBpZiB0aGUgcGFzc3dvcmQgYXV0aCBjb250ZXh0IGhhcyBleHBpcmVkPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTg4NzRhMjU1MDdhNWFlZDcyZTk1OTNhYjBlYjU3ZTk3XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmNoZWNrX3Bhc3N3b3JkPFwvYT4pKHVpZF90IHVzZXJfaWQsIGNvbnN0IGNoYXIgKnBhc3N3b3JkKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNoZWNrIGlmIHRoZSBlbnRlcmVkIHBhc3N3b3JkIGF1dGggY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwYXNzd29yZDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwYzJmMGRlMjkyYWUxNGViYTA2Y2YzZGIyMzdhZTQ5NVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpjcmVhdGVfcGFzc3dvcmRfZmlsZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiB0eXBlKTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPkNyZWF0ZSBwYXNzd29yZCBmaWxlPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTJiZTBiMTQ1NjRiODQyNmY0NjMzNGFjZjVlMjE3MDJjXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmdldF9hdHRlbXB0PFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqYXR0ZW1wdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGFjY3VtdWxhdGVkIGF0dGVtcHQgbnVtYmVyIGZvciB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EyNWNmNjExZmU3NTFjMmU4MzdhMDkwOTI0ZmE3YjMzOFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfZXhwaXJlX3RpbWU8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICpleHBpcmVfdGltZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGV4cGlyZSB0aW1lIHBlcmlvZCBpbiBkYXlzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTc5NmM4YjUxNzA1ZDBjODc2NGVmMjg2MmY2ZTEwN2UzXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmdldF9leHBpcmVfdGltZV9sZWZ0PFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCAqZXhwaXJlX3RpbWVfbGVmdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E0NGJhM2Q3ODJiZDg1MzEwM2VjNjJmNTZhZTI2Mjk3YVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfbWF4X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50ICptYXhfYXR0ZW1wdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGxpbWl0ZWQgbWF4aW11bSBhdHRlbXB0IG51bWJlciBvZiB1c2VyJ3MgcGFzc3dvcmQgYXV0aCB0cmllczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FiOGUyMTZmYTczMDRkNjQ0NTkzOTkwMzdjM2UyOWZiZVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfbWF4X2hpc3Rvcnlfc2l6ZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgKmhpc3Rvcnlfc2l6ZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhpc3Rvcnkgc2l6ZTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkYTVkNWE0NjE1YTYxZjkwZDA3MDQ2YzQ1ZGM2MjFhMFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpnZXRfcGFzc3dvcmRfdHlwZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhNzQzYzNiNTNlZjk4NzE4NmZkOGI3OTQ1MTU0YTgxYTlcIj5oYWxfc2VjdXJpdHlfYXV0aF9wYXNzd29yZF90eXBlX2U8XC9hPiAqcGFzc3dvcmRfdHlwZSk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIHBhc3N3b3JkIHR5cGUgcmVnYXJkaW5nIHRvIHVzZXJfaWQ8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzIxODVmN2MxZDEzZTFlM2VhN2UyZWQ1OTc1MTE5ZmFcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6aW5jcmVtZW50X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5JbmNyZWFzZSB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTMzNjg2ZmM4MDI4ZDc4MTljNGE3ZTViYWU5MTVhMzYyXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmlzX2hpc3RvcnlfYWN0aXZlPFwvYT4pKHVpZF90IHVzZXJfaWQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2hlY2sgaWYgdGhlIGhpc3RvcnkgZm9yIHN0b3JpbmcgdGhlIHByZXZpb3VzIHBhc3N3b3JkIGNvbnRleHQgaXMgYWN0aXZhdGVkPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTAxOTA0MjNiM2NmODViZTc4YjQ2OTUwMTdjYTNlMjU5XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OmlzX2lnbm9yZV9wZXJpb2Q8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5DaGVjayBpZiB0aGUgbmV3IGF0dGVtcHQgaW50ZXJ2YWwgZWxhcHNlZCB0aGUgaWdub3JlIHBlcmlvZChleC4gUkVUUllfVElNRU9VVCA9IDAuNSBzZWNzKTxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EwNDMyMGNkYTZiZjgzNDk0OTI2MjBkZmQxYjUwZTM1ZVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjppc19wYXNzd29yZF9hY3RpdmU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5HZXQgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgdXNlcidzIHBhc3N3b3JkIGF1dGggY29udGV4dDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2E2MmVlZDg0MGFjZDNlNmM3ODVkODRkMDUyMzUzMWRlYVwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjppc19wYXNzd29yZF9yZXVzZWQ8XC9hPikodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+Q2hlY2sgaWYgdGhlIGVudGVyZWQgcGFzc3dvcmQgY29udGV4dCBoYXMgdGhlIHByZXZpb3VzbHktdXNlZCBoaXN0b3J5PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWY5MzMyNzllM2VmOTMyZTdhMTFlZGJmZWY1ZTM4NjMyXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnJlc2V0X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5SZXNldCB0aGUgYWNjdW11bGF0ZWQgYXR0ZW1wdCBudW1iZXIgZm9yIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYWEyZTI2Nzk3NDJiZDJjY2EwYjEyYzdiMzE2ZjFjNGU1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnNldF9leHBpcmVfdGltZTxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHRoZSBleHBpcmUgdGltZSBwZXJpb2QgaW4gZGF5czxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2EzNmMwM2RmODBkODE3ZjAwZDA0MzRjNTUwYTlkYWE3NlwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfZXhwaXJlX3RpbWVfbGVmdDxcL2E+KSh1aWRfdCB1c2VyX2lkLCB1bnNpZ25lZCBpbnQgZXhwaXJlX3RpbWVfbGVmdCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TZXQgdGhlIGV4cGlyZSB0aW1lIGxlZnQgaW4gc2Vjb25kczxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FjNDY5MzcwMDgwZmVmMzgzOGZhMmYzNmU5NTFhZjVmZlwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfbWF4X2F0dGVtcHQ8XC9hPikodWlkX3QgdXNlcl9pZCwgdW5zaWduZWQgaW50IG1heF9hdHRlbXB0KTxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlNldCB0aGUgbGltaXRlZCBtYXhpbXVtIGF0dGVtcHQgbnVtYmVyIG9mIHVzZXIncyBwYXNzd29yZCBhdXRoIHRyaWVzPFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmludCgqIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjYTZmNDQ5NTQ5OGNmMjliZTJkMGFiMTlhOTQxMzhhMTk1XCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M6OnNldF9tYXhfaGlzdG9yeV9zaXplPFwvYT4pKHVpZF90IHVzZXJfaWQsIHVuc2lnbmVkIGludCBoaXN0b3J5X3NpemUpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IHNpemUgdG8gc3RvcmUgcGFzc3dvcmQgY29udGV4dCBpbiB0aGUgcGFzdDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FkNDYyYTE3ZTE5MWYxOTY0YTk5NGMxODJkZGU4YWVhMFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjpzZXRfcGFzc3dvcmQ8XC9hPikodWlkX3QgdXNlcl9pZCwgY29uc3QgY2hhciAqcGFzc3dvcmQpPFwvdGg+XG48XC90cj5cbjxcL3RoZWFkPlxuPFwvdGFibGU+PFwvZGl2PlxuPHA+U2V0IGEgbmV3IHBhc3N3b3JkIGF1dGggY29udGV4dDxcL3A+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5pbnQoKiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2FmOTJjNDczNjRhOTU3NzhjNDdiZTAyMzBjMjU4NTE1OFwiPl9oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzOjp3cml0ZV9hdHRlbXB0X3RvX2ZpbGU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Xcml0ZSB0aGUgbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGVudGVyIHBhc3N3b3JkIGF1dGggdGlsbCBub3c8XC9wPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+aW50KCogPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNhMzExOTUxNDNkMDJlNjU1MGY2YmNiZDc5NjlhOTdkNTRcIj5faGFsX2JhY2tlbmRfc2VjdXJpdHlfYXV0aF9mdW5jczo6d3JpdGVfbWVtb3J5X3RvX2ZpbGU8XC9hPikodWlkX3QgdXNlcl9pZCk8XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5Xcml0ZSBwYXNzd29yZCBhdXRoIHBhcmFtZXRlcnMgZnJvbSBtZW1vcnkgdG8gZmlsZTxcL3A+XG48aHIgXC8+XG48aDIgaWQ9XCJjb250ZW50LXR5cGVkZWYtZG9jdW1lbnRhdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC10eXBlZGVmLWRvY3VtZW50YXRpb25cIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlR5cGVkZWYgRG9jdW1lbnRhdGlvbjxcL2gyPlxuPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG8gZ3JpZCB0YWJsZS1maXhlZFwiIGRhdGEtdGFibGUtY29udGFpbmVyPVwiZGF0YS10YWJsZS1jb250YWluZXJcIj48dGFibGU+XG48dGhlYWQ+XG48dHI+XG48dGg+dHlwZWRlZiBzdHJ1Y3QgPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNzdHJ1Y3RfX2hhbF9fYmFja2VuZF9fc2VjdXJpdHlfX2F1dGhfX2Z1bmNzXCI+X2hhbF9iYWNrZW5kX3NlY3VyaXR5X2F1dGhfZnVuY3M8XC9hPiA8YSBocmVmPVwiZ3JvdXBfX0hBTEFQSV9fSEFMX19TRUNVUklUWV9fQVVUSF9fTU9EVUxFLm1kI2dhMDU2OWNlZWZkOGMwNDU0Y2U1MDJjYjdhNjZkM2IxYzdcIj5oYWxfYmFja2VuZF9zZWN1cml0eV9hdXRoX2Z1bmNzPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5TdHJ1Y3R1cmUgZm9yIHNlY3VyaXR5IGF1dGgtZncgZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxociBcLz5cbjxoMiBpZD1cImNvbnRlbnQtZW51bWVyYXRpb24tdHlwZS1kb2N1bWVudGF0aW9uXCI+PGEgaHJlZj1cIiNjb250ZW50LWVudW1lcmF0aW9uLXR5cGUtZG9jdW1lbnRhdGlvblwiIGNsYXNzPVwiaGVhZGluZy1wZXJtYWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIlBlcm1hbGlua1wiPlx1MDBiNjxcL2E+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPFwvaDI+XG48ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0byBncmlkIHRhYmxlLWZpeGVkXCIgZGF0YS10YWJsZS1jb250YWluZXI9XCJkYXRhLXRhYmxlLWNvbnRhaW5lclwiPjx0YWJsZT5cbjx0aGVhZD5cbjx0cj5cbjx0aD5lbnVtIDxhIGhyZWY9XCJncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUubWQjZ2EzMjQ3YjgxN2MyMzY3ZDgzYzlmMzkzN2U1MjA5NzQzNlwiPmhhbF9zZWN1cml0eV9hdXRoX2Vycm9yX2U8XC9hPjxcL3RoPlxuPFwvdHI+XG48XC90aGVhZD5cbjxcL3RhYmxlPjxcL2Rpdj5cbjxwPlJldHVybiBDb2RlcyBleHBvcnRlZCBieSB0aGUgaGFsLXNlY3VyaXR5LWF1dGggZnVuY3Rpb25zLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfTk9ORTxcL2VtPiB8IEluZGljYXRlIHRoZSByZXN1bHQgb2YgdGhlIG9uZSBzcGVjaWZpYyBBUEkgaXMgc3VjY2Vzc2Z1bCB8XG58IC0tLSB8IC0tLSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9JTlBVVF9QQVJBTTxcL2VtPiB8IEluZGljYXRlIHRoZSBBUEkncyBpbnB1dCBwYXJhbWV0ZXIgaXMgbWFsZm9ybWVkIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX09VVF9PRl9NRU1PUlk8XC9lbT4gfCBJbmRpY2F0ZSBzeXN0ZW0gaXMgcnVubmluZyBvdXQgb2YgbWVtb3J5IHN0YXRlIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX0JVRkZFUl9UT09fU01BTEw8XC9lbT4gfCBJbmRpY2F0ZSB0aGUgb3V0cHV0IGJ1ZmZlciBzaXplIHdoaWNoIGlzIHBhc3NlZCBhcyBwYXJhbWV0ZXIgaXMgdG9vIHNtYWxsIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX05PX1VTRVI8XC9lbT4gfCBJbmRpY2F0ZSB0aGVyZSBpcyBubyB1c2VyIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX05PX1BBU1NXT1JEPFwvZW0+IHwgSW5kaWNhdGUgdGhlcmUgaXMgbm8gcGFzc3dvcmQgc2V0IHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1BBU1NXT1JEX0VYSVNUPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgZXhpc3RzIGluIHN5c3RlbSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9NSVNNQVRDSDxcL2VtPiB8IEluZGljYXRlIHBhc3N3b3JkIG1pc21hdGNoIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1BBU1NXT1JEX1JFVFJZX1RJTUVSPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgcmV0cnkgdGltZW91dCBoYXMgbm90IHlldCBvY2N1cnJlZCB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9NQVhfQVRURU1QVFNfRVhDRUVERUQ8XC9lbT4gfCBJbmRpY2F0ZSBubyBtb3JlIGF0dGVtcHRzIGFyZSBwb3NzaWJsZSB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9FWFBJUkVEPFwvZW0+IHwgSW5kaWNhdGUgcGFzc3dvcmQgaXMgZXhwaXJlZCB8XG58IDxlbT5IQUxfU0VDVVJJVFlfQVVUSF9FUlJPUl9QQVNTV09SRF9SRVVTRUQ8XC9lbT4gfCBJbmRpY2F0ZSBwYXNzd29yZCBpcyByZXVzZWQgfFxufCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfU1RBVFVTPFwvZW0+IHwgSW5kaWNhdGUgc3RhdHVzIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVkIGNvbmRpdGlvbiBvciB0aHJlc2hvbGQgfFxufCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfRVJST1JfSEFMX0lOSVRfRkFJTDxcL2VtPiB8IEluZGljYXRlIHRoZXJlIGlzIGEgZmFpbHVyZSBkdXJpbmcgSEFMIGluaXRpYWxpemF0aW9uIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX0VSUk9SX1VOS05PV048XC9lbT4gfCBJbmRpY2F0ZSB0aGUgZXJyb3Igd2l0aCB1bmtub3duIHJlYXNvbiB8PFwvcD5cbjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGdyaWQgdGFibGUtZml4ZWRcIiBkYXRhLXRhYmxlLWNvbnRhaW5lcj1cImRhdGEtdGFibGUtY29udGFpbmVyXCI+PHRhYmxlPlxuPHRoZWFkPlxuPHRyPlxuPHRoPmVudW0gPGEgaHJlZj1cImdyb3VwX19IQUxBUElfX0hBTF9fU0VDVVJJVFlfX0FVVEhfX01PRFVMRS5tZCNnYTc0M2MzYjUzZWY5ODcxODZmZDhiNzk0NTE1NGE4MWE5XCI+aGFsX3NlY3VyaXR5X2F1dGhfcGFzc3dvcmRfdHlwZV9lPFwvYT48XC90aD5cbjxcL3RyPlxuPFwvdGhlYWQ+XG48XC90YWJsZT48XC9kaXY+XG48cD5FbnVtZXJhdGlvbiBmb3IgYXV0aCBwYXNzd29yZCB0eXBlLjxcL3A+XG48cD48c3Ryb25nPlNpbmNlOjxcL3N0cm9uZz5cbjogICBIQUxfTU9EVUxFX1NFQ1VSSVRZX0FVVEggMS4wPFwvcD5cbjxwPjxzdHJvbmc+RW51bWVyYXRvcjo8XC9zdHJvbmc+XG46ICAgfCA8ZW0+SEFMX1NFQ1VSSVRZX0FVVEhfUEFTU1dPUkRfTk9STUFMPFwvZW0+IHwgQ2hhcmFjdGVyIHN0cmluZyBmb3Igbm9ybWFsIHBhc3N3b3JkIHxcbnwgLS0tIHwgLS0tIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX1BBU1NXT1JEX1BJTjxcL2VtPiB8IE51bWVyaWMgY2hhcmFjdGVyIHN0cmluZyBmb3IgcGVyc29uYWwgaWRlbnRpZmljYXRpb24gbnVtYmVyIHxcbnwgPGVtPkhBTF9TRUNVUklUWV9BVVRIX1BBU1NXT1JEX1BBVFRFUk48XC9lbT4gfCBOdW1lcmljIGNoYXJhY3RlciBzdHJpbmcgZm9yIHBhdHRlcm4gbWF0Y2ggfDxcL3A+XG48aHIgXC8+XG48cD5FeGNlcHQgYXMgbm90ZWQsIHRoaXMgY29udGVudCAtIGV4Y2x1ZGluZyB0aGUgQ29kZSBFeGFtcGxlcyAtIGlzIGxpY2Vuc2VkIHVuZGVyIDxhIGhyZWY9XCJodHRwOlwvXC9jcmVhdGl2ZWNvbW1vbnMub3JnXC9saWNlbnNlc1wvYnlcLzMuMFwvbGVnYWxjb2RlXCI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAzLjA8XC9hPlxuYW5kIGFsbCBvZiB0aGUgQ29kZSBFeGFtcGxlcyBjb250YWluZWQgaGVyZWluIGFyZSBsaWNlbnNlZCB1bmRlciA8YSBocmVmPVwiaHR0cHM6XC9cL3d3dy50aXplbi5vcmdcL2JzZC0zLWNsYXVzZS1saWNlbnNlXCI+QlNELTMtQ2xhdXNlPFwvYT4uPGJyIFwvPlxuRm9yIGRldGFpbHMsIHNlZSB0aGUgPGEgaHJlZj1cImh0dHBzOlwvXC93d3cudGl6ZW4ub3JnXC9jb250ZW50LWxpY2Vuc2VcIj5Db250ZW50IExpY2Vuc2U8XC9hPi48XC9wPlxuIiwidGFibGVfb2ZfY29udGVudCI6Ijx1bCBjbGFzcz1cInRhYmxlLW9mLWNvbnRlbnRzXCI+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LXJlcXVpcmVkLWhlYWRlclwiPlJlcXVpcmVkIEhlYWRlcjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LW92ZXJ2aWV3XCI+T3ZlcnZpZXc8XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1kYXRhLXN0cnVjdHVyZS1kb2N1bWVudGF0aW9uXCI+RGF0YSBTdHJ1Y3R1cmUgRG9jdW1lbnRhdGlvbjxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LWZpZWxkLWRvY3VtZW50YXRpb25cIj5GaWVsZCBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtdHlwZWRlZi1kb2N1bWVudGF0aW9uXCI+VHlwZWRlZiBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtZW51bWVyYXRpb24tdHlwZS1kb2N1bWVudGF0aW9uXCI+RW51bWVyYXRpb24gVHlwZSBEb2N1bWVudGF0aW9uPFwvYT48XC9saT5cbjxcL3VsPlxuIiwidGl0bGUiOiJUaXplbiBIQUwgQVBJOiBBdXRoIiwicmF3IjpudWxsfSx7ImNsYXNzIjoiQXBwXFxTZXJ2aWNlc1xcRG9jdW1lbnRhdGlvblxcRGF0YVxcUmVuZGVyZWRNYXJrZG93biIsInMiOiJ3cmJsIn1dfSx7InMiOiJhcnIifV19LCJtZW1vIjp7ImlkIjoiUjZ5NWwxamxwZ1ZsdnJ3YzVGSWwiLCJuYW1lIjoiX19tb3VudFBhcmFtc0NvbnRhaW5lciIsInBhdGgiOiJkb2NzXC9wbGF0Zm9ybVwvaGFsXC9hcGlcLzEuMC4wXC9ncm91cF9fSEFMQVBJX19IQUxfX1NFQ1VSSVRZX19BVVRIX19NT0RVTEUiLCJtZXRob2QiOiJHRVQiLCJyZWxlYXNlIjoiYS1hLWEifSwiY2hlY2tzdW0iOiI0OTJkZTU0YmMxNzI5YTIwNmJkZmZkNjRhNTMyNzE3ODY1NTRiNWU2NjQzMDhiZmQ4OTE2NjIwOWZjZjY0MGQ0In0=')" >

For the best experience,
Please visit us from a computer

Copyright © 2026 SAMSUNG. All rights reserved.

Customize your cookie preferences

You can enable or disable non-essential cookies. Essential cookies are always on to ensure the site works properly and to keep you signed in.

Necessary

These cookies are necessary for the website to function properly and cannot be switched off. They help with things like logging in and setting your privacy preferences.

Always on

Analytics

These cookies help us improve the site by tracking which pages are most popular and how visitors move around the site.

Enable analytics cookies
Public Forum Public Forum
Employees only. Please sign in with your company account.