<!-- ##### SECTION Title ##### -->
Windows

<!-- ##### SECTION Short_Description ##### -->


<!-- ##### SECTION Long_Description ##### -->
<para>

</para>


<!-- ##### SECTION See_Also ##### -->
<para>

</para>


<!-- ##### SECTION Stability_Level ##### -->


<!-- ##### SECTION Image ##### -->


<!-- ##### STRUCT GdkWindow ##### -->
<para>

</para>


<!-- ##### SIGNAL GdkWindow::create-surface ##### -->
<para>

</para>

@gdkwindow: the object which received the signal.
@arg1: 
@arg2: 
@Returns: 

<!-- ##### SIGNAL GdkWindow::from-embedder ##### -->
<para>

</para>

@gdkwindow: the object which received the signal.
@arg1: 
@arg2: 
@arg3: 
@arg4: 

<!-- ##### SIGNAL GdkWindow::pick-embedded-child ##### -->
<para>

</para>

@gdkwindow: the object which received the signal.
@arg1: 
@arg2: 
@Returns: 

<!-- ##### SIGNAL GdkWindow::to-embedder ##### -->
<para>

</para>

@gdkwindow: the object which received the signal.
@arg1: 
@arg2: 
@arg3: 
@arg4: 

<!-- ##### ARG GdkWindow:cursor ##### -->
<para>

</para>

<!-- ##### ENUM GdkWindowType ##### -->
<para>

</para>

@GDK_WINDOW_ROOT: 
@GDK_WINDOW_TOPLEVEL: 
@GDK_WINDOW_CHILD: 
@GDK_WINDOW_TEMP: 
@GDK_WINDOW_FOREIGN: 
@GDK_WINDOW_OFFSCREEN: 

<!-- ##### ENUM GdkWindowClass ##### -->
<para>

</para>

@GDK_INPUT_OUTPUT: 
@GDK_INPUT_ONLY: 

<!-- ##### ENUM GdkWindowHints ##### -->
<para>

</para>

@GDK_HINT_POS: 
@GDK_HINT_MIN_SIZE: 
@GDK_HINT_MAX_SIZE: 
@GDK_HINT_BASE_SIZE: 
@GDK_HINT_ASPECT: 
@GDK_HINT_RESIZE_INC: 
@GDK_HINT_WIN_GRAVITY: 
@GDK_HINT_USER_POS: 
@GDK_HINT_USER_SIZE: 

<!-- ##### STRUCT GdkGeometry ##### -->
<para>

</para>

@min_width: 
@min_height: 
@max_width: 
@max_height: 
@base_width: 
@base_height: 
@width_inc: 
@height_inc: 
@min_aspect: 
@max_aspect: 
@win_gravity: 

<!-- ##### ENUM GdkGravity ##### -->
<para>

</para>

@GDK_GRAVITY_NORTH_WEST: 
@GDK_GRAVITY_NORTH: 
@GDK_GRAVITY_NORTH_EAST: 
@GDK_GRAVITY_WEST: 
@GDK_GRAVITY_CENTER: 
@GDK_GRAVITY_EAST: 
@GDK_GRAVITY_SOUTH_WEST: 
@GDK_GRAVITY_SOUTH: 
@GDK_GRAVITY_SOUTH_EAST: 
@GDK_GRAVITY_STATIC: 

<!-- ##### ENUM GdkWindowEdge ##### -->
<para>

</para>

@GDK_WINDOW_EDGE_NORTH_WEST: 
@GDK_WINDOW_EDGE_NORTH: 
@GDK_WINDOW_EDGE_NORTH_EAST: 
@GDK_WINDOW_EDGE_WEST: 
@GDK_WINDOW_EDGE_EAST: 
@GDK_WINDOW_EDGE_SOUTH_WEST: 
@GDK_WINDOW_EDGE_SOUTH: 
@GDK_WINDOW_EDGE_SOUTH_EAST: 

