Fixed whitespace, moved timeout declaration.

This commit is contained in:
Michael Jumper 2012-03-05 12:10:03 -08:00
parent 92b799bdad
commit c10d653607
5 changed files with 245 additions and 244 deletions

View File

@ -54,7 +54,7 @@ typedef struct guac_rdp_color {
typedef struct rdp_guac_client_data { typedef struct rdp_guac_client_data {
freerdp* rdp_inst; freerdp* rdp_inst;
rdpSettings* settings; rdpSettings* settings;
int mouse_button_mask; int mouse_button_mask;

View File

@ -75,9 +75,13 @@ int rdp_guac_client_handle_messages(guac_client* client) {
void* write_fds[32]; void* write_fds[32];
int read_count = 0; int read_count = 0;
int write_count = 0; int write_count = 0;
fd_set rfds, wfds; fd_set rfds, wfds;
struct timeval timeout = {
.tv_sec = 0;
.tv_usec = 250000;
};
/* get rdp fds */ /* get rdp fds */
if (!freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count)) { if (!freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count)) {
guac_client_log_error(client, "Unable to read RDP file descriptors."); guac_client_log_error(client, "Unable to read RDP file descriptors.");
@ -116,9 +120,6 @@ int rdp_guac_client_handle_messages(guac_client* client) {
} }
/* Otherwise, wait for file descriptors given */ /* Otherwise, wait for file descriptors given */
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 250000;
if (select(max_fd + 1, &rfds, &wfds, NULL, &timeout) == -1) { if (select(max_fd + 1, &rfds, &wfds, NULL, &timeout) == -1) {
/* these are not really errors */ /* these are not really errors */
if (!((errno == EAGAIN) || if (!((errno == EAGAIN) ||

View File

@ -113,8 +113,8 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) {
guac_client* client = ((rdp_freerdp_context*) context)->client; guac_client* client = ((rdp_freerdp_context*) context)->client;
guac_socket* socket = client->socket; guac_socket* socket = client->socket;
int width = bitmap->right - bitmap->left + 1; int width = bitmap->right - bitmap->left + 1;
int height = bitmap->bottom - bitmap->top + 1; int height = bitmap->bottom - bitmap->top + 1;
guac_protocol_send_copy(socket, guac_protocol_send_copy(socket,
((guac_rdp_bitmap*) bitmap)->layer, ((guac_rdp_bitmap*) bitmap)->layer,

View File

@ -159,7 +159,7 @@ void guac_rdp_glyph_begindraw(rdpContext* context,
guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8; guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8;
guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16; guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16;
/* paint background on destination */ /* paint background on destination */
guac_protocol_send_rect(client->socket, guac_protocol_send_rect(client->socket,
GUAC_COMP_OVER, current_layer, GUAC_COMP_OVER, current_layer,
x, y, width, height, x, y, width, height,

View File

@ -3910,10 +3910,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = {
{ .scancode = 0x00, .flags = 0x00 }, /* 0x0efe */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0efe */
{ .scancode = 0x00, .flags = 0x00 }, /* 0x0eff (Korean_Won) */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0eff (Korean_Won) */
}, },
{{0}}, /* 0x0f?? */ {{0}}, /* 0x0f?? */
{{0}}, /* 0x10?? */ {{0}}, /* 0x10?? */
{{0}}, /* 0x11?? */ {{0}}, /* 0x11?? */
{{0}}, /* 0x12?? */ {{0}}, /* 0x12?? */
{ /* 0x13?? */ { /* 0x13?? */
{ .scancode = 0x00, .flags = 0x00 }, /* 0x1300 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x1300 */
{ .scancode = 0x00, .flags = 0x00 }, /* 0x1301 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x1301 */
@ -4172,18 +4172,18 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = {
{ .scancode = 0x00, .flags = 0x00 }, /* 0x13fe */ { .scancode = 0x00, .flags = 0x00 }, /* 0x13fe */
{ .scancode = 0x00, .flags = 0x00 }, /* 0x13ff */ { .scancode = 0x00, .flags = 0x00 }, /* 0x13ff */
}, },
{{0}}, /* 0x14?? */ {{0}}, /* 0x14?? */
{{0}}, /* 0x15?? */ {{0}}, /* 0x15?? */
{{0}}, /* 0x16?? */ {{0}}, /* 0x16?? */
{{0}}, /* 0x17?? */ {{0}}, /* 0x17?? */
{{0}}, /* 0x18?? */ {{0}}, /* 0x18?? */
{{0}}, /* 0x19?? */ {{0}}, /* 0x19?? */
{{0}}, /* 0x1a?? */ {{0}}, /* 0x1a?? */
{{0}}, /* 0x1b?? */ {{0}}, /* 0x1b?? */
{{0}}, /* 0x1c?? */ {{0}}, /* 0x1c?? */
{{0}}, /* 0x1d?? */ {{0}}, /* 0x1d?? */
{{0}}, /* 0x1e?? */ {{0}}, /* 0x1e?? */
{{0}}, /* 0x1f?? */ {{0}}, /* 0x1f?? */
{ /* 0x20?? */ { /* 0x20?? */
{ .scancode = 0x00, .flags = 0x00 }, /* 0x2000 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x2000 */
{ .scancode = 0x00, .flags = 0x00 }, /* 0x2001 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x2001 */
@ -4442,226 +4442,226 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = {
{ .scancode = 0x00, .flags = 0x00 }, /* 0x20fe */ { .scancode = 0x00, .flags = 0x00 }, /* 0x20fe */
{ .scancode = 0x00, .flags = 0x00 }, /* 0x20ff */ { .scancode = 0x00, .flags = 0x00 }, /* 0x20ff */
}, },
{{0}}, /* 0x21?? */ {{0}}, /* 0x21?? */
{{0}}, /* 0x22?? */ {{0}}, /* 0x22?? */
{{0}}, /* 0x23?? */ {{0}}, /* 0x23?? */
{{0}}, /* 0x24?? */ {{0}}, /* 0x24?? */
{{0}}, /* 0x25?? */ {{0}}, /* 0x25?? */
{{0}}, /* 0x26?? */ {{0}}, /* 0x26?? */
{{0}}, /* 0x27?? */ {{0}}, /* 0x27?? */
{{0}}, /* 0x28?? */ {{0}}, /* 0x28?? */
{{0}}, /* 0x29?? */ {{0}}, /* 0x29?? */
{{0}}, /* 0x2a?? */ {{0}}, /* 0x2a?? */
{{0}}, /* 0x2b?? */ {{0}}, /* 0x2b?? */
{{0}}, /* 0x2c?? */ {{0}}, /* 0x2c?? */
{{0}}, /* 0x2d?? */ {{0}}, /* 0x2d?? */
{{0}}, /* 0x2e?? */ {{0}}, /* 0x2e?? */
{{0}}, /* 0x2f?? */ {{0}}, /* 0x2f?? */
{{0}}, /* 0x30?? */ {{0}}, /* 0x30?? */
{{0}}, /* 0x31?? */ {{0}}, /* 0x31?? */
{{0}}, /* 0x32?? */ {{0}}, /* 0x32?? */
{{0}}, /* 0x33?? */ {{0}}, /* 0x33?? */
{{0}}, /* 0x34?? */ {{0}}, /* 0x34?? */
{{0}}, /* 0x35?? */ {{0}}, /* 0x35?? */
{{0}}, /* 0x36?? */ {{0}}, /* 0x36?? */
{{0}}, /* 0x37?? */ {{0}}, /* 0x37?? */
{{0}}, /* 0x38?? */ {{0}}, /* 0x38?? */
{{0}}, /* 0x39?? */ {{0}}, /* 0x39?? */
{{0}}, /* 0x3a?? */ {{0}}, /* 0x3a?? */
{{0}}, /* 0x3b?? */ {{0}}, /* 0x3b?? */
{{0}}, /* 0x3c?? */ {{0}}, /* 0x3c?? */
{{0}}, /* 0x3d?? */ {{0}}, /* 0x3d?? */
{{0}}, /* 0x3e?? */ {{0}}, /* 0x3e?? */
{{0}}, /* 0x3f?? */ {{0}}, /* 0x3f?? */
{{0}}, /* 0x40?? */ {{0}}, /* 0x40?? */
{{0}}, /* 0x41?? */ {{0}}, /* 0x41?? */
{{0}}, /* 0x42?? */ {{0}}, /* 0x42?? */
{{0}}, /* 0x43?? */ {{0}}, /* 0x43?? */
{{0}}, /* 0x44?? */ {{0}}, /* 0x44?? */
{{0}}, /* 0x45?? */ {{0}}, /* 0x45?? */
{{0}}, /* 0x46?? */ {{0}}, /* 0x46?? */
{{0}}, /* 0x47?? */ {{0}}, /* 0x47?? */
{{0}}, /* 0x48?? */ {{0}}, /* 0x48?? */
{{0}}, /* 0x49?? */ {{0}}, /* 0x49?? */
{{0}}, /* 0x4a?? */ {{0}}, /* 0x4a?? */
{{0}}, /* 0x4b?? */ {{0}}, /* 0x4b?? */
{{0}}, /* 0x4c?? */ {{0}}, /* 0x4c?? */
{{0}}, /* 0x4d?? */ {{0}}, /* 0x4d?? */
{{0}}, /* 0x4e?? */ {{0}}, /* 0x4e?? */
{{0}}, /* 0x4f?? */ {{0}}, /* 0x4f?? */
{{0}}, /* 0x50?? */ {{0}}, /* 0x50?? */
{{0}}, /* 0x51?? */ {{0}}, /* 0x51?? */
{{0}}, /* 0x52?? */ {{0}}, /* 0x52?? */
{{0}}, /* 0x53?? */ {{0}}, /* 0x53?? */
{{0}}, /* 0x54?? */ {{0}}, /* 0x54?? */
{{0}}, /* 0x55?? */ {{0}}, /* 0x55?? */
{{0}}, /* 0x56?? */ {{0}}, /* 0x56?? */
{{0}}, /* 0x57?? */ {{0}}, /* 0x57?? */
{{0}}, /* 0x58?? */ {{0}}, /* 0x58?? */
{{0}}, /* 0x59?? */ {{0}}, /* 0x59?? */
{{0}}, /* 0x5a?? */ {{0}}, /* 0x5a?? */
{{0}}, /* 0x5b?? */ {{0}}, /* 0x5b?? */
{{0}}, /* 0x5c?? */ {{0}}, /* 0x5c?? */
{{0}}, /* 0x5d?? */ {{0}}, /* 0x5d?? */
{{0}}, /* 0x5e?? */ {{0}}, /* 0x5e?? */
{{0}}, /* 0x5f?? */ {{0}}, /* 0x5f?? */
{{0}}, /* 0x60?? */ {{0}}, /* 0x60?? */
{{0}}, /* 0x61?? */ {{0}}, /* 0x61?? */
{{0}}, /* 0x62?? */ {{0}}, /* 0x62?? */
{{0}}, /* 0x63?? */ {{0}}, /* 0x63?? */
{{0}}, /* 0x64?? */ {{0}}, /* 0x64?? */
{{0}}, /* 0x65?? */ {{0}}, /* 0x65?? */
{{0}}, /* 0x66?? */ {{0}}, /* 0x66?? */
{{0}}, /* 0x67?? */ {{0}}, /* 0x67?? */
{{0}}, /* 0x68?? */ {{0}}, /* 0x68?? */
{{0}}, /* 0x69?? */ {{0}}, /* 0x69?? */
{{0}}, /* 0x6a?? */ {{0}}, /* 0x6a?? */
{{0}}, /* 0x6b?? */ {{0}}, /* 0x6b?? */
{{0}}, /* 0x6c?? */ {{0}}, /* 0x6c?? */
{{0}}, /* 0x6d?? */ {{0}}, /* 0x6d?? */
{{0}}, /* 0x6e?? */ {{0}}, /* 0x6e?? */
{{0}}, /* 0x6f?? */ {{0}}, /* 0x6f?? */
{{0}}, /* 0x70?? */ {{0}}, /* 0x70?? */
{{0}}, /* 0x71?? */ {{0}}, /* 0x71?? */
{{0}}, /* 0x72?? */ {{0}}, /* 0x72?? */
{{0}}, /* 0x73?? */ {{0}}, /* 0x73?? */
{{0}}, /* 0x74?? */ {{0}}, /* 0x74?? */
{{0}}, /* 0x75?? */ {{0}}, /* 0x75?? */
{{0}}, /* 0x76?? */ {{0}}, /* 0x76?? */
{{0}}, /* 0x77?? */ {{0}}, /* 0x77?? */
{{0}}, /* 0x78?? */ {{0}}, /* 0x78?? */
{{0}}, /* 0x79?? */ {{0}}, /* 0x79?? */
{{0}}, /* 0x7a?? */ {{0}}, /* 0x7a?? */
{{0}}, /* 0x7b?? */ {{0}}, /* 0x7b?? */
{{0}}, /* 0x7c?? */ {{0}}, /* 0x7c?? */
{{0}}, /* 0x7d?? */ {{0}}, /* 0x7d?? */
{{0}}, /* 0x7e?? */ {{0}}, /* 0x7e?? */
{{0}}, /* 0x7f?? */ {{0}}, /* 0x7f?? */
{{0}}, /* 0x80?? */ {{0}}, /* 0x80?? */
{{0}}, /* 0x81?? */ {{0}}, /* 0x81?? */
{{0}}, /* 0x82?? */ {{0}}, /* 0x82?? */
{{0}}, /* 0x83?? */ {{0}}, /* 0x83?? */
{{0}}, /* 0x84?? */ {{0}}, /* 0x84?? */
{{0}}, /* 0x85?? */ {{0}}, /* 0x85?? */
{{0}}, /* 0x86?? */ {{0}}, /* 0x86?? */
{{0}}, /* 0x87?? */ {{0}}, /* 0x87?? */
{{0}}, /* 0x88?? */ {{0}}, /* 0x88?? */
{{0}}, /* 0x89?? */ {{0}}, /* 0x89?? */
{{0}}, /* 0x8a?? */ {{0}}, /* 0x8a?? */
{{0}}, /* 0x8b?? */ {{0}}, /* 0x8b?? */
{{0}}, /* 0x8c?? */ {{0}}, /* 0x8c?? */
{{0}}, /* 0x8d?? */ {{0}}, /* 0x8d?? */
{{0}}, /* 0x8e?? */ {{0}}, /* 0x8e?? */
{{0}}, /* 0x8f?? */ {{0}}, /* 0x8f?? */
{{0}}, /* 0x90?? */ {{0}}, /* 0x90?? */
{{0}}, /* 0x91?? */ {{0}}, /* 0x91?? */
{{0}}, /* 0x92?? */ {{0}}, /* 0x92?? */
{{0}}, /* 0x93?? */ {{0}}, /* 0x93?? */
{{0}}, /* 0x94?? */ {{0}}, /* 0x94?? */
{{0}}, /* 0x95?? */ {{0}}, /* 0x95?? */
{{0}}, /* 0x96?? */ {{0}}, /* 0x96?? */
{{0}}, /* 0x97?? */ {{0}}, /* 0x97?? */
{{0}}, /* 0x98?? */ {{0}}, /* 0x98?? */
{{0}}, /* 0x99?? */ {{0}}, /* 0x99?? */
{{0}}, /* 0x9a?? */ {{0}}, /* 0x9a?? */
{{0}}, /* 0x9b?? */ {{0}}, /* 0x9b?? */
{{0}}, /* 0x9c?? */ {{0}}, /* 0x9c?? */
{{0}}, /* 0x9d?? */ {{0}}, /* 0x9d?? */
{{0}}, /* 0x9e?? */ {{0}}, /* 0x9e?? */
{{0}}, /* 0x9f?? */ {{0}}, /* 0x9f?? */
{{0}}, /* 0xa0?? */ {{0}}, /* 0xa0?? */
{{0}}, /* 0xa1?? */ {{0}}, /* 0xa1?? */
{{0}}, /* 0xa2?? */ {{0}}, /* 0xa2?? */
{{0}}, /* 0xa3?? */ {{0}}, /* 0xa3?? */
{{0}}, /* 0xa4?? */ {{0}}, /* 0xa4?? */
{{0}}, /* 0xa5?? */ {{0}}, /* 0xa5?? */
{{0}}, /* 0xa6?? */ {{0}}, /* 0xa6?? */
{{0}}, /* 0xa7?? */ {{0}}, /* 0xa7?? */
{{0}}, /* 0xa8?? */ {{0}}, /* 0xa8?? */
{{0}}, /* 0xa9?? */ {{0}}, /* 0xa9?? */
{{0}}, /* 0xaa?? */ {{0}}, /* 0xaa?? */
{{0}}, /* 0xab?? */ {{0}}, /* 0xab?? */
{{0}}, /* 0xac?? */ {{0}}, /* 0xac?? */
{{0}}, /* 0xad?? */ {{0}}, /* 0xad?? */
{{0}}, /* 0xae?? */ {{0}}, /* 0xae?? */
{{0}}, /* 0xaf?? */ {{0}}, /* 0xaf?? */
{{0}}, /* 0xb0?? */ {{0}}, /* 0xb0?? */
{{0}}, /* 0xb1?? */ {{0}}, /* 0xb1?? */
{{0}}, /* 0xb2?? */ {{0}}, /* 0xb2?? */
{{0}}, /* 0xb3?? */ {{0}}, /* 0xb3?? */
{{0}}, /* 0xb4?? */ {{0}}, /* 0xb4?? */
{{0}}, /* 0xb5?? */ {{0}}, /* 0xb5?? */
{{0}}, /* 0xb6?? */ {{0}}, /* 0xb6?? */
{{0}}, /* 0xb7?? */ {{0}}, /* 0xb7?? */
{{0}}, /* 0xb8?? */ {{0}}, /* 0xb8?? */
{{0}}, /* 0xb9?? */ {{0}}, /* 0xb9?? */
{{0}}, /* 0xba?? */ {{0}}, /* 0xba?? */
{{0}}, /* 0xbb?? */ {{0}}, /* 0xbb?? */
{{0}}, /* 0xbc?? */ {{0}}, /* 0xbc?? */
{{0}}, /* 0xbd?? */ {{0}}, /* 0xbd?? */
{{0}}, /* 0xbe?? */ {{0}}, /* 0xbe?? */
{{0}}, /* 0xbf?? */ {{0}}, /* 0xbf?? */
{{0}}, /* 0xc0?? */ {{0}}, /* 0xc0?? */
{{0}}, /* 0xc1?? */ {{0}}, /* 0xc1?? */
{{0}}, /* 0xc2?? */ {{0}}, /* 0xc2?? */
{{0}}, /* 0xc3?? */ {{0}}, /* 0xc3?? */
{{0}}, /* 0xc4?? */ {{0}}, /* 0xc4?? */
{{0}}, /* 0xc5?? */ {{0}}, /* 0xc5?? */
{{0}}, /* 0xc6?? */ {{0}}, /* 0xc6?? */
{{0}}, /* 0xc7?? */ {{0}}, /* 0xc7?? */
{{0}}, /* 0xc8?? */ {{0}}, /* 0xc8?? */
{{0}}, /* 0xc9?? */ {{0}}, /* 0xc9?? */
{{0}}, /* 0xca?? */ {{0}}, /* 0xca?? */
{{0}}, /* 0xcb?? */ {{0}}, /* 0xcb?? */
{{0}}, /* 0xcc?? */ {{0}}, /* 0xcc?? */
{{0}}, /* 0xcd?? */ {{0}}, /* 0xcd?? */
{{0}}, /* 0xce?? */ {{0}}, /* 0xce?? */
{{0}}, /* 0xcf?? */ {{0}}, /* 0xcf?? */
{{0}}, /* 0xd0?? */ {{0}}, /* 0xd0?? */
{{0}}, /* 0xd1?? */ {{0}}, /* 0xd1?? */
{{0}}, /* 0xd2?? */ {{0}}, /* 0xd2?? */
{{0}}, /* 0xd3?? */ {{0}}, /* 0xd3?? */
{{0}}, /* 0xd4?? */ {{0}}, /* 0xd4?? */
{{0}}, /* 0xd5?? */ {{0}}, /* 0xd5?? */
{{0}}, /* 0xd6?? */ {{0}}, /* 0xd6?? */
{{0}}, /* 0xd7?? */ {{0}}, /* 0xd7?? */
{{0}}, /* 0xd8?? */ {{0}}, /* 0xd8?? */
{{0}}, /* 0xd9?? */ {{0}}, /* 0xd9?? */
{{0}}, /* 0xda?? */ {{0}}, /* 0xda?? */
{{0}}, /* 0xdb?? */ {{0}}, /* 0xdb?? */
{{0}}, /* 0xdc?? */ {{0}}, /* 0xdc?? */
{{0}}, /* 0xdd?? */ {{0}}, /* 0xdd?? */
{{0}}, /* 0xde?? */ {{0}}, /* 0xde?? */
{{0}}, /* 0xdf?? */ {{0}}, /* 0xdf?? */
{{0}}, /* 0xe0?? */ {{0}}, /* 0xe0?? */
{{0}}, /* 0xe1?? */ {{0}}, /* 0xe1?? */
{{0}}, /* 0xe2?? */ {{0}}, /* 0xe2?? */
{{0}}, /* 0xe3?? */ {{0}}, /* 0xe3?? */
{{0}}, /* 0xe4?? */ {{0}}, /* 0xe4?? */
{{0}}, /* 0xe5?? */ {{0}}, /* 0xe5?? */
{{0}}, /* 0xe6?? */ {{0}}, /* 0xe6?? */
{{0}}, /* 0xe7?? */ {{0}}, /* 0xe7?? */
{{0}}, /* 0xe8?? */ {{0}}, /* 0xe8?? */
{{0}}, /* 0xe9?? */ {{0}}, /* 0xe9?? */
{{0}}, /* 0xea?? */ {{0}}, /* 0xea?? */
{{0}}, /* 0xeb?? */ {{0}}, /* 0xeb?? */
{{0}}, /* 0xec?? */ {{0}}, /* 0xec?? */
{{0}}, /* 0xed?? */ {{0}}, /* 0xed?? */
{{0}}, /* 0xee?? */ {{0}}, /* 0xee?? */
{{0}}, /* 0xef?? */ {{0}}, /* 0xef?? */
{{0}}, /* 0xf0?? */ {{0}}, /* 0xf0?? */
{{0}}, /* 0xf1?? */ {{0}}, /* 0xf1?? */
{{0}}, /* 0xf2?? */ {{0}}, /* 0xf2?? */
{{0}}, /* 0xf3?? */ {{0}}, /* 0xf3?? */
{{0}}, /* 0xf4?? */ {{0}}, /* 0xf4?? */
{{0}}, /* 0xf5?? */ {{0}}, /* 0xf5?? */
{{0}}, /* 0xf6?? */ {{0}}, /* 0xf6?? */
{{0}}, /* 0xf7?? */ {{0}}, /* 0xf7?? */
{{0}}, /* 0xf8?? */ {{0}}, /* 0xf8?? */
{{0}}, /* 0xf9?? */ {{0}}, /* 0xf9?? */
{{0}}, /* 0xfa?? */ {{0}}, /* 0xfa?? */
{{0}}, /* 0xfb?? */ {{0}}, /* 0xfb?? */
{{0}}, /* 0xfc?? */ {{0}}, /* 0xfc?? */
{ /* 0xfd?? */ { /* 0xfd?? */
{ .scancode = 0x00, .flags = 0x00 }, /* 0xfd00 */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfd00 */
{ .scancode = 0x00, .flags = 0x00 }, /* 0xfd01 (3270_Duplicate) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfd01 (3270_Duplicate) */