<!-- ##### ENUM GdkWindowTypeHint ##### -->
<para>

</para>

@GDK_WINDOW_TYPE_HINT_NORMAL: 
@GDK_WINDOW_TYPE_HINT_DIALOG: 
@GDK_WINDOW_TYPE_HINT_MENU: 
@GDK_WINDOW_TYPE_HINT_TOOLBAR: 
@GDK_WINDOW_TYPE_HINT_SPLASHSCREEN: 
@GDK_WINDOW_TYPE_HINT_UTILITY: 
@GDK_WINDOW_TYPE_HINT_DOCK: 
@GDK_WINDOW_TYPE_HINT_DESKTOP: 
@GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU: 
@GDK_WINDOW_TYPE_HINT_POPUP_MENU: 
@GDK_WINDOW_TYPE_HINT_TOOLTIP: 
@GDK_WINDOW_TYPE_HINT_NOTIFICATION: 
@GDK_WINDOW_TYPE_HINT_COMBO: 
@GDK_WINDOW_TYPE_HINT_DND: 

<!-- ##### STRUCT GdkWindowAttr ##### -->
<para>

</para>

@title: 
@event_mask: 
@x: 
@y: 
@width: 
@height: 
@wclass: 
@visual: 
@window_type: 
@cursor: 
@wmclass_name: 
@wmclass_class: 
@override_redirect: 
@type_hint: 

<!-- ##### ENUM GdkWindowAttributesType ##### -->
<para>

</para>

@GDK_WA_TITLE: 
@GDK_WA_X: 
@GDK_WA_Y: 
@GDK_WA_CURSOR: 
@GDK_WA_VISUAL: 
@GDK_WA_WMCLASS: 
@GDK_WA_NOREDIR: 
@GDK_WA_TYPE_HINT: 

<!-- ##### FUNCTION gdk_window_new ##### -->
<para>

</para>

@parent: 
@attributes: 
@attributes_mask: 
@Returns: 


<!-- ##### FUNCTION gdk_window_destroy ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_get_window_type ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_display ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_screen ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_visual ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_at_pointer ##### -->
<para>

</para>

@win_x: 
@win_y: 
@Returns: 


<!-- ##### FUNCTION gdk_window_show ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_show_unraised ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_hide ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_is_destroyed ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_is_visible ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_is_viewable ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_is_input_only ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_is_shaped ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_state ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_withdraw ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_iconify ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_deiconify ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_stick ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_unstick ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_maximize ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_unmaximize ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_fullscreen ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_unfullscreen ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_set_keep_above ##### -->
<para>

</para>

@window: 
@setting: 


<!-- ##### FUNCTION gdk_window_set_keep_below ##### -->
<para>

</para>

@window: 
@setting: 


<!-- ##### FUNCTION gdk_window_set_opacity ##### -->
<para>

</para>

@window: 
@opacity: 


<!-- ##### FUNCTION gdk_window_set_composited ##### -->
<para>

</para>

@window: 
@composited: 


<!-- ##### FUNCTION gdk_window_get_composited ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_move ##### -->
<para>

</para>

@window: 
@x: 
@y: 


<!-- ##### FUNCTION gdk_window_resize ##### -->
<para>

</para>

@window: 
@width: 
@height: 


<!-- ##### FUNCTION gdk_window_move_resize ##### -->
<para>

</para>

@window: 
@x: 
@y: 
@width: 
@height: 


<!-- ##### FUNCTION gdk_window_scroll ##### -->
<para>

</para>

@window: 
@dx: 
@dy: 


<!-- ##### FUNCTION gdk_window_move_region ##### -->
<para>

</para>

@window: 
@region: 
@dx: 
@dy: 


<!-- ##### FUNCTION gdk_window_flush ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_has_native ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_ensure_native ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_reparent ##### -->
<para>

</para>

@window: 
@new_parent: 
@x: 
@y: 


<!-- ##### FUNCTION gdk_window_raise ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_lower ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_restack ##### -->
<para>

</para>

@window: 
@sibling: 
@above: 


<!-- ##### FUNCTION gdk_window_focus ##### -->
<para>

</para>

@window: 
@timestamp: 


<!-- ##### FUNCTION gdk_window_register_dnd ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_begin_resize_drag ##### -->
<para>

</para>

@window: 
@edge: 
@button: 
@root_x: 
@root_y: 
@timestamp: 


<!-- ##### FUNCTION gdk_window_begin_move_drag ##### -->
<para>

</para>

@window: 
@button: 
@root_x: 
@root_y: 
@timestamp: 


<!-- ##### FUNCTION gdk_window_constrain_size ##### -->
<para>

</para>

@geometry: 
@flags: 
@width: 
@height: 
@new_width: 
@new_height: 


<!-- ##### FUNCTION gdk_window_beep ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_begin_paint_rect ##### -->
<para>

</para>

@window: 
@rectangle: 


<!-- ##### FUNCTION gdk_window_begin_paint_region ##### -->
<para>

</para>

@window: 
@region: 


<!-- ##### FUNCTION gdk_window_end_paint ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_invalidate_rect ##### -->
<para>

</para>

@window: 
@rect: 
@invalidate_children: 


<!-- ##### FUNCTION gdk_window_invalidate_region ##### -->
<para>

</para>

@window: 
@region: 
@invalidate_children: 


<!-- ##### USER_FUNCTION GdkWindowChildFunc ##### -->
<para>

</para>

@window: 
@user_data: 
@Returns: 


<!-- ##### FUNCTION gdk_window_invalidate_maybe_recurse ##### -->
<para>

</para>

@window: 
@region: 
@child_func: 
@user_data: 


<!-- ##### FUNCTION gdk_window_get_update_area ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_freeze_updates ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_thaw_updates ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_process_all_updates ##### -->
<para>

</para>

@void: 


<!-- ##### FUNCTION gdk_window_process_updates ##### -->
<para>

</para>

@window: 
@update_children: 


<!-- ##### FUNCTION gdk_window_set_debug_updates ##### -->
<para>

</para>

@setting: 


<!-- ##### FUNCTION gdk_window_enable_synchronized_configure ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_configure_finished ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_set_user_data ##### -->
<para>

</para>

@window: 
@user_data: 


<!-- ##### FUNCTION gdk_window_set_override_redirect ##### -->
<para>

</para>

@window: 
@override_redirect: 


<!-- ##### FUNCTION gdk_window_set_accept_focus ##### -->
<para>

</para>

@window: 
@accept_focus: 


<!-- ##### FUNCTION gdk_window_get_accept_focus ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_focus_on_map ##### -->
<para>

</para>

@window: 
@focus_on_map: 


<!-- ##### FUNCTION gdk_window_get_focus_on_map ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_add_filter ##### -->
<para>

</para>

@window: 
@function: 
@data: 


<!-- ##### FUNCTION gdk_window_remove_filter ##### -->
<para>

</para>

@window: 
@function: 
@data: 


<!-- ##### USER_FUNCTION GdkFilterFunc ##### -->
<para>

</para>

@xevent: 
@event: 
@data: 
@Returns: 


<!-- ##### ENUM GdkFilterReturn ##### -->
<para>

</para>

@GDK_FILTER_CONTINUE: 
@GDK_FILTER_TRANSLATE: 
@GDK_FILTER_REMOVE: 

<!-- ##### TYPEDEF GdkXEvent ##### -->
<para>

</para>


<!-- ##### FUNCTION gdk_window_shape_combine_region ##### -->
<para>

</para>

@window: 
@shape_region: 
@offset_x: 
@offset_y: 


<!-- ##### FUNCTION gdk_window_set_child_shapes ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_merge_child_shapes ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_input_shape_combine_region ##### -->
<para>

</para>

@window: 
@shape_region: 
@offset_x: 
@offset_y: 


<!-- ##### FUNCTION gdk_window_set_child_input_shapes ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_merge_child_input_shapes ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_set_static_gravities ##### -->
<para>

</para>

@window: 
@use_static: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_title ##### -->
<para>

</para>

@window: 
@title: 


<!-- ##### FUNCTION gdk_window_set_background ##### -->
<para>

</para>

@window: 
@color: 


<!-- ##### FUNCTION gdk_window_set_background_rgba ##### -->
<para>

</para>

@window: 
@rgba: 


<!-- ##### FUNCTION gdk_window_set_background_pattern ##### -->
<para>

</para>

@window: 
@pattern: 


<!-- ##### FUNCTION gdk_window_get_background_pattern ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### MACRO GDK_PARENT_RELATIVE ##### -->
<para>

</para>



<!-- ##### FUNCTION gdk_window_set_cursor ##### -->
<para>

</para>

@window: 
@cursor: 


<!-- ##### FUNCTION gdk_window_get_cursor ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_user_data ##### -->
<para>

</para>

@window: 
@data: 


<!-- ##### FUNCTION gdk_window_get_geometry ##### -->
<para>

</para>

@window: 
@x: 
@y: 
@width: 
@height: 
@depth: 


<!-- ##### FUNCTION gdk_window_set_geometry_hints ##### -->
<para>

</para>

@window: 
@geometry: 
@geom_mask: 


<!-- ##### FUNCTION gdk_window_get_width ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_height ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_icon_list ##### -->
<para>

</para>

@window: 
@pixbufs: 


<!-- ##### FUNCTION gdk_window_set_modal_hint ##### -->
<para>

</para>

@window: 
@modal: 


<!-- ##### FUNCTION gdk_window_get_modal_hint ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_type_hint ##### -->
<para>

</para>

@window: 
@hint: 


<!-- ##### FUNCTION gdk_window_get_type_hint ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_skip_taskbar_hint ##### -->
<para>

</para>

@window: 
@skips_taskbar: 


<!-- ##### FUNCTION gdk_window_set_skip_pager_hint ##### -->
<para>

</para>

@window: 
@skips_pager: 


<!-- ##### FUNCTION gdk_window_set_urgency_hint ##### -->
<para>

</para>

@window: 
@urgent: 


<!-- ##### FUNCTION gdk_window_get_position ##### -->
<para>

</para>

@window: 
@x: 
@y: 


<!-- ##### FUNCTION gdk_window_get_root_origin ##### -->
<para>

</para>

@window: 
@x: 
@y: 


<!-- ##### FUNCTION gdk_window_get_frame_extents ##### -->
<para>

</para>

@window: 
@rect: 


<!-- ##### FUNCTION gdk_window_get_origin ##### -->
<para>

</para>

@window: 
@x: 
@y: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_root_coords ##### -->
<para>

</para>

@window: 
@x: 
@y: 
@root_x: 
@root_y: 


<!-- ##### FUNCTION gdk_window_get_pointer ##### -->
<para>

</para>

@window: 
@x: 
@y: 
@mask: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_device_position ##### -->
<para>

</para>

@window: 
@device: 
@x: 
@y: 
@mask: 
@Returns: 


<!-- ##### ENUM GdkModifierType ##### -->
<para>

</para>

@GDK_SHIFT_MASK: 
@GDK_LOCK_MASK: 
@GDK_CONTROL_MASK: 
@GDK_MOD1_MASK: 
@GDK_MOD2_MASK: 
@GDK_MOD3_MASK: 
@GDK_MOD4_MASK: 
@GDK_MOD5_MASK: 
@GDK_BUTTON1_MASK: 
@GDK_BUTTON2_MASK: 
@GDK_BUTTON3_MASK: 
@GDK_BUTTON4_MASK: 
@GDK_BUTTON5_MASK: 
@GDK_SUPER_MASK: 
@GDK_HYPER_MASK: 
@GDK_META_MASK: 
@GDK_RELEASE_MASK: 
@GDK_MODIFIER_MASK: 

<!-- ##### FUNCTION gdk_window_get_parent ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_toplevel ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_children ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_peek_children ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_events ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_events ##### -->
<para>

</para>

@window: 
@event_mask: 


<!-- ##### FUNCTION gdk_window_set_icon_name ##### -->
<para>

</para>

@window: 
@name: 


<!-- ##### FUNCTION gdk_window_set_transient_for ##### -->
<para>

</para>

@window: 
@parent: 


<!-- ##### FUNCTION gdk_window_set_role ##### -->
<para>

</para>

@window: 
@role: 


<!-- ##### FUNCTION gdk_window_set_startup_id ##### -->
<para>

</para>

@window: 
@startup_id: 


<!-- ##### FUNCTION gdk_window_set_group ##### -->
<para>

</para>

@window: 
@leader: 


<!-- ##### FUNCTION gdk_window_get_group ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_decorations ##### -->
<para>

</para>

@window: 
@decorations: 


<!-- ##### FUNCTION gdk_window_get_decorations ##### -->
<para>

</para>

@window: 
@decorations: 
@Returns: 


<!-- ##### ENUM GdkWMDecoration ##### -->
<para>

</para>

@GDK_DECOR_ALL: 
@GDK_DECOR_BORDER: 
@GDK_DECOR_RESIZEH: 
@GDK_DECOR_TITLE: 
@GDK_DECOR_MENU: 
@GDK_DECOR_MINIMIZE: 
@GDK_DECOR_MAXIMIZE: 

<!-- ##### FUNCTION gdk_window_set_functions ##### -->
<para>

</para>

@window: 
@functions: 


<!-- ##### ENUM GdkWMFunction ##### -->
<para>

</para>

@GDK_FUNC_ALL: 
@GDK_FUNC_RESIZE: 
@GDK_FUNC_MOVE: 
@GDK_FUNC_MINIMIZE: 
@GDK_FUNC_MAXIMIZE: 
@GDK_FUNC_CLOSE: 

<!-- ##### FUNCTION gdk_get_default_root_window ##### -->
<para>

</para>

@void: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_support_multidevice ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_support_multidevice ##### -->
<para>

</para>

@window: 
@support_multidevice: 


<!-- ##### FUNCTION gdk_window_get_device_cursor ##### -->
<para>

</para>

@window: 
@device: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_device_cursor ##### -->
<para>

</para>

@window: 
@device: 
@cursor: 


<!-- ##### FUNCTION gdk_window_get_device_events ##### -->
<para>

</para>

@window: 
@device: 
@Returns: 


<!-- ##### FUNCTION gdk_window_set_device_events ##### -->
<para>

</para>

@window: 
@device: 
@event_mask: 


<!-- ##### STRUCT GdkPointerHooks ##### -->
<para>

</para>

@get_pointer: 
@window_at_pointer: 

<!-- ##### FUNCTION gdk_set_pointer_hooks ##### -->
<para>

</para>

@new_hooks: 
@Returns: 


<!-- ##### FUNCTION gdk_offscreen_window_get_surface ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_offscreen_window_set_embedder ##### -->
<para>

</para>

@window: 
@embedder: 


<!-- ##### FUNCTION gdk_offscreen_window_get_embedder ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_geometry_changed ##### -->
<para>

</para>

@window: 


<!-- ##### FUNCTION gdk_window_coords_from_parent ##### -->
<para>

</para>

@window: 
@parent_x: 
@parent_y: 
@x: 
@y: 


<!-- ##### FUNCTION gdk_window_coords_to_parent ##### -->
<para>

</para>

@window: 
@x: 
@y: 
@parent_x: 
@parent_y: 


<!-- ##### FUNCTION gdk_window_get_effective_parent ##### -->
<para>

</para>

@window: 
@Returns: 


<!-- ##### FUNCTION gdk_window_get_effective_toplevel ##### -->
<para>

</para>

@window: 
@Returns: 


