From 406fd33a86597567a7775db8dadd97e2c0120578 Mon Sep 17 00:00:00 2001 From: Luca Bonavita Date: Sun, 24 Oct 2010 16:01:21 +0000 Subject: [PATCH 001/163] == addons == - new (and temporary) directory addons_extern/ to store external projects addons --- release/scripts/modules/bpy/utils.py | 11 +++++++++-- release/scripts/ui/space_userpref.py | 12 ++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py index d9229c2e761..d5da7cfa13c 100644 --- a/release/scripts/modules/bpy/utils.py +++ b/release/scripts/modules/bpy/utils.py @@ -477,8 +477,15 @@ def addon_reset_all(): """ Sets the addon state based on the user preferences. """ - - paths = script_paths("addons") + script_paths("addons_contrib") + + # RELEASE SCRIPTS: official scripts distributed in Blender releases + paths = script_paths("addons") + + # CONTRIB SCRIPTS: good for testing but not official scripts yet + paths += script_paths("addons_contrib") + + # EXTERN SCRIPTS: external projects scripts + paths += script_paths("addons_extern") for path in paths: _sys_path_ensure(path) diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py index 40bb5bc4b55..f4bf10e927b 100644 --- a/release/scripts/ui/space_userpref.py +++ b/release/scripts/ui/space_userpref.py @@ -831,13 +831,21 @@ class USERPREF_PT_addons(bpy.types.Panel): modules = [] loaded_modules = set() + + # RELEASE SCRIPTS: official scripts distributed in Blender releases paths = bpy.utils.script_paths("addons") - # if folder addons_contrib/ exists, scripts in there will be loaded + + # CONTRIB SCRIPTS: good for testing but not official scripts yet + # if folder addons_contrib/ exists, scripts in there will be loaded too paths += bpy.utils.script_paths("addons_contrib") + + # EXTERN SCRIPTS: external projects scripts + # if folder addons_extern/ exists, scripts in there will be loaded too + paths += bpy.utils.script_paths("addons_extern") if bpy.app.debug: t_main = time.time() - + # fake module importing def fake_module(mod_name, mod_path, speedy=True): if bpy.app.debug: From 2882c4b6efdadf935f14fb920a38e7ff2f5db55d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 02:30:16 +0000 Subject: [PATCH 002/163] move fly mode operator into its own file. --- .../editors/space_view3d/CMakeLists.txt | 1 + .../editors/space_view3d/view3d_edit.c | 21 +- .../editors/space_view3d/view3d_intern.h | 5 +- .../editors/space_view3d/view3d_view.c | 929 ------------------ 4 files changed, 23 insertions(+), 933 deletions(-) diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 855d770c784..fb086013798 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -44,6 +44,7 @@ SET(SRC view3d_buttons.c view3d_draw.c view3d_edit.c + view3d_fly.c view3d_header.c view3d_ops.c view3d_select.c diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index a5cca6341f6..42767d98c80 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -3051,6 +3051,21 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode)) // XXX scrarea_do_windraw(curarea); } - - - +/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist + * basically the same as... + * rv3d->persp= RV3D_PERSP + * setviewmatrixview3d(scene, v3d, rv3d); + * setcameratoview3d(v3d, rv3d, v3d->camera); + * ...but less of a hassle + * */ +void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4]) +{ + float qt[4], dvec[3]; + copy_qt_qt(qt, rv3d->viewquat); + qt[0]= -qt[0]; + quat_to_mat4(mat, qt); + mat[3][2] -= rv3d->dist; + translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); + mul_v3_v3fl(dvec, mat[2], -rv3d->dist); + sub_v3_v3v3(mat[3], dvec, rv3d->ofs); +} diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index e81d0b87589..0cba387169a 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -91,6 +91,10 @@ void VIEW3D_OT_zoom_border(struct wmOperatorType *ot); void VIEW3D_OT_drawtype(struct wmOperatorType *ot); void view3d_boxview_copy(ScrArea *sa, ARegion *ar); +void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]); + +/* view3d_fly.c */ +void VIEW3D_OT_fly(struct wmOperatorType *ot); /* drawanim.c */ void draw_motion_paths_init(View3D *v3d, struct ARegion *ar); @@ -150,7 +154,6 @@ void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot); void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot); void VIEW3D_OT_localview(struct wmOperatorType *ot); void VIEW3D_OT_game_start(struct wmOperatorType *ot); -void VIEW3D_OT_fly(struct wmOperatorType *ot); int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 15e04f31f2f..5849d65cb6e 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -26,12 +26,6 @@ * ***** END GPL LICENSE BLOCK ***** */ -#include -#include -#include -#include - -#include "DNA_anim_types.h" #include "DNA_camera_types.h" #include "DNA_lamp_types.h" #include "DNA_scene_types.h" @@ -40,9 +34,6 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" -#include "BLI_blenlib.h" -#include "BLI_editVert.h" -#include "BLI_rand.h" #include "BKE_anim.h" #include "BKE_action.h" @@ -51,9 +42,6 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_report.h" -#include "BKE_scene.h" -#include "BKE_depsgraph.h" /* for fly mode updating */ - #include "BIF_gl.h" #include "BIF_glutil.h" @@ -61,15 +49,8 @@ #include "WM_api.h" #include "WM_types.h" -#include "ED_keyframing.h" #include "ED_screen.h" #include "ED_armature.h" -#include "ED_space_api.h" - -#include "GPU_draw.h" - - -#include "PIL_time.h" /* smoothview */ #if GAMEBLENDER == 1 #include "SYS_System.h" @@ -1175,25 +1156,6 @@ static void view3d_viewlock(RegionView3D *rv3d) } } -/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist - * basically the same as... - * rv3d->persp= RV3D_PERSP - * setviewmatrixview3d(scene, v3d, rv3d); - * setcameratoview3d(v3d, rv3d, v3d->camera); - * ...but less of a hassle - * */ -static void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4]) -{ - float qt[4], dvec[3]; - copy_qt_qt(qt, rv3d->viewquat); - qt[0]= -qt[0]; - quat_to_mat4(mat, qt); - mat[3][2] -= rv3d->dist; - translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); - mul_v3_v3fl(dvec, mat[2], -rv3d->dist); - sub_v3_v3v3(mat[3], dvec, rv3d->ofs); -} - /* dont set windows active in in here, is used by renderwin too */ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) { @@ -1850,897 +1812,6 @@ void VIEW3D_OT_game_start(wmOperatorType *ot) ot->poll= game_engine_poll; } - -/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ -#define FLY_MODAL_CANCEL 1 -#define FLY_MODAL_CONFIRM 2 -#define FLY_MODAL_ACCELERATE 3 -#define FLY_MODAL_DECELERATE 4 -#define FLY_MODAL_PAN_ENABLE 5 -#define FLY_MODAL_PAN_DISABLE 6 -#define FLY_MODAL_DIR_FORWARD 7 -#define FLY_MODAL_DIR_BACKWARD 8 -#define FLY_MODAL_DIR_LEFT 9 -#define FLY_MODAL_DIR_RIGHT 10 -#define FLY_MODAL_DIR_UP 11 -#define FLY_MODAL_DIR_DOWN 12 -#define FLY_MODAL_AXIS_LOCK_X 13 -#define FLY_MODAL_AXIS_LOCK_Z 14 -#define FLY_MODAL_PRECISION_ENABLE 15 -#define FLY_MODAL_PRECISION_DISABLE 16 - -/* called in transform_ops.c, on each regeneration of keymaps */ -void fly_modal_keymap(wmKeyConfig *keyconf) -{ - static EnumPropertyItem modal_items[] = { - {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, - {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, - {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""}, - {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""}, - - {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""}, - {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""}, - - {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""}, - {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""}, - {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""}, - {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""}, - {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""}, - {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""}, - - {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"}, - {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"}, - - {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""}, - {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""}, - - {0, NULL, 0, NULL, NULL}}; - - wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal"); - - /* this function is called for each spacetype, only needs to add map once */ - if(keymap) return; - - keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items); - - /* items for modal map */ - WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL); - WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL); - - WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - - WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); - WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); - WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); - WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); - - WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE); - WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */ - - /* WASD */ - WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD); - WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD); - WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT); - WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT); - WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP); - WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN); - - WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X); - WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z); - - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE); - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE); - - /* assign map to operators */ - WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly"); - -} - -typedef struct FlyInfo { - /* context stuff */ - RegionView3D *rv3d; - View3D *v3d; - ARegion *ar; - Scene *scene; - - wmTimer *timer; /* needed for redraws */ - - short state; - short use_precision; - short redraw; - short mval[2]; - - /* fly state state */ - float speed; /* the speed the view is moving per redraw */ - short axis; /* Axis index to move allong by default Z to move allong the view */ - short pan_view; /* when true, pan the view instead of rotating */ - - /* relative view axis locking - xlock, zlock - 0; disabled - 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed - when the mouse moves, locking is set to 2 so checks are done. - 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */ - short xlock, zlock; - float xlock_momentum, zlock_momentum; /* nicer dynamics */ - float grid; /* world scale 1.0 default */ - - /* root most parent */ - Object *root_parent; - - /* backup values */ - float dist_backup; /* backup the views distance since we use a zero dist for fly mode */ - float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */ - float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */ - short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ - - void *obtfm; /* backup the objects transform */ - - /* compare between last state */ - double time_lastwheel; /* used to accelerate when using the mousewheel a lot */ - double time_lastdraw; /* time between draws */ - - void *draw_handle_pixel; - - /* use for some lag */ - float dvec_prev[3]; /* old for some lag */ - -} FlyInfo; - -static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg) -{ - FlyInfo *fly = arg; - - /* draws 4 edge brackets that frame the safe area where the - mouse can move during fly mode without spinning the view */ - float x1, x2, y1, y2; - - x1= 0.45*(float)fly->ar->winx; - y1= 0.45*(float)fly->ar->winy; - x2= 0.55*(float)fly->ar->winx; - y2= 0.55*(float)fly->ar->winy; - cpack(0); - - - glBegin(GL_LINES); - /* bottom left */ - glVertex2f(x1,y1); - glVertex2f(x1,y1+5); - - glVertex2f(x1,y1); - glVertex2f(x1+5,y1); - - /* top right */ - glVertex2f(x2,y2); - glVertex2f(x2,y2-5); - - glVertex2f(x2,y2); - glVertex2f(x2-5,y2); - - /* top left */ - glVertex2f(x1,y2); - glVertex2f(x1,y2-5); - - glVertex2f(x1,y2); - glVertex2f(x1+5,y2); - - /* bottom right */ - glVertex2f(x2,y1); - glVertex2f(x2,y1+5); - - glVertex2f(x2,y1); - glVertex2f(x2-5,y1); - glEnd(); -} - -/* FlyInfo->state */ -#define FLY_RUNNING 0 -#define FLY_CANCEL 1 -#define FLY_CONFIRM 2 - -static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) -{ - float upvec[3]; // tmp - float mat[3][3]; - - fly->rv3d= CTX_wm_region_view3d(C); - fly->v3d = CTX_wm_view3d(C); - fly->ar = CTX_wm_region(C); - fly->scene= CTX_data_scene(C); - - if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library"); - return FALSE; - } - - if(fly->v3d->ob_centre) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object"); - return FALSE; - } - - if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints"); - return FALSE; - } - - fly->state= FLY_RUNNING; - fly->speed= 0.0f; - fly->axis= 2; - fly->pan_view= FALSE; - fly->xlock= FALSE; - fly->zlock= FALSE; - fly->xlock_momentum=0.0f; - fly->zlock_momentum=0.0f; - fly->grid= 1.0f; - fly->use_precision= 0; - - fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f; - - fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); - - fly->mval[0] = event->x - fly->ar->winrct.xmin; - fly->mval[1] = event->y - fly->ar->winrct.ymin; - - - fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); - - fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL); - - fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */ - - /* detect weather to start with Z locking */ - upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; - copy_m3_m4(mat, fly->rv3d->viewinv); - mul_m3_v3(mat, upvec); - if (fabs(upvec[2]) < 0.1) - fly->zlock = 1; - upvec[0]=0; upvec[1]=0; upvec[2]=0; - - fly->persp_backup= fly->rv3d->persp; - fly->dist_backup= fly->rv3d->dist; - if (fly->rv3d->persp==RV3D_CAMOB) { - Object *ob_back; - if((fly->root_parent=fly->v3d->camera->parent)) { - while(fly->root_parent->parent) - fly->root_parent= fly->root_parent->parent; - ob_back= fly->root_parent; - } - else { - ob_back= fly->v3d->camera; - } - - /* store the original camera loc and rot */ - /* TODO. axis angle etc */ - - fly->obtfm= object_tfm_backup(ob_back); - - where_is_object(fly->scene, fly->v3d->camera); - negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]); - - fly->rv3d->dist=0.0; - } else { - /* perspective or ortho */ - if (fly->rv3d->persp==RV3D_ORTHO) - fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */ - copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat); - copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs); - fly->rv3d->dist= 0.0f; - - upvec[2]= fly->dist_backup; /*x and y are 0*/ - mul_m3_v3(mat, upvec); - sub_v3_v3(fly->rv3d->ofs, upvec); - /*Done with correcting for the dist*/ - } - - - /* center the mouse, probably the UI mafia are against this but without its quite annoying */ - WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2); - - return 1; -} - -static int flyEnd(bContext *C, FlyInfo *fly) -{ - RegionView3D *rv3d= fly->rv3d; - View3D *v3d = fly->v3d; - - float upvec[3]; - - if(fly->state == FLY_RUNNING) - return OPERATOR_RUNNING_MODAL; - - WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer); - - ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel); - - rv3d->dist= fly->dist_backup; - - if (fly->state == FLY_CANCEL) { - /* Revert to original view? */ - if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */ - Object *ob_back; - if(fly->root_parent)ob_back= fly->root_parent; - else ob_back= fly->v3d->camera; - - /* store the original camera loc and rot */ - object_tfm_restore(ob_back, fly->obtfm); - - DAG_id_flush_update(&ob_back->id, OB_RECALC_OB); - } else { - /* Non Camera we need to reset the view back to the original location bacause the user canceled*/ - copy_qt_qt(rv3d->viewquat, fly->rot_backup); - copy_v3_v3(rv3d->ofs, fly->ofs_backup); - rv3d->persp= fly->persp_backup; - } - } - else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ - float mat3[3][3]; - if(fly->root_parent) { - DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB); - } - else { - copy_m3_m4(mat3, v3d->camera->obmat); - object_mat3_to_rot(v3d->camera, mat3, TRUE); - DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); - } - } - else { /* not camera */ - /* Apply the fly mode view */ - /*restore the dist*/ - float mat[3][3]; - upvec[0]= upvec[1]= 0; - upvec[2]= fly->dist_backup; /*x and y are 0*/ - copy_m3_m4(mat, rv3d->viewinv); - mul_m3_v3(mat, upvec); - add_v3_v3(rv3d->ofs, upvec); - /*Done with correcting for the dist */ - } - - rv3d->rflag &= ~RV3D_NAVIGATING; -//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ - - if(fly->obtfm) - MEM_freeN(fly->obtfm); - - if(fly->state == FLY_CONFIRM) { - MEM_freeN(fly); - return OPERATOR_FINISHED; - } - - MEM_freeN(fly); - return OPERATOR_CANCELLED; -} - -static void flyEvent(FlyInfo *fly, wmEvent *event) -{ - if (event->type == TIMER && event->customdata == fly->timer) { - fly->redraw = 1; - } - else if (event->type == MOUSEMOVE) { - fly->mval[0] = event->x - fly->ar->winrct.xmin; - fly->mval[1] = event->y - fly->ar->winrct.ymin; - } /* handle modal keymap first */ - else if (event->type == EVT_MODAL_MAP) { - switch (event->val) { - case FLY_MODAL_CANCEL: - fly->state = FLY_CANCEL; - break; - case FLY_MODAL_CONFIRM: - fly->state = FLY_CONFIRM; - break; - - case FLY_MODAL_ACCELERATE: - { - double time_currwheel; - float time_wheel; - - time_currwheel= PIL_check_seconds_timer(); - time_wheel = (float)(time_currwheel - fly->time_lastwheel); - fly->time_lastwheel = time_currwheel; - /*printf("Wheel %f\n", time_wheel);*/ - /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/ - time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ - - if (fly->speed<0.0f) fly->speed= 0.0f; - else { - if (event->shift) - fly->speed+= fly->grid*time_wheel*0.1; - else - fly->speed+= fly->grid*time_wheel; - } - break; - } - case FLY_MODAL_DECELERATE: - { - double time_currwheel; - float time_wheel; - - time_currwheel= PIL_check_seconds_timer(); - time_wheel = (float)(time_currwheel - fly->time_lastwheel); - fly->time_lastwheel = time_currwheel; - time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ - - if (fly->speed>0) fly->speed=0; - else { - if (event->shift) - fly->speed-= fly->grid*time_wheel*0.1; - else - fly->speed-= fly->grid*time_wheel; - } - break; - } - case FLY_MODAL_PAN_ENABLE: - fly->pan_view= TRUE; - break; - case FLY_MODAL_PAN_DISABLE: -//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]); - fly->pan_view= FALSE; - break; - - /* impliment WASD keys */ - case FLY_MODAL_DIR_FORWARD: - if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */ - else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ - fly->axis= 2; - break; - case FLY_MODAL_DIR_BACKWARD: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==2) fly->speed -= fly->grid; - fly->axis= 2; - break; - case FLY_MODAL_DIR_LEFT: - if (fly->speed < 0.0f) fly->speed= -fly->speed; - else if (fly->axis==0) fly->speed += fly->grid; - fly->axis= 0; - break; - case FLY_MODAL_DIR_RIGHT: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==0) fly->speed -= fly->grid; - fly->axis= 0; - break; - case FLY_MODAL_DIR_DOWN: - if (fly->speed < 0.0f) fly->speed= -fly->speed; - else if (fly->axis==1) fly->speed += fly->grid; - fly->axis= 1; - break; - case FLY_MODAL_DIR_UP: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==1) fly->speed -= fly->grid; - fly->axis= 1; - break; - - case FLY_MODAL_AXIS_LOCK_X: - if (fly->xlock) fly->xlock=0; - else { - fly->xlock = 2; - fly->xlock_momentum = 0.0; - } - break; - case FLY_MODAL_AXIS_LOCK_Z: - if (fly->zlock) fly->zlock=0; - else { - fly->zlock = 2; - fly->zlock_momentum = 0.0; - } - break; - - case FLY_MODAL_PRECISION_ENABLE: - fly->use_precision= TRUE; - break; - case FLY_MODAL_PRECISION_DISABLE: - fly->use_precision= FALSE; - break; - - } - } -} - -static int flyApply(bContext *C, FlyInfo *fly) -{ - -#define FLY_ROTATE_FAC 2.5f /* more is faster */ -#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */ -#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */ - - /* - fly mode - Shift+F - a fly loop where the user can move move the view as if they are flying - */ - RegionView3D *rv3d= fly->rv3d; - View3D *v3d = fly->v3d; - ARegion *ar = fly->ar; - Scene *scene= fly->scene; - - float prev_view_mat[4][4]; - - float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */ - dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */ - - /* Camera Uprighting variables */ - upvec[3]={0,0,0}, /* stores the view's up vector */ - - moffset[2], /* mouse offset from the views center */ - tmp_quat[4]; /* used for rotating the view */ - - int cent_orig[2], /* view center */ -//XXX- can avoid using // cent[2], /* view center modified */ - xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */ - unsigned char - apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/ - - if(fly->root_parent) - view3d_persp_mat4(rv3d, prev_view_mat); - - /* the dist defines a vector that is infront of the offset - to rotate the view about. - this is no good for fly mode because we - want to rotate about the viewers center. - but to correct the dist removal we must - alter offset so the view doesn't jump. */ - - xmargin= ar->winx/20.0f; - ymargin= ar->winy/20.0f; - - cent_orig[0]= ar->winrct.xmin + ar->winx/2; - cent_orig[1]= ar->winrct.ymin + ar->winy/2; - - { - - /* mouse offset from the center */ - moffset[0]= fly->mval[0]- ar->winx/2; - moffset[1]= fly->mval[1]- ar->winy/2; - - /* enforce a view margin */ - if (moffset[0]>xmargin) moffset[0]-=xmargin; - else if (moffset[0] < -xmargin) moffset[0]+=xmargin; - else moffset[0]=0; - - if (moffset[1]>ymargin) moffset[1]-=ymargin; - else if (moffset[1] < -ymargin) moffset[1]+=ymargin; - else moffset[1]=0; - - - /* scale the mouse movement by this value - scales mouse movement to the view size - * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y) - * - * the mouse moves isnt linear */ - - if(moffset[0]) { - moffset[0] /= ar->winx - (xmargin*2); - moffset[0] *= fabs(moffset[0]); - } - - if(moffset[1]) { - moffset[1] /= ar->winy - (ymargin*2); - moffset[1] *= fabs(moffset[1]); - } - - /* Should we redraw? */ - if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) { - float dvec_tmp[3]; - double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */ - float time_redraw_clamped; - - time_current= PIL_check_seconds_timer(); - time_redraw= (float)(time_current - fly->time_lastdraw); - time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */ - fly->time_lastdraw= time_current; - /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */ - - /* Scale the time to use shift to scale the speed down- just like - shift slows many other areas of blender down */ - if (fly->use_precision) - fly->speed= fly->speed * (1.0f-time_redraw_clamped); - - copy_m3_m4(mat, rv3d->viewinv); - - if (fly->pan_view==TRUE) { - /* pan only */ - dvec_tmp[0]= -moffset[0]; - dvec_tmp[1]= -moffset[1]; - dvec_tmp[2]= 0; - - if (fly->use_precision) { - dvec_tmp[0] *= 0.1; - dvec_tmp[1] *= 0.1; - } - - mul_m3_v3(mat, dvec_tmp); - mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid); - - } else { - float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/ - - /* rotate about the X axis- look up/down */ - if (moffset[1]) { - upvec[0]=1; - upvec[1]=0; - upvec[2]=0; - mul_m3_v3(mat, upvec); - axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - if (fly->xlock) fly->xlock = 2; /*check for rotation*/ - if (fly->zlock) fly->zlock = 2; - fly->xlock_momentum= 0.0f; - } - - /* rotate about the Y axis- look left/right */ - if (moffset[0]) { - - /* if we're upside down invert the moffset */ - upvec[0]=0; - upvec[1]=1; - upvec[2]=0; - mul_m3_v3(mat, upvec); - - if(upvec[2] < 0.0f) - moffset[0]= -moffset[0]; - - /* make the lock vectors */ - if (fly->zlock) { - upvec[0]=0; - upvec[1]=0; - upvec[2]=1; - } else { - upvec[0]=0; - upvec[1]=1; - upvec[2]=0; - mul_m3_v3(mat, upvec); - } - - axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - if (fly->xlock) fly->xlock = 2;/*check for rotation*/ - if (fly->zlock) fly->zlock = 2; - } - - if (fly->zlock==2) { - upvec[0]=1; - upvec[1]=0; - upvec[2]=0; - mul_m3_v3(mat, upvec); - - /*make sure we have some z rolling*/ - if (fabs(upvec[2]) > 0.00001f) { - roll= upvec[2]*5; - upvec[0]=0; /*rotate the view about this axis*/ - upvec[1]=0; - upvec[2]=1; - - mul_m3_v3(mat, upvec); - axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL; - } else { - fly->zlock=1; /* dont check until the view rotates again */ - fly->zlock_momentum= 0.0f; - } - } - - if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/ - upvec[0]=0; - upvec[1]=0; - upvec[2]=1; - mul_m3_v3(mat, upvec); - /*make sure we have some z rolling*/ - if (fabs(upvec[2]) > 0.00001) { - roll= upvec[2] * -5; - - upvec[0]= 1.0f; /*rotate the view about this axis*/ - upvec[1]= 0.0f; - upvec[2]= 0.0f; - - mul_m3_v3(mat, upvec); - - axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - fly->xlock_momentum += 0.05f; - } else { - fly->xlock=1; /* see above */ - fly->xlock_momentum= 0.0f; - } - } - - - if (apply_rotation) { - /* Normal operation */ - /* define dvec, view direction vector */ - dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f; - /* move along the current axis */ - dvec_tmp[fly->axis]= 1.0f; - - mul_m3_v3(mat, dvec_tmp); - - mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f); - } - } - - /* impose a directional lag */ - interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); - - if (rv3d->persp==RV3D_CAMOB) { - Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera; - if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0; - if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0; - if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0; - } - - add_v3_v3(rv3d->ofs, dvec); - - /* todo, dynamic keys */ -#if 0 - if (fly->zlock && fly->xlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else if (fly->zlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else if (fly->xlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); -#endif - - /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */ - if (rv3d->persp==RV3D_CAMOB) { - ID *id_key; - /* transform the parent or the camera? */ - if(fly->root_parent) { - Object *ob_update; - - float view_mat[4][4]; - float prev_view_imat[4][4]; - float diff_mat[4][4]; - float parent_mat[4][4]; - - invert_m4_m4(prev_view_imat, prev_view_mat); - view3d_persp_mat4(rv3d, view_mat); - mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); - mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); - object_apply_mat4(fly->root_parent, parent_mat); - - // where_is_object(scene, fly->root_parent); - - ob_update= v3d->camera->parent; - while(ob_update) { - DAG_id_flush_update(&ob_update->id, OB_RECALC_OB); - ob_update= ob_update->parent; - } - - copy_m4_m4(prev_view_mat, view_mat); - - id_key= &fly->root_parent->id; - - } - else { - float view_mat[4][4]; - view3d_persp_mat4(rv3d, view_mat); - object_apply_mat4(v3d->camera, view_mat); - id_key= &v3d->camera->id; - } - - /* record the motion */ - if (autokeyframe_cfra_can_key(scene, id_key)) { - ListBase dsources = {NULL, NULL}; - - /* add datasource override for the camera object */ - ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL); - - /* insert keyframes - * 1) on the first frame - * 2) on each subsequent frame - * TODO: need to check in future that frame changed before doing this - */ - if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation"); - ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); - } - if (fly->speed) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location"); - ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); - } - - /* free temp data */ - BLI_freelistN(&dsources); - } - } - } else - /*were not redrawing but we need to update the time else the view will jump */ - fly->time_lastdraw= PIL_check_seconds_timer(); - /* end drawing */ - copy_v3_v3(fly->dvec_prev, dvec); - } - -/* moved to flyEnd() */ - - return OPERATOR_FINISHED; -} - - - -static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - RegionView3D *rv3d= CTX_wm_region_view3d(C); - FlyInfo *fly; - - if(rv3d->viewlock) - return OPERATOR_CANCELLED; - - fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation"); - - op->customdata= fly; - - if(initFlyInfo(C, fly, op, event)==FALSE) { - MEM_freeN(op->customdata); - return OPERATOR_CANCELLED; - } - - flyEvent(fly, event); - - WM_event_add_modal_handler(C, op); - - return OPERATOR_RUNNING_MODAL; -} - -static int fly_cancel(bContext *C, wmOperator *op) -{ - FlyInfo *fly = op->customdata; - - fly->state = FLY_CANCEL; - flyEnd(C, fly); - op->customdata= NULL; - - return OPERATOR_CANCELLED; -} - -static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) -{ - int exit_code; - - FlyInfo *fly = op->customdata; - - fly->redraw= 0; - - flyEvent(fly, event); - - if(event->type==TIMER && event->customdata == fly->timer) - flyApply(C, fly); - - if(fly->redraw) { - ED_region_tag_redraw(CTX_wm_region(C)); - } - - exit_code = flyEnd(C, fly); - - if(exit_code!=OPERATOR_RUNNING_MODAL) - ED_region_tag_redraw(CTX_wm_region(C)); - - return exit_code; -} - -void VIEW3D_OT_fly(wmOperatorType *ot) -{ - - /* identifiers */ - ot->name= "Fly Navigation"; - ot->description= "Interactively fly around the scene"; - ot->idname= "VIEW3D_OT_fly"; - - /* api callbacks */ - ot->invoke= fly_invoke; - ot->cancel= fly_cancel; - ot->modal= fly_modal; - ot->poll= ED_operator_view3d_active; - - /* flags */ - ot->flag= OPTYPE_BLOCKING; - -} - /* ************************************** */ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, float vec[3]) From acef2ca4c5cc1dcdff0edc7af79f8772186a2c3d Mon Sep 17 00:00:00 2001 From: Nicholas Bishop Date: Mon, 25 Oct 2010 02:58:32 +0000 Subject: [PATCH 003/163] Closing #24367 (Incorrect behaviour for Optimal Display option) and reopening #22634 (sculpting/multires and wireframe display mode glitches) * Reverting my earlier changes to subsurf edge drawing; seems to be causing more bugs than the minor bug it fixed. --- .../blender/blenkernel/intern/subsurf_ccg.c | 85 +++++++++---------- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 51cee333370..26bd981db4a 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -1146,74 +1146,71 @@ static void ccgDM_drawVerts(DerivedMesh *dm) { ccgFaceIterator_free(fi); glEnd(); } - static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges, int UNUSED(drawAllEdges)) { CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; CCGSubSurf *ss = ccgdm->ss; - CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss); + CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); + int i, edgeSize = ccgSubSurf_getEdgeSize(ss); int gridSize = ccgSubSurf_getGridSize(ss); - int edgeSize = ccgSubSurf_getEdgeSize(ss); - int step; int useAging; ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL); - /* nothing to do */ - if(!drawLooseEdges && !ccgdm->drawInteriorEdges) - return; + for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) { + CCGEdge *e = ccgEdgeIterator_getCurrent(ei); + DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e); + + if (!drawLooseEdges && !ccgSubSurf_getEdgeNumFaces(e)) + continue; + + if (useAging && !(G.f&G_BACKBUFSEL)) { + int ageCol = 255-ccgSubSurf_getEdgeAge(ss, e)*4; + glColor3ub(0, ageCol>0?ageCol:0, 0); + } + + glBegin(GL_LINE_STRIP); + for (i=0; idrawInteriorEdges) - step = 1; - else - step = gridSize - 1; + if (ccgdm->drawInteriorEdges) { + for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) { + CCGFace *f = ccgFaceIterator_getCurrent(fi); + int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); - /* draw edges using face grids */ - for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) { - CCGFace *f = ccgFaceIterator_getCurrent(fi); - int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f); + for (S=0; S Date: Mon, 25 Oct 2010 06:59:18 +0000 Subject: [PATCH 004/163] first part of bugfix [#24376] Fly mode disturbs the rotation or scale of the camera object object_apply_mat4 was incorrectly negating the matrix values, This worked in most cases but even when it worked would end up with negative scales too often. now when no negative scale is used they will all stay positive and from my tests it works in all cases now. --- source/blender/blenkernel/intern/object.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 142e41918dd..96f90473814 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1709,11 +1709,13 @@ void object_apply_mat4(Object *ob, float mat[][4]) * for these together since they are related. */ copy_m3_m4(mat3, mat); /* so scale doesnt interfear with rotation [#24291] */ + /* note: this is a workaround for negative matrix not working for rotation conversion, FIXME */ normalize_m3_m3(mat3_n, (const float(*)[3])mat3); - if(mat3_n[0][0] < 0.0f) negate_v3(mat3_n[0]); - if(mat3_n[1][1] < 0.0f) negate_v3(mat3_n[1]); - if(mat3_n[2][2] < 0.0f) negate_v3(mat3_n[2]); - + if(is_negative_m3(mat3_n)) { + negate_v3(mat3_n[0]); + negate_v3(mat3_n[1]); + negate_v3(mat3_n[2]); + } /* rotation */ object_mat3_to_rot(ob, mat3_n, 0); From 3320b6fdd6ac436ffa55567d0577791ffa5e736c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 07:09:38 +0000 Subject: [PATCH 005/163] missed adding the file when moving fly mode. --- .../blender/editors/space_view3d/view3d_fly.c | 941 ++++++++++++++++++ 1 file changed, 941 insertions(+) create mode 100644 source/blender/editors/space_view3d/view3d_fly.c diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c new file mode 100644 index 00000000000..db83cd4b364 --- /dev/null +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -0,0 +1,941 @@ +/** + * $Id: view3d_view.c 32630 2010-10-21 09:02:21Z campbellbarton $ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/* defines VIEW3D_OT_fly modal operator */ + +#include "DNA_anim_types.h" +#include "DNA_scene_types.h" +#include "DNA_object_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_math.h" +#include "BLI_blenlib.h" + +#include "BKE_context.h" +#include "BKE_object.h" +#include "BKE_report.h" + +#include "BKE_depsgraph.h" /* for fly mode updating */ + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_keyframing.h" +#include "ED_screen.h" +#include "ED_space_api.h" + +#include "PIL_time.h" /* smoothview */ + +#include "view3d_intern.h" // own include + +/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ +#define FLY_MODAL_CANCEL 1 +#define FLY_MODAL_CONFIRM 2 +#define FLY_MODAL_ACCELERATE 3 +#define FLY_MODAL_DECELERATE 4 +#define FLY_MODAL_PAN_ENABLE 5 +#define FLY_MODAL_PAN_DISABLE 6 +#define FLY_MODAL_DIR_FORWARD 7 +#define FLY_MODAL_DIR_BACKWARD 8 +#define FLY_MODAL_DIR_LEFT 9 +#define FLY_MODAL_DIR_RIGHT 10 +#define FLY_MODAL_DIR_UP 11 +#define FLY_MODAL_DIR_DOWN 12 +#define FLY_MODAL_AXIS_LOCK_X 13 +#define FLY_MODAL_AXIS_LOCK_Z 14 +#define FLY_MODAL_PRECISION_ENABLE 15 +#define FLY_MODAL_PRECISION_DISABLE 16 + +/* called in transform_ops.c, on each regeneration of keymaps */ +void fly_modal_keymap(wmKeyConfig *keyconf) +{ + static EnumPropertyItem modal_items[] = { + {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, + {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, + {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""}, + {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""}, + + {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""}, + {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""}, + + {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""}, + {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""}, + {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""}, + {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""}, + {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""}, + {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""}, + + {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"}, + {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"}, + + {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""}, + {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""}, + + {0, NULL, 0, NULL, NULL}}; + + wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal"); + + /* this function is called for each spacetype, only needs to add map once */ + if(keymap) return; + + keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items); + + /* items for modal map */ + WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL); + + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + + WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); + WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); + WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); + WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); + + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE); + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */ + + /* WASD */ + WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD); + WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD); + WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT); + WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT); + WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP); + WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN); + + WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X); + WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z); + + WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE); + WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE); + + /* assign map to operators */ + WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly"); + +} + +typedef struct FlyInfo { + /* context stuff */ + RegionView3D *rv3d; + View3D *v3d; + ARegion *ar; + Scene *scene; + + wmTimer *timer; /* needed for redraws */ + + short state; + short use_precision; + short redraw; + short mval[2]; + + /* fly state state */ + float speed; /* the speed the view is moving per redraw */ + short axis; /* Axis index to move allong by default Z to move allong the view */ + short pan_view; /* when true, pan the view instead of rotating */ + + /* relative view axis locking - xlock, zlock + 0; disabled + 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed + when the mouse moves, locking is set to 2 so checks are done. + 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */ + short xlock, zlock; + float xlock_momentum, zlock_momentum; /* nicer dynamics */ + float grid; /* world scale 1.0 default */ + + /* root most parent */ + Object *root_parent; + + /* backup values */ + float dist_backup; /* backup the views distance since we use a zero dist for fly mode */ + float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */ + float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */ + short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ + + void *obtfm; /* backup the objects transform */ + + /* compare between last state */ + double time_lastwheel; /* used to accelerate when using the mousewheel a lot */ + double time_lastdraw; /* time between draws */ + + void *draw_handle_pixel; + + /* use for some lag */ + float dvec_prev[3]; /* old for some lag */ + +} FlyInfo; + +static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg) +{ + FlyInfo *fly = arg; + + /* draws 4 edge brackets that frame the safe area where the + mouse can move during fly mode without spinning the view */ + float x1, x2, y1, y2; + + x1= 0.45*(float)fly->ar->winx; + y1= 0.45*(float)fly->ar->winy; + x2= 0.55*(float)fly->ar->winx; + y2= 0.55*(float)fly->ar->winy; + cpack(0); + + + glBegin(GL_LINES); + /* bottom left */ + glVertex2f(x1,y1); + glVertex2f(x1,y1+5); + + glVertex2f(x1,y1); + glVertex2f(x1+5,y1); + + /* top right */ + glVertex2f(x2,y2); + glVertex2f(x2,y2-5); + + glVertex2f(x2,y2); + glVertex2f(x2-5,y2); + + /* top left */ + glVertex2f(x1,y2); + glVertex2f(x1,y2-5); + + glVertex2f(x1,y2); + glVertex2f(x1+5,y2); + + /* bottom right */ + glVertex2f(x2,y1); + glVertex2f(x2,y1+5); + + glVertex2f(x2,y1); + glVertex2f(x2-5,y1); + glEnd(); +} + +/* FlyInfo->state */ +#define FLY_RUNNING 0 +#define FLY_CANCEL 1 +#define FLY_CONFIRM 2 + +static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) +{ + float upvec[3]; // tmp + float mat[3][3]; + + fly->rv3d= CTX_wm_region_view3d(C); + fly->v3d = CTX_wm_view3d(C); + fly->ar = CTX_wm_region(C); + fly->scene= CTX_data_scene(C); + + if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library"); + return FALSE; + } + + if(fly->v3d->ob_centre) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object"); + return FALSE; + } + + if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints"); + return FALSE; + } + + fly->state= FLY_RUNNING; + fly->speed= 0.0f; + fly->axis= 2; + fly->pan_view= FALSE; + fly->xlock= FALSE; + fly->zlock= FALSE; + fly->xlock_momentum=0.0f; + fly->zlock_momentum=0.0f; + fly->grid= 1.0f; + fly->use_precision= 0; + + fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f; + + fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); + + fly->mval[0] = event->x - fly->ar->winrct.xmin; + fly->mval[1] = event->y - fly->ar->winrct.ymin; + + + fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); + + fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL); + + fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */ + + /* detect weather to start with Z locking */ + upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; + copy_m3_m4(mat, fly->rv3d->viewinv); + mul_m3_v3(mat, upvec); + if (fabs(upvec[2]) < 0.1) + fly->zlock = 1; + upvec[0]=0; upvec[1]=0; upvec[2]=0; + + fly->persp_backup= fly->rv3d->persp; + fly->dist_backup= fly->rv3d->dist; + if (fly->rv3d->persp==RV3D_CAMOB) { + Object *ob_back; + if((fly->root_parent=fly->v3d->camera->parent)) { + while(fly->root_parent->parent) + fly->root_parent= fly->root_parent->parent; + ob_back= fly->root_parent; + } + else { + ob_back= fly->v3d->camera; + } + + /* store the original camera loc and rot */ + /* TODO. axis angle etc */ + + fly->obtfm= object_tfm_backup(ob_back); + + where_is_object(fly->scene, fly->v3d->camera); + negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]); + + fly->rv3d->dist=0.0; + } else { + /* perspective or ortho */ + if (fly->rv3d->persp==RV3D_ORTHO) + fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */ + copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat); + copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs); + fly->rv3d->dist= 0.0f; + + upvec[2]= fly->dist_backup; /*x and y are 0*/ + mul_m3_v3(mat, upvec); + sub_v3_v3(fly->rv3d->ofs, upvec); + /*Done with correcting for the dist*/ + } + + + /* center the mouse, probably the UI mafia are against this but without its quite annoying */ + WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2); + + return 1; +} + +static int flyEnd(bContext *C, FlyInfo *fly) +{ + RegionView3D *rv3d= fly->rv3d; + View3D *v3d = fly->v3d; + + float upvec[3]; + + if(fly->state == FLY_RUNNING) + return OPERATOR_RUNNING_MODAL; + + WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer); + + ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel); + + rv3d->dist= fly->dist_backup; + + if (fly->state == FLY_CANCEL) { + /* Revert to original view? */ + if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */ + Object *ob_back; + if(fly->root_parent)ob_back= fly->root_parent; + else ob_back= fly->v3d->camera; + + /* store the original camera loc and rot */ + object_tfm_restore(ob_back, fly->obtfm); + + DAG_id_flush_update(&ob_back->id, OB_RECALC_OB); + } else { + /* Non Camera we need to reset the view back to the original location bacause the user canceled*/ + copy_qt_qt(rv3d->viewquat, fly->rot_backup); + copy_v3_v3(rv3d->ofs, fly->ofs_backup); + rv3d->persp= fly->persp_backup; + } + } + else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ + float mat3[3][3]; + if(fly->root_parent) { + DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB); + } + else { + copy_m3_m4(mat3, v3d->camera->obmat); + object_mat3_to_rot(v3d->camera, mat3, TRUE); + DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); + } + } + else { /* not camera */ + /* Apply the fly mode view */ + /*restore the dist*/ + float mat[3][3]; + upvec[0]= upvec[1]= 0; + upvec[2]= fly->dist_backup; /*x and y are 0*/ + copy_m3_m4(mat, rv3d->viewinv); + mul_m3_v3(mat, upvec); + add_v3_v3(rv3d->ofs, upvec); + /*Done with correcting for the dist */ + } + + rv3d->rflag &= ~RV3D_NAVIGATING; +//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ + + if(fly->obtfm) + MEM_freeN(fly->obtfm); + + if(fly->state == FLY_CONFIRM) { + MEM_freeN(fly); + return OPERATOR_FINISHED; + } + + MEM_freeN(fly); + return OPERATOR_CANCELLED; +} + +static void flyEvent(FlyInfo *fly, wmEvent *event) +{ + if (event->type == TIMER && event->customdata == fly->timer) { + fly->redraw = 1; + } + else if (event->type == MOUSEMOVE) { + fly->mval[0] = event->x - fly->ar->winrct.xmin; + fly->mval[1] = event->y - fly->ar->winrct.ymin; + } /* handle modal keymap first */ + else if (event->type == EVT_MODAL_MAP) { + switch (event->val) { + case FLY_MODAL_CANCEL: + fly->state = FLY_CANCEL; + break; + case FLY_MODAL_CONFIRM: + fly->state = FLY_CONFIRM; + break; + + case FLY_MODAL_ACCELERATE: + { + double time_currwheel; + float time_wheel; + + time_currwheel= PIL_check_seconds_timer(); + time_wheel = (float)(time_currwheel - fly->time_lastwheel); + fly->time_lastwheel = time_currwheel; + /*printf("Wheel %f\n", time_wheel);*/ + /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/ + time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ + + if (fly->speed<0.0f) fly->speed= 0.0f; + else { + if (event->shift) + fly->speed+= fly->grid*time_wheel*0.1; + else + fly->speed+= fly->grid*time_wheel; + } + break; + } + case FLY_MODAL_DECELERATE: + { + double time_currwheel; + float time_wheel; + + time_currwheel= PIL_check_seconds_timer(); + time_wheel = (float)(time_currwheel - fly->time_lastwheel); + fly->time_lastwheel = time_currwheel; + time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ + + if (fly->speed>0) fly->speed=0; + else { + if (event->shift) + fly->speed-= fly->grid*time_wheel*0.1; + else + fly->speed-= fly->grid*time_wheel; + } + break; + } + case FLY_MODAL_PAN_ENABLE: + fly->pan_view= TRUE; + break; + case FLY_MODAL_PAN_DISABLE: +//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]); + fly->pan_view= FALSE; + break; + + /* impliment WASD keys */ + case FLY_MODAL_DIR_FORWARD: + if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */ + else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ + fly->axis= 2; + break; + case FLY_MODAL_DIR_BACKWARD: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==2) fly->speed -= fly->grid; + fly->axis= 2; + break; + case FLY_MODAL_DIR_LEFT: + if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed += fly->grid; + fly->axis= 0; + break; + case FLY_MODAL_DIR_RIGHT: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed -= fly->grid; + fly->axis= 0; + break; + case FLY_MODAL_DIR_DOWN: + if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed += fly->grid; + fly->axis= 1; + break; + case FLY_MODAL_DIR_UP: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed -= fly->grid; + fly->axis= 1; + break; + + case FLY_MODAL_AXIS_LOCK_X: + if (fly->xlock) fly->xlock=0; + else { + fly->xlock = 2; + fly->xlock_momentum = 0.0; + } + break; + case FLY_MODAL_AXIS_LOCK_Z: + if (fly->zlock) fly->zlock=0; + else { + fly->zlock = 2; + fly->zlock_momentum = 0.0; + } + break; + + case FLY_MODAL_PRECISION_ENABLE: + fly->use_precision= TRUE; + break; + case FLY_MODAL_PRECISION_DISABLE: + fly->use_precision= FALSE; + break; + + } + } +} + +static int flyApply(bContext *C, FlyInfo *fly) +{ + +#define FLY_ROTATE_FAC 2.5f /* more is faster */ +#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */ +#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */ + + /* + fly mode - Shift+F + a fly loop where the user can move move the view as if they are flying + */ + RegionView3D *rv3d= fly->rv3d; + View3D *v3d = fly->v3d; + ARegion *ar = fly->ar; + Scene *scene= fly->scene; + + float prev_view_mat[4][4]; + + float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */ + dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */ + + /* Camera Uprighting variables */ + upvec[3]={0,0,0}, /* stores the view's up vector */ + + moffset[2], /* mouse offset from the views center */ + tmp_quat[4]; /* used for rotating the view */ + + int cent_orig[2], /* view center */ +//XXX- can avoid using // cent[2], /* view center modified */ + xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */ + unsigned char + apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/ + + if(fly->root_parent) + view3d_persp_mat4(rv3d, prev_view_mat); + + /* the dist defines a vector that is infront of the offset + to rotate the view about. + this is no good for fly mode because we + want to rotate about the viewers center. + but to correct the dist removal we must + alter offset so the view doesn't jump. */ + + xmargin= ar->winx/20.0f; + ymargin= ar->winy/20.0f; + + cent_orig[0]= ar->winrct.xmin + ar->winx/2; + cent_orig[1]= ar->winrct.ymin + ar->winy/2; + + { + + /* mouse offset from the center */ + moffset[0]= fly->mval[0]- ar->winx/2; + moffset[1]= fly->mval[1]- ar->winy/2; + + /* enforce a view margin */ + if (moffset[0]>xmargin) moffset[0]-=xmargin; + else if (moffset[0] < -xmargin) moffset[0]+=xmargin; + else moffset[0]=0; + + if (moffset[1]>ymargin) moffset[1]-=ymargin; + else if (moffset[1] < -ymargin) moffset[1]+=ymargin; + else moffset[1]=0; + + + /* scale the mouse movement by this value - scales mouse movement to the view size + * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y) + * + * the mouse moves isnt linear */ + + if(moffset[0]) { + moffset[0] /= ar->winx - (xmargin*2); + moffset[0] *= fabs(moffset[0]); + } + + if(moffset[1]) { + moffset[1] /= ar->winy - (ymargin*2); + moffset[1] *= fabs(moffset[1]); + } + + /* Should we redraw? */ + if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) { + float dvec_tmp[3]; + double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */ + float time_redraw_clamped; + + time_current= PIL_check_seconds_timer(); + time_redraw= (float)(time_current - fly->time_lastdraw); + time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */ + fly->time_lastdraw= time_current; + /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */ + + /* Scale the time to use shift to scale the speed down- just like + shift slows many other areas of blender down */ + if (fly->use_precision) + fly->speed= fly->speed * (1.0f-time_redraw_clamped); + + copy_m3_m4(mat, rv3d->viewinv); + + if (fly->pan_view==TRUE) { + /* pan only */ + dvec_tmp[0]= -moffset[0]; + dvec_tmp[1]= -moffset[1]; + dvec_tmp[2]= 0; + + if (fly->use_precision) { + dvec_tmp[0] *= 0.1; + dvec_tmp[1] *= 0.1; + } + + mul_m3_v3(mat, dvec_tmp); + mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid); + + } else { + float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/ + + /* rotate about the X axis- look up/down */ + if (moffset[1]) { + upvec[0]=1; + upvec[1]=0; + upvec[2]=0; + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + if (fly->xlock) fly->xlock = 2; /*check for rotation*/ + if (fly->zlock) fly->zlock = 2; + fly->xlock_momentum= 0.0f; + } + + /* rotate about the Y axis- look left/right */ + if (moffset[0]) { + + /* if we're upside down invert the moffset */ + upvec[0]=0; + upvec[1]=1; + upvec[2]=0; + mul_m3_v3(mat, upvec); + + if(upvec[2] < 0.0f) + moffset[0]= -moffset[0]; + + /* make the lock vectors */ + if (fly->zlock) { + upvec[0]=0; + upvec[1]=0; + upvec[2]=1; + } else { + upvec[0]=0; + upvec[1]=1; + upvec[2]=0; + mul_m3_v3(mat, upvec); + } + + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + if (fly->xlock) fly->xlock = 2;/*check for rotation*/ + if (fly->zlock) fly->zlock = 2; + } + + if (fly->zlock==2) { + upvec[0]=1; + upvec[1]=0; + upvec[2]=0; + mul_m3_v3(mat, upvec); + + /*make sure we have some z rolling*/ + if (fabs(upvec[2]) > 0.00001f) { + roll= upvec[2]*5; + upvec[0]=0; /*rotate the view about this axis*/ + upvec[1]=0; + upvec[2]=1; + + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL; + } else { + fly->zlock=1; /* dont check until the view rotates again */ + fly->zlock_momentum= 0.0f; + } + } + + if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/ + upvec[0]=0; + upvec[1]=0; + upvec[2]=1; + mul_m3_v3(mat, upvec); + /*make sure we have some z rolling*/ + if (fabs(upvec[2]) > 0.00001) { + roll= upvec[2] * -5; + + upvec[0]= 1.0f; /*rotate the view about this axis*/ + upvec[1]= 0.0f; + upvec[2]= 0.0f; + + mul_m3_v3(mat, upvec); + + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + fly->xlock_momentum += 0.05f; + } else { + fly->xlock=1; /* see above */ + fly->xlock_momentum= 0.0f; + } + } + + + if (apply_rotation) { + /* Normal operation */ + /* define dvec, view direction vector */ + dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f; + /* move along the current axis */ + dvec_tmp[fly->axis]= 1.0f; + + mul_m3_v3(mat, dvec_tmp); + + mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f); + } + } + + /* impose a directional lag */ + interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); + + if (rv3d->persp==RV3D_CAMOB) { + Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera; + if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0; + if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0; + if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0; + } + + add_v3_v3(rv3d->ofs, dvec); + + /* todo, dynamic keys */ +#if 0 + if (fly->zlock && fly->xlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else if (fly->zlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else if (fly->xlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); +#endif + + /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */ + if (rv3d->persp==RV3D_CAMOB) { + ID *id_key; + /* transform the parent or the camera? */ + if(fly->root_parent) { + Object *ob_update; + + float view_mat[4][4]; + float prev_view_imat[4][4]; + float diff_mat[4][4]; + float parent_mat[4][4]; + + invert_m4_m4(prev_view_imat, prev_view_mat); + view3d_persp_mat4(rv3d, view_mat); + mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); + mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); + object_apply_mat4(fly->root_parent, parent_mat); + + // where_is_object(scene, fly->root_parent); + + ob_update= v3d->camera->parent; + while(ob_update) { + DAG_id_flush_update(&ob_update->id, OB_RECALC_OB); + ob_update= ob_update->parent; + } + + copy_m4_m4(prev_view_mat, view_mat); + + id_key= &fly->root_parent->id; + + } + else { + float view_mat[4][4]; + view3d_persp_mat4(rv3d, view_mat); + object_apply_mat4(v3d->camera, view_mat); + id_key= &v3d->camera->id; + } + + /* record the motion */ + if (autokeyframe_cfra_can_key(scene, id_key)) { + ListBase dsources = {NULL, NULL}; + + /* add datasource override for the camera object */ + ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL); + + /* insert keyframes + * 1) on the first frame + * 2) on each subsequent frame + * TODO: need to check in future that frame changed before doing this + */ + if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) { + KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation"); + ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); + } + if (fly->speed) { + KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location"); + ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); + } + + /* free temp data */ + BLI_freelistN(&dsources); + } + } + } else + /*were not redrawing but we need to update the time else the view will jump */ + fly->time_lastdraw= PIL_check_seconds_timer(); + /* end drawing */ + copy_v3_v3(fly->dvec_prev, dvec); + } + +/* moved to flyEnd() */ + + return OPERATOR_FINISHED; +} + + + +static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + RegionView3D *rv3d= CTX_wm_region_view3d(C); + FlyInfo *fly; + + if(rv3d->viewlock) + return OPERATOR_CANCELLED; + + fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation"); + + op->customdata= fly; + + if(initFlyInfo(C, fly, op, event)==FALSE) { + MEM_freeN(op->customdata); + return OPERATOR_CANCELLED; + } + + flyEvent(fly, event); + + WM_event_add_modal_handler(C, op); + + return OPERATOR_RUNNING_MODAL; +} + +static int fly_cancel(bContext *C, wmOperator *op) +{ + FlyInfo *fly = op->customdata; + + fly->state = FLY_CANCEL; + flyEnd(C, fly); + op->customdata= NULL; + + return OPERATOR_CANCELLED; +} + +static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) +{ + int exit_code; + + FlyInfo *fly = op->customdata; + + fly->redraw= 0; + + flyEvent(fly, event); + + if(event->type==TIMER && event->customdata == fly->timer) + flyApply(C, fly); + + if(fly->redraw) { + ED_region_tag_redraw(CTX_wm_region(C)); + } + + exit_code = flyEnd(C, fly); + + if(exit_code!=OPERATOR_RUNNING_MODAL) + ED_region_tag_redraw(CTX_wm_region(C)); + + return exit_code; +} + +void VIEW3D_OT_fly(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Fly Navigation"; + ot->description= "Interactively fly around the scene"; + ot->idname= "VIEW3D_OT_fly"; + + /* api callbacks */ + ot->invoke= fly_invoke; + ot->cancel= fly_cancel; + ot->modal= fly_modal; + ot->poll= ED_operator_view3d_active; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; +} From 904f82b49fb8a5169deaab707fe01333c077119f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 07:12:29 +0000 Subject: [PATCH 006/163] bugfix [#24376] Fly mode disturbs the rotation or scale of the camera object --- source/blender/blenkernel/BKE_object.h | 4 +-- source/blender/blenkernel/intern/object.c | 8 +++--- .../blender/editors/armature/editarmature.c | 2 +- source/blender/editors/object/object_add.c | 2 +- .../blender/editors/object/object_relations.c | 4 +-- .../blender/editors/object/object_transform.c | 4 +-- .../blender/editors/space_view3d/view3d_fly.c | 28 +++++++++---------- source/blender/makesrna/intern/CMakeLists.txt | 6 ++-- source/blender/makesrna/intern/rna_object.c | 6 ++-- 9 files changed, 33 insertions(+), 31 deletions(-) diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 7451d43a578..b64011a7c9a 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -98,10 +98,10 @@ void disable_speed_curve(int val); float bsystem_time(struct Scene *scene, struct Object *ob, float cfra, float ofs); void object_scale_to_mat3(struct Object *ob, float mat[][3]); void object_rot_to_mat3(struct Object *ob, float mat[][3]); -void object_mat3_to_rot(struct Object *ob, float mat[][3], int use_compat); +void object_mat3_to_rot(struct Object *ob, float mat[][3], short use_compat); void object_to_mat3(struct Object *ob, float mat[][3]); void object_to_mat4(struct Object *ob, float mat[][4]); -void object_apply_mat4(struct Object *ob, float mat[][4]); +void object_apply_mat4(struct Object *ob, float mat[][4], short use_compat); void set_no_parent_ipo(int val); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 96f90473814..9d93fac8ad0 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1550,7 +1550,7 @@ void object_make_proxy(Object *ob, Object *target, Object *gob) if(gob) { ob->rotmode= target->rotmode; mul_m4_m4m4(ob->obmat, target->obmat, gob->obmat); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, FALSE); } else { copy_object_transform(ob, target); @@ -1678,7 +1678,7 @@ void object_rot_to_mat3(Object *ob, float mat[][3]) mul_m3_m3m3(mat, dmat, rmat); } -void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat) +void object_mat3_to_rot(Object *ob, float mat[][3], short use_compat) { if (ob->rotmode == ROT_MODE_QUAT) mat3_to_quat(ob->quat, mat); @@ -1696,7 +1696,7 @@ void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat) } /* see pchan_apply_mat4() for the equivalent 'pchan' function */ -void object_apply_mat4(Object *ob, float mat[][4]) +void object_apply_mat4(Object *ob, float mat[][4], short use_compat) { float mat3[3][3]; /* obmat -> 3x3 */ float mat3_n[3][3]; /* obmat -> normalized, 3x3 */ @@ -1718,7 +1718,7 @@ void object_apply_mat4(Object *ob, float mat[][4]) } /* rotation */ - object_mat3_to_rot(ob, mat3_n, 0); + object_mat3_to_rot(ob, mat3_n, use_compat); /* scale */ /* note: mat4_to_size(ob->size, mat) fails for negative scale */ diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index c8c0a4e6980..28165c0e018 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -546,7 +546,7 @@ static void applyarmature_fix_boneparents (Scene *scene, Object *armob) /* apply current transform from parent (not yet destroyed), * then calculate new parent inverse matrix */ - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, FALSE); what_does_parent(scene, ob, &workob); invert_m4_m4(ob->parentinv, workob.obmat); diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 56af4ce1b1c..f9d0bddf6b2 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -985,7 +985,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base) ob->lay= base->lay; copy_m4_m4(ob->obmat, dob->mat); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, FALSE); } copy_object_set_idnew(C, 0); diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index b1c027a2f24..5f9eeb04125 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -431,7 +431,7 @@ static int parent_clear_exec(bContext *C, wmOperator *op) } else if(type == 1) { ob->parent= NULL; - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, TRUE); } else if(type == 2) unit_m4(ob->parentinv); @@ -906,7 +906,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op) } if(type == 1) - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, TRUE); } CTX_DATA_END; diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 66c5ab4ec4b..7be03a4c567 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -390,7 +390,7 @@ static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob ) /* a change was made, adjust the children to compensate */ for(ob_child=bmain->object.first; ob_child; ob_child=ob_child->id.next) { if(ob_child->parent == ob) { - object_apply_mat4(ob_child, ob_child->obmat); + object_apply_mat4(ob_child, ob_child->obmat, TRUE); what_does_parent(scene, ob_child, &workob); invert_m4_m4(ob_child->parentinv, workob.obmat); } @@ -574,7 +574,7 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) { where_is_object(scene, ob); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, TRUE); where_is_object(scene, ob); change = 1; diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index db83cd4b364..5f4c551e2d6 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -377,15 +377,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) } } else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ - float mat3[3][3]; - if(fly->root_parent) { - DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB); - } - else { - copy_m3_m4(mat3, v3d->camera->obmat); - object_mat3_to_rot(v3d->camera, mat3, TRUE); - DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); - } + DAG_id_flush_update(fly->root_parent ? &fly->root_parent->id : &v3d->camera->id, OB_RECALC_OB); } else { /* not camera */ /* Apply the fly mode view */ @@ -802,7 +794,7 @@ static int flyApply(bContext *C, FlyInfo *fly) view3d_persp_mat4(rv3d, view_mat); mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); - object_apply_mat4(fly->root_parent, parent_mat); + object_apply_mat4(fly->root_parent, parent_mat, TRUE); // where_is_object(scene, fly->root_parent); @@ -820,7 +812,7 @@ static int flyApply(bContext *C, FlyInfo *fly) else { float view_mat[4][4]; view3d_persp_mat4(rv3d, view_mat); - object_apply_mat4(v3d->camera, view_mat); + object_apply_mat4(v3d->camera, view_mat, TRUE); id_key= &v3d->camera->id; } @@ -901,7 +893,7 @@ static int fly_cancel(bContext *C, wmOperator *op) static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) { int exit_code; - + short do_draw= FALSE; FlyInfo *fly = op->customdata; fly->redraw= 0; @@ -911,14 +903,20 @@ static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) if(event->type==TIMER && event->customdata == fly->timer) flyApply(C, fly); - if(fly->redraw) { - ED_region_tag_redraw(CTX_wm_region(C)); - } + do_draw |= fly->redraw; exit_code = flyEnd(C, fly); if(exit_code!=OPERATOR_RUNNING_MODAL) + do_draw= TRUE; + + if(do_draw) { + if(fly->rv3d->persp==RV3D_CAMOB) { + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, fly->root_parent ? fly->root_parent : fly->v3d->camera); + } + ED_region_tag_redraw(CTX_wm_region(C)); + } return exit_code; } diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 5fd7ae1bd8a..ed84e4a50a9 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -27,12 +27,16 @@ # Generated code has some unused vars we can ignore. REMOVE_STRICT_FLAGS() +MESSAGE(STATUS "Configuring makesrna") + FILE(GLOB DEFSRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c") FILE(GLOB APISRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*_api.c") LIST(REMOVE_ITEM DEFSRC rna_access.c rna_define.c makesrna.c) LIST(REMOVE_ITEM DEFSRC ${APISRC}) STRING(REGEX REPLACE "rna_([a-zA-Z0-9_-]*).c" "${CMAKE_CURRENT_BINARY_DIR}/rna_\\1_gen.c" GENSRC "${DEFSRC}") +SET_SOURCE_FILES_PROPERTIES(GENSRC PROPERTIES GENERATED true) + SET(SRC makesrna.c @@ -147,5 +151,3 @@ ADD_CUSTOM_COMMAND( # Build bf_rna SET(SRC rna_access.c ${GENSRC}) BLENDERLIB(bf_rna "${SRC}" "${INC}") - -MESSAGE(STATUS "Configuring makesrna") diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index c29ad0d9adf..599aa4abc91 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -143,7 +143,8 @@ static void rna_Object_internal_update(Main *bmain, Scene *scene, PointerRNA *pt static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr) { - object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat); + /* dont use compat so we get pradictable rotation */ + object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat, FALSE); rna_Object_internal_update(bmain, scene, ptr); } @@ -177,7 +178,8 @@ static void rna_Object_matrix_local_set(PointerRNA *ptr, const float values[16]) copy_m4_m4(ob->obmat, (float(*)[4])values); } - object_apply_mat4(ob, ob->obmat); + /* dont use compat so we get pradictable rotation */ + object_apply_mat4(ob, ob->obmat, FALSE); } void rna_Object_internal_update_data(Main *bmain, Scene *scene, PointerRNA *ptr) From b1a6ffbc375077dd2da97a960abbd057fe1cbb74 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Mon, 25 Oct 2010 07:19:43 +0000 Subject: [PATCH 007/163] SVN maintenance. --- source/blender/editors/space_view3d/view3d_fly.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index 5f4c551e2d6..e137270aa5b 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -1,5 +1,5 @@ /** - * $Id: view3d_view.c 32630 2010-10-21 09:02:21Z campbellbarton $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * From a1336fd6f157f0009bdbab43817f53ae68cc757f Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Mon, 25 Oct 2010 07:28:57 +0000 Subject: [PATCH 008/163] Add missing includes to remedy implicit declaration of functions. --- source/blender/editors/space_view3d/view3d_view.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 5849d65cb6e..85c8e06a555 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -34,6 +34,7 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" +#include "BLI_rect.h" #include "BKE_anim.h" #include "BKE_action.h" @@ -42,10 +43,13 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_report.h" +#include "BKE_scene.h" #include "BIF_gl.h" #include "BIF_glutil.h" +#include "GPU_draw.h" + #include "WM_api.h" #include "WM_types.h" From 01cdd515fb09369b45bab164b8ed10cc39863ca9 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Mon, 25 Oct 2010 07:36:14 +0000 Subject: [PATCH 009/163] Compile fix after math API change from r32694 --- source/blender/collada/AnimationImporter.cpp | 2 +- source/blender/collada/SkinInfo.cpp | 2 +- source/blender/collada/collada_utils.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp index 32390fe01eb..a79bf3ebaa7 100644 --- a/source/blender/collada/AnimationImporter.cpp +++ b/source/blender/collada/AnimationImporter.cpp @@ -403,7 +403,7 @@ void AnimationImporter::read_node_transform(COLLADAFW::Node *node, Object *ob) TransformReader::get_node_mat(mat, node, &uid_animated_map, ob); if (ob) { copy_m4_m4(ob->obmat, mat); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, 0); } } diff --git a/source/blender/collada/SkinInfo.cpp b/source/blender/collada/SkinInfo.cpp index ba9451ecf84..b052f283e62 100644 --- a/source/blender/collada/SkinInfo.cpp +++ b/source/blender/collada/SkinInfo.cpp @@ -215,7 +215,7 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::mapobject = ob_arm; copy_m4_m4(ob->obmat, bind_shape_matrix); - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, 0); #if 1 bc_set_parent(ob, ob_arm, C); #else diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index 0634c910e96..98728001eb8 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -88,7 +88,7 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space) } // apply child obmat (i.e. decompose it into rot/loc/size) - object_apply_mat4(ob, ob->obmat); + object_apply_mat4(ob, ob->obmat, 0); // compute parentinv what_does_parent(sce, ob, &workob); From d327f08f9a948ac59f90379577366e7a807a2e64 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 25 Oct 2010 08:03:05 +0000 Subject: [PATCH 010/163] Fix #24255: Multires object gets modified when joining it to another multires object. Fix #22018: joining objects with different multires levels loses levesl from the higher multires object - Synchronyze mulires subdivision level when joining objects - Apply scale on MDISP layer when applying scale - Re-calculate MDISP when joining scaled objects --- source/blender/blenkernel/BKE_multires.h | 3 + source/blender/blenkernel/intern/multires.c | 204 +++++++++++++++++- source/blender/editors/mesh/meshtools.c | 4 + .../blender/editors/object/object_transform.c | 3 + 4 files changed, 207 insertions(+), 7 deletions(-) diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index fc0ab2eea1e..4a9b2ec5c0d 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -71,5 +71,8 @@ void multires_free(struct Multires *mr); void multires_load_old(struct Object *ob, struct Mesh *me); void multires_load_old_250(struct Mesh *); +void multiresModifier_scale_disp(struct Scene *scene, struct Object *ob); +void multiresModifier_prepare_join(struct Scene *scene, struct Object *ob, struct Object *to_ob); + #endif diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 91f15d1ee6c..b6e48a12676 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -46,6 +46,7 @@ #include "BKE_scene.h" #include "BKE_subsurf.h" #include "BKE_utildefines.h" +#include "BKE_object.h" #include "CCGSubSurf.h" @@ -89,6 +90,34 @@ MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData * return NULL; } +/* used for applying scale on mdisps layer and syncing subdivide levels when joining objects */ +static MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob) +{ + ModifierData *md; + MultiresModifierData *mmd= NULL, *firstmmd= NULL; + + /* find first active multires modifier */ + for(md = ob->modifiers.first; md; md = md->next) { + if(md->type == eModifierType_Multires) { + if(!firstmmd) + firstmmd= (MultiresModifierData*)md; + + if (modifier_isEnabled(scene, md, eModifierMode_Realtime)) { + mmd= (MultiresModifierData*)md; + break; + } + } + } + + if(!mmd) { + /* active multires have not been found + try to use first one */ + return firstmmd; + } + + return mmd; +} + static int multires_get_level(Object *ob, MultiresModifierData *mmd, int render) { if(render) @@ -389,11 +418,9 @@ static void multires_copy_dm_grid(DMGridData *gridA, DMGridData *gridB, int size } } -/* direction=1 for delete higher, direction=0 for lower (not implemented yet) */ -void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction) +static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl) { - Mesh *me = get_mesh(ob); - int lvl = multires_get_level(ob, mmd, 0); + Mesh *me = (Mesh*)ob->data; int levels = mmd->totlvl - lvl; MDisps *mdisps; @@ -403,7 +430,7 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire multires_force_update(ob); - if(mdisps && levels > 0 && direction == 1) { + if(mdisps && levels > 0) { if(lvl > 0) { int nsize = multires_side_tot[lvl]; int hsize = multires_side_tot[mmd->totlvl]; @@ -442,6 +469,27 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire multires_set_tot_level(ob, mmd, lvl); } +/* direction=1 for delete higher, direction=0 for lower (not implemented yet) */ +void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction) +{ + Mesh *me = get_mesh(ob); + int lvl = multires_get_level(ob, mmd, 0); + int levels = mmd->totlvl - lvl; + MDisps *mdisps; + + multires_set_tot_mdisps(me, mmd->totlvl); + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS); + + multires_force_update(ob); + + if(mdisps && levels > 0 && direction == 1) { + multires_del_higher(mmd, ob, lvl); + } + + multires_set_tot_level(ob, mmd, lvl); +} + static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple) { MultiresModifierData mmd; @@ -471,12 +519,11 @@ static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0); } -void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple) +void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple) { Mesh *me = ob->data; MDisps *mdisps; int lvl= mmd->totlvl; - int totlvl= mmd->totlvl+1; if(totlvl > multires_max_levels) return; @@ -549,6 +596,11 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updat multires_set_tot_level(ob, mmd, totlvl); } +void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple) +{ + multires_subdivide(mmd, ob, mmd->totlvl+1, updateblock, simple); +} + static void grid_tangent(int gridSize, int index, int x, int y, int axis, DMGridData **gridData, float t[3]) { if(axis == 0) { @@ -1386,3 +1438,141 @@ void multires_load_old(Object *ob, Mesh *me) me->mr= NULL; } +static void multires_sync_levels(Scene *scene, Object *ob, Object *to_ob) +{ + MultiresModifierData *mmd= get_multires_modifier(scene, ob); + MultiresModifierData *to_mmd= get_multires_modifier(scene, to_ob); + + if(!mmd) { + /* object could have MDISP even when there is no multires modifier + this could lead to troubles due to i've got no idea how mdisp could be + upsampled correct without modifier data. + just remove mdisps if no multires present (nazgul) */ + + Mesh *me= (Mesh*)ob->data; + + CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface); + CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface); + } + + if(!mmd || !to_mmd) return; + + if(mmd->totlvl>to_mmd->totlvl) multires_del_higher(mmd, ob, to_mmd->totlvl); + else multires_subdivide(mmd, ob, to_mmd->totlvl, 0, mmd->simple); +} + +void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) +{ + DerivedMesh *dm= NULL, *cddm= NULL, *subdm= NULL; + DMGridData **gridData, **subGridData; + Mesh *me= (Mesh*)ob->data; + MFace *mface= me->mface; + MVert *mvert= NULL; + MDisps *mdisps; + int *gridOffset; + int i, numGrids, gridSize, dGridSize, dSkip, totvert; + float (*vertCos)[3] = NULL; + MultiresModifierData *mmd= get_multires_modifier(scene, ob); + + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS); + + if(!mdisps || !mmd) return; + + + /* unscaled multires with applied displacement */ + subdm= get_multires_dm(scene, mmd, ob); + + /* prepare scaled CDDM to create ccgDN */ + cddm= mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH); + + totvert= cddm->getNumVerts(cddm); + vertCos= MEM_mallocN(sizeof(*vertCos) * totvert, "multiresScale vertCos"); + cddm->getVertCos(cddm, vertCos); + for(i=0; igetVertArray(cddm); + + /* scaled ccgDM for tangent space of object with applied scale */ + dm= subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0); + cddm->release(cddm); + + numGrids= dm->getNumGrids(dm); + gridSize= dm->getGridSize(dm); + gridData= dm->getGridData(dm); + gridOffset= dm->getGridOffset(dm); + subGridData= subdm->getGridData(subdm); + + dGridSize= multires_side_tot[mmd->totlvl]; + dSkip= (dGridSize-1)/(gridSize-1); + + #pragma omp parallel for private(i) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT) + for(i = 0; i < me->totface; ++i) { + const int numVerts= mface[i].v4 ? 4 : 3; + MDisps *mdisp= &mdisps[i]; + int S, x, y, gIndex = gridOffset[i]; + + for(S = 0; S < numVerts; ++S, ++gIndex) { + DMGridData *grid= gridData[gIndex]; + DMGridData *subgrid= subGridData[gIndex]; + float (*dispgrid)[3]= &mdisp->disps[S*dGridSize*dGridSize]; + + for(y = 0; y < gridSize; y++) { + for(x = 0; x < gridSize; x++) { + float *co= grid[x + y*gridSize].co; + float *sco= subgrid[x + y*gridSize].co; + float *no= grid[x + y*gridSize].no; + float *data= dispgrid[dGridSize*y*dSkip + x*dSkip]; + float mat[3][3], tx[3], ty[3], disp[3]; + + /* construct tangent space matrix */ + grid_tangent(gridSize, gIndex, x, y, 0, gridData, tx); + normalize_v3(tx); + + grid_tangent(gridSize, gIndex, x, y, 1, gridData, ty); + normalize_v3(ty); + + column_vectors_to_mat3(mat, tx, ty, no); + + /* scale subgrid coord and calculate displacement */ + mul_m3_v3(smat, sco); + sub_v3_v3v3(disp, sco, co); + + /* convert difference to tangent space */ + invert_m3(mat); + mul_v3_m3v3(data, mat, disp); + } + } + } + } + + dm->release(dm); + subdm->release(subdm); +} + +void multiresModifier_scale_disp(Scene *scene, Object *ob) +{ + float smat[3][3]; + + /* object's scale matrix */ + object_scale_to_mat3(ob, smat); + + multires_apply_smat(scene, ob, smat); +} + +void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob) +{ + float smat[3][3], tmat[3][3], mat[3][3]; + multires_sync_levels(scene, ob, to_ob); + + /* construct scale matrix for displacement */ + object_scale_to_mat3(to_ob, tmat); + invert_m3(tmat); + object_scale_to_mat3(ob, smat); + mul_m3_m3m3(mat, smat, tmat); + + multires_apply_smat(scene, ob, mat); +} diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index d8b34311e76..0307ba13424 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -63,6 +63,7 @@ #include "BKE_mesh.h" #include "BKE_material.h" #include "BKE_report.h" +#include "BKE_multires.h" #include "BLO_sys_types.h" // for intptr_t support @@ -396,6 +397,9 @@ int join_mesh_exec(bContext *C, wmOperator *UNUSED(op)) } } + if(base->object!=ob) + multiresModifier_prepare_join(scene, base->object, ob); + CustomData_merge(&me->fdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface); CustomData_copy_data(&me->fdata, &fdata, 0, faceofs, me->totface); diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 7be03a4c567..9d6b5e5002b 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -47,6 +47,7 @@ #include "BKE_mesh.h" #include "BKE_object.h" #include "BKE_report.h" +#include "BKE_multires.h" #include "RNA_define.h" #include "RNA_access.h" @@ -491,6 +492,8 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo if(ob->type==OB_MESH) { me= ob->data; + multiresModifier_scale_disp(scene, ob); + /* adjust data */ mvert= me->mvert; for(a=0; atotvert; a++, mvert++) From 0dde63c0440c8d34004be8a79a8c58b66b84f921 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 13:37:49 +0000 Subject: [PATCH 011/163] bugfix [#24377] Bad frames drawn --- source/blender/editors/interface/view2d.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index a17d578fc06..c1c10bf33c6 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -1069,7 +1069,7 @@ static void step_to_grid(float *step, int *power, int unit) /* for frames, we want 1.0 frame intervals only */ if (unit == V2D_UNIT_FRAMES) { rem = 1.0f; - *step = 1.0f; + *step = 2.0f; /* use 2 since there are grid lines drawn inbetween, this way to get 1 line per frane */ } /* prevents printing 1.0 2.0 3.0 etc */ From e002bcd876082562e197d4c33e8fa10c58447f88 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 17:08:40 +0000 Subject: [PATCH 012/163] bugfix [#22277] Absolute Shapekeys crash (in BGE) running a shape actuator on a softbody would crash because it assumed the deformer was a BL_MeshDeformer. Added TODO note, since it would be nice if softbody would work with shape keys too. --- .../blender/editors/space_view3d/view3d_intern.h | 2 +- .../Converter/BL_DeformableGameObject.h | 16 +++++++++++++++- source/gameengine/Physics/Bullet/CMakeLists.txt | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 0cba387169a..0d8b97a66ed 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -66,7 +66,6 @@ void VIEW3D_OT_layers(struct wmOperatorType *ot); /* view3d_ops.c */ void view3d_operatortypes(void); -void view3d_keymap(struct wmKeyConfig *keyconf); /* view3d_edit.c */ void VIEW3D_OT_zoom(struct wmOperatorType *ot); @@ -94,6 +93,7 @@ void view3d_boxview_copy(ScrArea *sa, ARegion *ar); void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]); /* view3d_fly.c */ +void view3d_keymap(struct wmKeyConfig *keyconf); void VIEW3D_OT_fly(struct wmOperatorType *ot); /* drawanim.c */ diff --git a/source/gameengine/Converter/BL_DeformableGameObject.h b/source/gameengine/Converter/BL_DeformableGameObject.h index 076bfaeb458..12f641eee96 100644 --- a/source/gameengine/Converter/BL_DeformableGameObject.h +++ b/source/gameengine/Converter/BL_DeformableGameObject.h @@ -37,6 +37,7 @@ #include "DNA_mesh_types.h" #include "KX_GameObject.h" #include "BL_MeshDeformer.h" +#include "KX_SoftBodyDeformer.h" #include class BL_ShapeActionActuator; @@ -79,7 +80,20 @@ public: bool GetShape(vector &shape); Key* GetKey() { - return (m_pDeformer) ? ((BL_MeshDeformer*)m_pDeformer)->GetMesh()->key : NULL; + if(m_pDeformer) { + BL_MeshDeformer *deformer= dynamic_cast(m_pDeformer); // incase its not a MeshDeformer + if(deformer) { + return deformer->GetMesh()->key; + } + +#if 0 // TODO. shape keys for softbody, currently they dont store a mesh. + KX_SoftBodyDeformer *deformer_soft= dynamic_cast(m_pDeformer); + if(deformer) { + return deformer->GetMesh()->key; + } +#endif + } + return NULL; } virtual void SetDeformer(class RAS_Deformer* deformer); diff --git a/source/gameengine/Physics/Bullet/CMakeLists.txt b/source/gameengine/Physics/Bullet/CMakeLists.txt index faa9385a745..1954d58df3e 100644 --- a/source/gameengine/Physics/Bullet/CMakeLists.txt +++ b/source/gameengine/Physics/Bullet/CMakeLists.txt @@ -24,6 +24,9 @@ # # ***** END GPL LICENSE BLOCK ***** +# since this includes bullet we get errors from the headers too +REMOVE_STRICT_FLAGS() + SET(INC . ../common From 7869c7ee85aa48d4f4702c6e2e8812c55187d63a Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Mon, 25 Oct 2010 17:20:12 +0000 Subject: [PATCH 013/163] Fix for [#24383] Particles using "circle" as display, are disabled on opening file --- .../blender/editors/space_view3d/drawobject.c | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index bc340ef5b4b..d2285371667 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3255,16 +3255,22 @@ static void draw_particle_arrays(int draw_as, int totpoint, int ob_dt, int selec static void draw_particle(ParticleKey *state, int draw_as, short draw, float pixsize, float imat[4][4], float *draw_line, ParticleBillboardData *bb, ParticleDrawData *pdd) { float vec[3], vec2[3]; - float *vd = pdd->vd; - float *cd = pdd->cd; + float *vd = NULL; + float *cd = NULL; float ma_r=0.0f; float ma_g=0.0f; float ma_b=0.0f; - if(pdd->ma_r) { - ma_r = *pdd->ma_r; - ma_g = *pdd->ma_g; - ma_b = *pdd->ma_b; + /* null only for PART_DRAW_CIRC */ + if(pdd) { + vd = pdd->vd; + cd = pdd->cd; + + if(pdd->ma_r) { + ma_r = *pdd->ma_r; + ma_g = *pdd->ma_g; + ma_b = *pdd->ma_b; + } } switch(draw_as){ @@ -3356,8 +3362,6 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix } case PART_DRAW_CIRC: { - if(pdd->ma_r) - glColor3f(ma_r,ma_g,ma_b); drawcircball(GL_LINE_LOOP, state->co, pixsize, imat); break; } @@ -3491,12 +3495,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv else cpack(0); - if(pdd) { - pdd->ma_r = &ma_r; - pdd->ma_g = &ma_g; - pdd->ma_b = &ma_b; - } - timestep= psys_get_timestep(&sim); if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) { @@ -3650,11 +3648,18 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pdd->tot_vec_size= tot_vec_size; } + if(pdd) { + pdd->ma_r = &ma_r; + pdd->ma_g = &ma_g; + pdd->ma_b = &ma_b; + } + psys->lattice= psys_get_lattice(&sim); - if(pdd && draw_as!=PART_DRAW_PATH){ + /* circles don't use drawdata, so have to add a special case here */ + if((pdd || draw_as==PART_DRAW_CIRC) && draw_as!=PART_DRAW_PATH){ /* 5. */ - if((pdd->flag & PARTICLE_DRAW_DATA_UPDATED) + if(pdd && (pdd->flag & PARTICLE_DRAW_DATA_UPDATED) && (pdd->vedata || part->draw & (PART_DRAW_SIZE|PART_DRAW_NUM|PART_DRAW_HEALTH))==0) { totpoint = pdd->totpoint; /* draw data is up to date */ } From 82fd7f21fc36e44f5948f2aacabc10aaa36250c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 18:12:28 +0000 Subject: [PATCH 014/163] curve widget bounds were not properly clipped causing drawing artifacts in other views. --- source/blender/editors/interface/interface_draw.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index 768be97f930..29278edf451 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -33,6 +33,7 @@ #include "DNA_screen_types.h" #include "BLI_math.h" +#include "BLI_rect.h" #include "BKE_colortools.h" #include "BKE_texture.h" @@ -1355,6 +1356,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect CurveMapPoint *cmp; float fx, fy, fac[2], zoomx, zoomy, offsx, offsy; GLint scissor[4]; + rcti scissor_new; int a; cumap= (CurveMapping *)(but->editcumap? but->editcumap: but->poin); @@ -1362,7 +1364,12 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect /* need scissor test, curve can draw outside of boundary */ glGetIntegerv(GL_VIEWPORT, scissor); - glScissor(ar->winrct.xmin + rect->xmin, ar->winrct.ymin+rect->ymin, rect->xmax-rect->xmin, rect->ymax-rect->ymin); + scissor_new.xmin= ar->winrct.xmin + rect->xmin; + scissor_new.ymin= ar->winrct.ymin + rect->ymin; + scissor_new.xmax= ar->winrct.xmin + rect->xmax; + scissor_new.ymax= ar->winrct.ymin + rect->ymax; + BLI_isect_rcti(&scissor_new, &ar->winrct, &scissor_new); + glScissor(scissor_new.xmin, scissor_new.ymin, scissor_new.xmax-scissor_new.xmin, scissor_new.ymax-scissor_new.ymin); /* calculate offset and zoom */ zoomx= (rect->xmax-rect->xmin-2.0*but->aspect)/(cumap->curr.xmax - cumap->curr.xmin); From 29605fc06ddd8fb9a5d80df1389a0cbfb150c9b9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 21:57:45 +0000 Subject: [PATCH 015/163] Added function RNA_property_update_check() to check if an update call is needed, Simple python benchmark shows this to be about 3x faster in the case where an update isn't needed. This also speeds up rna function argument parsing, since each arg in a function call did 2 string lookups on the context which were never needed. --- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/rna_access.c | 8 +++++ source/blender/python/intern/bpy_rna.c | 33 ++++++++++++++----- .../gameengine/BlenderRoutines/CMakeLists.txt | 5 +-- source/gameengine/Converter/CMakeLists.txt | 2 -- .../GamePlayer/common/CMakeLists.txt | 2 -- .../GamePlayer/ghost/CMakeLists.txt | 2 -- source/gameengine/Ketsji/CMakeLists.txt | 3 -- .../gameengine/Physics/common/CMakeLists.txt | 1 - source/gameengine/VideoTexture/CMakeLists.txt | 1 - 10 files changed, 35 insertions(+), 23 deletions(-) diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index ab1319653b8..1ec65c0e59b 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -681,6 +681,7 @@ int RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop); void RNA_property_update(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop); void RNA_property_update_main(struct Main *bmain, struct Scene *scene, PointerRNA *ptr, PropertyRNA *prop); +int RNA_property_update_check(struct PropertyRNA *prop); /* Property Data */ diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 6cb5858648a..6cdb842fbc2 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -1268,6 +1268,14 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR } +/* must keep in sync with 'rna_property_update' + * note, its possible this returns a false positive in the case of PROP_CONTEXT_UPDATE + * but this isnt likely to be a performance problem. */ +int RNA_property_update_check(PropertyRNA *prop) +{ + return (prop->magic != RNA_MAGIC || prop->update || prop->noteflag); +} + void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop) { rna_property_update(C, CTX_data_main(C), CTX_data_scene(C), ptr, prop); diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index a3b0c4739c4..2bffd7f6b88 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -120,7 +120,9 @@ static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype) } RNA_property_float_set_array(&self->ptr, self->prop, bmo->data); - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } /* Euler order exception */ if(subtype==MATHUTILS_CB_SUBTYPE_EUL) { @@ -129,7 +131,9 @@ static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype) short order= pyrna_rotation_euler_order_get(&self->ptr, &prop_eul_order, eul->order); if(order != eul->order) { RNA_property_enum_set(&self->ptr, prop_eul_order, eul->order); - RNA_property_update(BPy_GetContext(), &self->ptr, prop_eul_order); + if(RNA_property_update_check(prop_eul_order)) { + RNA_property_update(BPy_GetContext(), &self->ptr, prop_eul_order); + } } } return 1; @@ -160,7 +164,11 @@ static int mathutils_rna_vector_set_index(BaseMathObject *bmo, int UNUSED(subtyp RNA_property_float_clamp(&self->ptr, self->prop, &bmo->data[index]); RNA_property_float_set_index(&self->ptr, self->prop, index, bmo->data[index]); - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } + return 1; } @@ -201,7 +209,10 @@ static int mathutils_rna_matrix_set(BaseMathObject *bmo, int UNUSED(subtype)) /* can ignore clamping here */ RNA_property_float_set_array(&self->ptr, self->prop, bmo->data); - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } return 1; } @@ -1235,7 +1246,9 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb } /* Run rna property functions */ - RNA_property_update(BPy_GetContext(), ptr, prop); + if(RNA_property_update_check(prop)) { + RNA_property_update(BPy_GetContext(), ptr, prop); + } return 0; } @@ -1309,8 +1322,10 @@ static int pyrna_py_to_prop_array_index(BPy_PropertyArrayRNA *self, int index, P } /* Run rna property functions */ - RNA_property_update(BPy_GetContext(), ptr, prop); - + if(RNA_property_update_check(prop)) { + RNA_property_update(BPy_GetContext(), ptr, prop); + } + return ret; } @@ -1720,7 +1735,9 @@ static int pyrna_prop_array_ass_subscript( BPy_PropertyArrayRNA *self, PyObject } if(ret != -1) { - RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + if(RNA_property_update_check(self->prop)) { + RNA_property_update(BPy_GetContext(), &self->ptr, self->prop); + } } return ret; diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt index 661f9c5b25d..7abdeba0740 100644 --- a/source/gameengine/BlenderRoutines/CMakeLists.txt +++ b/source/gameengine/BlenderRoutines/CMakeLists.txt @@ -8,7 +8,6 @@ SET(INC ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer ../../../source/gameengine/Converter ../../../source/blender/imbuf - ../../../intern/ghost/include ../../../intern/moto/include ../../../source/gameengine/Ketsji ../../../source/blender/blenlib @@ -16,8 +15,7 @@ SET(INC ../../../source/blender/blenfont ../../../source/blender/editors/include ../../../source/blender/windowmanager - ../../../source/blender - ../../../source/blender/include + ../../../source/blender ../../../source/blender/makesdna ../../../source/blender/makesrna ../../../source/gameengine/Rasterizer @@ -28,7 +26,6 @@ SET(INC ../../../source/gameengine/Physics/common ../../../source/gameengine/Physics/Bullet ../../../source/gameengine/Network/LoopBackNetwork - ../../../source/blender/misc ../../../source/blender/blenloader ../../../source/blender/gpu ../../../extern/bullet2/src diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt index e6b5f6c81a0..a23629e3341 100644 --- a/source/gameengine/Converter/CMakeLists.txt +++ b/source/gameengine/Converter/CMakeLists.txt @@ -41,7 +41,6 @@ SET(INC ../../../source/blender/blenkernel ../../../source/blender/windowmanager ../../../source/blender - ../../../source/blender/include ../../../source/blender/makesdna ../../../source/blender/makesrna ../../../source/gameengine/Rasterizer @@ -54,7 +53,6 @@ SET(INC ../../../source/gameengine/Physics/Bullet ../../../source/gameengine/Physics/Dummy ../../../source/gameengine/Network/LoopBackNetwork - ../../../source/blender/misc ../../../source/blender/blenloader ../../../source/blender/gpu ../../../source/blender/ikplugin diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt index 47ac7f73a51..02c0cb8a83c 100644 --- a/source/gameengine/GamePlayer/common/CMakeLists.txt +++ b/source/gameengine/GamePlayer/common/CMakeLists.txt @@ -39,7 +39,6 @@ SET(INC ../../../../source/blender/blenlib ../../../../source/blender/blenkernel ../../../../source/blender - ../../../../source/blender/include ../../../../source/blender/makesdna ../../../../source/gameengine/Rasterizer ../../../../source/gameengine/GameLogic @@ -49,7 +48,6 @@ SET(INC ../../../../source/gameengine/Physics/common ../../../../source/gameengine/Network/LoopBackNetwork ../../../../source/gameengine/GamePlayer/ghost - ../../../../source/blender/misc ../../../../source/blender/blenloader ../../../../source/blender/gpu ../../../../extern/glew/include diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt index 6ce9f7be280..b6e381359df 100644 --- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt +++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt @@ -40,7 +40,6 @@ SET(INC ../../../../source/blender/blenkernel ../../../../source/blender/readblenfile ../../../../source/blender - ../../../../source/blender/include ../../../../source/blender/makesdna ../../../../source/blender/makesrna ../../../../source/gameengine/Rasterizer @@ -51,7 +50,6 @@ SET(INC ../../../../source/gameengine/Physics/common ../../../../source/gameengine/Network/LoopBackNetwork ../../../../source/gameengine/GamePlayer/common - ../../../../source/blender/misc ../../../../source/blender/blenloader ../../../../source/blender/gpu ../../../../extern/glew/include diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt index 68f0a0de994..2813160fb82 100644 --- a/source/gameengine/Ketsji/CMakeLists.txt +++ b/source/gameengine/Ketsji/CMakeLists.txt @@ -32,7 +32,6 @@ SET(INC ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer ../../../source/gameengine/Converter ../../../source/blender/imbuf - ../../../intern/ghost/include ../../../intern/moto/include ../../../source/gameengine/Ketsji ../../../source/blender/blenlib @@ -40,7 +39,6 @@ SET(INC ../../../source/blender/python ../../../source/blender/python/generic ../../../source/blender - ../../../source/blender/include ../../../source/blender/makesdna ../../../source/gameengine/Rasterizer ../../../source/gameengine/GameLogic @@ -51,7 +49,6 @@ SET(INC ../../../source/gameengine/Physics/common ../../../source/gameengine/Network/LoopBackNetwork ../../../intern/audaspace/intern - ../../../source/blender/misc ../../../source/blender/blenloader ../../../source/blender/gpu ../../../extern/glew/include diff --git a/source/gameengine/Physics/common/CMakeLists.txt b/source/gameengine/Physics/common/CMakeLists.txt index 0389280340f..f67de0f77d0 100644 --- a/source/gameengine/Physics/common/CMakeLists.txt +++ b/source/gameengine/Physics/common/CMakeLists.txt @@ -27,7 +27,6 @@ SET(INC . ../Dummy - ../../../intern/moto/include ) SET(SRC diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt index 1c624482d30..eb623065a75 100644 --- a/source/gameengine/VideoTexture/CMakeLists.txt +++ b/source/gameengine/VideoTexture/CMakeLists.txt @@ -33,7 +33,6 @@ SET(INC ../../../source/gameengine/Rasterizer ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer ../../../source/gameengine/BlenderRoutines - ../../../source/blender/include ../../../source/blender/blenlib ../../../source/blender/blenkernel ../../../source/blender/makesdna From 3264ced377ff159c7201b1c7d312c2f48d1327cf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 22:44:01 +0000 Subject: [PATCH 016/163] move geometry python module into mathutils.geometry, since it provides utility functions using mathutils types. --- doc/python_api/sphinx_doc_gen.py | 2 +- release/scripts/op/console_python.py | 2 +- release/scripts/op/io_scene_obj/import_obj.py | 2 +- release/scripts/op/object.py | 2 +- release/scripts/op/uvcalc_smart_project.py | 3 +-- source/blender/python/generic/CMakeLists.txt | 2 +- source/blender/python/generic/mathutils.c | 5 +++++ source/blender/python/generic/mathutils.h | 1 + .../python/generic/{geometry.c => mathutils_geometry.c} | 4 ++-- .../python/generic/{geometry.h => mathutils_geometry.h} | 0 source/blender/python/intern/bpy.c | 3 +-- source/gameengine/Ketsji/KX_PythonInit.cpp | 1 - 12 files changed, 15 insertions(+), 12 deletions(-) rename source/blender/python/generic/{geometry.c => mathutils_geometry.c} (99%) rename source/blender/python/generic/{geometry.h => mathutils_geometry.h} (100%) diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py index 7a78816a2db..9d6180d870f 100644 --- a/doc/python_api/sphinx_doc_gen.py +++ b/doc/python_api/sphinx_doc_gen.py @@ -364,7 +364,7 @@ def rna2sphinx(BASEPATH): fw(" These parts of the API are relatively stable and are unlikely to change significantly\n") fw(" * data API, access to attributes of blender data such as mesh verts, material color, timeline frames and scene objects\n") fw(" * user interface functions for defining buttons, creation of menus, headers, panels\n") - fw(" * modules: bgl, mathutils and geometry\n") + fw(" * modules: bgl and mathutils\n") fw(" * game engine modules\n") fw("\n") diff --git a/release/scripts/op/console_python.py b/release/scripts/op/console_python.py index 3d9ed098de7..23ee157b279 100644 --- a/release/scripts/op/console_python.py +++ b/release/scripts/op/console_python.py @@ -268,7 +268,7 @@ def banner(context): add_scrollback("Execute: Enter", 'OUTPUT') add_scrollback("Autocomplete: Ctrl+Space", 'OUTPUT') add_scrollback("Ctrl +/- Wheel: Zoom", 'OUTPUT') - add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bgl, blf, mathutils, geometry", 'OUTPUT') + add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bgl, blf, mathutils", 'OUTPUT') add_scrollback("", 'OUTPUT') add_scrollback(" WARNING!!! Blender 2.5 API is subject to change, see API reference for more info.", 'ERROR') add_scrollback("", 'OUTPUT') diff --git a/release/scripts/op/io_scene_obj/import_obj.py b/release/scripts/op/io_scene_obj/import_obj.py index f6c5e625fb0..0a97d08bf99 100644 --- a/release/scripts/op/io_scene_obj/import_obj.py +++ b/release/scripts/op/io_scene_obj/import_obj.py @@ -35,7 +35,7 @@ import os import time import bpy import mathutils -from geometry import PolyFill +from mathutils.geometry import PolyFill from io_utils import load_image, unpack_list, unpack_face_list diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py index 61a4478c5e4..38dfe79f1d6 100644 --- a/release/scripts/op/object.py +++ b/release/scripts/op/object.py @@ -256,7 +256,7 @@ class ShapeTransfer(bpy.types.Operator): ob.active_shape_key_index = len(me.shape_keys.keys) - 1 ob.show_shape_key = True - from geometry import BarycentricTransform + from mathutils.geometry import BarycentricTransform from mathutils import Vector if use_clamp and mode == 'OFFSET': diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py index 83303f8f7f1..f82acf69b54 100644 --- a/release/scripts/op/uvcalc_smart_project.py +++ b/release/scripts/op/uvcalc_smart_project.py @@ -22,9 +22,8 @@ # -from mathutils import Matrix, Vector +from mathutils import Matrix, Vector, geometry import time -import geometry import bpy from math import cos, radians diff --git a/source/blender/python/generic/CMakeLists.txt b/source/blender/python/generic/CMakeLists.txt index 4ac3fc36ebd..2f5551d4c96 100644 --- a/source/blender/python/generic/CMakeLists.txt +++ b/source/blender/python/generic/CMakeLists.txt @@ -34,10 +34,10 @@ SET(SRC bgl.c blf_api.c bpy_internal_import.c - geometry.c mathutils.c mathutils_color.c mathutils_euler.c + mathutils_geometry.c mathutils_matrix.c mathutils_quat.c mathutils_vector.c diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c index c1f24e413c8..f6b291622e3 100644 --- a/source/blender/python/generic/mathutils.c +++ b/source/blender/python/generic/mathutils.c @@ -249,6 +249,8 @@ PyObject *Mathutils_Init(void) { PyObject *submodule; + + if( PyType_Ready( &vector_Type ) < 0 ) return NULL; if( PyType_Ready( &matrix_Type ) < 0 ) @@ -270,6 +272,9 @@ PyObject *Mathutils_Init(void) PyModule_AddObject( submodule, "Quaternion", (PyObject *)&quaternion_Type ); PyModule_AddObject( submodule, "Color", (PyObject *)&color_Type ); + /* submodule */ + PyModule_AddObject( submodule, "geometry", Geometry_Init()); + mathutils_matrix_vector_cb_index= Mathutils_RegisterCallback(&mathutils_matrix_vector_cb); return (submodule); diff --git a/source/blender/python/generic/mathutils.h b/source/blender/python/generic/mathutils.h index 85fbe3225ba..d5dc48bd589 100644 --- a/source/blender/python/generic/mathutils.h +++ b/source/blender/python/generic/mathutils.h @@ -55,6 +55,7 @@ typedef struct { #include "mathutils_quat.h" #include "mathutils_euler.h" #include "mathutils_color.h" +#include "mathutils_geometry.h" PyObject *BaseMathObject_getOwner( BaseMathObject * self, void * ); PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void * ); diff --git a/source/blender/python/generic/geometry.c b/source/blender/python/generic/mathutils_geometry.c similarity index 99% rename from source/blender/python/generic/geometry.c rename to source/blender/python/generic/mathutils_geometry.c index e0583cc0028..1644a502fa8 100644 --- a/source/blender/python/generic/geometry.c +++ b/source/blender/python/generic/mathutils_geometry.c @@ -27,7 +27,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#include "geometry.h" +#include "mathutils_geometry.h" /* Used for PolyFill */ #include "BKE_displist.h" @@ -819,7 +819,7 @@ struct PyMethodDef M_Geometry_methods[] = { static struct PyModuleDef M_Geometry_module_def = { PyModuleDef_HEAD_INIT, - "geometry", /* m_name */ + "mathutils.geometry", /* m_name */ M_Geometry_doc, /* m_doc */ 0, /* m_size */ M_Geometry_methods, /* m_methods */ diff --git a/source/blender/python/generic/geometry.h b/source/blender/python/generic/mathutils_geometry.h similarity index 100% rename from source/blender/python/generic/geometry.h rename to source/blender/python/generic/mathutils_geometry.h diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index afcf7e757e6..5a74e8412d1 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -38,7 +38,7 @@ #include "BKE_utildefines.h" /* external util modules */ -#include "../generic/geometry.h" +#include "../generic/mathutils.h" #include "../generic/bgl.h" #include "../generic/blf_api.h" #include "../generic/IDProp.h" @@ -195,7 +195,6 @@ void BPy_init_modules( void ) printf("bpy: couldnt find 'scripts/modules', blender probably wont start.\n"); } /* stand alone utility modules not related to blender directly */ - Geometry_Init(); Mathutils_Init(); Noise_Init(); BGL_Init(); diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 56ec61f9f4c..3ffef0db803 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -40,7 +40,6 @@ extern "C" { #include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */ #include "py_capi_utils.h" #include "mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use. - #include "geometry.h" // Blender.Geometry module copied here so the blenderlayer can use. #include "bgl.h" #include "blf_api.h" From 05abc0d3eb6b2bfe3e29434bbffcd03c36349471 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Tue, 26 Oct 2010 01:55:06 +0000 Subject: [PATCH 017/163] blenderplayer building again in CMake+MSVC (I basically commented out functions already defined in other places) --- source/blenderplayer/bad_level_call_stubs/stubs.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index f2970293b05..87a33922f3d 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -374,10 +374,12 @@ struct wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int struct wmKeyMap *WM_modalkeymap_add(struct wmKeyConfig *keyconf, char *idname, EnumPropertyItem *items){return (struct wmKeyMap *) NULL;} /* intern/decimation */ +/* int LOD_FreeDecimationData(struct LOD_Decimation_Info *info){return 0;} int LOD_CollapseEdge(struct LOD_Decimation_Info *info){return 0;} int LOD_PreprocessMesh(struct LOD_Decimation_Info *info){return 0;} int LOD_LoadMesh(struct LOD_Decimation_Info *info){return 0;} +*/ /* smoke */ void LzmaCompress(void) { return; } @@ -423,17 +425,19 @@ void sculpt_set_brush_alpha(struct Brush *brush, float alpha){} char blender_path[] = ""; /* CSG */ +/* struct CSG_BooleanOperation * CSG_NewBooleanFunction( void ){return (struct CSG_BooleanOperation *) NULL;} void CSG_FreeBooleanOperation(struct CSG_BooleanOperation *operation){return;} void CSG_FreeFaceDescriptor(struct CSG_FaceIteratorDescriptor * f_descriptor){return;} void CSG_FreeVertexDescriptor(struct CSG_VertexIteratorDescriptor * v_descriptor){return;} int CSG_OutputFaceDescriptor(struct CSG_BooleanOperation * operation, struct CSG_FaceIteratorDescriptor * output){return 0;} int CSG_OutputVertexDescriptor(struct CSG_BooleanOperation * operation, struct CSG_VertexIteratorDescriptor *output){return 0;} +*/ typedef struct CSG_VertexIteratorDescriptor {int a;} CSG_VertexIteratorDescriptor; //workaround to build CSG_PerformanceBoolean Operation typedef struct CSG_FaceIteratorDescriptor {int a;} CSG_FaceIteratorDescriptor; //workaround to build CSG_PerformanceBoolean Operation typedef struct CSG_OperationType {int a;} CSG_OperationType; //workaround to build CSG_PerformanceBoolean Operation - +/* int CSG_PerformBooleanOperation( struct CSG_BooleanOperation *operation, CSG_OperationType op_type, @@ -442,5 +446,6 @@ int CSG_PerformBooleanOperation( CSG_FaceIteratorDescriptor obBFaces, CSG_VertexIteratorDescriptor obBVertices) { return 0;} +*/ #endif // GAMEBLENDER == 1 From 30b4fa2aa839e7dba72d6d913fd0bff5cc816e43 Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Tue, 26 Oct 2010 05:07:09 +0000 Subject: [PATCH 018/163] Removed old rigify code, as it is starting to interfere with the newer Rigify addon. The newer addon currently resides here: bzr://bzr.cessen.com/rigify But will eventually be included in svn. --- release/scripts/modules/rigify/__init__.py | 564 ------------- release/scripts/modules/rigify/arm_biped.py | 396 --------- release/scripts/modules/rigify/copy.py | 112 --- release/scripts/modules/rigify/delta.py | 162 ---- release/scripts/modules/rigify/eye_balls.py | 405 ---------- release/scripts/modules/rigify/eye_lid.py | 687 ---------------- release/scripts/modules/rigify/finger_curl.py | 378 --------- release/scripts/modules/rigify/leg_biped.py | 501 ------------ .../scripts/modules/rigify/leg_quadruped.py | 497 ------------ release/scripts/modules/rigify/mouth.py | 756 ------------------ release/scripts/modules/rigify/neck.py | 344 -------- release/scripts/modules/rigify/neck_flex.py | 348 -------- release/scripts/modules/rigify/palm_curl.py | 270 ------- .../modules/rigify/shape_key_control.py | 320 -------- .../modules/rigify/shape_key_distance.py | 172 ---- .../modules/rigify/shape_key_rotdiff.py | 172 ---- .../modules/rigify/spine_pivot_flex.py | 481 ----------- release/scripts/modules/rigify/stretch.py | 109 --- .../scripts/modules/rigify/stretch_twist.py | 152 ---- .../scripts/modules/rigify/tail_control.py | 165 ---- release/scripts/modules/rigify/tongue.py | 361 --------- release/scripts/modules/rigify/track_dual.py | 110 --- .../scripts/modules/rigify/track_reverse.py | 100 --- release/scripts/modules/rigify_utils.py | 467 ----------- release/scripts/op/add_armature_human.py | 616 -------------- .../ui/properties_data_armature_rigify.py | 334 -------- 26 files changed, 8979 deletions(-) delete mode 100644 release/scripts/modules/rigify/__init__.py delete mode 100644 release/scripts/modules/rigify/arm_biped.py delete mode 100644 release/scripts/modules/rigify/copy.py delete mode 100644 release/scripts/modules/rigify/delta.py delete mode 100644 release/scripts/modules/rigify/eye_balls.py delete mode 100644 release/scripts/modules/rigify/eye_lid.py delete mode 100644 release/scripts/modules/rigify/finger_curl.py delete mode 100644 release/scripts/modules/rigify/leg_biped.py delete mode 100644 release/scripts/modules/rigify/leg_quadruped.py delete mode 100644 release/scripts/modules/rigify/mouth.py delete mode 100644 release/scripts/modules/rigify/neck.py delete mode 100644 release/scripts/modules/rigify/neck_flex.py delete mode 100644 release/scripts/modules/rigify/palm_curl.py delete mode 100644 release/scripts/modules/rigify/shape_key_control.py delete mode 100644 release/scripts/modules/rigify/shape_key_distance.py delete mode 100644 release/scripts/modules/rigify/shape_key_rotdiff.py delete mode 100644 release/scripts/modules/rigify/spine_pivot_flex.py delete mode 100644 release/scripts/modules/rigify/stretch.py delete mode 100644 release/scripts/modules/rigify/stretch_twist.py delete mode 100644 release/scripts/modules/rigify/tail_control.py delete mode 100644 release/scripts/modules/rigify/tongue.py delete mode 100644 release/scripts/modules/rigify/track_dual.py delete mode 100644 release/scripts/modules/rigify/track_reverse.py delete mode 100644 release/scripts/modules/rigify_utils.py delete mode 100644 release/scripts/op/add_armature_human.py delete mode 100644 release/scripts/ui/properties_data_armature_rigify.py diff --git a/release/scripts/modules/rigify/__init__.py b/release/scripts/modules/rigify/__init__.py deleted file mode 100644 index c4f18d51519..00000000000 --- a/release/scripts/modules/rigify/__init__.py +++ /dev/null @@ -1,564 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from mathutils import Vector - -# TODO, have these in a more general module -from rna_prop_ui import rna_idprop_ui_prop_get -SPECIAL_TYPES = "root", -LAYER_TYPES = "main", "extra", "ik", "fk" - -ORG_LAYERS = [n == 31 for n in range(0, 32)] -MCH_LAYERS = [n == 30 for n in range(0, 32)] -DEF_LAYERS = [n == 29 for n in range(0, 32)] -ROOT_LAYERS = [n == 28 for n in range(0, 32)] - -ORG_PREFIX = "ORG-" -MCH_PREFIX = "MCH-" -DEF_PREFIX = "DEF-" - -WGT_PREFIX = "WGT-" - - -class RigifyError(Exception): - """Exception raised for errors in the metarig. - """ - - def __init__(self, message): - self.message = message - - def __str__(self): - return repr(self.message) - - -def submodule_func_from_type(bone_type): - type_pair = bone_type.split(".") - - # 'leg.ik' will look for an ik function in the leg module - # 'leg' will look up leg.main - if len(type_pair) == 1: - type_pair = type_pair[0], "main" - - type_name, func_name = type_pair - - # from rigify import leg - try: - submod = __import__(name="%s.%s" % (__package__, type_name), fromlist=[type_name]) - except ImportError: - raise RigifyError("python module for type '%s' not found" % type_name) - - reload(submod) - return type_name, submod, getattr(submod, func_name) - - -def get_submodule_types(): - import os - submodules = [] - files = os.listdir(os.path.dirname(__file__)) - for f in files: - if not f.startswith("_") and f.endswith(".py"): - submodules.append(f[:-3]) - - return sorted(submodules) - - -def get_bone_type_options(pbone, type_name): - options = {} - bone_name = pbone.name - for key, value in pbone.items(): - key_pair = key.rsplit(".") - # get all bone properties - """" - if key_pair[0] == type_name: - if len(key_pair) != 2: - raise RigifyError("option error for bone '%s', property name was not a pair '%s'" % (bone_name, key_pair)) - options[key_pair[1]] = value - """ - options[key] = value - - return options - - -def get_layer_dict(options): - ''' - Extracts layer info from a bone options dict - defaulting to the layer index if not set. - ''' - layer_default = [False] * 32 - result = {} - for i, layer_type in enumerate(LAYER_TYPES): - # no matter if its not defined - layer_index = options.get("layer_" + layer_type, i + 2) - layer = layer_default[:] - layer[layer_index-1] = True - result[layer_type] = layer - return result - - -def validate_rig(context, obj): - ''' - Makes no changes - only runs the metarig definitions and reports errors - ''' - type_found = False - - for pbone in obj.pose.bones: - bone_name = pbone.name - bone_type = pbone.get("type", "") - - if bone_type: - bone_type_list = [bt for bt in bone_type.replace(",", " ").split()] - else: - bone_type_list = [] - - for bone_type in bone_type_list: - if bone_type.split(".")[0] in SPECIAL_TYPES: - continue - - type_name, submod, type_func = submodule_func_from_type(bone_type) - reload(submod) - submod.metarig_definition(obj, bone_name) - type_found = True - - get_bone_type_options(pbone, bone_type) - - # missing, - check for duplicate root bone. - - if not type_found: - raise RigifyError("This rig has no 'type' properties defined on any pose bones, nothing to do") - - -def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True): - ''' - Main function for generating - ''' - from collections import OrderedDict - import rigify_utils - reload(rigify_utils) - - print("Begin...") - - # Not needed but catches any errors before duplicating - validate_rig(context, obj_orig) - - use_global_undo = context.user_preferences.edit.use_global_undo - context.user_preferences.edit.use_global_undo = False - mode_orig = context.mode - rest_backup = obj_orig.data.pose_position - obj_orig.data.pose_position = 'REST' - - bpy.ops.object.mode_set(mode='OBJECT') - - scene = context.scene - - # Check if the generated rig already exists, so we can - # regenerate in the same object. If not, create a new - # object to generate the rig in. - print("Fetch rig.") - try: - name = obj_orig["rig_object_name"] - except KeyError: - name = "rig" - - try: - obj = scene.objects[name] - except KeyError: - obj = bpy.data.objects.new(name, bpy.data.armatures.new(name)) - scene.objects.link(obj) - - obj.data.pose_position = 'POSE' - - # Get rid of anim data in case the rig already existed - print("Clear rig animation data.") - obj.animation_data_clear() - - # Select generated rig object - obj_orig.select = False - obj.select = True - scene.objects.active = obj - - # Remove all bones from the generated rig armature. - bpy.ops.object.mode_set(mode='EDIT') - for bone in obj.data.edit_bones: - obj.data.edit_bones.remove(bone) - bpy.ops.object.mode_set(mode='OBJECT') - - # Create temporary duplicates for merging - temp_rig_1 = obj_orig.copy() - temp_rig_1.data = obj_orig.data.copy() - scene.objects.link(temp_rig_1) - - temp_rig_2 = obj_orig.copy() - temp_rig_2.data = obj.data - scene.objects.link(temp_rig_2) - - # Select the temp rigs for merging - for objt in scene.objects: - objt.select = False # deselect all objects - temp_rig_1.select = True - temp_rig_2.select = True - scene.objects.active = temp_rig_2 - - # Merge the temporary rigs - bpy.ops.object.join(context) - - # Delete the second temp rig - bpy.ops.object.delete() - - # Select the generated rig - for objt in scene.objects: - objt.select = False # deselect all objects - obj.select = True - scene.objects.active = obj - - # Copy over the pose_bone properties - for bone in obj_orig.pose.bones: - bone_gen = obj.pose.bones[bone.name] - - # Rotation mode and transform locks - bone_gen.rotation_mode = bone.rotation_mode - bone_gen.lock_rotation = tuple(bone.lock_rotation) - bone_gen.lock_rotation_w = bone.lock_rotation_w - bone_gen.lock_rotations_4d = bone.lock_rotations_4d - bone_gen.lock_location = tuple(bone.lock_location) - bone_gen.lock_scale = tuple(bone.lock_scale) - - # Custom properties - for prop in bone.keys(): - bone_gen[prop] = bone[prop] - - # Copy over bone properties - for bone in obj_orig.data.bones: - bone_gen = obj.data.bones[bone.name] - - # B-bone stuff - bone_gen.bbone_segments = bone.bbone_segments - bone_gen.bbone_in = bone.bbone_in - bone_gen.bbone_out = bone.bbone_out - - - # Create proxy deformation rig - # TODO: remove this - if META_DEF: - obj_def = obj_orig.copy() - obj_def.data = obj_orig.data.copy() - scene.objects.link(obj_def) - - scene.update() - print("On to the real work.") - - arm = obj.data - - # prepend the ORG prefix to the bones, and create the base_names mapping - base_names = {} - bpy.ops.object.mode_set(mode='EDIT') - for bone in arm.edit_bones: - bone_name = bone.name - bone.name = ORG_PREFIX + bone_name - base_names[bone.name] = bone_name - - # create root_bone - bpy.ops.object.mode_set(mode='EDIT') - edit_bone = obj.data.edit_bones.new("root") - root_bone = edit_bone.name - edit_bone.head = (0.0, 0.0, 0.0) - edit_bone.tail = (0.0, 1.0, 0.0) - edit_bone.roll = 0.0 - edit_bone.layers = ROOT_LAYERS - bpy.ops.object.mode_set(mode='OBJECT') - - # key: bone name - # value: {type:definition, ...} - # where type is the submodule name - leg, arm etc - # and definition is a list of bone names - bone_definitions = {} - - # key: bone name - # value: [functions, ...] - # each function is from the module. eg leg.ik, arm.main - bone_typeinfos = {} - - # key: bone name - # value: [new_bone_name, ...] - # where each bone with a 'type' stores a list of bones that it created - # ...needed so we can override the root parent - bone_genesis = {} - - - # inspect all bones and assign their definitions before modifying - for pbone in obj.pose.bones: - bone_name = pbone.name - bone_type = pbone.get("type", "") - if bone_type: - bone_type_list = [bt for bt in bone_type.replace(",", " ").split()] - - # not essential but means running autorig again wont do anything - del pbone["type"] - else: - bone_type_list = [] - - for bone_type in bone_type_list: - type_name, submod, type_func = submodule_func_from_type(bone_type) - reload(submod) - - bone_def_dict = bone_definitions.setdefault(bone_name, {}) - - # Only calculate bone definitions once - if type_name not in bone_def_dict: - bone_def_dict[type_name] = submod.metarig_definition(obj, bone_name) - - bone_typeinfo = bone_typeinfos.setdefault(bone_name, []) - bone_typeinfo.append((type_name, type_func)) - - - # sort bones, not needed but gives more pradictable execution which may be useful in rare cases - bones_sorted = obj.pose.bones.values() - bones_sorted.sort(key=lambda pbone: pbone.name) # first sort by names - bones_sorted.sort(key=lambda pbone: len(pbone.parent_recursive)) # parents before children - - # now we have all the info about bones we can start operating on them - # for pbone in obj.pose.bones: - for pbone in bones_sorted: - bone_name = pbone.name - print(bone_name) - if bone_name not in bone_typeinfos: - continue - - bone_def_dict = bone_definitions[bone_name] - - # Only blend results from the same submodule, eg. - # leg.ik and arm.fk could not be blended. - results = OrderedDict() - - bone_names_pre = {bone.name for bone in arm.bones} - - for type_name, type_func in bone_typeinfos[bone_name]: - print(" " + type_name) - # this bones definition of the current typeinfo - definition = bone_def_dict[type_name] - options = get_bone_type_options(pbone, type_name) - - bpy.ops.object.mode_set(mode='EDIT') - ret = type_func(obj, definition, base_names, options) - bpy.ops.object.mode_set(mode='OBJECT') - - if ret: - result_submod = results.setdefault(type_name, []) - - if result_submod and len(result_submod[-1]) != len(ret): - raise RigifyError("bone lists not compatible: %s, %s" % (result_submod[-1], ret)) - - result_submod.append(ret) - - for result_submod in results.values(): - # blend 2 chains - definition = bone_def_dict[type_name] - - if len(result_submod) == 2: - blend_bone_list(obj, definition, result_submod[0], result_submod[1], target_bone=bone_name) - - - bone_names_post = {bone.name for bone in arm.bones} - - # Store which bones were created from this one - bone_genesis[bone_name] = list(bone_names_post - bone_names_pre) - - # need a reverse lookup on bone_genesis so as to know immediately - # where a bone comes from - bone_genesis_reverse = {} - ''' - for bone_name, bone_children in bone_genesis.items(): - for bone_child_name in bone_children: - bone_genesis_reverse[bone_child_name] = bone_name - ''' - - - if root_bone: - # assign all new parentless bones to this - - bpy.ops.object.mode_set(mode='EDIT') - root_ebone = arm.edit_bones[root_bone] - for ebone in arm.edit_bones: - bone_name = ebone.name - if ebone.parent is None: - ebone.parent = root_ebone - ''' - if ebone.parent is None and bone_name not in base_names: - # check for override - bone_creator = bone_genesis_reverse[bone_name] - pbone_creator = obj.pose.bones[bone_creator] - root_bone_override = pbone_creator.get("root", "") - - if root_bone_override: - root_ebone_tmp = arm.edit_bones[root_bone_override] - else: - root_ebone_tmp = root_ebone - - ebone.use_connect = False - ebone.parent = root_ebone_tmp - ''' - - bpy.ops.object.mode_set(mode='OBJECT') - - - if META_DEF: - # for pbone in obj_def.pose.bones: - for bone_name, bone_name_new in base_names.items(): - #pbone_from = bone_name - pbone = obj_def.pose.bones[bone_name_new] - - con = pbone.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = bone_name - - if not pbone.bone.use_connect: - con = pbone.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = bone_name - - # would be 'REST' from when copied - obj_def.data.pose_position = 'POSE' - - # todo - make a more generic system? - layer_tot = [False] * 32 - layer_last = layer_tot[:] - layer_last[31] = True - layer_second_last = layer_tot[:] - layer_second_last[30] = True - - for bone_name, bone in arm.bones.items(): - bone.use_deform = False # Non DEF bones shouldn't deform - if bone_name.startswith(ORG_PREFIX): - bone.layers = ORG_LAYERS - elif bone_name.startswith(MCH_PREFIX): # XXX fixme - bone.layers = MCH_LAYERS - elif bone_name.startswith(DEF_PREFIX): # XXX fixme - bone.layers = DEF_LAYERS - bone.use_deform = True - else: - # Assign bone appearance if there is a widget for it - obj.pose.bones[bone_name].custom_shape = context.scene.objects.get(WGT_PREFIX + bone_name) - - layer_tot[:] = [max(lay) for lay in zip(layer_tot, bone.layers)] - - # Only for demo'ing - layer_show = [a and not (b or c or d) for a, b, c, d in zip(layer_tot, ORG_LAYERS, MCH_LAYERS, DEF_LAYERS)] - arm.layers = layer_show - - - # obj.hide = True - obj.data.show_axes = False - - bpy.ops.object.mode_set(mode=mode_orig) - obj_orig.data.pose_position = rest_backup - obj.data.pose_position = 'POSE' - obj_orig.data.pose_position = 'POSE' - context.user_preferences.edit.use_global_undo = use_global_undo - - print("Done.\n") - - return obj - - -def generate_test(context, metarig_type="", GENERATE_FINAL=True): - import os - new_objects = [] - - scene = context.scene - - def create_empty_armature(name): - armature = bpy.data.armatures.new(name) - obj_new = bpy.data.objects.new(name, armature) - scene.objects.link(obj_new) - scene.objects.active = obj_new - for obj in scene.objects: - obj.select = False - obj_new.select = True - - for module_name in get_submodule_types(): - if (metarig_type and module_name != metarig_type): - continue - - # XXX workaround!, problem with updating the pose matrix. - if module_name == "delta": - continue - - type_name, submodule, func = submodule_func_from_type(module_name) - - metarig_template = getattr(submodule, "metarig_template", None) - - if metarig_template: - create_empty_armature("meta_" + module_name) # sets active - metarig_template() - obj = context.active_object - obj.location = scene.cursor_location - - if GENERATE_FINAL: - obj_new = generate_rig(context, obj) - new_objects.append((obj, obj_new)) - else: - new_objects.append((obj, None)) - else: - print("note: rig type '%s' has no metarig_template(), can't test this" % module_name) - - return new_objects - - -def generate_test_all(context, GRAPH=False): - import rigify - import rigify_utils - import graphviz_export - import os - reload(rigify) - reload(rigify_utils) - reload(graphviz_export) - - new_objects = rigify.generate_test(context) - - if GRAPH: - if(bpy.data.filepath): - base_name = os.path.splitext(bpy.data.filepath)[0] - else: - import tempfile - base_name = tempfile.mktemp(prefix=bpy.app.tempdir) - for obj, obj_new in new_objects: - for obj in (obj, obj_new): - fn = base_name + "-" + bpy.path.clean_name(obj.name) - - path_dot = fn + ".dot" - path_png = fn + ".png" - saved = graphviz_export.graph_armature(obj, path_dot, CONSTRAINTS=True, DRIVERS=True) - - #if saved: - # os.system("dot -Tpng %s > %s; eog %s" % (path_dot, path_png, path_png)) - - i = 0 - for obj, obj_new in new_objects: - obj.data.draw_type = 'STICK' - obj.location[1] += i - obj_new.location[1] += i - obj_new.select = False - obj.select = True - i += 4 - - -if __name__ == "__main__": - generate_rig(bpy.context, bpy.context.active_object) diff --git a/release/scripts/modules/rigify/arm_biped.py b/release/scripts/modules/rigify/arm_biped.py deleted file mode 100644 index ac878c3c076..00000000000 --- a/release/scripts/modules/rigify/arm_biped.py +++ /dev/null @@ -1,396 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from math import radians, pi -from rigify import RigifyError, ORG_PREFIX -from rigify_utils import bone_class_instance, copy_bone_simple, add_pole_target_bone, add_stretch_to, blend_bone_list, get_side_name, get_base_name -from rna_prop_ui import rna_idprop_ui_prop_get -from mathutils import Vector - -METARIG_NAMES = "shoulder", "arm", "forearm", "hand" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('shoulder') - bone.head[:] = 0.0000, -0.0425, 0.0000 - bone.tail[:] = 0.0942, -0.0075, 0.0333 - bone.roll = -0.2227 - bone.use_connect = False - bone = arm.edit_bones.new('upper_arm') - bone.head[:] = 0.1066, -0.0076, -0.0010 - bone.tail[:] = 0.2855, 0.0206, -0.0104 - bone.roll = 1.6152 - bone.use_connect = False - bone.parent = arm.edit_bones['shoulder'] - bone = arm.edit_bones.new('forearm') - bone.head[:] = 0.2855, 0.0206, -0.0104 - bone.tail[:] = 0.4550, -0.0076, -0.0023 - bone.roll = 1.5153 - bone.use_connect = True - bone.parent = arm.edit_bones['upper_arm'] - bone = arm.edit_bones.new('hand') - bone.head[:] = 0.4550, -0.0076, -0.0023 - bone.tail[:] = 0.5423, -0.0146, -0.0131 - bone.roll = -3.0083 - bone.use_connect = True - bone.parent = arm.edit_bones['forearm'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['upper_arm'] - pbone['type'] = 'arm_biped' - - -def metarig_definition(obj, orig_bone_name): - mt = bone_class_instance(obj, METARIG_NAMES) # meta - mt.arm = orig_bone_name - mt.update() - - mt.shoulder_p = mt.arm_p.parent - - if not mt.shoulder_p: - raise RigifyError("could not find '%s' parent, skipping:" % orig_bone_name) - - mt.shoulder = mt.shoulder_p.name - - # We could have some bones attached, find the bone that has this as its 2nd parent - hands = [] - for pbone in obj.pose.bones: - index = pbone.parent_index(mt.arm_p) - if index == 2 and pbone.bone.use_connect and pbone.bone.parent.use_connect: - hands.append(pbone) - - if len(hands) != 1: - raise RigifyError("Found %s possible hands attached to this arm, expected 1 from bone: %s" % ([pbone.name for pbone in hands], orig_bone_name)) - - # first add the 2 new bones - mt.hand_p = hands[0] - mt.hand = mt.hand_p.name - - mt.forearm_p = mt.hand_p.parent - mt.forearm = mt.forearm_p.name - - return mt.names() - - -def ik(obj, definitions, base_names, options): - - arm = obj.data - - mt = bone_class_instance(obj, METARIG_NAMES) - mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions - mt.update() - - ik = bone_class_instance(obj, ["pole", "pole_vis", "hand_vis"]) - ik_chain = mt.copy(to_fmt="MCH-%s_ik", base_names=base_names, exclude_attrs=["shoulder"]) - - # IK needs no parent_index - ik_chain.hand_e.use_connect = False - ik_chain.hand_e.parent = None - ik_chain.hand_e.use_local_location = False - ik_chain.rename("hand", get_base_name(base_names[mt.hand]) + "_ik" + get_side_name(mt.hand)) - - ik_chain.arm_e.use_connect = False - ik_chain.arm_e.parent = mt.shoulder_e - - # Add the bone used for the arms poll target - #ik.pole = add_pole_target_bone(obj, mt.forearm, get_base_name(base_names[mt.forearm]) + "_target" + get_side_name(mt.forearm), mode='ZAVERAGE') - ik.pole = add_pole_target_bone(obj, mt.forearm, "elbow_target" + get_side_name(mt.forearm), mode='ZAVERAGE') - - ik.update() - ik.pole_e.use_local_location = False - - # option: elbow_parent - elbow_parent_name = options.get("elbow_parent", "") - - if elbow_parent_name: - try: - elbow_parent_e = arm.edit_bones[ORG_PREFIX + elbow_parent_name] - except: - # TODO, old/new parent mapping - raise RigifyError("parent bone from property 'arm_biped_generic.elbow_parent' not found '%s'" % elbow_parent_name) - ik.pole_e.parent = elbow_parent_e - - # update bones after this! - ik.hand_vis = add_stretch_to(obj, mt.hand, ik_chain.hand, "VIS-%s_ik" % base_names[mt.hand]) - ik.pole_vis = add_stretch_to(obj, mt.forearm, ik.pole, "VIS-%s_ik" % base_names[mt.forearm]) - - ik.update() - ik.hand_vis_e.hide_select = True - ik.pole_vis_e.hide_select = True - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - ik.update() - ik_chain.update() - - # Set IK dof - ik_chain.forearm_p.lock_ik_x = False - ik_chain.forearm_p.lock_ik_y = True - ik_chain.forearm_p.lock_ik_z = True - - con = ik_chain.forearm_p.constraints.new('IK') - con.target = obj - con.subtarget = ik_chain.hand - con.pole_target = obj - con.pole_subtarget = ik.pole - - con.use_tail = True - con.use_stretch = True - con.use_target = True - con.use_rotation = False - con.chain_count = 2 - con.pole_angle = -pi/2 - - # last step setup layers - if "ik_layer" in options: - layer = [n==options["ik_layer"] for n in range(0,32)] - else: - layer = list(mt.arm_b.layers) - ik_chain.hand_b.layers = layer - ik.hand_vis_b.layers = layer - ik.pole_b.layers = layer - ik.pole_vis_b.layers = layer - - bpy.ops.object.mode_set(mode='EDIT') - # don't blend the shoulder - return [None] + ik_chain.names() - - -def fk(obj, definitions, base_names, options): - - arm = obj.data - - mt = bone_class_instance(obj, METARIG_NAMES) - mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions - mt.update() - - ex = bone_class_instance(obj, ["socket", "hand_delta"]) - fk_chain = mt.copy(base_names=base_names) - - # shoulder is used as a hinge - fk_chain.rename("shoulder", "MCH-%s_hinge" % base_names[mt.arm]) - fk_chain.shoulder_e.translate(Vector((0.0, fk_chain.shoulder_e.length / 2, 0.0))) - - # upper arm constrains to this. - ex.socket_e = copy_bone_simple(arm, mt.arm, "MCH-%s_socket" % base_names[mt.arm]) - ex.socket = ex.socket_e.name - ex.socket_e.use_connect = False - ex.socket_e.parent = mt.shoulder_e - ex.socket_e.length *= 0.5 - - # insert the 'MCH-delta_hand', between the forearm and the hand - # copies forarm rotation - ex.hand_delta_e = copy_bone_simple(arm, fk_chain.hand, "MCH-delta_%s" % base_names[mt.hand], parent=True) - ex.hand_delta = ex.hand_delta_e.name - ex.hand_delta_e.length *= 0.5 - ex.hand_delta_e.use_connect = False - if "hand_roll" in options: - ex.hand_delta_e.roll += radians(options["hand_roll"]) - - fk_chain.hand_e.use_connect = False - fk_chain.hand_e.parent = ex.hand_delta_e - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - ex.update() - fk_chain.update() - - # Set rotation modes and axis locks - fk_chain.forearm_p.rotation_mode = 'XYZ' - fk_chain.forearm_p.lock_rotation = (False, True, True) - fk_chain.hand_p.rotation_mode = 'ZXY' - fk_chain.arm_p.lock_location = True, True, True - - con = fk_chain.arm_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.socket - - fk_chain.hand_p.lock_location = True, True, True - con = ex.hand_delta_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = fk_chain.forearm - - def hinge_setup(): - # Hinge constraint & driver - con = fk_chain.shoulder_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = mt.shoulder - driver_fcurve = con.driver_add("influence") - driver = driver_fcurve.driver - - - controller_path = fk_chain.arm_p.path_from_id() - # add custom prop - fk_chain.arm_p["hinge"] = 0.0 - prop = rna_idprop_ui_prop_get(fk_chain.arm_p, "hinge", create=True) - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - - # ***** - driver = driver_fcurve.driver - driver.type = 'AVERAGE' - - var = driver.variables.new() - var.name = "hinge" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '["hinge"]' - - mod = driver_fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - hinge_setup() - - # last step setup layers - if "fk_layer" in options: - layer = [n==options["fk_layer"] for n in range(0,32)] - else: - layer = list(mt.arm_b.layers) - fk_chain.arm_b.layers = layer - fk_chain.forearm_b.layers = layer - fk_chain.hand_b.layers = layer - - # Forearm was getting wrong roll somehow. Hack to fix that. - bpy.ops.object.mode_set(mode='EDIT') - fk_chain.update() - mt.update() - fk_chain.forearm_e.roll = mt.forearm_e.roll - bpy.ops.object.mode_set(mode='OBJECT') - - bpy.ops.object.mode_set(mode='EDIT') - return None, fk_chain.arm, fk_chain.forearm, fk_chain.hand - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create upper arm bones: two bones, each half of the upper arm. - uarm1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True) - uarm2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True) - uarm1.use_connect = False - uarm2.use_connect = False - uarm2.parent = uarm1 - center = uarm1.center - uarm1.tail = center - uarm2.head = center - - # Create forearm bones: two bones, each half of the forearm. - farm1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True) - farm2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True) - farm1.use_connect = False - farm2.use_connect = False - farm2.parent = farm1 - center = farm1.center - farm1.tail = center - farm2.head = center - - # Create twist bone - twist = copy_bone_simple(obj.data, definitions[2], "MCH-arm_twist") - twist.use_connect = False - twist.parent = obj.data.edit_bones[definitions[3]] - twist.length /= 2 - - # Create hand bone - hand = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True) - - # Store names before leaving edit mode - uarm1_name = uarm1.name - uarm2_name = uarm2.name - farm1_name = farm1.name - farm2_name = farm2.name - twist_name = twist.name - hand_name = hand.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - uarm1 = obj.pose.bones[uarm1_name] - uarm2 = obj.pose.bones[uarm2_name] - farm1 = obj.pose.bones[farm1_name] - farm2 = obj.pose.bones[farm2_name] - twist = obj.pose.bones[twist_name] - hand = obj.pose.bones[hand_name] - - # Upper arm constraints - con = uarm1.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[2] - - con = uarm1.constraints.new('COPY_SCALE') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[1] - - con = uarm2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[1] - - # Forearm constraints - con = farm1.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = farm1.constraints.new('COPY_SCALE') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = farm2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = twist.name - - con = farm2.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[3] - - # Hand constraint - con = hand.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[3] - - bpy.ops.object.mode_set(mode='EDIT') - return (uarm1_name, uarm2_name, farm1_name, farm2_name, hand_name) - - -def main(obj, bone_definition, base_names, options): - bones_fk = fk(obj, bone_definition, base_names, options) - bones_ik = ik(obj, bone_definition, base_names, options) - bones_deform = deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - blend_bone_list(obj, bone_definition, bones_fk, bones_ik, target_bone=bones_ik[3], target_prop="ik", blend_default=0.0) diff --git a/release/scripts/modules/rigify/copy.py b/release/scripts/modules/rigify/copy.py deleted file mode 100644 index c051e5bb7f6..00000000000 --- a/release/scripts/modules/rigify/copy.py +++ /dev/null @@ -1,112 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify_utils import bone_class_instance, copy_bone_simple - -METARIG_NAMES = ("cpy",) - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, definitions[0], "DEF-%s" % base_names[definitions[0]], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = definitions[0] - - return (bone_name,) - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - mt = bone_class_instance(obj, METARIG_NAMES) - mt.cpy = definitions[0] - mt.update() - cp = bone_class_instance(obj, ["cpy"]) - cp.cpy_e = copy_bone_simple(arm, mt.cpy, base_names[mt.cpy], parent=True) - cp.cpy = cp.cpy_e.name - - bpy.ops.object.mode_set(mode='OBJECT') - - cp.update() - mt.update() - - con = mt.cpy_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = cp.cpy - - - # Rotation mode and axis locks - cp.cpy_p.rotation_mode = mt.cpy_p.rotation_mode - cp.cpy_p.lock_location = tuple(mt.cpy_p.lock_location) - cp.cpy_p.lock_rotations_4d = mt.cpy_p.lock_rotations_4d - cp.cpy_p.lock_rotation = tuple(mt.cpy_p.lock_rotation) - cp.cpy_p.lock_rotation_w = mt.cpy_p.lock_rotation_w - cp.cpy_p.lock_scale = tuple(mt.cpy_p.lock_scale) - - # Layers - cp.cpy_b.layers = list(mt.cpy_b.layers) - - return (mt.cpy,) - - -def main(obj, bone_definition, base_names, options): - # Create control bone - cpy = control(obj, bone_definition, base_names, options)[0] - # Create deform bone - deform(obj, bone_definition, base_names, options) - - return (cpy,) diff --git a/release/scripts/modules/rigify/delta.py b/release/scripts/modules/rigify/delta.py deleted file mode 100644 index d0b4fbccce9..00000000000 --- a/release/scripts/modules/rigify/delta.py +++ /dev/null @@ -1,162 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError - -# not used, defined for completeness -METARIG_NAMES = tuple() - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('bonesker') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = -0.0000, 0.7382, 0.1895 - bone.roll = -0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('delta') - bone.head[:] = -0.0497, 0.8414, 0.3530 - bone.tail[:] = -0.2511, 1.1588, 0.9653 - bone.roll = 2.6044 - bone.use_connect = False - bone.parent = arm.edit_bones['bonesker'] - bone = arm.edit_bones.new('boney') - bone.head[:] = 0.7940, 2.5592, 0.4134 - bone.tail[:] = 0.7940, 3.3975, 0.4890 - bone.roll = 3.1416 - bone.use_connect = False - bone.parent = arm.edit_bones['delta'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['delta'] - pbone['type'] = 'delta' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the head, its parent is the body, - # its only child the first of a chain with matching basenames. - eg. - body -> head -> neck_01 -> neck_02 -> neck_03.... etc - ''' - arm = obj.data - delta = arm.bones[orig_bone_name] - children = delta.children - - if len(children) != 1: - raise RigifyError("only 1 child supported for delta on bone '%s'" % delta.name) - - if delta.use_connect: - raise RigifyError("bone cannot be connected to its parent '%s'" % delta.name) - - bone_definition = [delta.name, children[0].name] - - return bone_definition - - -def main(obj, bone_definition, base_names, options): - ''' - Use this bone to define a delta thats applied to its child in pose mode. - ''' - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='OBJECT') - - delta_name, child_name = bone_definition - - delta_pbone = obj.pose.bones[delta_name] - - arm = obj.data - child_pbone = obj.pose.bones[child_name] - - delta_phead = delta_pbone.head.copy() - delta_ptail = delta_pbone.tail.copy() - delta_pmatrix = delta_pbone.matrix.copy() - - child_phead = child_pbone.head.copy() - child_ptail = child_pbone.tail.copy() - child_pmatrix = child_pbone.matrix.copy() - - - children = delta_pbone.children - - bpy.ops.object.mode_set(mode='EDIT') - - delta_ebone = arm.edit_bones[delta_name] - child_ebone = arm.edit_bones[child_name] - - delta_head = delta_ebone.head.copy() - delta_tail = delta_ebone.tail.copy() - - child_head = child_ebone.head.copy() - child_tail = child_ebone.tail.copy() - - #arm.edit_bones.remove(delta_ebone) - #del delta_ebone # cant use this - del child_pbone - - bpy.ops.object.mode_set(mode='OBJECT') - - - # Move the child bone to the deltas location - obj.animation_data_create() - delta_pbone = obj.pose.bones[delta_name] - # child_pbone = obj.pose.bones[child_name] - - # ------------------- drivers - - delta_pbone.rotation_mode = 'XYZ' - - rot = delta_pmatrix.invert().rotation_part() * child_pmatrix.rotation_part() - rot = rot.invert().to_euler() - - fcurve_drivers = delta_pbone.driver_add("rotation_euler", -1) - for i, fcurve_driver in enumerate(fcurve_drivers): - driver = fcurve_driver.driver - driver.type = 'AVERAGE' - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve_driver.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = rot[i] - mod.coefficients[1] = 0.0 - - # tricky, find the transform to drive the bone to this location. - delta_head_offset = child_pmatrix.rotation_part() * (delta_phead - child_phead) - - fcurve_drivers = delta_pbone.driver_add("location", -1) - for i, fcurve_driver in enumerate(fcurve_drivers): - driver = fcurve_driver.driver - driver.type = 'AVERAGE' - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve_driver.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = delta_head_offset[i] - mod.coefficients[1] = 0.0 - - - bpy.ops.object.mode_set(mode='EDIT') - - bpy.ops.object.mode_set(mode=mode_orig) - - # no blendeing - return None diff --git a/release/scripts/modules/rigify/eye_balls.py b/release/scripts/modules/rigify/eye_balls.py deleted file mode 100644 index 127ee87123f..00000000000 --- a/release/scripts/modules/rigify/eye_balls.py +++ /dev/null @@ -1,405 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from mathutils import Vector -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "eye_balls" - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - new = False - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - new = True - - return fcurve, new - - -def create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression): - """ Creates/gets a shape key and sets up a driver for it. - - obj = armature object - bone = driving bone name - meshes = list of meshes to create the shapekey/driver on - shape_name = name of the shape key - var_name = name of the driving variable - var_path = path to the property on the bone to drive with - expression = python expression for the driver - """ - pb = obj.pose.bones - bpy.ops.object.mode_set(mode='OBJECT') - - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape = addget_shape_key(mesh_obj, name=shape_name) - - # Add/get the shape key driver - fcurve, a = addget_shape_key_driver(mesh_obj, name=shape_name) - - # Set up the driver - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = expression - - # Get the variable, or create it if it doesn't already exist - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "SINGLE_PROP" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = 'pose.bones["' + bone + '"]' + var_path - - -def mark_actions(): - for action in bpy.data.actions: - action.tag = True - -def get_unmarked_action(): - for action in bpy.data.actions: - if action.tag != True: - return action - return None - -def add_action(name=None): - mark_actions() - bpy.ops.action.new() - action = get_unmarked_action() - if name is not None: - action.name = name - return action - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - chain = [] - - try: - chain += [bone.parent.name, bone.name] - except AttributeError: - raise RigifyError("'%s' rig type requires a parent (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - return chain - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Get list of eyes - if "eyes" in options: - eye_base_names = options["eyes"].replace(" ", "").split(",") - else: - eye_base_names = [] - - # Get their ORG- names - eyes = [] - for name in eye_base_names: - eyes += ["ORG-"+name] - - # Duplicate the eyes to make deformation bones - def_eyes = [] # def/org pairs - for eye in eyes: - def_eyes += [(copy_bone_simple(obj.data, eye, "DEF-"+base_names[eye], parent=True).name, eye)] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - for eye in def_eyes: - con = pb[eye[0]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = eye[1] - - return (None,) - - - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - head = definitions[0] - eye_target = definitions[1] - - # Get list of pupil mesh objects - if "mesh" in options: - pupil_meshes = options["mesh"].replace(" ", "").split(",") - else: - pupil_meshes = [] - - # Get list of eyes - if "eyes" in options: - eye_base_names = options["eyes"].replace(" ", "").split(",") - else: - eye_base_names = [] - - # Get their ORG- names - eyes = [] - for name in eye_base_names: - eyes += ["ORG-"+name] - - # Get the average position of the eyes - center = Vector((0, 0, 0)) - for eye in eyes: - center += eb[eye].head - if len(eyes) != 0: - center /= len(eyes) - - # Get the average length of the eyes - length = 0.0 - for eye in eyes: - length += eb[eye].length - if len(eyes) == 0: - length = 1.0 - else: - length /= len(eyes) - - - # Make the mind's eye - minds_eye = copy_bone_simple(obj.data, eye_target, "MCH-"+base_names[eye_target]+".mind", parent=True).name - eb[minds_eye].head = center - eb[minds_eye].tail = eb[eye_target].head - eb[minds_eye].roll = 0.0 - eb[minds_eye].length = length - - # Create org/copy/control eye sets - eye_sets = [] - for eye in eyes: - copy = copy_bone_simple(obj.data, minds_eye, "MCH-"+base_names[eye]+".cpy", parent=True).name - eb[copy].translate(eb[eye].head - eb[copy].head) - eb[copy].parent = eb[eye].parent - - control = copy_bone_simple(obj.data, eye, base_names[eye], parent=True).name - eb[control].parent = eb[copy] - - eye_sets += [(eye, copy, control)] - - # Bones for parent/free switch for eye target - target_ctrl = copy_bone_simple(obj.data, eye_target, base_names[eye_target], parent=True).name - parent = copy_bone_simple(obj.data, head, "MCH-eye_target_parent", parent=False).name - - eb[target_ctrl].parent = eb[parent] - - - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Axis locks - pb[target_ctrl].lock_scale = False, True, True - - # Add eye_spread action if it doesn't already exist - action_name = "eye_spread" - if action_name in bpy.data.actions: - spread_action = bpy.data.actions[action_name] - else: - spread_action = add_action(name=action_name) - - # Add free property - prop_name = "free" - prop = rna_idprop_ui_prop_get(pb[target_ctrl], prop_name, create=True) - pb[target_ctrl][prop_name] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - free_driver_path = pb[target_ctrl].path_from_id() + '["free"]' - - # Constraints - # Mind's eye tracks eye target control - con = pb[minds_eye].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = target_ctrl - - # Parent copies transforms of head - con = pb[parent].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = head - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - mod = fcurve.modifiers[0] - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - var = driver.variables.new() - var.name = "free" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = free_driver_path - - # Eye set's constraints - for eye in eye_sets: - # Org copies transforms of control - con = pb[eye[0]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = eye[2] - - # Copy copies rotation of mind's eye - con = pb[eye[1]].constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = minds_eye - - # Control gets action constraint for eye spread - con = pb[eye[2]].constraints.new('ACTION') - con.target = obj - con.subtarget = target_ctrl - con.action = spread_action - con.transform_channel = 'SCALE_X' - con.frame_start = -20 - con.frame_end = 20 - con.min = 0.0 - con.max = 2.0 - con.target_space = 'LOCAL' - - - # Get/create the shape keys and drivers for pupil dilation - shape_names = ["PUPILS-dilate_wide", "PUPILS-dilate_narrow"] - slider_name = "pupil_dilate" - - # Set up the custom property on the bone - prop = rna_idprop_ui_prop_get(pb[target_ctrl], slider_name, create=True) - pb[target_ctrl][slider_name] = 0.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - if len(shape_names) > 1: - prop["min"] = -1.0 - prop["soft_min"] = -1.0 - - # Add the shape drivers - # Positive - if shape_names[0] != "": - # Set up the variables for creating the shape key driver - shape_name = shape_names[0] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) - # Create the shape key driver - create_shape_and_driver(obj, target_ctrl, pupil_meshes, shape_name, var_name, var_path, expression) - # Negative - if shape_names[0] != "" and len(shape_names) > 1: - # Set up the variables for creating the shape key driver - shape_name = shape_names[1] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) + " * -1" - # Create the shape key driver - create_shape_and_driver(obj, target_ctrl, pupil_meshes, shape_name, var_name, var_path, expression) - - - - # Set layers - #layer = list(bb[definitions[2]].layers) - #bb[lid1].layers = layer - #bb[lid2].layers = layer - #bb[lid3].layers = layer - #bb[lid4].layers = layer - #bb[lid5].layers = layer - #bb[lid6].layers = layer - #bb[lid7].layers = layer - #bb[lid8].layers = layer - - - return (None,) - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - diff --git a/release/scripts/modules/rigify/eye_lid.py b/release/scripts/modules/rigify/eye_lid.py deleted file mode 100644 index 3f336e268c6..00000000000 --- a/release/scripts/modules/rigify/eye_lid.py +++ /dev/null @@ -1,687 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from math import acos -from mathutils import Vector -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "eye_lid" - -def mark_actions(): - for action in bpy.data.actions: - action.tag = True - -def get_unmarked_action(): - for action in bpy.data.actions: - if action.tag != True: - return action - return None - -def add_action(name=None): - mark_actions() - bpy.ops.action.new() - action = get_unmarked_action() - if name is not None: - action.name = name - return action - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bb = obj.data.bones - bone = bb[orig_bone_name] - chain = [] - - try: - chain += [bone.parent.parent.name, bone.parent.name, bone.name] - except AttributeError: - raise RigifyError("'%s' rig type requires a chain of two parents (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - chain += [child.name for child in bone.children_recursive_basename] - - if len(chain) < 10: - raise RigifyError("'%s' rig type requires a chain of 10 bones (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - chain = chain[:10] - - try: - chain += [bb[chain[9]].children[0].name] - chain += [bb[chain[10]].children[0].name] - except IndexError: - raise RigifyError("'%s' rig type requires a chain of 10 bones (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - return chain - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - pb = obj.pose.bones - - - # Upper lid MCH - lid1 = make_lid_stretch_bone(obj, "MCH-lid", definitions[2], definitions[3], 1.0) - lid2 = make_lid_stretch_bone(obj, "MCH-lid", definitions[3], definitions[4], 1.0) - lid22 = make_lid_stretch_bone(obj, "MCH-lid", definitions[4], definitions[5], 1.0) - lid33 = make_lid_stretch_bone(obj, "MCH-lid", definitions[4], definitions[3], 1.0) - lid3 = make_lid_stretch_bone(obj, "MCH-lid", definitions[5], definitions[4], 1.0) - lid4 = make_lid_stretch_bone(obj, "MCH-lid", definitions[6], definitions[5], 1.0) - - dlid22 = copy_bone_simple(obj.data, lid22, "MCH-lid", parent=True).name - dlid33 = copy_bone_simple(obj.data, lid33, "MCH-lid", parent=True).name - eb[dlid22].bbone_segments = 8 - eb[dlid33].bbone_segments = 8 - - eb[lid1].parent = eb[definitions[2]] - eb[lid2].parent = eb[definitions[3]] - eb[lid22].parent = eb[definitions[4]] - eb[lid33].parent = eb[definitions[4]] - eb[lid3].parent = eb[definitions[5]] - eb[lid4].parent = eb[definitions[6]] - - # Lower lid MCH - lid5 = make_lid_stretch_bone(obj, "MCH-lid", definitions[6], definitions[7], 1.0) - lid6 = make_lid_stretch_bone(obj, "MCH-lid", definitions[7], definitions[8], 1.0) - lid66 = make_lid_stretch_bone(obj, "MCH-lid", definitions[8], definitions[9], 1.0) - lid77 = make_lid_stretch_bone(obj, "MCH-lid", definitions[8], definitions[7], 1.0) - lid7 = make_lid_stretch_bone(obj, "MCH-lid", definitions[9], definitions[8], 1.0) - lid8 = make_lid_stretch_bone(obj, "MCH-lid", definitions[2], definitions[9], 1.0) - - dlid66 = copy_bone_simple(obj.data, lid66, "MCH-lid", parent=True).name - dlid77 = copy_bone_simple(obj.data, lid77, "MCH-lid", parent=True).name - eb[dlid66].bbone_segments = 8 - eb[dlid77].bbone_segments = 8 - - eb[lid5].parent = eb[definitions[6]] - eb[lid6].parent = eb[definitions[7]] - eb[lid66].parent = eb[definitions[8]] - eb[lid77].parent = eb[definitions[8]] - eb[lid7].parent = eb[definitions[9]] - eb[lid8].parent = eb[definitions[2]] - - # Upper lid DEF - dlid1 = copy_bone_simple(obj.data, lid1, "DEF-" + base_names[definitions[2]], parent=True).name - dlid2 = copy_bone_simple(obj.data, lid2, "DEF-" + base_names[definitions[3]], parent=True).name - dlid3 = copy_bone_simple(obj.data, lid3, "DEF-" + base_names[definitions[4]], parent=True).name - dlid4 = copy_bone_simple(obj.data, lid4, "DEF-" + base_names[definitions[5]], parent=True).name - - eb[dlid2].parent = eb[dlid1] - eb[dlid22].parent = eb[dlid2] - - eb[dlid3].parent = eb[dlid4] - eb[dlid33].parent = eb[dlid3] - - eb[dlid2].use_connect = True - eb[dlid22].use_connect = True - eb[dlid3].use_connect = True - eb[dlid33].use_connect = True - - eb[dlid1].bbone_segments = 8 - eb[dlid2].bbone_segments = 8 - eb[dlid3].bbone_segments = 8 - eb[dlid4].bbone_segments = 8 - - # Lower lid DEF - dlid5 = copy_bone_simple(obj.data, lid5, "DEF-" + base_names[definitions[6]], parent=True).name - dlid6 = copy_bone_simple(obj.data, lid6, "DEF-" + base_names[definitions[7]], parent=True).name - dlid7 = copy_bone_simple(obj.data, lid7, "DEF-" + base_names[definitions[8]], parent=True).name - dlid8 = copy_bone_simple(obj.data, lid8, "DEF-" + base_names[definitions[9]], parent=True).name - - eb[dlid6].parent = eb[dlid5] - eb[dlid66].parent = eb[dlid6] - - eb[dlid7].parent = eb[dlid8] - eb[dlid77].parent = eb[dlid7] - - eb[dlid6].use_connect = True - eb[dlid66].use_connect = True - eb[dlid7].use_connect = True - eb[dlid77].use_connect = True - - eb[dlid5].bbone_segments = 8 - eb[dlid6].bbone_segments = 8 - eb[dlid7].bbone_segments = 8 - eb[dlid8].bbone_segments = 8 - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - con = pb[dlid1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid1 - - con = pb[dlid22].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid22 - - con = pb[dlid33].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid33 - - con = pb[dlid2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid2 - - con = pb[dlid3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid3 - - con = pb[dlid4].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid4 - - con = pb[dlid5].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid5 - - con = pb[dlid6].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid6 - - con = pb[dlid66].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid66 - - con = pb[dlid77].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid77 - - con = pb[dlid7].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid7 - - con = pb[dlid8].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lid8 - - return (None,) - - - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - head_e = eb[definitions[0]] - eye_e = eb[definitions[1]] - - - # Make eye "flower" - flo1 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[2]]+".flower", parent=True).name - flo2 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[3]]+".flower", parent=True).name - flo3 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[4]]+".flower", parent=True).name - flo4 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[5]]+".flower", parent=True).name - flo5 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[6]]+".flower", parent=True).name - flo6 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[7]]+".flower", parent=True).name - flo7 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[8]]+".flower", parent=True).name - flo8 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[9]]+".flower", parent=True).name - - eb[flo1].tail = eb[definitions[2]].head - eb[flo2].tail = eb[definitions[3]].head - eb[flo3].tail = eb[definitions[4]].head - eb[flo4].tail = eb[definitions[5]].head - eb[flo5].tail = eb[definitions[6]].head - eb[flo6].tail = eb[definitions[7]].head - eb[flo7].tail = eb[definitions[8]].head - eb[flo8].tail = eb[definitions[9]].head - - - # Make eye lids on tips of flowers - flid1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]).name - flid2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]).name - flid3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]).name - flid4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]).name - flid5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]).name - flid6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]).name - flid7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]).name - flid8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]).name - - eb[flid1].parent = eb[flo1] - eb[flid2].parent = eb[flo2] - eb[flid3].parent = eb[flo3] - eb[flid4].parent = eb[flo4] - eb[flid5].parent = eb[flo5] - eb[flid6].parent = eb[flo6] - eb[flid7].parent = eb[flo7] - eb[flid8].parent = eb[flo8] - - - # Make eye lid controls - lid1 = copy_bone_simple(obj.data, definitions[2], base_names[definitions[2]]).name - lid2 = copy_bone_simple(obj.data, definitions[3], base_names[definitions[3]]).name - lid3 = copy_bone_simple(obj.data, definitions[4], base_names[definitions[4]]).name - lid4 = copy_bone_simple(obj.data, definitions[5], base_names[definitions[5]]).name - lid5 = copy_bone_simple(obj.data, definitions[6], base_names[definitions[6]]).name - lid6 = copy_bone_simple(obj.data, definitions[7], base_names[definitions[7]]).name - lid7 = copy_bone_simple(obj.data, definitions[8], base_names[definitions[8]]).name - lid8 = copy_bone_simple(obj.data, definitions[9], base_names[definitions[9]]).name - - size = eb[lid1].length - size_y = Vector(0.0, size, 0.0) - eb[lid1].tail = eb[lid1].head + size_y - eb[lid2].tail = eb[lid2].head + size_y - eb[lid3].tail = eb[lid3].head + size_y - eb[lid4].tail = eb[lid4].head + size_y - eb[lid5].tail = eb[lid5].head + size_y - eb[lid6].tail = eb[lid6].head + size_y - eb[lid7].tail = eb[lid7].head + size_y - eb[lid8].tail = eb[lid8].head + size_y - - eb[lid1].roll = 0 - eb[lid2].roll = 0 - eb[lid3].roll = 0 - eb[lid4].roll = 0 - eb[lid5].roll = 0 - eb[lid6].roll = 0 - eb[lid7].roll = 0 - eb[lid8].roll = 0 - - eb[lid1].parent = head_e - eb[lid2].parent = head_e - eb[lid3].parent = head_e - eb[lid4].parent = head_e - eb[lid5].parent = head_e - eb[lid6].parent = head_e - eb[lid7].parent = head_e - eb[lid8].parent = head_e - - lower_lid_ctrl = copy_bone_simple(obj.data, definitions[10], base_names[definitions[10]]).name - upper_lid_ctrl = copy_bone_simple(obj.data, definitions[11], base_names[definitions[11]]).name - eb[lower_lid_ctrl].parent = head_e - eb[upper_lid_ctrl].parent = head_e - distance = (eb[lower_lid_ctrl].head - eb[upper_lid_ctrl].head).length - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Axis locks - pb[lower_lid_ctrl].lock_location = True, False, True - pb[upper_lid_ctrl].lock_location = True, False, True - - # Add eye close action if it doesn't already exist - action_name = "eye_close" - if action_name in bpy.data.actions: - close_action = bpy.data.actions[action_name] - else: - close_action = add_action(name=action_name) - - # Add close property (useful when making the animation in the action) - prop_name = "close_action" - prop = rna_idprop_ui_prop_get(pb[upper_lid_ctrl], prop_name, create=True) - pb[upper_lid_ctrl][prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - close_driver_path = pb[upper_lid_ctrl].path_from_id() + '["close_action"]' - - # Constraints - - # Flowers track lid controls - con = pb[flo1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid1 - - con = pb[flo2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid2 - - con = pb[flo3].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid3 - - con = pb[flo4].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid4 - - con = pb[flo5].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid5 - - con = pb[flo6].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid6 - - con = pb[flo7].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid7 - - con = pb[flo8].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lid8 - - - # ORG bones to flower lids - con = pb[definitions[2]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid1 - - con = pb[definitions[3]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid2 - - con = pb[definitions[4]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid3 - - con = pb[definitions[5]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid4 - - con = pb[definitions[6]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid5 - - con = pb[definitions[7]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid6 - - con = pb[definitions[8]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid7 - - con = pb[definitions[9]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = flid8 - - - # Action constraints, upper lid - con = pb[lid1].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - - con = pb[lid2].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid3].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid4].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid5].constraints.new('ACTION') - con.target = obj - con.subtarget = upper_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance*2 - con.max = distance - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - # Action constraints, lower lid - con = pb[lid5].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid6].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid7].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid8].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - con = pb[lid1].constraints.new('ACTION') - con.target = obj - con.subtarget = lower_lid_ctrl - con.action = close_action - con.transform_channel = 'LOCATION_Y' - con.frame_start = -30 - con.frame_end = 30 - con.min = -distance - con.max = distance*2 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = close_driver_path - - - - - # Set layers - layer = list(bb[definitions[2]].layers) - bb[lid1].layers = layer - bb[lid2].layers = layer - bb[lid3].layers = layer - bb[lid4].layers = layer - bb[lid5].layers = layer - bb[lid6].layers = layer - bb[lid7].layers = layer - bb[lid8].layers = layer - - - return (None,) - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - - - - -def make_lid_stretch_bone(obj, name, bone1, bone2, roll_alpha): - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Create the bone, pointing from bone1 to bone2 - bone_e = copy_bone_simple(obj.data, bone1, name, parent=True) - bone_e.use_connect = False - bone_e.tail = eb[bone2].head - bone = bone_e.name - - # Align the bone roll with the average direction of bone1 and bone2 - vec = bone_e.y_axis.cross(((1.0-roll_alpha)*eb[bone1].y_axis) + (roll_alpha*eb[bone2].y_axis)).normalize() - - ang = acos(vec * bone_e.x_axis) - - bone_e.roll += ang - c1 = vec * bone_e.x_axis - bone_e.roll -= (ang*2) - c2 = vec * bone_e.x_axis - - if c1 > c2: - bone_e.roll += (ang*2) - - bpy.ops.object.mode_set(mode='OBJECT') - bone_p = pb[bone] - - # Constrains - con = bone_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = bone1 - - con = bone_p.constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = bone2 - - con = bone_p.constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = bone2 - con.volume = 'NO_VOLUME' - - bpy.ops.object.mode_set(mode='EDIT') - - return bone diff --git a/release/scripts/modules/rigify/finger_curl.py b/release/scripts/modules/rigify/finger_curl.py deleted file mode 100644 index 947ec75c9f8..00000000000 --- a/release/scripts/modules/rigify/finger_curl.py +++ /dev/null @@ -1,378 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple, get_side_name -from rna_prop_ui import rna_idprop_ui_prop_get - -METARIG_NAMES = "finger_01", "finger_02", "finger_03" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('finger.01') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0353, -0.0184, -0.0053 - bone.roll = -2.8722 - bone.use_connect = False - bone = arm.edit_bones.new('finger.02') - bone.head[:] = 0.0353, -0.0184, -0.0053 - bone.tail[:] = 0.0702, -0.0364, -0.0146 - bone.roll = -2.7099 - bone.use_connect = True - bone.parent = arm.edit_bones['finger.01'] - bone = arm.edit_bones.new('finger.03') - bone.head[:] = 0.0702, -0.0364, -0.0146 - bone.tail[:] = 0.0903, -0.0461, -0.0298 - bone.roll = -2.1709 - bone.use_connect = True - bone.parent = arm.edit_bones['finger.02'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['finger.01'] - pbone['type'] = 'finger_curl' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in a chain - Expects a chain with at least 1 child of the same base name. - eg. - finger_01 -> finger_02 - ''' - - orig_bone = obj.data.bones[orig_bone_name] - - bone_definition = [orig_bone.name] - - bone_definition.extend([child.name for child in orig_bone.children_recursive_basename]) - - if len(bone_definition) < 2: - raise RigifyError("expected the chain to have at least 1 child from bone '%s' without the same base name" % orig_bone_name) - - return bone_definition - - -def deform(obj, definitions, base_names, options): - """ Creates the deform rig. - """ - bpy.ops.object.mode_set(mode='EDIT') - - three_digits = True if len(definitions) > 2 else False - - # Create base digit bones: two bones, each half of the base digit. - f1a = copy_bone_simple(obj.data, definitions[0], "DEF-%s.01" % base_names[definitions[0]], parent=True) - f1b = copy_bone_simple(obj.data, definitions[0], "DEF-%s.02" % base_names[definitions[0]], parent=True) - f1a.use_connect = False - f1b.use_connect = False - f1b.parent = f1a - center = f1a.center - f1a.tail = center - f1b.head = center - - # Create the other deform bones. - f2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s" % base_names[definitions[1]], parent=True) - if three_digits: - f3 = copy_bone_simple(obj.data, definitions[2], "DEF-%s" % base_names[definitions[2]], parent=True) - - # Store names before leaving edit mode - f1a_name = f1a.name - f1b_name = f1b.name - f2_name = f2.name - if three_digits: - f3_name = f3.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - f1a = obj.pose.bones[f1a_name] - f1b = obj.pose.bones[f1b_name] - f2 = obj.pose.bones[f2_name] - if three_digits: - f3 = obj.pose.bones[f3_name] - - # Constrain the base digit's bones - con = f1a.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[1] - - con = f1a.constraints.new('COPY_SCALE') - con.name = "copy_scale" - con.target = obj - con.subtarget = definitions[0] - - con = f1b.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[0] - - # Constrain the other digit's bones - con = f2.constraints.new('COPY_TRANSFORMS') - con.name = "copy_transforms" - con.target = obj - con.subtarget = definitions[1] - - if three_digits: - con = f3.constraints.new('COPY_TRANSFORMS') - con.name = "copy_transforms" - con.target = obj - con.subtarget = definitions[2] - - -def main(obj, bone_definition, base_names, options): - # *** EDITMODE - bpy.ops.object.mode_set(mode='EDIT') - - three_digits = True if len(bone_definition) > 2 else False - - # get assosiated data - arm = obj.data - bb = obj.data.bones - eb = obj.data.edit_bones - pb = obj.pose.bones - - org_f1 = bone_definition[0] # Original finger bone 01 - org_f2 = bone_definition[1] # Original finger bone 02 - if three_digits: - org_f3 = bone_definition[2] # Original finger bone 03 - - # Check options - if "bend_ratio" in options: - bend_ratio = options["bend_ratio"] - else: - bend_ratio = 0.4 - - yes = [1, 1.0, True, "True", "true", "Yes", "yes"] - make_hinge = False - if ("hinge" in options) and (eb[org_f1].parent is not None): - if options["hinge"] in yes: - make_hinge = True - - - # Needed if its a new armature with no keys - obj.animation_data_create() - - # Create the control bone - base_name = base_names[bone_definition[0]].split(".", 1)[0] - if three_digits: - tot_len = eb[org_f1].length + eb[org_f2].length + eb[org_f3].length - else: - tot_len = eb[org_f1].length + eb[org_f2].length - control = copy_bone_simple(arm, bone_definition[0], base_name + get_side_name(base_names[bone_definition[0]]), parent=True).name - eb[control].use_connect = eb[org_f1].use_connect - eb[control].parent = eb[org_f1].parent - eb[control].length = tot_len - - # Create secondary control bones - f1 = copy_bone_simple(arm, bone_definition[0], base_names[bone_definition[0]]).name - f2 = copy_bone_simple(arm, bone_definition[1], base_names[bone_definition[1]]).name - if three_digits: - f3 = copy_bone_simple(arm, bone_definition[2], base_names[bone_definition[2]]).name - - # Create driver bones - df1 = copy_bone_simple(arm, bone_definition[0], "MCH-" + base_names[bone_definition[0]]).name - eb[df1].length /= 2 - df2 = copy_bone_simple(arm, bone_definition[1], "MCH-" + base_names[bone_definition[1]]).name - eb[df2].length /= 2 - if three_digits: - df3 = copy_bone_simple(arm, bone_definition[2], "MCH-" + base_names[bone_definition[2]]).name - eb[df3].length /= 2 - - # Set parents of the bones, interleaving the driver bones with the secondary control bones - if three_digits: - eb[f3].use_connect = False - eb[df3].use_connect = False - eb[f2].use_connect = False - eb[df2].use_connect = False - eb[f1].use_connect = False - eb[df1].use_connect = eb[org_f1].use_connect - - if three_digits: - eb[f3].parent = eb[df3] - eb[df3].parent = eb[f2] - eb[f2].parent = eb[df2] - eb[df2].parent = eb[f1] - eb[f1].parent = eb[df1] - eb[df1].parent = eb[org_f1].parent - - # Set up bones for hinge - if make_hinge: - socket = copy_bone_simple(arm, org_f1, "MCH-socket_"+control, parent=True).name - hinge = copy_bone_simple(arm, eb[org_f1].parent.name, "MCH-hinge_"+control).name - - eb[control].use_connect = False - eb[control].parent = eb[hinge] - - # Create the deform rig while we're still in edit mode - deform(obj, bone_definition, base_names, options) - - - # *** POSEMODE - bpy.ops.object.mode_set(mode='OBJECT') - - # Set rotation modes and axis locks - pb[control].rotation_mode = obj.pose.bones[bone_definition[0]].rotation_mode - pb[control].lock_location = True, True, True - pb[control].lock_scale = True, False, True - pb[f1].rotation_mode = 'YZX' - pb[f2].rotation_mode = 'YZX' - if three_digits: - pb[f3].rotation_mode = 'YZX' - pb[f1].lock_location = True, True, True - pb[f2].lock_location = True, True, True - if three_digits: - pb[f3].lock_location = True, True, True - pb[df2].rotation_mode = 'YZX' - if three_digits: - pb[df3].rotation_mode = 'YZX' - - # Add the bend_ratio property to the control bone - pb[control]["bend_ratio"] = bend_ratio - prop = rna_idprop_ui_prop_get(pb[control], "bend_ratio", create=True) - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # Add hinge property to the control bone - if make_hinge: - pb[control]["hinge"] = 0.0 - prop = rna_idprop_ui_prop_get(pb[control], "hinge", create=True) - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # Constraints - con = pb[df1].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = control - - con = pb[df1].constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = control - - con = pb[org_f1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = f1 - - con = pb[org_f2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = f2 - - if three_digits: - con = pb[org_f3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = f3 - - if make_hinge: - con = pb[hinge].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = bb[org_f1].parent.name - - hinge_driver_path = pb[control].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - con = pb[control].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = socket - - # Create the drivers for the driver bones (control bone scale rotates driver bones) - controller_path = pb[control].path_from_id() # 'pose.bones["%s"]' % control_bone_name - - if three_digits: - finger_digits = [df2, df3] - else: - finger_digits = [df2] - - i = 0 - for bone in finger_digits: - - # XXX - todo, any number - if i == 2: - break - - pbone = pb[bone] - - pbone.rotation_mode = 'YZX' - fcurve_driver = pbone.driver_add("rotation_euler", 0) - - #obj.driver_add('pose.bones["%s"].scale', 1) - #obj.animation_data.drivers[-1] # XXX, WATCH THIS - driver = fcurve_driver.driver - - # scale target - var = driver.variables.new() - var.name = "scale" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '.scale[1]' - - # bend target - var = driver.variables.new() - var.name = "br" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '["bend_ratio"]' - - # XXX - todo, any number - if three_digits: - if i == 0: - driver.expression = '(-scale+1.0)*pi*2.0*(1.0-br)' - elif i == 1: - driver.expression = '(-scale+1.0)*pi*2.0*br' - else: - driver.expression = driver.expression = '(-scale+1.0)*pi*2.0' - - i += 1 - - # Last step setup layers - if "ex_layer" in options: - layer = [n==options["ex_layer"] for n in range(0,32)] - else: - layer = list(arm.bones[bone_definition[0]].layers) - #for bone_name in [f1, f2, f3]: - # arm.bones[bone_name].layers = layer - arm.bones[f1].layers = layer - arm.bones[f2].layers = layer - if three_digits: - arm.bones[f3].layers = layer - - layer = list(arm.bones[bone_definition[0]].layers) - bb[control].layers = layer - - # no blending the result of this - return None - diff --git a/release/scripts/modules/rigify/leg_biped.py b/release/scripts/modules/rigify/leg_biped.py deleted file mode 100644 index d2ddba9f549..00000000000 --- a/release/scripts/modules/rigify/leg_biped.py +++ /dev/null @@ -1,501 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from math import pi -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple, blend_bone_list, get_side_name, get_base_name -from rna_prop_ui import rna_idprop_ui_prop_get - -METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe", "heel" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('hips') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 0.2506 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('thigh') - bone.head[:] = 0.1253, 0.0000, -0.0000 - bone.tail[:] = 0.0752, -0.0251, -0.4260 - bone.roll = 0.1171 - bone.use_connect = False - bone.parent = arm.edit_bones['hips'] - bone = arm.edit_bones.new('shin') - bone.head[:] = 0.0752, -0.0251, -0.4260 - bone.tail[:] = 0.0752, 0.0000, -0.8771 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh'] - bone = arm.edit_bones.new('foot') - bone.head[:] = 0.0752, 0.0000, -0.8771 - bone.tail[:] = 0.1013, -0.1481, -0.9773 - bone.roll = -0.4662 - bone.use_connect = True - bone.parent = arm.edit_bones['shin'] - bone = arm.edit_bones.new('toe') - bone.head[:] = 0.1013, -0.1481, -0.9773 - bone.tail[:] = 0.1100, -0.2479, -0.9773 - bone.roll = 3.1416 - bone.use_connect = True - bone.parent = arm.edit_bones['foot'] - bone = arm.edit_bones.new('heel') - bone.head[:] = 0.0652, 0.0501, -1.0024 - bone.tail[:] = 0.0927, -0.1002, -1.0024 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['foot'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['thigh'] - pbone['type'] = 'leg_biped' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in a chain - Expects a chain of at least 3 children. - eg. - thigh -> shin -> foot -> [toe, heel] - ''' - - bone_definition = [] - - orig_bone = obj.data.bones[orig_bone_name] - orig_bone_parent = orig_bone.parent - - if orig_bone_parent is None: - raise RigifyError("expected the thigh bone to have a parent hip bone") - - bone_definition.append(orig_bone_parent.name) - bone_definition.append(orig_bone.name) - - - bone = orig_bone - chain = 0 - while chain < 2: # first 2 bones only have 1 child - children = bone.children - - if len(children) != 1: - raise RigifyError("expected the thigh bone to have 3 children without a fork") - bone = children[0] - bone_definition.append(bone.name) # shin, foot - chain += 1 - - children = bone.children - # Now there must be 2 children, only one connected - if len(children) != 2: - raise RigifyError("expected the foot bone:'%s' to have 2 children" % bone.name) - - if children[0].use_connect == children[1].use_connect: - raise RigifyError("expected one bone to be connected") - - toe, heel = children - if heel.use_connect: - toe, heel = heel, toe - - - bone_definition.append(toe.name) - bone_definition.append(heel.name) - - if len(bone_definition) != len(METARIG_NAMES): - raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES)) - - return bone_definition - - -def ik(obj, bone_definition, base_names, options): - arm = obj.data - - # setup the existing bones, use names from METARIG_NAMES - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - mt = bone_class_instance(obj, ["hips", "heel"]) - - mt.attr_initialize(METARIG_NAMES, bone_definition) - mt_chain.attr_initialize(METARIG_NAMES, bone_definition) - - # children of ik_foot - ik = bone_class_instance(obj, ["foot", "foot_roll", "foot_roll_01", "foot_roll_02", "knee_target"]) - - # Make a new chain - ik_chain = mt_chain.copy(to_fmt="MCH-%s", base_names=base_names) - - # simple rename - ik_chain.rename("thigh", ik_chain.thigh + "_ik") - ik_chain.rename("shin", ik_chain.shin + "_ik") - - # make sure leg is child of hips - ik_chain.thigh_e.parent = mt.hips_e - - # ik foot: no parents - base_foot_name = get_base_name(base_names[mt_chain.foot]) - ik.foot_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_ik" + get_side_name(base_names[mt_chain.foot])) - ik.foot = ik.foot_e.name - ik.foot_e.translate(mt_chain.foot_e.head - ik.foot_e.head) - ik.foot_e.use_local_location = False - - # foot roll: heel pointing backwards, half length - ik.foot_roll_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_roll" + get_side_name(base_names[mt_chain.foot])) - ik.foot_roll = ik.foot_roll_e.name - ik.foot_roll_e.tail = ik.foot_roll_e.head - ik.foot_roll_e.vector / 2.0 - ik.foot_roll_e.parent = ik.foot_e # heel is disconnected - - # heel pointing forwards to the toe base, parent of the following 2 bones - ik.foot_roll_01_e = copy_bone_simple(arm, mt.heel, "MCH-%s_roll.01" % base_foot_name) - ik.foot_roll_01 = ik.foot_roll_01_e.name - ik.foot_roll_01_e.tail = mt_chain.foot_e.tail - ik.foot_roll_01_e.parent = ik.foot_e # heel is disconnected - - # same as above but reverse direction - ik.foot_roll_02_e = copy_bone_simple(arm, mt.heel, "MCH-%s_roll.02" % base_foot_name) - ik.foot_roll_02 = ik.foot_roll_02_e.name - ik.foot_roll_02_e.parent = ik.foot_roll_01_e # heel is disconnected - ik.foot_roll_02_e.head = mt_chain.foot_e.tail - ik.foot_roll_02_e.tail = mt.heel_e.head - - del base_foot_name - - # rename 'MCH-toe' --> to 'toe_ik' and make the child of ik.foot_roll_01 - # ------------------ FK or IK? - ik_chain.rename("toe", get_base_name(base_names[mt_chain.toe]) + "_ik" + get_side_name(base_names[mt_chain.toe])) - ik_chain.toe_e.use_connect = False - ik_chain.toe_e.parent = ik.foot_roll_01_e - - # re-parent ik_chain.foot to the - ik_chain.foot_e.use_connect = False - ik_chain.foot_e.parent = ik.foot_roll_02_e - - - # knee target is the heel moved up and forward on its local axis - ik.knee_target_e = copy_bone_simple(arm, mt.heel, "knee_target" + get_side_name(mt.heel)) - ik.knee_target = ik.knee_target_e.name - offset = ik.knee_target_e.tail - ik.knee_target_e.head - offset.z = 0 - offset.length = mt_chain.shin_e.head.z - mt.heel_e.head.z - offset.z += offset.length - ik.knee_target_e.translate(offset) - ik.knee_target_e.length *= 0.5 - ik.knee_target_e.parent = ik.foot_e - ik.knee_target_e.use_local_location = False - - # roll the bone to point up... could also point in the same direction as ik.foot_roll - # ik.foot_roll_02_e.matrix * Vector((0.0, 0.0, 1.0)) # ACK!, no rest matrix in editmode - ik.foot_roll_01_e.align_roll((0.0, 0.0, -1.0)) - - bpy.ops.object.mode_set(mode='OBJECT') - - ik.update() - mt_chain.update() - ik_chain.update() - - # Set IK dof - ik_chain.shin_p.lock_ik_x = False - ik_chain.shin_p.lock_ik_y = True - ik_chain.shin_p.lock_ik_z = True - - # Set rotation modes and axis locks - ik.foot_roll_p.rotation_mode = 'XYZ' - ik.foot_roll_p.lock_rotation = False, True, True - ik_chain.toe_p.rotation_mode = 'YXZ' - ik_chain.toe_p.lock_rotation = False, True, True - ik_chain.toe_p.lock_location = True, True, True - ik.foot_roll_p.lock_location = True, True, True - - # IK - con = ik_chain.shin_p.constraints.new('IK') - con.chain_count = 2 - con.iterations = 500 - con.pole_angle = -pi / 2.0 - con.use_tail = True - con.use_stretch = True - con.use_target = True - con.use_rotation = False - con.weight = 1.0 - - con.target = obj - con.subtarget = ik_chain.foot - - con.pole_target = obj - con.pole_subtarget = ik.knee_target - - # foot roll - cons = [ \ - (ik.foot_roll_01_p.constraints.new('COPY_ROTATION'), ik.foot_roll_01_p.constraints.new('LIMIT_ROTATION')), \ - (ik.foot_roll_02_p.constraints.new('COPY_ROTATION'), ik.foot_roll_02_p.constraints.new('LIMIT_ROTATION'))] - - for con, con_l in cons: - con.target = obj - con.subtarget = ik.foot_roll - con.use_x, con.use_y, con.use_z = True, False, False - con.target_space = con.owner_space = 'LOCAL' - - con = con_l - con.use_limit_x, con.use_limit_y, con.use_limit_z = True, False, False - con.owner_space = 'LOCAL' - - if con_l is cons[-1][-1]: - con.min_x = 0.0 - con.max_x = 180.0 # XXX -deg - else: - con.min_x = -180.0 # XXX -deg - con.max_x = 0.0 - - - # last step setup layers - if "ik_layer" in options: - layer = [n == options["ik_layer"] for n in range(0, 32)] - else: - layer = list(mt_chain.thigh_b.layers) - for attr in ik_chain.attr_names: - getattr(ik_chain, attr + "_b").layers = layer - for attr in ik.attr_names: - getattr(ik, attr + "_b").layers = layer - - bpy.ops.object.mode_set(mode='EDIT') - - return (None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe, None, ik.foot) - - -def fk(obj, bone_definition, base_names, options): - from mathutils import Vector - arm = obj.data - - # these account for all bones in METARIG_NAMES - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - mt = bone_class_instance(obj, ["hips", "heel"]) - - # new bones - ex = bone_class_instance(obj, ["thigh_socket", "thigh_hinge"]) - - for bone_class in (mt, mt_chain): - for attr in bone_class.attr_names: - i = METARIG_NAMES.index(attr) - ebone = arm.edit_bones[bone_definition[i]] - setattr(bone_class, attr, ebone.name) - bone_class.update() - - ex.thigh_socket_e = copy_bone_simple(arm, mt_chain.thigh, "MCH-%s_socket" % base_names[mt_chain.thigh], parent=True) - ex.thigh_socket = ex.thigh_socket_e.name - ex.thigh_socket_e.tail = ex.thigh_socket_e.head + Vector((0.0, 0.0, ex.thigh_socket_e.length / 4.0)) - - ex.thigh_hinge_e = copy_bone_simple(arm, mt.hips, "MCH-%s_hinge" % base_names[mt_chain.thigh], parent=False) - ex.thigh_hinge = ex.thigh_hinge_e.name - - fk_chain = mt_chain.copy(base_names=base_names) # fk has no prefix! - fk_chain.foot_e.name = "MCH-" + fk_chain.foot - fk_chain.foot = fk_chain.foot_e.name - - # Set up fk foot control - foot_e = copy_bone_simple(arm, mt.heel, base_names[mt_chain.foot]) - foot = foot_e.name - foot_e.translate(mt_chain.foot_e.head - foot_e.head) - foot_e.parent = fk_chain.shin_e - foot_e.use_connect = fk_chain.foot_e.use_connect - fk_chain.foot_e.use_connect = False - fk_chain.foot_e.parent = foot_e - - fk_chain.thigh_e.use_connect = False - fk_chain.thigh_e.parent = ex.thigh_hinge_e - - bpy.ops.object.mode_set(mode='OBJECT') - - ex.update() - mt_chain.update() - fk_chain.update() - foot_p = obj.pose.bones[foot] - - # Set rotation modes and axis locks - fk_chain.shin_p.rotation_mode = 'XYZ' - fk_chain.shin_p.lock_rotation = False, True, True - foot_p.rotation_mode = 'YXZ' - fk_chain.toe_p.rotation_mode = 'YXZ' - fk_chain.toe_p.lock_rotation = False, True, True - fk_chain.thigh_p.lock_location = True, True, True - - con = fk_chain.thigh_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.thigh_socket - - # hinge - prop = rna_idprop_ui_prop_get(fk_chain.thigh_p, "hinge", create=True) - fk_chain.thigh_p["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - con = ex.thigh_hinge_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = mt.hips - - # add driver - hinge_driver_path = fk_chain.thigh_p.path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - - # last step setup layers - if "fk_layer" in options: - layer = [n == options["fk_layer"] for n in range(0, 32)] - else: - layer = list(mt_chain.thigh_b.layers) - for attr in fk_chain.attr_names: - getattr(fk_chain, attr + "_b").layers = layer - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - arm.bones[foot].layers = layer - - - bpy.ops.object.mode_set(mode='EDIT') - - # dont blend the hips or heel - return (None, fk_chain.thigh, fk_chain.shin, fk_chain.foot, fk_chain.toe, None, None) - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create upper leg bones: two bones, each half of the upper leg. - uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True) - uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True) - uleg1.use_connect = False - uleg2.use_connect = False - uleg2.parent = uleg1 - center = uleg1.center - uleg1.tail = center - uleg2.head = center - - # Create lower leg bones: two bones, each half of the lower leg. - lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True) - lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True) - lleg1.use_connect = False - lleg2.use_connect = False - lleg2.parent = lleg1 - center = lleg1.center - lleg1.tail = center - lleg2.head = center - - # Create a bone for the second lower leg deform bone to twist with - twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist") - twist.length /= 4 - twist.use_connect = False - twist.parent = obj.data.edit_bones[definitions[3]] - - # Create foot bone - foot = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True) - - # Create toe bone - toe = copy_bone_simple(obj.data, definitions[4], "DEF-%s" % base_names[definitions[4]], parent=True) - - # Store names before leaving edit mode - uleg1_name = uleg1.name - uleg2_name = uleg2.name - lleg1_name = lleg1.name - lleg2_name = lleg2.name - twist_name = twist.name - foot_name = foot.name - toe_name = toe.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - uleg1 = obj.pose.bones[uleg1_name] - uleg2 = obj.pose.bones[uleg2_name] - lleg1 = obj.pose.bones[lleg1_name] - lleg2 = obj.pose.bones[lleg2_name] - foot = obj.pose.bones[foot_name] - toe = obj.pose.bones[toe_name] - - # Upper leg constraints - con = uleg1.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[2] - - con = uleg1.constraints.new('COPY_SCALE') - con.name = "scale" - con.target = obj - con.subtarget = definitions[1] - - con = uleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[1] - - # Lower leg constraints - con = lleg1.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = lleg1.constraints.new('COPY_SCALE') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = lleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = twist_name - - con = lleg2.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[3] - - # Foot constraint - con = foot.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[3] - - # Toe constraint - con = toe.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[4] - - bpy.ops.object.mode_set(mode='EDIT') - return (uleg1_name, uleg2_name, lleg1_name, lleg2_name, foot_name, toe_name, None) - - -def main(obj, bone_definition, base_names, options): - bones_fk = fk(obj, bone_definition, base_names, options) - bones_ik = ik(obj, bone_definition, base_names, options) - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - blend_bone_list(obj, bone_definition + [None], bones_fk, bones_ik, target_bone=bones_ik[6], target_prop="ik", blend_default=1.0) diff --git a/release/scripts/modules/rigify/leg_quadruped.py b/release/scripts/modules/rigify/leg_quadruped.py deleted file mode 100644 index 739a6402c4b..00000000000 --- a/release/scripts/modules/rigify/leg_quadruped.py +++ /dev/null @@ -1,497 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from math import pi -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple, get_side_name, get_base_name -from mathutils import Vector - -METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe" - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('body') - bone.head[:] = -0.0728, -0.2427, 0.0000 - bone.tail[:] = -0.0728, -0.2427, 0.2427 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('thigh') - bone.head[:] = 0.0000, 0.0000, -0.0000 - bone.tail[:] = 0.0813, -0.2109, -0.3374 - bone.roll = -0.4656 - bone.use_connect = False - bone.parent = arm.edit_bones['body'] - bone = arm.edit_bones.new('shin') - bone.head[:] = 0.0813, -0.2109, -0.3374 - bone.tail[:] = 0.0714, -0.0043, -0.5830 - bone.roll = -0.2024 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh'] - bone = arm.edit_bones.new('foot') - bone.head[:] = 0.0714, -0.0043, -0.5830 - bone.tail[:] = 0.0929, -0.0484, -0.7652 - bone.roll = -0.3766 - bone.use_connect = True - bone.parent = arm.edit_bones['shin'] - bone = arm.edit_bones.new('toe') - bone.head[:] = 0.0929, -0.0484, -0.7652 - bone.tail[:] = 0.1146, -0.1244, -0.7652 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['foot'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['thigh'] - pbone['type'] = 'leg_quadruped' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in a chain - Expects a chain of at least 3 children. - eg. - thigh -> shin -> foot -> [toe, heel] - ''' - - bone_definition = [] - - orig_bone = obj.data.bones[orig_bone_name] - orig_bone_parent = orig_bone.parent - - if orig_bone_parent is None: - raise RigifyError("expected the thigh bone to have a parent hip bone") - - bone_definition.append(orig_bone_parent.name) - bone_definition.append(orig_bone.name) - - - bone = orig_bone - chain = 0 - while chain < 3: # first 2 bones only have 1 child - children = bone.children - - if len(children) != 1: - raise RigifyError("expected the thigh bone to have 3 children without a fork") - bone = children[0] - bone_definition.append(bone.name) # shin, foot - chain += 1 - - if len(bone_definition) != len(METARIG_NAMES): - raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES)) - - return bone_definition - - -def ik(obj, bone_definition, base_names, options): - eb = obj.data.edit_bones - pb = obj.pose.bones - arm = obj.data - bpy.ops.object.mode_set(mode='EDIT') - - # setup the existing bones, use names from METARIG_NAMES - mt = bone_class_instance(obj, ["hips"]) - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - - mt.attr_initialize(METARIG_NAMES, bone_definition) - mt_chain.attr_initialize(METARIG_NAMES, bone_definition) - - ik_chain = mt_chain.copy(to_fmt="MCH-%s.ik", base_names=base_names) - - ik_chain.thigh_e.use_connect = False - ik_chain.thigh_e.parent = mt.hips_e - - ik_chain.foot_e.parent = None - ik_chain.rename("foot", get_base_name(base_names[bone_definition[3]]) + "_ik" + get_side_name(base_names[bone_definition[3]])) - ik_chain.rename("toe", get_base_name(base_names[bone_definition[4]]) + "_ik" + get_side_name(base_names[bone_definition[4]])) - - # keep the foot_ik as the parent - ik_chain.toe_e.use_connect = False - - # Foot uses pose space, not local space, for translation - ik_chain.foot_e.use_local_location = False - - # must be after disconnecting the toe - ik_chain.foot_e.align_orientation(mt_chain.toe_e) - - # children of ik_foot - ik = bone_class_instance(obj, ["foot_roll", "foot_roll_01", "foot_roll_02", "foot_target"]) - - # knee rotator - knee_rotator = copy_bone_simple(arm, mt_chain.toe, "knee_rotator" + get_side_name(base_names[mt_chain.foot]), parent=True).name - eb[knee_rotator].use_connect = False - eb[knee_rotator].parent = eb[mt.hips] - eb[knee_rotator].head = eb[ik_chain.thigh].head - eb[knee_rotator].tail = eb[knee_rotator].head + eb[mt_chain.toe].vector - eb[knee_rotator].length = eb[ik_chain.thigh].length / 2 - eb[knee_rotator].roll += pi/2 - - # parent ik leg to the knee rotator - eb[ik_chain.thigh].parent = eb[knee_rotator] - - # foot roll is an interesting one! - # plot a vector from the toe bones head, bactwards to the length of the foot - # then align it with the foot but reverse direction. - ik.foot_roll_e = copy_bone_simple(arm, mt_chain.toe, get_base_name(base_names[mt_chain.foot]) + "_roll" + get_side_name(base_names[mt_chain.foot])) - ik.foot_roll = ik.foot_roll_e.name - ik.foot_roll_e.use_connect = False - ik.foot_roll_e.parent = ik_chain.foot_e - ik.foot_roll_e.head -= mt_chain.toe_e.vector.normalize() * mt_chain.foot_e.length - ik.foot_roll_e.tail = ik.foot_roll_e.head - (mt_chain.foot_e.vector.normalize() * mt_chain.toe_e.length) - ik.foot_roll_e.align_roll(mt_chain.foot_e.matrix.rotation_part() * Vector((0.0, 0.0, -1.0))) - - # MCH-foot - ik.foot_roll_01_e = copy_bone_simple(arm, mt_chain.foot, "MCH-" + base_names[mt_chain.foot]) - ik.foot_roll_01 = ik.foot_roll_01_e.name - ik.foot_roll_01_e.parent = ik_chain.foot_e - ik.foot_roll_01_e.head, ik.foot_roll_01_e.tail = mt_chain.foot_e.tail, mt_chain.foot_e.head - ik.foot_roll_01_e.roll = ik.foot_roll_e.roll - - # ik_target, child of MCH-foot - ik.foot_target_e = copy_bone_simple(arm, mt_chain.foot, "MCH-" + base_names[mt_chain.foot] + "_ik_target") - ik.foot_target = ik.foot_target_e.name - ik.foot_target_e.parent = ik.foot_roll_01_e - ik.foot_target_e.align_orientation(ik_chain.foot_e) - ik.foot_target_e.length = ik_chain.foot_e.length / 2.0 - ik.foot_target_e.use_connect = True - - # MCH-foot.02 child of MCH-foot - ik.foot_roll_02_e = copy_bone_simple(arm, mt_chain.foot, "MCH-%s_02" % base_names[mt_chain.foot]) - ik.foot_roll_02 = ik.foot_roll_02_e.name - ik.foot_roll_02_e.parent = ik.foot_roll_01_e - - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - mt_chain.update() - ik.update() - ik_chain.update() - - # Set rotation modes and axis locks - #pb[knee_rotator].rotation_mode = 'YXZ' - #pb[knee_rotator].lock_rotation = False, True, False - pb[knee_rotator].lock_location = True, True, True - pb[ik.foot_roll].rotation_mode = 'XYZ' - pb[ik.foot_roll].lock_rotation = False, True, True - pb[ik_chain.toe].rotation_mode = 'XYZ' - pb[ik_chain.toe].lock_rotation = False, True, True - - # IK switch property - prop = rna_idprop_ui_prop_get(pb[ik_chain.foot], "ik", create=True) - pb[ik_chain.foot]["ik"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - ik_driver_path = pb[ik_chain.foot].path_from_id() + '["ik"]' - - # simple constraining of orig bones - con = mt_chain.thigh_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik_chain.thigh - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - con = mt_chain.shin_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik_chain.shin - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - con = mt_chain.foot_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik.foot_roll_02 - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - con = mt_chain.toe_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = ik_chain.toe - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ik_driver_path - - # others... - con = ik.foot_roll_01_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ik.foot_roll - con.target_space = 'LOCAL' - con.owner_space = 'LOCAL' - - - # IK - con = ik_chain.shin_p.constraints.new('IK') - con.chain_count = 2 - con.iterations = 500 - con.pole_angle = -90.0 # XXX - in deg! - con.use_tail = True - con.use_stretch = True - con.use_target = True - con.use_rotation = False - con.weight = 1.0 - - con.target = obj - con.subtarget = ik.foot_target - - con.pole_target = None - - ik.update() - ik_chain.update() - - # Set layers of the bones. - if "ik_layer" in options: - layer = [n==options["ik_layer"] for n in range(0,32)] - else: - layer = list(mt_chain.thigh_b.layers) - for attr in ik_chain.attr_names: - obj.data.bones[getattr(ik_chain, attr)].layers = layer - for attr in ik.attr_names: - obj.data.bones[getattr(ik, attr)].layers = layer - obj.data.bones[knee_rotator].layers = layer - - return None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe - - - -def fk(obj, bone_definition, base_names, options): - eb = obj.data.edit_bones - pb = obj.pose.bones - arm = obj.data - bpy.ops.object.mode_set(mode='EDIT') - - # setup the existing bones, use names from METARIG_NAMES - mt = bone_class_instance(obj, ["hips"]) - mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"]) - - mt.attr_initialize(METARIG_NAMES, bone_definition) - mt_chain.attr_initialize(METARIG_NAMES, bone_definition) - - fk_chain = mt_chain.copy(to_fmt="%s", base_names=base_names) - - # Create the socket - socket = copy_bone_simple(arm, mt_chain.thigh, "MCH-leg_socket").name - eb[socket].parent = eb[mt.hips] - eb[socket].length = eb[mt_chain.thigh].length / 4 - - # Create the hinge - hinge = copy_bone_simple(arm, mt.hips, "MCH-leg_hinge").name - eb[hinge].length = eb[mt.hips].length / 2 - - # Make leg child of hinge - eb[fk_chain.thigh].use_connect = False - eb[fk_chain.thigh].parent = eb[hinge] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Set rotation modes and axis locks - pb[fk_chain.shin].rotation_mode = 'XYZ' - pb[fk_chain.shin].lock_rotation = False, True, True - - # Constrain original bones to control bones - con = mt_chain.thigh_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.thigh - - con = mt_chain.shin_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.shin - - con = mt_chain.foot_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.foot - - con = mt_chain.toe_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = fk_chain.toe - - # Socket constraint - con = pb[fk_chain.thigh].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = socket - - # Hinge constraint - con = pb[hinge].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = mt.hips - - prop = rna_idprop_ui_prop_get(pb[fk_chain.thigh], "hinge", create=True) - pb[fk_chain.thigh]["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - hinge_driver_path = pb[fk_chain.thigh].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - return None, fk_chain.thigh, fk_chain.shin, fk_chain.foot, fk_chain.toe - - - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - # Create upper leg bones: two bones, each half of the upper leg. - uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True) - uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True) - uleg1.use_connect = False - uleg2.use_connect = False - uleg2.parent = uleg1 - center = uleg1.center - uleg1.tail = center - uleg2.head = center - - # Create lower leg bones: two bones, each half of the lower leg. - lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True) - lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True) - lleg1.use_connect = False - lleg2.use_connect = False - lleg2.parent = lleg1 - center = lleg1.center - lleg1.tail = center - lleg2.head = center - - # Create a bone for the second lower leg deform bone to twist with - twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist") - twist.length /= 4 - twist.use_connect = False - twist.parent = obj.data.edit_bones[definitions[3]] - - # Create foot bone - foot = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True) - - # Create toe bone - toe = copy_bone_simple(obj.data, definitions[4], "DEF-%s" % base_names[definitions[4]], parent=True) - - # Store names before leaving edit mode - uleg1_name = uleg1.name - uleg2_name = uleg2.name - lleg1_name = lleg1.name - lleg2_name = lleg2.name - twist_name = twist.name - foot_name = foot.name - toe_name = toe.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bones - uleg1 = obj.pose.bones[uleg1_name] - uleg2 = obj.pose.bones[uleg2_name] - lleg1 = obj.pose.bones[lleg1_name] - lleg2 = obj.pose.bones[lleg2_name] - foot = obj.pose.bones[foot_name] - toe = obj.pose.bones[toe_name] - - # Upper leg constraints - con = uleg1.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[2] - - con = uleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[1] - - # Lower leg constraints - con = lleg1.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[2] - - con = lleg2.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = twist_name - - con = lleg2.constraints.new('DAMPED_TRACK') - con.name = "trackto" - con.target = obj - con.subtarget = definitions[3] - - # Foot constraint - con = foot.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[3] - - # Toe constraint - con = toe.constraints.new('COPY_ROTATION') - con.name = "copy_rot" - con.target = obj - con.subtarget = definitions[4] - - bpy.ops.object.mode_set(mode='EDIT') - return (uleg1_name, uleg2_name, lleg1_name, lleg2_name, foot_name, toe_name, None) - - - - -def main(obj, bone_definition, base_names, options): - bones_fk = fk(obj, bone_definition, base_names, options) - bones_ik = ik(obj, bone_definition, base_names, options) - deform(obj, bone_definition, base_names, options) - return bones_ik diff --git a/release/scripts/modules/rigify/mouth.py b/release/scripts/modules/rigify/mouth.py deleted file mode 100644 index ef3875222d3..00000000000 --- a/release/scripts/modules/rigify/mouth.py +++ /dev/null @@ -1,756 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rna_prop_ui import rna_idprop_ui_prop_get -from math import acos, pi -from mathutils import Vector -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "mouth" - - -def mark_actions(): - for action in bpy.data.actions: - action.tag = True - -def get_unmarked_action(): - for action in bpy.data.actions: - if action.tag != True: - return action - return None - -def add_action(name=None): - mark_actions() - bpy.ops.action.new() - action = get_unmarked_action() - if name is not None: - action.name = name - return action - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - new = False - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - new = True - - return fcurve, new - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - chain = [] - - try: - chain += [bone.parent.parent.name, bone.parent.name, bone.name] - except AttributeError: - raise RigifyError("'%s' rig type requires a chain of two parents (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - chain += [child.name for child in bone.children_recursive_basename] - - if len(chain) < 10: - raise RigifyError("'%s' rig type requires a chain of 8 bones (bone: %s)" % (RIG_TYPE, orig_bone_name)) - - return chain[:10] - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - jaw = definitions[1] - - # Options - req_options = ["mesh"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - meshes = options["mesh"].replace(" ", "").split(",") - - # Lip DEF - lip1 = copy_bone_simple(obj.data, definitions[2], "DEF-" + base_names[definitions[2]]).name - lip2 = copy_bone_simple(obj.data, definitions[3], "DEF-" + base_names[definitions[3]]).name - lip3 = copy_bone_simple(obj.data, definitions[4], "DEF-" + base_names[definitions[4]]).name - lip4 = copy_bone_simple(obj.data, definitions[5], "DEF-" + base_names[definitions[5]]).name - lip5 = copy_bone_simple(obj.data, definitions[6], "DEF-" + base_names[definitions[6]]).name - lip6 = copy_bone_simple(obj.data, definitions[7], "DEF-" + base_names[definitions[7]]).name - lip7 = copy_bone_simple(obj.data, definitions[8], "DEF-" + base_names[definitions[8]]).name - lip8 = copy_bone_simple(obj.data, definitions[9], "DEF-" + base_names[definitions[9]]).name - - # Mouth corner spread bones (for driving corrective shape keys) - spread_l_1 = copy_bone_simple(obj.data, definitions[6], "MCH-" + base_names[definitions[6]] + ".spread_1").name - spread_l_2 = copy_bone_simple(obj.data, definitions[6], "MCH-" + base_names[definitions[6]] + ".spread_2").name - eb[spread_l_1].tail = eb[definitions[5]].head - eb[spread_l_2].tail = eb[definitions[5]].head - eb[spread_l_1].roll = 0 - eb[spread_l_2].roll = 0 - eb[spread_l_1].use_connect = False - eb[spread_l_2].use_connect = False - eb[spread_l_1].parent = eb[definitions[6]] - eb[spread_l_2].parent = eb[definitions[6]] - - spread_r_1 = copy_bone_simple(obj.data, definitions[2], "MCH-" + base_names[definitions[2]] + ".spread_1").name - spread_r_2 = copy_bone_simple(obj.data, definitions[2], "MCH-" + base_names[definitions[2]] + ".spread_2").name - eb[spread_r_1].tail = eb[definitions[3]].head - eb[spread_r_2].tail = eb[definitions[3]].head - eb[spread_r_1].roll = 0 - eb[spread_r_2].roll = 0 - eb[spread_r_1].use_connect = False - eb[spread_r_2].use_connect = False - eb[spread_r_1].parent = eb[definitions[2]] - eb[spread_r_2].parent = eb[definitions[2]] - - - - # Jaw open bones (for driving corrective shape keys) - jopen1 = copy_bone_simple(obj.data, jaw, "MCH-"+base_names[jaw]+".track1", parent=True).name - eb[jopen1].use_connect = False - eb[jopen1].head = eb[jaw].tail - eb[jopen1].tail = eb[jopen1].head + Vector((0, 0, eb[jaw].length/4)) - - jopen2 = copy_bone_simple(obj.data, jopen1, "MCH-"+base_names[jaw]+".track2").name - eb[jopen2].parent = eb[jaw] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constrain DEF bones to ORG bones - con = pb[lip1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[2] - - con = pb[lip2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[3] - - con = pb[lip3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[4] - - con = pb[lip4].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[5] - - con = pb[lip5].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[6] - - con = pb[lip6].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[7] - - con = pb[lip7].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[8] - - con = pb[lip8].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = definitions[9] - - # Constraint mouth corner spread bones - con = pb[spread_l_1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip4 - - con = pb[spread_l_2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = spread_l_1 - - con = pb[spread_l_2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip6 - - con = pb[spread_r_1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip2 - - con = pb[spread_r_2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = spread_r_1 - - con = pb[spread_r_2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = lip8 - - - # Corrective shape keys for the corners of the mouth. - bpy.ops.object.mode_set(mode='EDIT') - - # Calculate the rotation difference between the bones - rotdiff_l = acos((eb[lip5].head - eb[lip4].head).normalize().dot((eb[lip5].head - eb[lip6].head).normalize())) - rotdiff_r = acos((eb[lip1].head - eb[lip2].head).normalize().dot((eb[lip1].head - eb[lip8].head).normalize())) - - bpy.ops.object.mode_set(mode='OBJECT') - - - # Left side shape key - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - shape_key_name = "COR-" + base_names[definitions[6]] + ".spread" - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[definitions[6]] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "ROTATION_DIFF" - var.targets[0].id = obj - var.targets[0].bone_target = spread_l_1 - var.targets[1].id = obj - var.targets[1].bone_target = spread_l_2 - - # Set fcurve offset - if is_new_driver: - mod = fcurve.modifiers[0] - if rotdiff_l != pi: - mod.coefficients[0] = -rotdiff_l / (pi-rotdiff_l) - mod.coefficients[1] = 1 / (pi-rotdiff_l) - - # Right side shape key - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - shape_key_name = "COR-" + base_names[definitions[2]] + ".spread" - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[definitions[2]] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "ROTATION_DIFF" - var.targets[0].id = obj - var.targets[0].bone_target = spread_r_1 - var.targets[1].id = obj - var.targets[1].bone_target = spread_r_2 - - # Set fcurve offset - if is_new_driver: - mod = fcurve.modifiers[0] - if rotdiff_r != pi: - mod.coefficients[0] = -rotdiff_r / (pi-rotdiff_r) - mod.coefficients[1] = 1 / (pi-rotdiff_r) - - # Jaw open corrective shape key - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - shape_key_name = "COR-" + base_names[definitions[4]] + ".jaw_open" - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[definitions[4]] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "LOC_DIFF" - var.targets[0].id = obj - var.targets[0].bone_target = jopen1 - var.targets[1].id = obj - var.targets[1].bone_target = jopen2 - - # Set fcurve offset - if is_new_driver: - mod = fcurve.modifiers[0] - mod.coefficients[0] = 0.0 - mod.coefficients[1] = 1.0 / bb[jaw].length - - return (None,) - - - - -def control(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - head_e = eb[definitions[0]] - jaw_e = eb[definitions[1]] - jaw = definitions[1] - - # Head lips - hlip1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]+".head").name - hlip2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]+".head").name - hlip3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]+".head").name - hlip4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]+".head").name - hlip5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]+".head").name - hlip6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]+".head").name - hlip7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]+".head").name - hlip8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]+".head").name - - eb[hlip1].parent = head_e - eb[hlip2].parent = head_e - eb[hlip3].parent = head_e - eb[hlip4].parent = head_e - eb[hlip5].parent = head_e - eb[hlip6].parent = head_e - eb[hlip7].parent = head_e - eb[hlip8].parent = head_e - - # Jaw lips - jlip1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]+".jaw").name - jlip2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]+".jaw").name - jlip3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]+".jaw").name - jlip4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]+".jaw").name - jlip5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]+".jaw").name - jlip6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]+".jaw").name - jlip7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]+".jaw").name - jlip8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]+".jaw").name - - eb[jlip1].parent = jaw_e - eb[jlip2].parent = jaw_e - eb[jlip3].parent = jaw_e - eb[jlip4].parent = jaw_e - eb[jlip5].parent = jaw_e - eb[jlip6].parent = jaw_e - eb[jlip7].parent = jaw_e - eb[jlip8].parent = jaw_e - - # Control lips - lip1 = copy_bone_simple(obj.data, definitions[2], base_names[definitions[2]]).name - lip2 = copy_bone_simple(obj.data, definitions[3], base_names[definitions[3]]).name - lip3 = copy_bone_simple(obj.data, definitions[4], base_names[definitions[4]]).name - lip4 = copy_bone_simple(obj.data, definitions[5], base_names[definitions[5]]).name - lip5 = copy_bone_simple(obj.data, definitions[6], base_names[definitions[6]]).name - lip6 = copy_bone_simple(obj.data, definitions[7], base_names[definitions[7]]).name - lip7 = copy_bone_simple(obj.data, definitions[8], base_names[definitions[8]]).name - lip8 = copy_bone_simple(obj.data, definitions[9], base_names[definitions[9]]).name - - eb[lip1].parent = eb[hlip1] - eb[lip2].parent = eb[hlip2] - eb[lip3].parent = eb[hlip3] - eb[lip4].parent = eb[hlip4] - eb[lip5].parent = eb[hlip5] - eb[lip6].parent = eb[hlip6] - eb[lip7].parent = eb[hlip7] - eb[lip8].parent = eb[hlip8] - - # Jaw open tracker - jopent = copy_bone_simple(obj.data, jaw_e.name, "MCH-"+base_names[jaw_e.name]+".track", parent=True).name - eb[jopent].use_connect = False - eb[jopent].tail = jaw_e.tail + Vector((0.0, 0.0, jaw_e.length)) - eb[jopent].head = jaw_e.tail - - bpy.ops.object.mode_set(mode='OBJECT') - - # Add mouth open action if it doesn't already exist - action_name = "mouth_open" - if action_name in bpy.data.actions: - open_action = bpy.data.actions[action_name] - else: - open_action = add_action(name=action_name) - - # Add close property (useful when making the animation in the action) - prop_name = "open_action" - prop = rna_idprop_ui_prop_get(pb[lip1], prop_name, create=True) - pb[lip1][prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - - open_driver_path = pb[lip1].path_from_id() + '["open_action"]' - - - # Constraints - - # Jaw open tracker stretches to jaw tip - con = pb[jopent].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = jaw - con.head_tail = 1.0 - con.rest_length = bb[jopent].length - con.volume = 'NO_VOLUME' - - # Head lips to jaw lips - influence = [0.02, 0.1, 0.35, 0.25, 0.0] - - con = pb[hlip1].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip1 - con.influence = influence[2] - - con = pb[hlip2].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip2 - con.influence = influence[1] - - con = pb[hlip3].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip3 - con.influence = influence[0] - - con = pb[hlip4].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip4 - con.influence = influence[1] - - con = pb[hlip5].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip5 - con.influence = influence[2] - - con = pb[hlip6].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip6 - con.influence = 1.0 - influence[3] - - con = pb[hlip7].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip7 - con.influence = 1.0 - influence[4] - - con = pb[hlip8].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = jlip8 - con.influence = 1.0 - influence[3] - - # ORG bones to lips - con = pb[definitions[2]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip1 - - con = pb[definitions[3]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip2 - - con = pb[definitions[4]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip3 - - con = pb[definitions[5]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip4 - - con = pb[definitions[6]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip5 - - con = pb[definitions[7]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip6 - - con = pb[definitions[8]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip7 - - con = pb[definitions[9]].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = lip8 - - # Action constraints for open mouth - con = pb[lip1].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip2].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip3].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip4].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip5].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip6].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip7].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - con = pb[lip8].constraints.new('ACTION') - con.target = obj - con.subtarget = jopent - con.action = open_action - con.transform_channel = 'SCALE_Y' - con.frame_start = 0 - con.frame_end = 60 - con.min = 0.0 - con.max = 1.0 - con.target_space = 'LOCAL' - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = open_driver_path - - - # Set layers - layer = list(bb[definitions[2]].layers) - bb[lip1].layers = layer - bb[lip2].layers = layer - bb[lip3].layers = layer - bb[lip4].layers = layer - bb[lip5].layers = layer - bb[lip6].layers = layer - bb[lip7].layers = layer - bb[lip8].layers = layer - - - return (None,) - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - - - - -def make_lip_stretch_bone(obj, name, bone1, bone2, roll_alpha): - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Create the bone, pointing from bone1 to bone2 - bone_e = copy_bone_simple(obj.data, bone1, name, parent=True) - bone_e.use_connect = False - bone_e.tail = eb[bone2].head - bone = bone_e.name - - # Align the bone roll with the average direction of bone1 and bone2 - vec = bone_e.y_axis.cross(((1.0-roll_alpha)*eb[bone1].y_axis) + (roll_alpha*eb[bone2].y_axis)).normalize() - - ang = acos(vec * bone_e.x_axis) - - bone_e.roll += ang - c1 = vec * bone_e.x_axis - bone_e.roll -= (ang*2) - c2 = vec * bone_e.x_axis - - if c1 > c2: - bone_e.roll += (ang*2) - - bpy.ops.object.mode_set(mode='OBJECT') - bone_p = pb[bone] - - # Constrains - con = bone_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = bone1 - - con = bone_p.constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = bone2 - - con = bone_p.constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = bone2 - con.volume = 'NO_VOLUME' - - bpy.ops.object.mode_set(mode='EDIT') - - return bone diff --git a/release/scripts/modules/rigify/neck.py b/release/scripts/modules/rigify/neck.py deleted file mode 100644 index 56717f0ebb0..00000000000 --- a/release/scripts/modules/rigify/neck.py +++ /dev/null @@ -1,344 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - - - -def metarig_template(): - # TODO: - ## generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('body') - #bone.head[:] = 0.0000, -0.0276, -0.1328 - #bone.tail[:] = 0.0000, -0.0170, -0.0197 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone = arm.edit_bones.new('head') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, 0.0726, 0.1354 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['body'] - #bone = arm.edit_bones.new('neck.01') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, -0.0099, 0.0146 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone.parent = arm.edit_bones['head'] - #bone = arm.edit_bones.new('neck.02') - #bone.head[:] = 0.0000, -0.0099, 0.0146 - #bone.tail[:] = 0.0000, -0.0242, 0.0514 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.01'] - #bone = arm.edit_bones.new('neck.03') - #bone.head[:] = 0.0000, -0.0242, 0.0514 - #bone.tail[:] = 0.0000, -0.0417, 0.0868 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.02'] - #bone = arm.edit_bones.new('neck.04') - #bone.head[:] = 0.0000, -0.0417, 0.0868 - #bone.tail[:] = 0.0000, -0.0509, 0.1190 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.03'] - #bone = arm.edit_bones.new('neck.05') - #bone.head[:] = 0.0000, -0.0509, 0.1190 - #bone.tail[:] = 0.0000, -0.0537, 0.1600 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.04'] - # - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['head'] - #pbone['type'] = 'neck_flex' - pass - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is neck_01, its parent is the body - eg. - body -> neck_01 -> neck_02 -> neck_03.... etc - ''' - arm = obj.data - neck = arm.bones[orig_bone_name] - body = neck.parent - - bone_definition = [body.name, neck.name] - bone_definition.extend([child.name for child in neck.children_recursive_basename]) - return bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[1:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - from mathutils import Vector - - arm = obj.data - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - body = bone_definition[0] - - # Create the neck and head control bones - if "head_name" in options: - head_name = options["head_name"] - else: - head_name = "head" - - neck_name = base_names[bone_definition[1]].split(".")[0] - - neck_ctrl = copy_bone_simple(arm, bone_definition[1], neck_name).name - head_ctrl = copy_bone_simple(arm, bone_definition[len(bone_definition)-1], head_name).name - eb[head_ctrl].tail += eb[neck_ctrl].head - eb[head_ctrl].head - eb[head_ctrl].head = eb[neck_ctrl].head - - # Create hinge and socket bones - neck_hinge = copy_bone_simple(arm, bone_definition[0], "MCH-" + neck_name + "_hinge").name - head_hinge = copy_bone_simple(arm, neck_ctrl, "MCH-" + head_name + "_hinge").name - eb[neck_hinge].tail += eb[neck_ctrl].head - eb[neck_hinge].head - eb[neck_hinge].head = eb[neck_ctrl].head - eb[head_hinge].tail += eb[neck_ctrl].head - eb[head_hinge].head - eb[head_hinge].head = eb[neck_ctrl].head - - neck_socket = copy_bone_simple(arm, bone_definition[1], "MCH-" + neck_name + "_socket").name - head_socket = copy_bone_simple(arm, bone_definition[1], "MCH-" + head_name + "_socket").name - - # Parent-child relationships between the body, hinges, controls, and sockets - eb[neck_ctrl].parent = eb[neck_hinge] - eb[head_ctrl].parent = eb[head_hinge] - - eb[neck_socket].parent = eb[body] - eb[head_socket].parent = eb[body] - - # Create neck bones - neck = [] # neck bones - neck_neck = [] # bones constrained to neck control - neck_head = [] # bones constrained to head control - for i in range(1, len(bone_definition)): - # Create bones - neck_bone = copy_bone_simple(arm, bone_definition[i], base_names[bone_definition[i]]).name - neck_neck_bone = copy_bone_simple(arm, neck_ctrl, "MCH-" + base_names[bone_definition[i]] + ".neck").name - neck_head_bone = copy_bone_simple(arm, head_ctrl, "MCH-" + base_names[bone_definition[i]] + ".head").name - - # Move them all to the same place - eb[neck_neck_bone].tail += eb[neck_bone].head - eb[neck_neck_bone].head - eb[neck_head_bone].tail += eb[neck_bone].head - eb[neck_neck_bone].head - eb[neck_neck_bone].head = eb[neck_bone].head - eb[neck_head_bone].head = eb[neck_bone].head - - # Parent/child relationships - eb[neck_bone].parent = eb[neck_head_bone] - eb[neck_head_bone].parent = eb[neck_neck_bone] - - if i > 1: - eb[neck_neck_bone].parent = eb[neck[i-2]] - else: - eb[neck_neck_bone].parent = eb[body] - - # Add them to the lists - neck += [neck_bone] - neck_neck += [neck_neck_bone] - neck_head += [neck_head_bone] - - # Create deformation rig - deform(obj, bone_definition, base_names, options) - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Axis locks - pb[neck_ctrl].lock_location = True, True, True - pb[head_ctrl].lock_location = True, True, True - - for bone in neck: - pb[bone].lock_location = True, True, True - - # Neck hinge - prop = rna_idprop_ui_prop_get(pb[neck_ctrl], "hinge", create=True) - pb[neck_ctrl]["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["hard_min"] = 0.0 - prop["hard_max"] = 1.0 - - con = pb[neck_hinge].constraints.new('COPY_LOCATION') - con.name = "socket" - con.target = obj - con.subtarget = neck_socket - - con = pb[neck_hinge].constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = body - - hinge_driver_path = pb[neck_ctrl].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - # Head hinge - prop = rna_idprop_ui_prop_get(pb[head_ctrl], "hinge", create=True) - pb[head_ctrl]["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["hard_min"] = 0.0 - prop["hard_max"] = 1.0 - - con = pb[head_hinge].constraints.new('COPY_LOCATION') - con.name = "socket" - con.target = obj - con.subtarget = head_socket - - con = pb[head_hinge].constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = neck_ctrl - - hinge_driver_path = pb[head_ctrl].path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - # Neck rotation constraints - for i in range(0, len(neck_neck)): - con = pb[neck_neck[i]].constraints.new('COPY_ROTATION') - con.name = "neck rotation" - con.target = obj - con.subtarget = neck_ctrl - con.influence = (i+1) / len(neck_neck) - - - # Head rotation constraints/drivers - prop = rna_idprop_ui_prop_get(pb[head_ctrl], "extent", create=True) - if "extent" in options: - pb[head_ctrl]["extent"] = options["extent"] - else: - pb[head_ctrl]["extent"] = 0.5 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - prop["hard_min"] = 0.0 - prop["hard_max"] = 1.0 - - extent_prop_path = pb[head_ctrl].path_from_id() + '["extent"]' - - for i in range(0, len(neck_head)): - con = pb[neck_head[i]].constraints.new('COPY_ROTATION') - con.name = "head rotation" - con.target = obj - con.subtarget = head_ctrl - - if i < (len(neck_head)-1): - inf = (i+1) / len(neck_head) - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - var.name = "ext" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = extent_prop_path - - driver.expression = "0 if ext == 0 else (((%s-1)/ext)+1)" % inf - else: - con.influence = 1.0 - - # Constrain original bones to the neck bones - for i in range(0, len(neck)): - con = pb[bone_definition[i+1]].constraints.new('COPY_TRANSFORMS') - con.name = "copy_transform" - con.target = obj - con.subtarget = neck[i] - - - # Set the controls' custom shapes to use other bones for transforms - pb[neck_ctrl].custom_shape_transform = pb[bone_definition[len(bone_definition)//2]] - pb[head_ctrl].custom_shape_transform = pb[bone_definition[len(bone_definition)-1]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n==options["ex_layer"] for n in range(0,32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for bone in neck: - bb[bone].layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - bb[neck_ctrl].layers = layer - bb[head_ctrl].layers = layer - - - # no blending the result of this - return None - diff --git a/release/scripts/modules/rigify/neck_flex.py b/release/scripts/modules/rigify/neck_flex.py deleted file mode 100644 index 7daf3d3bb4b..00000000000 --- a/release/scripts/modules/rigify/neck_flex.py +++ /dev/null @@ -1,348 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = ("body", "head") - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('body') - bone.head[:] = 0.0000, -0.0276, -0.1328 - bone.tail[:] = 0.0000, -0.0170, -0.0197 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('head') - bone.head[:] = 0.0000, -0.0170, -0.0197 - bone.tail[:] = 0.0000, 0.0726, 0.1354 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['body'] - bone = arm.edit_bones.new('neck.01') - bone.head[:] = 0.0000, -0.0170, -0.0197 - bone.tail[:] = 0.0000, -0.0099, 0.0146 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['head'] - bone = arm.edit_bones.new('neck.02') - bone.head[:] = 0.0000, -0.0099, 0.0146 - bone.tail[:] = 0.0000, -0.0242, 0.0514 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.01'] - bone = arm.edit_bones.new('neck.03') - bone.head[:] = 0.0000, -0.0242, 0.0514 - bone.tail[:] = 0.0000, -0.0417, 0.0868 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.02'] - bone = arm.edit_bones.new('neck.04') - bone.head[:] = 0.0000, -0.0417, 0.0868 - bone.tail[:] = 0.0000, -0.0509, 0.1190 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.03'] - bone = arm.edit_bones.new('neck.05') - bone.head[:] = 0.0000, -0.0509, 0.1190 - bone.tail[:] = 0.0000, -0.0537, 0.1600 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.04'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['head'] - pbone['type'] = 'neck_flex' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the head, its parent is the body, - # its only child the first of a chain with matching basenames. - eg. - body -> head -> neck_01 -> neck_02 -> neck_03.... etc - ''' - arm = obj.data - head = arm.bones[orig_bone_name] - body = head.parent - - children = head.children - if len(children) != 1: - raise RigifyError("expected the head bone '%s' to have only 1 child." % orig_bone_name) - - child = children[0] - bone_definition = [body.name, head.name, child.name] - bone_definition.extend([child.name for child in child.children_recursive_basename]) - return bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[2:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - from mathutils import Vector - - arm = obj.data - - # Initialize container classes for convenience - mt = bone_class_instance(obj, ["body", "head"]) # meta - mt.body = bone_definition[0] - mt.head = bone_definition[1] - mt.update() - - neck_chain = bone_definition[2:] - - mt_chain = bone_class_instance(obj, [("neck_%.2d" % (i + 1)) for i in range(len(neck_chain))]) # 99 bones enough eh? - for i, attr in enumerate(mt_chain.attr_names): - setattr(mt_chain, attr, neck_chain[i]) - mt_chain.update() - - neck_chain_basename = base_names[mt_chain.neck_01_e.name].split(".")[0] - neck_chain_segment_length = mt_chain.neck_01_e.length - - ex = bone_class_instance(obj, ["head", "head_hinge", "neck_socket", "head_ctrl"]) # hinge & extras - - # Add the head hinge at the bodys location, becomes the parent of the original head - - # apply everything to this copy of the chain - ex_chain = mt_chain.copy(base_names=base_names) - ex_chain.neck_01_e.parent = mt_chain.neck_01_e.parent - - - # Copy the head bone and offset - ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True) - ex.head_e.use_connect = False - ex.head = ex.head_e.name - # offset - head_length = ex.head_e.length - ex.head_e.head.y += head_length / 2.0 - ex.head_e.tail.y += head_length / 2.0 - - # Yes, use the body bone but call it a head hinge - ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False) - ex.head_hinge_e.use_connect = False - ex.head_hinge = ex.head_hinge_e.name - ex.head_hinge_e.head.y += head_length / 4.0 - ex.head_hinge_e.tail.y += head_length / 4.0 - - # Insert the neck socket, the head copys this loation - ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename) - ex.neck_socket = ex.neck_socket_e.name - ex.neck_socket_e.use_connect = False - ex.neck_socket_e.parent = mt.body_e - ex.neck_socket_e.head = mt.head_e.head - ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0)) - ex.neck_socket_e.roll = 0.0 - - - # copy of the head for controling - ex.head_ctrl_e = copy_bone_simple(arm, mt.head, base_names[mt.head]) - ex.head_ctrl = ex.head_ctrl_e.name - ex.head_ctrl_e.parent = ex.head_hinge_e - - for i, attr in enumerate(ex_chain.attr_names): - neck_e = getattr(ex_chain, attr + "_e") - - # dont store parent names, re-reference as each chain bones parent. - neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % base_names[getattr(mt_chain, attr)]) - neck_e_parent.head = neck_e.head - neck_e_parent.tail = neck_e.head + (mt.head_e.vector.normalize() * neck_chain_segment_length / 2.0) - neck_e_parent.roll = mt.head_e.roll - - orig_parent = neck_e.parent - neck_e.use_connect = False - neck_e.parent = neck_e_parent - neck_e_parent.use_connect = False - - if i == 0: - neck_e_parent.parent = mt.body_e - else: - neck_e_parent.parent = orig_parent - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - mt_chain.update() - ex_chain.update() - ex.update() - - # Axis locks - ex.head_ctrl_p.lock_location = True, True, True - - # Simple one off constraints, no drivers - con = ex.head_ctrl_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.neck_socket - - con = ex.head_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.head_ctrl - - # driven hinge - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, "hinge", create=True) - ex.head_ctrl_p["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - con = ex.head_hinge_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = mt.body - - # add driver - hinge_driver_path = ex.head_ctrl_p.path_from_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - head_driver_path = ex.head_ctrl_p.path_from_id() - - target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))] - - ex.head_ctrl_p["bend_tot"] = 0.0 - fcurve = ex.head_ctrl_p.driver_add('["bend_tot"]') - driver = fcurve.driver - driver.type = 'SUM' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - for i in range(len(neck_chain)): - var = driver.variables.new() - var.name = target_names[i] - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1)) - - - for i, attr in enumerate(ex_chain.attr_names): - neck_p = getattr(ex_chain, attr + "_p") - neck_p.lock_location = True, True, True - neck_p.lock_location = True, True, True - neck_p.lock_rotations_4d = True - - # Add bend prop - prop_name = "bend_%.2d" % (i + 1) - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, prop_name, create=True) - ex.head_ctrl_p[prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # add parent constraint - neck_p_parent = neck_p.parent - - # add constraint - con = neck_p_parent.constraints.new('COPY_ROTATION') - con.name = "Copy Rotation" - con.target = obj - con.subtarget = ex.head - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = "bend/bend_tot" - - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - - # add target - var = driver.variables.new() - var.name = "bend_tot" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_tot"]') - - var = driver.variables.new() - var.name = "bend" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["%s"]' % prop_name) - - - # finally constrain the original bone to this one - orig_neck_p = getattr(mt_chain, attr + "_p") - con = orig_neck_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = neck_p.name - - - # Set the head control's custom shape to use the last - # org neck bone for its transform - ex.head_ctrl_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n == options["ex_layer"] for n in range(0, 32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for attr in ex_chain.attr_names: - getattr(ex_chain, attr + "_b").layers = layer - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - ex.head_ctrl_b.layers = layer - - - # no blending the result of this - return None diff --git a/release/scripts/modules/rigify/palm_curl.py b/release/scripts/modules/rigify/palm_curl.py deleted file mode 100644 index c063e2b31c9..00000000000 --- a/release/scripts/modules/rigify/palm_curl.py +++ /dev/null @@ -1,270 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify_utils import copy_bone_simple, get_side_name -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = tuple() - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('hand') - bone.head[:] = 0.0004, -0.0629, 0.0000 - bone.tail[:] = 0.0021, -0.0209, 0.0000 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('palm.03') - bone.head[:] = -0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0025, 0.0644, -0.0065 - bone.roll = -3.1396 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.02') - bone.head[:] = 0.0252, -0.0000, 0.0000 - bone.tail[:] = 0.0324, 0.0627, -0.0065 - bone.roll = -3.1357 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.01') - bone.head[:] = 0.0504, 0.0000, 0.0000 - bone.tail[:] = 0.0703, 0.0508, -0.0065 - bone.roll = -3.1190 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.04') - bone.head[:] = -0.0252, 0.0000, 0.0000 - bone.tail[:] = -0.0286, 0.0606, -0.0065 - bone.roll = 3.1386 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('palm.05') - bone.head[:] = -0.0504, 0.0000, 0.0000 - bone.tail[:] = -0.0669, 0.0534, -0.0065 - bone.roll = 3.1239 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - bone = arm.edit_bones.new('thumb') - bone.head[:] = 0.0682, -0.0148, 0.0000 - bone.tail[:] = 0.1063, 0.0242, -0.0065 - bone.roll = -3.0929 - bone.use_connect = False - bone.parent = arm.edit_bones['hand'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['palm.01'] - pbone['type'] = 'palm_curl' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the first in an array of siblings with a matching basename - sorted with pointer first, little finger last. - eg. - [pointer, middle, ring, pinky... ] # any number of fingers - ''' - arm = obj.data - - palm_bone = arm.bones[orig_bone_name] - palm_parent = palm_bone.parent - palm_base = palm_bone.basename - bone_definition = [bone.name for bone in palm_parent.children if bone.basename == palm_base] - bone_definition.sort() - bone_definition.reverse() - - return [palm_parent.name] + bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[1:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - arm = obj.data - - children = bone_definition[1:] - - # Make a copy of the pinky - # simply assume the pinky has the lowest name - pinky_ebone = arm.edit_bones[children[0]] - ring_ebone = arm.edit_bones[children[1]] - - # FIXME, why split the second one? - base_name = base_names[pinky_ebone.name].rsplit('.', 2)[0] - - control_ebone = copy_bone_simple(arm, pinky_ebone.name, base_name + get_side_name(base_names[pinky_ebone.name]), parent=True) - control_name = control_ebone.name - - offset = (pinky_ebone.head - ring_ebone.head) - - control_ebone.translate(offset) - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - arm = obj.data - control_pbone = obj.pose.bones[control_name] - pinky_pbone = obj.pose.bones[children[0]] - - control_pbone.rotation_mode = 'YZX' - control_pbone.lock_rotation = False, True, True - control_pbone.lock_location = True, True, True - - driver_fcurves = pinky_pbone.driver_add("rotation_euler") - - - controller_path = control_pbone.path_from_id() - - # add custom prop - control_pbone["spread"] = 0.0 - prop = rna_idprop_ui_prop_get(control_pbone, "spread", create=True) - prop["soft_min"] = -1.0 - prop["soft_max"] = 1.0 - prop["min"] = -1.0 - prop["max"] = 1.0 - - - # ***** - driver = driver_fcurves[0].driver - driver.type = 'AVERAGE' - - var = driver.variables.new() - var.name = "x" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + ".rotation_euler[0]" - - - # ***** - driver = driver_fcurves[1].driver - driver.expression = "-x/4.0" - - var = driver.variables.new() - var.name = "x" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + ".rotation_euler[0]" - - - # ***** - driver = driver_fcurves[2].driver - driver.expression = "(1.0-cos(x))-s" - - for fcurve in driver_fcurves: - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - var = driver.variables.new() - var.name = "x" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + ".rotation_euler[0]" - - var = driver.variables.new() - var.name = "s" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = controller_path + '["spread"]' - - - for i, child_name in enumerate(children): - child_pbone = obj.pose.bones[child_name] - child_pbone.rotation_mode = 'YZX' - - if child_name != children[-1] and child_name != children[0]: - - # this is somewhat arbitrary but seems to look good - inf = i / (len(children) + 1) - inf = 1.0 - inf - inf = ((inf * inf) + inf) / 2.0 - - # used for X/Y constraint - inf_minor = inf * inf - - con = child_pbone.constraints.new('COPY_ROTATION') - con.name = "Copy Z Rot" - con.target = obj - con.subtarget = children[0] # also pinky_pbone - con.owner_space = con.target_space = 'LOCAL' - con.use_x, con.use_y, con.use_z = False, False, True - con.influence = inf - - con = child_pbone.constraints.new('COPY_ROTATION') - con.name = "Copy XY Rot" - con.target = obj - con.subtarget = children[0] # also pinky_pbone - con.owner_space = con.target_space = 'LOCAL' - con.use_x, con.use_y, con.use_z = True, True, False - con.influence = inf_minor - - - child_pbone = obj.pose.bones[children[-1]] - child_pbone.rotation_mode = 'QUATERNION' - - # fix at the end since there is some trouble with tx info not being updated otherwise - def x_direction(): - # NOTE: the direction of the Z rotation depends on which side the palm is on. - # we could do a simple side-of-x test but better to work out the direction - # the hand is facing. - from mathutils import Vector - from math import degrees - child_pbone_01 = obj.pose.bones[children[0]].bone - child_pbone_02 = obj.pose.bones[children[1]].bone - - rel_vec = child_pbone_01.head - child_pbone_02.head - x_vec = child_pbone_01.matrix.rotation_part() * Vector((1.0, 0.0, 0.0)) - - return degrees(rel_vec.angle(x_vec)) > 90.0 - - if x_direction(): # flip - driver.expression = "-(%s)" % driver.expression - - - # last step setup layers - arm.bones[control_name].layers = list(arm.bones[bone_definition[1]].layers) - - - # no blending the result of this - return None diff --git a/release/scripts/modules/rigify/shape_key_control.py b/release/scripts/modules/rigify/shape_key_control.py deleted file mode 100644 index a5f57313ab5..00000000000 --- a/release/scripts/modules/rigify/shape_key_control.py +++ /dev/null @@ -1,320 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "shape_key_control" - - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - new = False - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - new = True - - return fcurve, new - - -# TODO: -def metarig_template(): - # generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('Bone') - #bone.head[:] = 0.0000, 0.0000, 0.0000 - #bone.tail[:] = 0.0000, 0.0000, 1.0000 - #bone.roll = 0.0000 - #bone.use_connect = False - # - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['Bone'] - #pbone['type'] = 'copy' - pass - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - return [bone.name] - - -def main(obj, definitions, base_names, options): - """ A rig that drives shape keys with the local transforms and/or custom - properties of a single bone. - A different shape can be driven by the negative value of a transform as - well by giving a comma-separated list of two shapes. - - Required options: - mesh: name of mesh object(s) to add/get shapekeys to/from - (if multiple objects, make a comma-separated list) - Optional options: - loc_: name of the shape key to tie to translation of the bone - loc__fac: default multiplier of the bone influence on the shape key - rot_: name of the shape key to tie to rotation of the bone - rot__fac: default multiplier of the bone influence on the shape key - scale_: name of the shape key to tie to scale of the bone - scale__fac: default multiplier of the bone influence on the shape key - shape_key_sliders: comma-separated list of custom properties to create sliders out of for driving shape keys - : for each property listed in shape_key_sliders, specify a shape key for it to drive - - """ - - bpy.ops.object.mode_set(mode='EDIT') - eb = obj.data.edit_bones - pb = obj.pose.bones - - org_bone = definitions[0] - - # Options - req_options = ["mesh"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - meshes = options["mesh"].replace(" ", "").split(",") - - bone = copy_bone_simple(obj.data, org_bone, base_names[org_bone], parent=True).name - - bpy.ops.object.mode_set(mode='OBJECT') - - # Set rotation mode and axis locks - pb[bone].rotation_mode = pb[org_bone].rotation_mode - pb[bone].lock_location = tuple(pb[org_bone].lock_location) - pb[bone].lock_rotation = tuple(pb[org_bone].lock_rotation) - pb[bone].lock_rotation_w = pb[org_bone].lock_rotation_w - pb[bone].lock_rotations_4d = pb[org_bone].lock_rotations_4d - pb[bone].lock_scale = tuple(pb[org_bone].lock_scale) - - # List of rig options for specifying shape keys - # Append '_fac' to the end for the name of the corresponding 'factor - # default' option for that shape - shape_key_options = ["loc_x", - "loc_y", - "loc_z", - "rot_x", - "rot_y", - "rot_z", - "scale_x", - "scale_y", - "scale_z"] - - driver_paths = {"loc_x":".location[0]", - "loc_y":".location[1]", - "loc_z":".location[2]", - "rot_x":".rotation_euler[0]", - "rot_y":".rotation_euler[1]", - "rot_z":".rotation_euler[2]", - "qrot_x":".rotation_quaternion[1]", - "qrot_y":".rotation_quaternion[2]", - "qrot_z":".rotation_quaternion[3]", - "scale_x":".scale[0]", - "scale_y":".scale[1]", - "scale_z":".scale[2]"} - - # Create the shape keys and drivers for transforms - shape_info = [] - for option in shape_key_options: - if option in options: - shape_names = options[option].replace(" ", "").split(",") - - var_name = bone.replace(".","").replace("-","_") + "_" + option - # Different RNA paths for euler vs quat - if option in (shape_key_options[3:6]+shape_key_options[12:15]) \ - and pb[bone].rotation_mode == 'QUATERNION': - var_path = driver_paths['q' + option] - else: - var_path = driver_paths[option] - - if (option+"_fac") in options: - fac = options[option+"_fac"] - else: - fac = 1.0 - - # Positive - if shape_names[0] != "": - # Different expressions for loc/rot/scale and positive/negative - if option in shape_key_options[:3]: - # Location - expression = var_name + " * " + str(fac) - elif option in shape_key_options[3:6]: - # Rotation - # Different expressions for euler vs quats - if pb[bone].rotation_mode == 'QUATERNION': - expression = "2 * asin(" + var_name + ") * " + str(fac) - else: - expression = var_name + " * " + str(fac) - elif option in shape_key_options[6:9]: - # Scale - expression = "(1.0 - " + var_name + ") * " + str(fac) + " * -2" - shape_name = shape_names[0] - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - - # Negative - if shape_names[0] != "" and len(shape_names) > 1: - # Different expressions for loc/rot/scale and positive/negative - if option in shape_key_options[:3]: - # Location - expression = var_name + " * " + str(fac) + " * -1" - elif option in shape_key_options[3:6]: - # Rotation - # Different expressions for euler vs quats - if pb[bone].rotation_mode == 'QUATERNION': - expression = "-2 * asin(" + var_name + ") * " + str(fac) - else: - expression = var_name + " * " + str(fac) + " * -1" - elif option in shape_key_options[6:9]: - # Scale - expression = "(1.0 - " + var_name + ") * " + str(fac) + " * 2" - shape_name = shape_names[1] - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - - # Create the shape keys and drivers for custom-property sliders - if "shape_key_sliders" in options: - # Get the slider names - slider_names = options["shape_key_sliders"].replace(" ", "").split(",") - if slider_names[0] != "": - # Loop through the slider names and check if they have - # shape keys specified for them, and if so, set them up. - for slider_name in slider_names: - if slider_name in options: - shape_names = options[slider_name].replace(" ", "").split(",") - - # Set up the custom property on the bone - prop = rna_idprop_ui_prop_get(pb[bone], slider_name, create=True) - pb[bone][slider_name] = 0.0 - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - if len(shape_names) > 1: - prop["min"] = -1.0 - prop["soft_min"] = -1.0 - - # Add the shape drivers - # Positive - if shape_names[0] != "": - # Set up the variables for creating the shape key driver - shape_name = shape_names[0] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) - # Create the shape key driver - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - # Negative - if shape_names[0] != "" and len(shape_names) > 1: - # Set up the variables for creating the shape key driver - shape_name = shape_names[1] - var_name = slider_name.replace(".", "_").replace("-", "_") - var_path = '["' + slider_name + '"]' - if slider_name + "_fac" in options: - fac = options[slider_name + "_fac"] - else: - fac = 1.0 - expression = var_name + " * " + str(fac) + " * -1" - # Create the shape key driver - create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression) - - - # Org bone copy transforms of control bone - con = pb[org_bone].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = bone - - return (None,) - - -def create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression): - """ Creates/gets a shape key and sets up a driver for it. - - obj = armature object - bone = driving bone name - meshes = list of meshes to create the shapekey/driver on - shape_name = name of the shape key - var_name = name of the driving variable - var_path = path to the property on the bone to drive with - expression = python expression for the driver - """ - pb = obj.pose.bones - bpy.ops.object.mode_set(mode='OBJECT') - - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape = addget_shape_key(mesh_obj, name=shape_name) - - # Add/get the shape key driver - fcurve, a = addget_shape_key_driver(mesh_obj, name=shape_name) - - # Set up the driver - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = expression - - # Get the variable, or create it if it doesn't already exist - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "SINGLE_PROP" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = 'pose.bones["' + bone + '"]' + var_path - - diff --git a/release/scripts/modules/rigify/shape_key_distance.py b/release/scripts/modules/rigify/shape_key_distance.py deleted file mode 100644 index 3045fcdab0d..00000000000 --- a/release/scripts/modules/rigify/shape_key_distance.py +++ /dev/null @@ -1,172 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "shape_key_distance" - - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - - return fcurve - - - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - return [bone.name] - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - eb = obj.data.edit_bones - - bone_from = definitions[0] - - - # Options - req_options = ["to", "mesh", "shape_key"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - bone_to = "ORG-" + options["to"] - meshes = options["mesh"].replace(" ", "").split(",") - shape_key_name = options["shape_key"] - - if "dmul" in options: - shape_blend_fac = options["dmul"] - else: - shape_blend_fac = 1.0 - - - # Calculate the distance between the bones - distance = (eb[bone_from].head - eb[bone_to].head).length - - bpy.ops.object.mode_set(mode='OBJECT') - - # For every listed mesh object - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[bone_from] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "LOC_DIFF" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].bone_target = bone_from - var.targets[1].id_type = 'OBJECT' - var.targets[1].id = obj - var.targets[1].bone_target = bone_to - - # Set fcurve offset, so zero is at the rest distance - - mod = fcurve.modifiers[0] - if distance > 0.00001: - mod.coefficients[0] = -shape_blend_fac - mod.coefficients[1] = shape_blend_fac / distance - - return (None,) - - - - -def control(obj, definitions, base_names, options): - """ options: - mesh: name of mesh object with the shape key - shape_key: name of shape key - to: name of bone to measure distance from - """ - pass - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - #control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - diff --git a/release/scripts/modules/rigify/shape_key_rotdiff.py b/release/scripts/modules/rigify/shape_key_rotdiff.py deleted file mode 100644 index a6ba5adfe6b..00000000000 --- a/release/scripts/modules/rigify/shape_key_rotdiff.py +++ /dev/null @@ -1,172 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError - -#METARIG_NAMES = ("cpy",) -RIG_TYPE = "shape_key_rotdiff" - - -def addget_shape_key(obj, name="Key"): - """ Fetches a shape key, or creates it if it doesn't exist - """ - # Create a shapekey set if it doesn't already exist - if obj.data.shape_keys is None: - shape = obj.add_shape_key(name="Basis", from_mix=False) - obj.active_shape_key_index = 0 - - # Get the shapekey, or create it if it doesn't already exist - if name in obj.data.shape_keys.keys: - shape_key = obj.data.shape_keys.keys[name] - else: - shape_key = obj.add_shape_key(name=name, from_mix=False) - - return shape_key - - -def addget_shape_key_driver(obj, name="Key"): - """ Fetches the driver for the shape key, or creates it if it doesn't - already exist. - """ - driver_path = 'keys["' + name + '"].value' - fcurve = None - driver = None - if obj.data.shape_keys.animation_data is not None: - for driver_s in obj.data.shape_keys.animation_data.drivers: - if driver_s.data_path == driver_path: - fcurve = driver_s - if fcurve is None: - fcurve = obj.data.shape_keys.keys[name].driver_add("value") - fcurve.driver.type = 'AVERAGE' - - return fcurve - - - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('Bone') - bone.head[:] = 0.0000, 0.0000, 0.0000 - bone.tail[:] = 0.0000, 0.0000, 1.0000 - bone.roll = 0.0000 - bone.use_connect = False - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['Bone'] - pbone['type'] = 'copy' - - -def metarig_definition(obj, orig_bone_name): - bone = obj.data.bones[orig_bone_name] - return [bone.name] - - -def deform(obj, definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - eb = obj.data.edit_bones - - bone_from = definitions[0] - - - # Options - req_options = ["to", "mesh", "shape_key"] - for option in req_options: - if option not in options: - raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]])) - - bone_to = "ORG-" + options["to"] - meshes = options["mesh"].replace(" ", "").split(",") - shape_key_name = options["shape_key"] - - if "dmul" in options: - shape_blend_fac = options["dmul"] - else: - shape_blend_fac = 1.0 - - - # Calculate the rotation difference between the bones - rotdiff = (eb[bone_from].matrix.to_quat() * eb[bone_to].matrix.to_quat()) * 2 - - bpy.ops.object.mode_set(mode='OBJECT') - - # For every listed mesh object - for mesh_name in meshes: - mesh_obj = bpy.data.objects[mesh_name] - - # Add/get the shape key - shape_key = addget_shape_key(mesh_obj, name=shape_key_name) - - # Add/get the shape key driver - fcurve = addget_shape_key_driver(mesh_obj, name=shape_key_name) - driver = fcurve.driver - - # Get the variable, or create it if it doesn't already exist - var_name = base_names[bone_from] - if var_name in driver.variables: - var = driver.variables[var_name] - else: - var = driver.variables.new() - var.name = var_name - - # Set up the variable - var.type = "ROTATION_DIFF" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].bone_target = bone_from - var.targets[1].id_type = 'OBJECT' - var.targets[1].id = obj - var.targets[1].bone_target = bone_to - - # Set fcurve offset, so zero is at the rest distance - - mod = fcurve.modifiers[0] - if rotdiff > 0.00001: - mod.coefficients[0] = -shape_blend_fac - mod.coefficients[1] = shape_blend_fac / rotdiff - - return (None,) - - - - -def control(obj, definitions, base_names, options): - """ options: - mesh: name of mesh object with the shape key - shape_key: name of shape key - to: name of bone to measure distance from - """ - pass - - - - -def main(obj, bone_definition, base_names, options): - # Create control rig - #control(obj, bone_definition, base_names, options) - # Create deform rig - deform(obj, bone_definition, base_names, options) - - return (None,) - diff --git a/release/scripts/modules/rigify/spine_pivot_flex.py b/release/scripts/modules/rigify/spine_pivot_flex.py deleted file mode 100644 index 7782380eedb..00000000000 --- a/release/scripts/modules/rigify/spine_pivot_flex.py +++ /dev/null @@ -1,481 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = ("pelvis", "ribcage") - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('pelvis') - bone.head[:] = 0.0000, -0.0306, 0.1039 - bone.tail[:] = 0.0000, -0.0306, -0.0159 - bone.roll = 0.0000 - bone.use_connect = False - bone = arm.edit_bones.new('rib_cage') - bone.head[:] = 0.0000, -0.0306, 0.1039 - bone.tail[:] = 0.0000, -0.0306, 0.2236 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['pelvis'] - bone = arm.edit_bones.new('spine.01') - bone.head[:] = 0.0000, 0.0000, -0.0000 - bone.tail[:] = 0.0000, -0.0306, 0.1039 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['rib_cage'] - bone = arm.edit_bones.new('spine.02') - bone.head[:] = 0.0000, -0.0306, 0.1039 - bone.tail[:] = -0.0000, -0.0398, 0.2045 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('spine.03') - bone.head[:] = -0.0000, -0.0398, 0.2045 - bone.tail[:] = -0.0000, -0.0094, 0.2893 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.02'] - bone = arm.edit_bones.new('spine.04') - bone.head[:] = -0.0000, -0.0094, 0.2893 - bone.tail[:] = -0.0000, 0.0335, 0.3595 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.03'] - bone = arm.edit_bones.new('spine.05') - bone.head[:] = -0.0000, 0.0335, 0.3595 - bone.tail[:] = -0.0000, 0.0555, 0.4327 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.04'] - bone = arm.edit_bones.new('spine.06') - bone.head[:] = -0.0000, 0.0555, 0.4327 - bone.tail[:] = -0.0000, 0.0440, 0.5207 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.05'] - bone = arm.edit_bones.new('spine.07') - bone.head[:] = -0.0000, 0.0440, 0.5207 - bone.tail[:] = -0.0000, 0.0021, 0.5992 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.06'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['rib_cage'] - pbone['type'] = 'spine_pivot_flex' - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the second in a chain. - Expects at least 1 parent and a chain of children withe the same basename - eg. - pelvis -> rib_cage -> spine.01 -> spine.02 -> spine.03 - - note: same as neck. - ''' - arm = obj.data - ribcage = arm.bones[orig_bone_name] - pelvis = ribcage.parent - - if pelvis is None: - raise RigifyError("expected the ribcage bone:'%s' to have a parent (ribcage)." % ribcage.name) - - children = ribcage.children - if len(children) != 1: - raise RigifyError("expected the ribcage to have only 1 child.") - - child = children[0] - - bone_definition = [pelvis.name, ribcage.name, child.name] - bone_definition.extend([child.name for child in child.children_recursive_basename]) - return bone_definition - - -def fk(*args): - main(*args) - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[2:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -def main(obj, bone_definition, base_names, options): - from mathutils import Vector, Matrix - from math import radians, pi - - arm = obj.data - - # Initialize container classes for convenience - mt = bone_class_instance(obj, ["pelvis", "ribcage"]) # meta - mt.pelvis = bone_definition[0] - mt.ribcage = bone_definition[1] - mt.update() - - spine_chain_orig = tuple(bone_definition[2:]) - spine_chain = [arm.edit_bones[child_name] for child_name in spine_chain_orig] - spine_chain_basename = base_names[spine_chain[0].name].rsplit(".", 1)[0] # probably 'ORG-spine.01' -> 'spine' - spine_chain_len = len(spine_chain_orig) - - child = spine_chain[0] - spine_chain_segment_length = child.length - #child.parent = mt.pelvis_e # was mt.ribcage - - # The first bone in the chain happens to be the basis of others, create them now - ex = bone_class_instance(obj, ["pelvis_copy", "ribcage_hinge", "ribcage_copy", "spine_rotate"]) - - ex.pelvis_copy_e = copy_bone_simple(arm, mt.pelvis, base_names[mt.pelvis]) # no parent - ex.pelvis_copy = ex.pelvis_copy_e.name - ex.pelvis_copy_e.use_local_location = False - - # copy the pelvis, offset to make MCH-spine_rotate and MCH-ribcage_hinge - ex.ribcage_hinge_e = copy_bone_simple(arm, mt.pelvis, "MCH-%s_hinge" % base_names[mt.ribcage]) - ex.ribcage_hinge = ex.ribcage_hinge_e.name - ex.ribcage_hinge_e.translate(Vector((0.0, spine_chain_segment_length / 4.0, 0.0))) - - ex.spine_rotate_e = copy_bone_simple(arm, mt.ribcage, "MCH-%s_rotate" % spine_chain_basename) - ex.spine_rotate = ex.spine_rotate_e.name - ex.spine_rotate_e.translate(Vector((0.0, spine_chain_segment_length / 2.0, 0.0))) - ex.spine_rotate_e.use_connect = False - ex.spine_rotate_e.parent = ex.pelvis_copy_e - - - # Copy the last bone now - child = spine_chain[-1] - - ex.ribcage_copy_e = copy_bone_simple(arm, mt.ribcage, base_names[mt.ribcage]) - ex.ribcage_copy = ex.ribcage_copy_e.name - ex.ribcage_copy_e.use_connect = False - ex.ribcage_copy_e.parent = ex.ribcage_hinge_e - - spine_chain = [child.name for child in spine_chain] - - # We have 3 spine chains - # - original (ORG_*) - # - copy (*use original name*) - # - reverse (MCH-rev_*) - spine_chain_attrs = [("spine_%.2d" % (i + 1)) for i in range(spine_chain_len)] - - mt_chain = bone_class_instance(obj, spine_chain_attrs) # ORG_* - rv_chain = bone_class_instance(obj, spine_chain_attrs) # * - ex_chain = bone_class_instance(obj, spine_chain_attrs) # MCH-rev_* - del spine_chain_attrs - - for i, child_name in enumerate(spine_chain): - child_name_orig = base_names[spine_chain_orig[i]] - - attr = mt_chain.attr_names[i] # eg. spine_04 - - setattr(mt_chain, attr, spine_chain_orig[i]) # the original bone - - ebone = copy_bone_simple(arm, child_name, child_name_orig) # use the original name - setattr(ex_chain, attr, ebone.name) - - ebone = copy_bone_simple(arm, child_name, "MCH-rev_%s" % child_name_orig) - setattr(rv_chain, attr, ebone.name) - ebone.use_connect = False - - mt_chain.update() - ex_chain.update() - rv_chain.update() - - # Now we need to re-parent these chains - for i, child_name in enumerate(spine_chain_orig): - attr = ex_chain.attr_names[i] + "_e" - ebone = getattr(ex_chain, attr) - if i == 0: - ebone.use_connect = False - ebone.parent = ex.pelvis_copy_e - else: - attr_parent = ex_chain.attr_names[i - 1] + "_e" - ebone.parent = getattr(ex_chain, attr_parent) - - # intentional! get the parent from the other parallel chain member - getattr(rv_chain, attr).parent = ebone - - - # ex_chain needs to interlace bones! - # Note, skip the first bone - for i in range(1, spine_chain_len): # similar to neck - child_name_orig = base_names[spine_chain_orig[i]] - spine_e = getattr(mt_chain, mt_chain.attr_names[i] + "_e") - - # dont store parent names, re-reference as each chain bones parent. - spine_e_parent = arm.edit_bones.new("MCH-rot_%s" % child_name_orig) - spine_e_parent.head = spine_e.head - spine_e_parent.tail = spine_e.head + (mt.ribcage_e.vector.normalize() * spine_chain_segment_length / 2.0) - spine_e_parent.roll = mt.ribcage_e.roll - - - spine_e = getattr(ex_chain, ex_chain.attr_names[i] + "_e") - orig_parent = spine_e.parent - spine_e.use_connect = False - spine_e.parent = spine_e_parent - spine_e_parent.use_connect = False - - spine_e_parent.parent = orig_parent - - - # Rotate the rev chain 180 about the by the first bones center point - pivot = (rv_chain.spine_01_e.head + rv_chain.spine_01_e.tail) * 0.5 - matrix = Matrix.Rotation(radians(180), 3, 'X') - for i, attr in enumerate(rv_chain.attr_names): # similar to neck - spine_e = getattr(rv_chain, attr + "_e") - # use the first bone as the pivot - - spine_e.head = ((spine_e.head - pivot) * matrix) + pivot - spine_e.tail = ((spine_e.tail - pivot) * matrix) + pivot - spine_e.roll += pi # 180d roll - del spine_e - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - # refresh pose bones - mt.update() - ex.update() - mt_chain.update() - ex_chain.update() - rv_chain.update() - - # Axis locks - ex.ribcage_copy_p.lock_location = True, True, True - - con = ex.ribcage_hinge_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = ex.pelvis_copy - - # add driver - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = ex.ribcage_copy_p.path_from_id() + '["hinge"]' - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - con = ex.spine_rotate_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.ribcage_copy - - # ex.pelvis_copy_p / rib_cage - con = ex.ribcage_copy_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.pelvis_copy - con.head_tail = 0.0 - - # This stores all important ID props - prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "hinge", create=True) - ex.ribcage_copy_p["hinge"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "pivot_slide", create=True) - ex.ribcage_copy_p["pivot_slide"] = 1.0 / spine_chain_len - prop["soft_min"] = 1.0 / spine_chain_len - prop["soft_max"] = 1.0 - - - # Create a fake connected parent/child relationship with bone location constraints - # positioned at the tip. - - # reverse bones / MCH-rev_spine.## - for i in range(1, spine_chain_len): - spine_p = getattr(rv_chain, rv_chain.attr_names[i] + "_p") - spine_fake_parent_name = getattr(rv_chain, rv_chain.attr_names[i - 1]) - - con = spine_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = spine_fake_parent_name - con.head_tail = 1.0 - del spine_p, spine_fake_parent_name, con - - - # Constrain 'inbetween' bones - target_names = [("b%.2d" % (i + 1)) for i in range(spine_chain_len - 1)] - rib_driver_path = ex.ribcage_copy_p.path_from_id() - - ex.ribcage_copy_p["bend_tot"] = 0.0 - fcurve = ex.ribcage_copy_p.driver_add('["bend_tot"]') - driver = fcurve.driver - driver.type = 'SUM' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - for i in range(spine_chain_len - 1): - var = driver.variables.new() - var.name = target_names[i] - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + ('["bend_%.2d"]' % (i + 1)) - - for i in range(1, spine_chain_len): - - # Add bend prop - prop_name = "bend_%.2d" % i - prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, prop_name, create=True) - if ("bend_%.2d" % i) in options: - ex.ribcage_copy_p[prop_name] = options["bend_%.2d" % i] - else: - ex.ribcage_copy_p[prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - spine_p = getattr(ex_chain, ex_chain.attr_names[i] + "_p") - spine_p_parent = spine_p.parent # interlaced bone - - con = spine_p_parent.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.spine_rotate - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - del spine_p - - # add driver - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = "bend/bend_tot" - - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - - # add target - var = driver.variables.new() - var.name = "bend_tot" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + ('["bend_tot"]') - - var = driver.variables.new() - var.name = "bend" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + ('["%s"]' % prop_name) - - - - # original bone drivers - # note: the first bone has a lot more constraints, but also this simple one is first. - for i, attr in enumerate(mt_chain.attr_names): - spine_p = getattr(mt_chain, attr + "_p") - - con = spine_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = getattr(ex_chain, attr) # lock to the copy's rotation - del spine_p - - # pivot slide: - lots of copy location constraints. - - con = mt_chain.spine_01_p.constraints.new('COPY_LOCATION') - con.name = "base" - con.target = obj - con.subtarget = rv_chain.spine_01 # lock to the reverse location - - for i in range(1, spine_chain_len + 1): - con = mt_chain.spine_01_p.constraints.new('COPY_LOCATION') - con.name = "slide_%d" % i - con.target = obj - - if i == spine_chain_len: - attr = mt_chain.attr_names[i - 1] - else: - attr = mt_chain.attr_names[i] - - con.subtarget = getattr(rv_chain, attr) # lock to the reverse location - - if i == spine_chain_len: - con.head_tail = 1.0 - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = rib_driver_path + '["pivot_slide"]' - - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = - (i - 1) - mod.coefficients[1] = spine_chain_len - - - # Set pelvis and ribcage controls to use the first and last bone in the - # spine respectively for their custom shape transform - ex.ribcage_copy_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]] - ex.pelvis_copy_p.custom_shape_transform = obj.pose.bones[bone_definition[2]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n == options["ex_layer"] for n in range(0, 32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - for attr in ex_chain.attr_names: - getattr(ex_chain, attr + "_b").layers = layer - for attr in rv_chain.attr_names: - getattr(rv_chain, attr + "_b").layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - arm.bones[ex.pelvis_copy].layers = layer - arm.bones[ex.ribcage_copy].layers = layer - - # no support for blending chains - return None diff --git a/release/scripts/modules/rigify/stretch.py b/release/scripts/modules/rigify/stretch.py deleted file mode 100644 index 6a498e5aa29..00000000000 --- a/release/scripts/modules/rigify/stretch.py +++ /dev/null @@ -1,109 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "stretch" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0: False, 1: True, - 0.0: False, 1.0: True, - "false": False, "true": True, - "False": False, "True": True, - "no": False, "yes": True, - "No": False, "Yes": True} - - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - -def main(obj, bone_definition, base_names, options): - """ A stretchy bone from one bone to another. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]])) - - preserve_volume = None - # Check optional parameter - if "preserve_volume" in options: - try: - preserve_volume = bool_map[options["preserve_volume"]] - except KeyError: - preserve_volume = False - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = eb[mbone2].head - bone = bone_e.name - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - con = pb[bone].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone2 - - con = pb[bone].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = mbone2 - con.rest_length = bb[bone].length - if preserve_volume: - con.volume = 'VOLUME_XZX' - else: - con.volume = 'NO_VOLUME' - - return tuple() diff --git a/release/scripts/modules/rigify/stretch_twist.py b/release/scripts/modules/rigify/stretch_twist.py deleted file mode 100644 index 07ce031967f..00000000000 --- a/release/scripts/modules/rigify/stretch_twist.py +++ /dev/null @@ -1,152 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "stretch_twist" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0:False, 1:True, - 0.0:False, 1.0:True, - "false":False, "true":True, - "False":False, "True":True, - "no":False, "yes":True, - "No":False, "Yes":True} - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - - - -def main(obj, bone_definition, base_names, options): - """ A dual-bone stretchy bone setup. Each half follows the twist of the - bone on its side. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0])) - - preserve_volume = None - # Check optional parameter - if "preserve_volume" in options: - try: - preserve_volume = bool_map[options["preserve_volume"]] - except KeyError: - preserve_volume = False - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone1, "MCH-%s" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = None - bone_e.head = (eb[mbone1].head + eb[mbone2].head) / 2 - bone_e.tail = (bone_e.head[0], bone_e.head[1], bone_e.head[2]+0.1) - mid_bone = bone_e.name - - bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = eb[mid_bone].head - bone1 = bone_e.name - - bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone2] - bone_e.tail = eb[mid_bone].head - bone2 = bone_e.name - - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - - # Mid bone - con = pb[mid_bone].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone1 - - con = pb[mid_bone].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone2 - con.influence = 0.5 - - # Bone 1 - con = pb[bone1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mid_bone - - con = pb[bone1].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = mid_bone - con.rest_length = bb[bone1].length - if preserve_volume: - con.volume = 'VOLUME_XZX' - else: - con.volume = 'NO_VOLUME' - - # Bone 2 - con = pb[bone2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mid_bone - - con = pb[bone2].constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = mid_bone - con.rest_length = bb[bone2].length - if preserve_volume: - con.volume = 'VOLUME_XZX' - else: - con.volume = 'NO_VOLUME' - - return tuple() - diff --git a/release/scripts/modules/rigify/tail_control.py b/release/scripts/modules/rigify/tail_control.py deleted file mode 100644 index 32d414344cf..00000000000 --- a/release/scripts/modules/rigify/tail_control.py +++ /dev/null @@ -1,165 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get -from mathutils import Vector, Matrix -from math import radians, pi - -# not used, defined for completeness -METARIG_NAMES = ("pelvis", "ribcage") - - -def metarig_template(): - # TODO - pass - # generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('tail.01') - #bone.head[:] = 0.0000, -0.0306, 0.1039 - #bone.tail[:] = 0.0000, -0.0306, -0.0159 - #bone.roll = 0.0000 - #bone.use_connect = False - - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['tail.01'] - #pbone['type'] = 'tail_spline_ik' - - -def metarig_definition(obj, orig_bone_name): - """ Collects and returns the relevent bones for the rig. - The bone given is the first in the chain of tail bones. - It includes bones in the chain up until it hits a bone that doesn't - have the same name base. - - tail.01 -> tail.02 -> tail.03 -> ... -> tail.n - """ - arm = obj.data - tail_base = arm.bones[orig_bone_name] - - if tail_base.parent is None: - raise RigifyError("'tail_control' rig type on bone '%s' requires a parent." % orig_bone_name) - - bone_definitions = [tail_base.name] - bone_definitions.extend([child.name for child in tail_base.children_recursive_basename]) - return bone_definitions - - -def main(obj, bone_definitions, base_names, options): - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - bb = obj.data.bones - eb = obj.data.edit_bones - pb = obj.pose.bones - - # Create bones for hinge/free - # hinge 1 sticks with the parent - # hinge 2 is the parent of the tail controls - hinge1 = copy_bone_simple(arm, bone_definitions[0], "MCH-%s.hinge1" % base_names[bone_definitions[0]], parent=True).name - hinge2 = copy_bone_simple(arm, bone_definitions[0], "MCH-%s.hinge2" % base_names[bone_definitions[0]], parent=False).name - - # Create tail control bones - bones = [] - i = 0 - for bone_def in bone_definitions: - bone = copy_bone_simple(arm, bone_def, base_names[bone_def], parent=True).name - if i == 1: # Don't change parent of first tail bone - eb[bone].use_connect = False - eb[bone].parent = eb[hinge2] - eb[bone].use_local_location = False - i = 1 - bones += [bone] - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Rotation mode and axis locks - for bone, org_bone in zip(bones, bone_definitions): - pb[bone].rotation_mode = pb[org_bone].rotation_mode - pb[bone].lock_location = tuple(pb[org_bone].lock_location) - pb[bone].lock_rotations_4d = pb[org_bone].lock_rotations_4d - pb[bone].lock_rotation = tuple(pb[org_bone].lock_rotation) - pb[bone].lock_rotation_w = pb[org_bone].lock_rotation_w - pb[bone].lock_scale = tuple(pb[org_bone].lock_scale) - - # Add custom properties - pb[bones[0]]["hinge"] = 0.0 - prop = rna_idprop_ui_prop_get(pb[bones[0]], "hinge", create=True) - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - pb[bones[0]]["free"] = 0.0 - prop = rna_idprop_ui_prop_get(pb[bones[0]], "free", create=True) - prop["min"] = 0.0 - prop["max"] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # Add constraints - for bone, org_bone in zip(bones, bone_definitions): - con = pb[org_bone].constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = bone - - con_f = pb[hinge2].constraints.new('COPY_LOCATION') - con_f.target = obj - con_f.subtarget = hinge1 - - con_h = pb[hinge2].constraints.new('COPY_TRANSFORMS') - con_h.target = obj - con_h.subtarget = hinge1 - - # Add drivers - bone_path = pb[bones[0]].path_from_id() - - driver_fcurve = con_f.driver_add("influence") - driver = driver_fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.name = "free" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = bone_path + '["free"]' - mod = driver_fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - driver_fcurve = con_h.driver_add("influence") - driver = driver_fcurve.driver - driver.type = 'AVERAGE' - var = driver.variables.new() - var.name = "hinge" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = bone_path + '["hinge"]' - mod = driver_fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - - return None diff --git a/release/scripts/modules/rigify/tongue.py b/release/scripts/modules/rigify/tongue.py deleted file mode 100644 index 36c4316adc5..00000000000 --- a/release/scripts/modules/rigify/tongue.py +++ /dev/null @@ -1,361 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import bone_class_instance, copy_bone_simple -from rna_prop_ui import rna_idprop_ui_prop_get - -# not used, defined for completeness -METARIG_NAMES = ("body", "head") - - -def metarig_template(): - # TODO: - ## generated by rigify.write_meta_rig - #bpy.ops.object.mode_set(mode='EDIT') - #obj = bpy.context.active_object - #arm = obj.data - #bone = arm.edit_bones.new('body') - #bone.head[:] = 0.0000, -0.0276, -0.1328 - #bone.tail[:] = 0.0000, -0.0170, -0.0197 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone = arm.edit_bones.new('head') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, 0.0726, 0.1354 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['body'] - #bone = arm.edit_bones.new('neck.01') - #bone.head[:] = 0.0000, -0.0170, -0.0197 - #bone.tail[:] = 0.0000, -0.0099, 0.0146 - #bone.roll = 0.0000 - #bone.use_connect = False - #bone.parent = arm.edit_bones['head'] - #bone = arm.edit_bones.new('neck.02') - #bone.head[:] = 0.0000, -0.0099, 0.0146 - #bone.tail[:] = 0.0000, -0.0242, 0.0514 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.01'] - #bone = arm.edit_bones.new('neck.03') - #bone.head[:] = 0.0000, -0.0242, 0.0514 - #bone.tail[:] = 0.0000, -0.0417, 0.0868 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.02'] - #bone = arm.edit_bones.new('neck.04') - #bone.head[:] = 0.0000, -0.0417, 0.0868 - #bone.tail[:] = 0.0000, -0.0509, 0.1190 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.03'] - #bone = arm.edit_bones.new('neck.05') - #bone.head[:] = 0.0000, -0.0509, 0.1190 - #bone.tail[:] = 0.0000, -0.0537, 0.1600 - #bone.roll = 0.0000 - #bone.use_connect = True - #bone.parent = arm.edit_bones['neck.04'] - # - #bpy.ops.object.mode_set(mode='OBJECT') - #pbone = obj.pose.bones['head'] - #pbone['type'] = 'neck_flex' - pass - - -def metarig_definition(obj, orig_bone_name): - ''' - The bone given is the tongue control, its parent is the body, - # its only child the first of a chain with matching basenames. - eg. - body -> tongue_control -> tongue_01 -> tongue_02 -> tongue_03.... etc - ''' - arm = obj.data - tongue = arm.bones[orig_bone_name] - body = tongue.parent - - children = tongue.children - if len(children) != 1: - raise RigifyError("expected the tongue bone '%s' to have only 1 child." % orig_bone_name) - - child = children[0] - bone_definition = [body.name, tongue.name, child.name] - bone_definition.extend([child.name for child in child.children_recursive_basename]) - return bone_definition - - -def deform(obj, definitions, base_names, options): - for org_bone_name in definitions[2:]: - bpy.ops.object.mode_set(mode='EDIT') - - # Create deform bone. - bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True) - - # Store name before leaving edit mode - bone_name = bone.name - - # Leave edit mode - bpy.ops.object.mode_set(mode='OBJECT') - - # Get the pose bone - bone = obj.pose.bones[bone_name] - - # Constrain to the original bone - # XXX. Todo, is this needed if the bone is connected to its parent? - con = bone.constraints.new('COPY_TRANSFORMS') - con.name = "copy_loc" - con.target = obj - con.subtarget = org_bone_name - - -# TODO: rename all of the head/neck references to tongue -def main(obj, bone_definition, base_names, options): - from mathutils import Vector - - arm = obj.data - - # Initialize container classes for convenience - mt = bone_class_instance(obj, ["body", "head"]) # meta - mt.body = bone_definition[0] - mt.head = bone_definition[1] - mt.update() - - neck_chain = bone_definition[2:] - - mt_chain = bone_class_instance(obj, [("neck_%.2d" % (i + 1)) for i in range(len(neck_chain))]) # 99 bones enough eh? - for i, attr in enumerate(mt_chain.attr_names): - setattr(mt_chain, attr, neck_chain[i]) - mt_chain.update() - - neck_chain_basename = base_names[mt_chain.neck_01_e.name].split(".")[0] - neck_chain_segment_length = mt_chain.neck_01_e.length - - ex = bone_class_instance(obj, ["head", "head_hinge", "neck_socket", "head_ctrl"]) # hinge & extras - - # Add the head hinge at the bodys location, becomes the parent of the original head - - # apply everything to this copy of the chain - ex_chain = mt_chain.copy(base_names=base_names) - ex_chain.neck_01_e.parent = mt_chain.neck_01_e.parent - - - # Copy the head bone and offset - ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True) - ex.head_e.use_connect = False - ex.head = ex.head_e.name - # offset - head_length = ex.head_e.length - ex.head_e.head.y += head_length / 2.0 - ex.head_e.tail.y += head_length / 2.0 - - # Yes, use the body bone but call it a head hinge - ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False) - ex.head_hinge_e.use_connect = False - ex.head_hinge = ex.head_hinge_e.name - ex.head_hinge_e.head.y += head_length / 4.0 - ex.head_hinge_e.tail.y += head_length / 4.0 - - # Insert the neck socket, the head copys this loation - ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename) - ex.neck_socket = ex.neck_socket_e.name - ex.neck_socket_e.use_connect = False - ex.neck_socket_e.parent = mt.body_e - ex.neck_socket_e.head = mt.head_e.head - ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0)) - ex.neck_socket_e.roll = 0.0 - - - # copy of the head for controling - ex.head_ctrl_e = copy_bone_simple(arm, mt.head, base_names[mt.head]) - ex.head_ctrl = ex.head_ctrl_e.name - ex.head_ctrl_e.parent = ex.head_hinge_e - - for i, attr in enumerate(ex_chain.attr_names): - neck_e = getattr(ex_chain, attr + "_e") - - # dont store parent names, re-reference as each chain bones parent. - neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % base_names[getattr(mt_chain, attr)]) - neck_e_parent.head = neck_e.head - neck_e_parent.tail = neck_e.head + (mt.head_e.vector.normalize() * neck_chain_segment_length / 2.0) - neck_e_parent.roll = mt.head_e.roll - - orig_parent = neck_e.parent - neck_e.use_connect = False - neck_e.parent = neck_e_parent - neck_e_parent.use_connect = False - - if i == 0: - neck_e_parent.parent = mt.body_e - else: - neck_e_parent.parent = orig_parent - - deform(obj, bone_definition, base_names, options) - - bpy.ops.object.mode_set(mode='OBJECT') - - mt.update() - mt_chain.update() - ex_chain.update() - ex.update() - - # Axis locks - ex.head_ctrl_p.lock_location = True, True, True - ex.head_ctrl_p.lock_scale = True, False, True - - # Simple one off constraints, no drivers - con = ex.head_ctrl_p.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = ex.neck_socket - - con = ex.head_p.constraints.new('COPY_ROTATION') - con.target = obj - con.subtarget = ex.head_ctrl - - # driven hinge - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, "hinge", create=True) - ex.head_ctrl_p["hinge"] = 0.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - con = ex.head_hinge_p.constraints.new('COPY_ROTATION') - con.name = "hinge" - con.target = obj - con.subtarget = mt.body - - # add driver - hinge_driver_path = ex.head_ctrl_p.path_to_id() + '["hinge"]' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - var = driver.variables.new() - driver.type = 'AVERAGE' - var.name = "var" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = hinge_driver_path - - #mod = fcurve_driver.modifiers.new('GENERATOR') - mod = fcurve.modifiers[0] - mod.poly_order = 1 - mod.coefficients[0] = 1.0 - mod.coefficients[1] = -1.0 - - head_driver_path = ex.head_ctrl_p.path_to_id() - - target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))] - - ex.head_ctrl_p["bend_tot"] = 0.0 - fcurve = ex.head_ctrl_p.driver_add('["bend_tot"]') - driver = fcurve.driver - driver.type = 'SUM' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - for i in range(len(neck_chain)): - var = driver.variables.new() - var.name = target_names[i] - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1)) - - - for i, attr in enumerate(ex_chain.attr_names): - neck_p = getattr(ex_chain, attr + "_p") - neck_p.lock_location = True, True, True - neck_p.lock_location = True, True, True - neck_p.lock_rotations_4d = True - - # Add bend prop - prop_name = "bend_%.2d" % (i + 1) - prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, prop_name, create=True) - ex.head_ctrl_p[prop_name] = 1.0 - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - # add parent constraint - neck_p_parent = neck_p.parent - - # add constraints - if i == 0: - con = neck_p.constraints.new('COPY_SCALE') - con.name = "Copy Scale" - con.target = obj - con.subtarget = ex.head_ctrl - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - - con = neck_p_parent.constraints.new('COPY_ROTATION') - con.name = "Copy Rotation" - con.target = obj - con.subtarget = ex.head - con.owner_space = 'LOCAL' - con.target_space = 'LOCAL' - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'SCRIPTED' - driver.expression = "bend/bend_tot" - - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - - # add target - var = driver.variables.new() - var.name = "bend_tot" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["bend_tot"]') - - var = driver.variables.new() - var.name = "bend" - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = head_driver_path + ('["%s"]' % prop_name) - - - # finally constrain the original bone to this one - orig_neck_p = getattr(mt_chain, attr + "_p") - con = orig_neck_p.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = neck_p.name - - - # Set the head control's custom shape to use the last - # org neck bone for its transform - ex.head_ctrl_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]] - - - # last step setup layers - if "ex_layer" in options: - layer = [n==options["ex_layer"] for n in range(0,32)] - else: - layer = list(arm.bones[bone_definition[1]].layers) - for attr in ex_chain.attr_names: - getattr(ex_chain, attr + "_b").layers = layer - for attr in ex.attr_names: - getattr(ex, attr + "_b").layers = layer - - layer = list(arm.bones[bone_definition[1]].layers) - ex.head_ctrl_b.layers = layer - - - # no blending the result of this - return None - diff --git a/release/scripts/modules/rigify/track_dual.py b/release/scripts/modules/rigify/track_dual.py deleted file mode 100644 index f9c48a3bfcb..00000000000 --- a/release/scripts/modules/rigify/track_dual.py +++ /dev/null @@ -1,110 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "track_dual" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0: False, 1: True, - 0.0: False, 1.0: True, - "false": False, "true": True, - "False": False, "True": True, - "no": False, "yes": True, - "No": False, "Yes": True} - - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - -def main(obj, bone_definition, base_names, options): - """ A dual-bone track setup. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0])) - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2 - bone1 = bone_e.name - - bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2 - bone2 = bone_e.name - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - # Bone 1 - con = pb[bone1].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone2 - - - # Bone 2 - con = pb[bone2].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone2 - - con = pb[bone2].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone1 - - - return tuple() diff --git a/release/scripts/modules/rigify/track_reverse.py b/release/scripts/modules/rigify/track_reverse.py deleted file mode 100644 index a65ac0e9416..00000000000 --- a/release/scripts/modules/rigify/track_reverse.py +++ /dev/null @@ -1,100 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -import bpy -from rigify import RigifyError -from rigify_utils import copy_bone_simple - -METARIG_NAMES = tuple() -RIG_TYPE = "track_reverse" - -# TODO -#def metarig_template(): -# # generated by rigify.write_meta_rig -# bpy.ops.object.mode_set(mode='EDIT') -# obj = bpy.context.active_object -# arm = obj.data -# bone = arm.edit_bones.new('Bone') -# bone.head[:] = 0.0000, 0.0000, 0.0000 -# bone.tail[:] = 0.0000, 0.0000, 1.0000 -# bone.roll = 0.0000 -# bone.use_connect = False -# -# bpy.ops.object.mode_set(mode='OBJECT') -# pbone = obj.pose.bones['Bone'] -# pbone['type'] = 'copy' - -bool_map = {0:False, 1:True, - 0.0:False, 1.0:True, - "false":False, "true":True, - "False":False, "True":True, - "no":False, "yes":True, - "No":False, "Yes":True} - -def metarig_definition(obj, orig_bone_name): - return (orig_bone_name,) - - - - -def main(obj, bone_definition, base_names, options): - """ A bone that tracks bakwards towards its parent, while copying the - location of it's target. - Deformation only (no controls). - """ - # Verify required parameter - if "to" not in options: - raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0])) - if type(options["to"]) is not str: - raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0])) - if ("ORG-" + options["to"]) not in obj.data.bones: - raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0])) - - eb = obj.data.edit_bones - bb = obj.data.bones - pb = obj.pose.bones - - bpy.ops.object.mode_set(mode='EDIT') - arm = obj.data - - mbone1 = bone_definition[0] - mbone2 = "ORG-" + options["to"] - - bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]]) - bone_e.use_connect = False - bone_e.parent = eb[mbone1] - bone_e.tail = eb[mbone1].head - bone = bone_e.name - - - - bpy.ops.object.mode_set(mode='OBJECT') - - # Constraints - con = pb[bone].constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = mbone2 - - con = pb[bone].constraints.new('DAMPED_TRACK') - con.target = obj - con.subtarget = mbone1 - - - return tuple() diff --git a/release/scripts/modules/rigify_utils.py b/release/scripts/modules/rigify_utils.py deleted file mode 100644 index 1ffe366e0d5..00000000000 --- a/release/scripts/modules/rigify_utils.py +++ /dev/null @@ -1,467 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# - -# rigify its self does not depend on this module, however some of the -# rigify templates use these utility functions. -# -# So even though this can be for general purpose use, this module was created -# for rigify so in some cases seemingly generic functions make assumptions -# that a generic function would need to check for. - -import bpy -from mathutils import Vector -from rna_prop_ui import rna_idprop_ui_prop_get - -DELIMITER = '-._' -EMPTY_LAYER = [False] * 32 - - -def add_stretch_to(obj, from_name, to_name, name): - ''' - Adds a bone that stretches from one to another - ''' - - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - stretch_ebone = arm.edit_bones.new(name) - stretch_name = stretch_ebone.name - del name - - head = stretch_ebone.head = arm.edit_bones[from_name].head.copy() - #tail = stretch_ebone.tail = arm.edit_bones[to_name].head.copy() - - # annoying exception for zero length bones, since its using stretch_to the rest pose doesnt really matter - #if (head - tail).length < 0.1: - if 1: - tail = stretch_ebone.tail = arm.edit_bones[from_name].tail.copy() - - - # Now for the constraint - bpy.ops.object.mode_set(mode='OBJECT') - - stretch_pbone = obj.pose.bones[stretch_name] - - con = stretch_pbone.constraints.new('COPY_LOCATION') - con.target = obj - con.subtarget = from_name - - con = stretch_pbone.constraints.new('STRETCH_TO') - con.target = obj - con.subtarget = to_name - con.rest_length = (head - tail).length - con.keep_axis = 'PLANE_X' - con.volume = 'NO_VOLUME' - - bpy.ops.object.mode_set(mode=mode_orig) - - return stretch_name - - -def copy_bone_simple(arm, from_bone, name, parent=False): - ebone = arm.edit_bones[from_bone] - ebone_new = arm.edit_bones.new(name) - - if parent: - ebone_new.use_connect = ebone.use_connect - ebone_new.parent = ebone.parent - - ebone_new.head = ebone.head - ebone_new.tail = ebone.tail - ebone_new.roll = ebone.roll - ebone_new.layers = list(ebone.layers) - return ebone_new - - -def copy_bone_simple_list(arm, from_bones, to_bones, parent=False): - - if len(from_bones) != len(to_bones): - raise Exception("bone list sizes must match") - - copy_bones = [copy_bone_simple(arm, bone_name, to_bones[i], True) for i, bone_name in enumerate(from_bones)] - - # now we need to re-parent - for ebone in copy_bones: - parent = ebone.parent - if parent: - try: - i = from_bones.index(parent.name) - except: - i = -1 - - if i == -1: - ebone.parent = None - else: - ebone.parent = copy_bones[i] - - return copy_bones - - -def blend_bone_list(obj, apply_bones, from_bones, to_bones, target_bone=None, target_prop="blend", blend_default=0.5): - - if obj.mode == 'EDIT': - raise Exception("blending cant be called in editmode") - - if len(apply_bones) != len(from_bones): - raise Exception("lists differ in length (from -> apply): \n\t%s\n\t%s" % (from_bones, apply_bones)) - if len(apply_bones) != len(to_bones): - raise Exception("lists differ in length (to -> apply): \n\t%s\n\t%s" % (to_bones, apply_bones)) - - # setup the blend property - if target_bone is None: - target_bone = apply_bones[-1] # default to the last bone - - prop_pbone = obj.pose.bones[target_bone] - if prop_pbone.get(target_bone) is None: - prop = rna_idprop_ui_prop_get(prop_pbone, target_prop, create=True) - prop_pbone[target_prop] = blend_default - prop["soft_min"] = 0.0 - prop["soft_max"] = 1.0 - - driver_path = prop_pbone.path_from_id() + ('["%s"]' % target_prop) - - def blend_target(driver): - var = driver.variables.new() - var.name = target_bone - var.targets[0].id_type = 'OBJECT' - var.targets[0].id = obj - var.targets[0].data_path = driver_path - - def blend_transforms(new_pbone, from_bone_name, to_bone_name): - con = new_pbone.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = from_bone_name - - con = new_pbone.constraints.new('COPY_TRANSFORMS') - con.target = obj - con.subtarget = to_bone_name - - fcurve = con.driver_add("influence") - driver = fcurve.driver - driver.type = 'AVERAGE' - fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier - - blend_target(driver) - - for i, new_bone_name in enumerate(apply_bones): - from_bone_name = from_bones[i] - to_bone_name = to_bones[i] - - # allow skipping some bones by having None in the list - if None in (new_bone_name, from_bone_name, to_bone_name): - continue - - new_pbone = obj.pose.bones[new_bone_name] - - blend_transforms(new_pbone, from_bone_name, to_bone_name) - - -def add_pole_target_bone(obj, base_bone_name, name, mode='CROSS'): - ''' - Does not actually create a poll target, just the bone to use as a poll target - ''' - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') - - arm = obj.data - - poll_ebone = arm.edit_bones.new(name) - base_ebone = arm.edit_bones[base_bone_name] - poll_name = poll_ebone.name - parent_ebone = base_ebone.parent - - base_head = base_ebone.head.copy() - base_tail = base_ebone.tail.copy() - base_dir = base_head - base_tail - - parent_head = parent_ebone.head.copy() - parent_tail = parent_ebone.tail.copy() - parent_dir = parent_head - parent_tail - - distance = (base_dir.length + parent_dir.length) - - if mode == 'CROSS': - # direction from the angle of the joint - offset = base_dir.copy().normalize() - parent_dir.copy().normalize() - offset.length = distance - elif mode == 'ZAVERAGE': - # between both bones Z axis - z_axis_a = base_ebone.matrix.copy().rotation_part() * Vector((0.0, 0.0, -1.0)) - z_axis_b = parent_ebone.matrix.copy().rotation_part() * Vector((0.0, 0.0, -1.0)) - offset = (z_axis_a + z_axis_b).normalize() * distance - else: - # preset axis - offset = Vector((0.0, 0.0, 0.0)) - if mode[0] == "+": - val = distance - else: - val = - distance - - setattr(offset, mode[1].lower(), val) - - poll_ebone.head = base_head + offset - poll_ebone.tail = base_head + (offset * (1.0 - (1.0 / 4.0))) - - bpy.ops.object.mode_set(mode=mode_orig) - - return poll_name - - -def get_side_name(name): - ''' - Returns the last part of a string (typically a bone's name) indicating - whether it is a a left or right (or center, or whatever) bone. - Returns an empty string if nothing is found. - ''' - if name[-2] in DELIMITER: - return name[-2:] - else: - return "" - - -def get_base_name(name): - ''' - Returns the part of a string (typically a bone's name) corresponding to it's - base name (no sidedness, no ORG prefix). - ''' - if name[-2] in DELIMITER: - return name[:-2] - else: - return name - - -def write_meta_rig(obj, func_name="metarig_template"): - ''' - Write a metarig as a python script, this rig is to have all info needed for - generating the real rig with rigify. - ''' - code = [] - - code.append("def %s():" % func_name) - code.append(" # generated by rigify.write_meta_rig") - bpy.ops.object.mode_set(mode='EDIT') - code.append(" bpy.ops.object.mode_set(mode='EDIT')") - - code.append(" obj = bpy.context.active_object") - code.append(" arm = obj.data") - - arm = obj.data - # write parents first - bones = [(len(bone.parent_recursive), bone.name) for bone in arm.edit_bones] - bones.sort(key=lambda item: item[0]) - bones = [item[1] for item in bones] - - - for bone_name in bones: - bone = arm.edit_bones[bone_name] - code.append(" bone = arm.edit_bones.new('%s')" % bone.name) - code.append(" bone.head[:] = %.4f, %.4f, %.4f" % bone.head.to_tuple(4)) - code.append(" bone.tail[:] = %.4f, %.4f, %.4f" % bone.tail.to_tuple(4)) - code.append(" bone.roll = %.4f" % bone.roll) - code.append(" bone.use_connect = %s" % str(bone.use_connect)) - if bone.parent: - code.append(" bone.parent = arm.edit_bones['%s']" % bone.parent.name) - - bpy.ops.object.mode_set(mode='OBJECT') - code.append("") - code.append(" bpy.ops.object.mode_set(mode='OBJECT')") - - for bone_name in bones: - pbone = obj.pose.bones[bone_name] - pbone_written = False - - # Only 1 level of props, simple types supported - for key, value in pbone.items(): - if key.startswith("_"): - continue - - if type(value) not in (float, str, int): - print("Unsupported ID Prop:", str((key, value))) - continue - - if type(value) == str: - value = "'" + value + "'" - - if not pbone_written: # only write bones we need - code.append(" pbone = obj.pose.bones['%s']" % bone_name) - - code.append(" pbone['%s'] = %s" % (key, value)) - - return "\n".join(code) - - -# *** bone class collection *** - - -def bone_class_instance(obj, slots, name="BoneContainer"): - ''' - bone collection utility class to help manage cases with - edit/pose/bone bones where switching modes can invalidate some of the members. - - there are also utility functions for manipulating all members. - ''' - - attr_names = tuple(slots) # dont modify the original - - if len(slots) != len(set(slots)): - raise Exception("duplicate entries found %s" % attr_names) - - slots = list(slots) # dont modify the original - for i in range(len(slots)): - member = slots[i] - slots.append(member + "_b") # bone bone - slots.append(member + "_p") # pose bone - slots.append(member + "_e") # edit bone - - class_dict = { \ - "obj": obj, \ - "attr_names": attr_names, \ - "attr_initialize": _bone_class_instance_attr_initialize, \ - "update": _bone_class_instance_update, \ - "rename": _bone_class_instance_rename, \ - "names": _bone_class_instance_names, \ - "copy": _bone_class_instance_copy, \ - "blend": _bone_class_instance_blend, \ - } - - instance = auto_class_instance(slots, name, class_dict) - return instance - - -def auto_class(slots, name="ContainerClass", class_dict=None): - - if class_dict: - class_dict = class_dict.copy() - else: - class_dict = {} - - class_dict["__slots__"] = tuple(slots) - - return type(name, (object,), class_dict) - - -def auto_class_instance(slots, name="ContainerClass", class_dict=None): - return auto_class(slots, name, class_dict)() - - -def _bone_class_instance_attr_initialize(self, attr_names, bone_names): - ''' Initializes attributes, both lists must be aligned - ''' - for attr in self.attr_names: - i = attr_names.index(attr) - setattr(self, attr, bone_names[i]) - - self.update() - - -def _bone_class_instance_update(self): - ''' Re-Assigns bones from the blender data - ''' - arm = self.obj.data - bbones = arm.bones - pbones = self.obj.pose.bones - ebones = arm.edit_bones - - for member in self.attr_names: - name = getattr(self, member, None) - if name is not None: - setattr(self, member + "_b", bbones.get(name)) - setattr(self, member + "_p", pbones.get(name)) - setattr(self, member + "_e", ebones.get(name)) - - -def _bone_class_instance_rename(self, attr, new_name): - ''' Rename bones, editmode only - ''' - - if self.obj.mode != 'EDIT': - raise Exception("Only rename in editmode supported") - - ebone = getattr(self, attr + "_e") - ebone.name = new_name - - # we may not get what is asked for so get the name from the editbone - setattr(self, attr, ebone.name) - - -def _bone_class_instance_copy(self, from_fmt="%s", to_fmt="%s", exclude_attrs=(), base_names=None): - from_name_ls = [] - new_name_ls = [] - new_slot_ls = [] - - for attr in self.attr_names: - - if attr in exclude_attrs: - continue - - bone_name_orig = getattr(self, attr) - ebone = getattr(self, attr + "_e") - # orig_names[attr] = bone_name_orig - - # insert formatting - if from_fmt != "%s": - bone_name = from_fmt % bone_name_orig - ebone.name = bone_name - bone_name = ebone.name # cant be sure we get what we ask for - else: - bone_name = bone_name_orig - - setattr(self, attr, bone_name) - - new_slot_ls.append(attr) - from_name_ls.append(bone_name) - if base_names: - bone_name_orig = base_names[bone_name_orig] - new_name_ls.append(to_fmt % bone_name_orig) - - new_bones = copy_bone_simple_list(self.obj.data, from_name_ls, new_name_ls, True) - new_bc = bone_class_instance(self.obj, new_slot_ls) - - for i, attr in enumerate(new_slot_ls): - ebone = new_bones[i] - setattr(new_bc, attr + "_e", ebone) - setattr(new_bc, attr, ebone.name) - - return new_bc - - -def _bone_class_instance_names(self): - return [getattr(self, attr) for attr in self.attr_names] - - -def _bone_class_instance_blend(self, from_bc, to_bc, target_bone=None, target_prop="blend"): - ''' - Use for blending bone chains. - - blend_target = (bone_name, bone_property) - default to the last bone, blend prop - - XXX - toggles editmode, need to re-validate all editbones :( - ''' - - if self.attr_names != from_bc.attr_names or self.attr_names != to_bc.attr_names: - raise Exception("can only blend between matching chains") - - apply_bones = [getattr(self, attr) for attr in self.attr_names] - from_bones = [getattr(from_bc, attr) for attr in from_bc.attr_names] - to_bones = [getattr(to_bc, attr) for attr in to_bc.attr_names] - - blend_bone_list(self.obj, apply_bones, from_bones, to_bones, target_bone, target_prop) diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py deleted file mode 100644 index 95b414f8228..00000000000 --- a/release/scripts/op/add_armature_human.py +++ /dev/null @@ -1,616 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# -import bpy -import mathutils -from math import cos, sin, pi - -# could this be stored elsewhere? - - -def metarig_template(): - # generated by rigify.write_meta_rig - bpy.ops.object.mode_set(mode='EDIT') - obj = bpy.context.active_object - arm = obj.data - bone = arm.edit_bones.new('pelvis') - bone.head[:] = -0.0000, -0.0145, 1.1263 - bone.tail[:] = -0.0000, -0.0145, 0.9563 - bone.roll = 3.1416 - bone.use_connect = False - bone = arm.edit_bones.new('torso') - bone.head[:] = -0.0000, -0.0145, 1.1263 - bone.tail[:] = -0.0000, -0.0145, 1.2863 - bone.roll = 3.1416 - bone.use_connect = False - bone.parent = arm.edit_bones['pelvis'] - bone = arm.edit_bones.new('spine.01') - bone.head[:] = 0.0000, 0.0394, 0.9688 - bone.tail[:] = -0.0000, -0.0145, 1.1263 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['torso'] - bone = arm.edit_bones.new('spine.02') - bone.head[:] = -0.0000, -0.0145, 1.1263 - bone.tail[:] = -0.0000, -0.0213, 1.2884 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('thigh.L') - bone.head[:] = 0.0933, -0.0421, 1.0434 - bone.tail[:] = 0.0933, -0.0516, 0.5848 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('thigh.R') - bone.head[:] = -0.0933, -0.0421, 1.0434 - bone.tail[:] = -0.0933, -0.0516, 0.5848 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['spine.01'] - bone = arm.edit_bones.new('spine.03') - bone.head[:] = -0.0000, -0.0213, 1.2884 - bone.tail[:] = -0.0000, 0.0160, 1.3705 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.02'] - bone = arm.edit_bones.new('shin.L') - bone.head[:] = 0.0933, -0.0516, 0.5848 - bone.tail[:] = 0.0915, 0.0100, 0.1374 - bone.roll = 0.0034 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh.L'] - bone = arm.edit_bones.new('shin.R') - bone.head[:] = -0.0933, -0.0516, 0.5848 - bone.tail[:] = -0.0915, 0.0100, 0.1374 - bone.roll = -0.0034 - bone.use_connect = True - bone.parent = arm.edit_bones['thigh.R'] - bone = arm.edit_bones.new('spine.04') - bone.head[:] = -0.0000, 0.0160, 1.3705 - bone.tail[:] = -0.0000, 0.0590, 1.4497 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.03'] - bone = arm.edit_bones.new('foot.L') - bone.head[:] = 0.0915, 0.0100, 0.1374 - bone.tail[:] = 0.1033, -0.0968, 0.0510 - bone.roll = 2.8964 - bone.use_connect = True - bone.parent = arm.edit_bones['shin.L'] - bone = arm.edit_bones.new('foot.R') - bone.head[:] = -0.0915, 0.0100, 0.1374 - bone.tail[:] = -0.1033, -0.0968, 0.0510 - bone.roll = -2.8793 - bone.use_connect = True - bone.parent = arm.edit_bones['shin.R'] - bone = arm.edit_bones.new('neck_base') - bone.head[:] = -0.0000, 0.0590, 1.4497 - bone.tail[:] = -0.0000, 0.0401, 1.5389 - bone.roll = -0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['spine.04'] - bone = arm.edit_bones.new('toe.L') - bone.head[:] = 0.1033, -0.0968, 0.0510 - bone.tail[:] = 0.1136, -0.1848, 0.0510 - bone.roll = 0.0001 - bone.use_connect = True - bone.parent = arm.edit_bones['foot.L'] - bone = arm.edit_bones.new('heel.L') - bone.head[:] = 0.0809, 0.0969, -0.0000 - bone.tail[:] = 0.1020, -0.0846, -0.0000 - bone.roll = -0.0001 - bone.use_connect = False - bone.parent = arm.edit_bones['foot.L'] - bone = arm.edit_bones.new('toe.R') - bone.head[:] = -0.1033, -0.0968, 0.0510 - bone.tail[:] = -0.1136, -0.1848, 0.0510 - bone.roll = -0.0002 - bone.use_connect = True - bone.parent = arm.edit_bones['foot.R'] - bone = arm.edit_bones.new('heel.R') - bone.head[:] = -0.0809, 0.0969, -0.0000 - bone.tail[:] = -0.1020, -0.0846, -0.0000 - bone.roll = -0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['foot.R'] - bone = arm.edit_bones.new('head') - bone.head[:] = -0.0000, 0.0401, 1.5389 - bone.tail[:] = -0.0000, 0.0401, 1.5979 - bone.roll = 3.1416 - bone.use_connect = True - bone.parent = arm.edit_bones['neck_base'] - bone = arm.edit_bones.new('DLT-shoulder.L') - bone.head[:] = 0.0141, -0.0346, 1.4991 - bone.tail[:] = 0.1226, 0.0054, 1.4991 - bone.roll = 0.0005 - bone.use_connect = False - bone.parent = arm.edit_bones['neck_base'] - bone = arm.edit_bones.new('DLT-shoulder.R') - bone.head[:] = -0.0141, -0.0346, 1.4991 - bone.tail[:] = -0.1226, 0.0054, 1.4991 - bone.roll = -0.0005 - bone.use_connect = False - bone.parent = arm.edit_bones['neck_base'] - bone = arm.edit_bones.new('neck.01') - bone.head[:] = -0.0000, 0.0401, 1.5389 - bone.tail[:] = -0.0000, 0.0176, 1.5916 - bone.roll = 0.0000 - bone.use_connect = False - bone.parent = arm.edit_bones['head'] - bone = arm.edit_bones.new('shoulder.L') - bone.head[:] = 0.0141, -0.0346, 1.4991 - bone.tail[:] = 0.1226, 0.0216, 1.5270 - bone.roll = -0.1225 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-shoulder.L'] - bone = arm.edit_bones.new('shoulder.R') - bone.head[:] = -0.0141, -0.0346, 1.4991 - bone.tail[:] = -0.1226, 0.0216, 1.5270 - bone.roll = 0.0849 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-shoulder.R'] - bone = arm.edit_bones.new('neck.02') - bone.head[:] = -0.0000, 0.0176, 1.5916 - bone.tail[:] = -0.0000, 0.0001, 1.6499 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.01'] - bone = arm.edit_bones.new('DLT-upper_arm.L') - bone.head[:] = 0.1482, 0.0483, 1.4943 - bone.tail[:] = 0.2586, 0.1057, 1.5124 - bone.roll = 1.4969 - bone.use_connect = False - bone.parent = arm.edit_bones['shoulder.L'] - bone = arm.edit_bones.new('DLT-upper_arm.R') - bone.head[:] = -0.1482, 0.0483, 1.4943 - bone.tail[:] = -0.2586, 0.1057, 1.5124 - bone.roll = -1.4482 - bone.use_connect = False - bone.parent = arm.edit_bones['shoulder.R'] - bone = arm.edit_bones.new('neck.03') - bone.head[:] = -0.0000, 0.0001, 1.6499 - bone.tail[:] = -0.0000, 0.0001, 1.8522 - bone.roll = 0.0000 - bone.use_connect = True - bone.parent = arm.edit_bones['neck.02'] - bone = arm.edit_bones.new('upper_arm.L') - bone.head[:] = 0.1482, 0.0483, 1.4943 - bone.tail[:] = 0.3929, 0.0522, 1.4801 - bone.roll = 1.6281 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-upper_arm.L'] - bone = arm.edit_bones.new('upper_arm.R') - bone.head[:] = -0.1482, 0.0483, 1.4943 - bone.tail[:] = -0.3929, 0.0522, 1.4801 - bone.roll = -1.6281 - bone.use_connect = False - bone.parent = arm.edit_bones['DLT-upper_arm.R'] - bone = arm.edit_bones.new('forearm.L') - bone.head[:] = 0.3929, 0.0522, 1.4801 - bone.tail[:] = 0.6198, 0.0364, 1.4906 - bone.roll = 1.5240 - bone.use_connect = True - bone.parent = arm.edit_bones['upper_arm.L'] - bone = arm.edit_bones.new('forearm.R') - bone.head[:] = -0.3929, 0.0522, 1.4801 - bone.tail[:] = -0.6198, 0.0364, 1.4906 - bone.roll = -1.5219 - bone.use_connect = True - bone.parent = arm.edit_bones['upper_arm.R'] - bone = arm.edit_bones.new('hand.L') - bone.head[:] = 0.6198, 0.0364, 1.4906 - bone.tail[:] = 0.6592, 0.0364, 1.4853 - bone.roll = -3.0065 - bone.use_connect = True - bone.parent = arm.edit_bones['forearm.L'] - bone = arm.edit_bones.new('hand.R') - bone.head[:] = -0.6198, 0.0364, 1.4906 - bone.tail[:] = -0.6592, 0.0364, 1.4853 - bone.roll = 3.0065 - bone.use_connect = True - bone.parent = arm.edit_bones['forearm.R'] - bone = arm.edit_bones.new('palm.04.L') - bone.head[:] = 0.6514, 0.0658, 1.4906 - bone.tail[:] = 0.7287, 0.0810, 1.4747 - bone.roll = -3.0715 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.03.L') - bone.head[:] = 0.6533, 0.0481, 1.4943 - bone.tail[:] = 0.7386, 0.0553, 1.4781 - bone.roll = -3.0290 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.02.L') - bone.head[:] = 0.6539, 0.0305, 1.4967 - bone.tail[:] = 0.7420, 0.0250, 1.4835 - bone.roll = -3.0669 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.01.L') - bone.head[:] = 0.6514, 0.0116, 1.4961 - bone.tail[:] = 0.7361, -0.0074, 1.4823 - bone.roll = -2.9422 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('thumb.01.L') - bone.head[:] = 0.6380, -0.0005, 1.4848 - bone.tail[:] = 0.6757, -0.0408, 1.4538 - bone.roll = -0.7041 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.L'] - bone = arm.edit_bones.new('palm.04.R') - bone.head[:] = -0.6514, 0.0658, 1.4906 - bone.tail[:] = -0.7287, 0.0810, 1.4747 - bone.roll = 3.0715 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('palm.03.R') - bone.head[:] = -0.6533, 0.0481, 1.4943 - bone.tail[:] = -0.7386, 0.0553, 1.4781 - bone.roll = 3.0290 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('palm.02.R') - bone.head[:] = -0.6539, 0.0305, 1.4967 - bone.tail[:] = -0.7420, 0.0250, 1.4835 - bone.roll = 3.0669 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('thumb.01.R') - bone.head[:] = -0.6380, -0.0005, 1.4848 - bone.tail[:] = -0.6757, -0.0408, 1.4538 - bone.roll = 0.7041 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('palm.01.R') - bone.head[:] = -0.6514, 0.0116, 1.4961 - bone.tail[:] = -0.7361, -0.0074, 1.4823 - bone.roll = 2.9332 - bone.use_connect = False - bone.parent = arm.edit_bones['hand.R'] - bone = arm.edit_bones.new('finger_pinky.01.L') - bone.head[:] = 0.7287, 0.0810, 1.4747 - bone.tail[:] = 0.7698, 0.0947, 1.4635 - bone.roll = -3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.04.L'] - bone = arm.edit_bones.new('finger_ring.01.L') - bone.head[:] = 0.7386, 0.0553, 1.4781 - bone.tail[:] = 0.7890, 0.0615, 1.4667 - bone.roll = -3.0081 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.03.L'] - bone = arm.edit_bones.new('finger_middle.01.L') - bone.head[:] = 0.7420, 0.0250, 1.4835 - bone.tail[:] = 0.7975, 0.0221, 1.4712 - bone.roll = -2.9982 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.02.L'] - bone = arm.edit_bones.new('finger_index.01.L') - bone.head[:] = 0.7361, -0.0074, 1.4823 - bone.tail[:] = 0.7843, -0.0204, 1.4718 - bone.roll = -3.0021 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.01.L'] - bone = arm.edit_bones.new('thumb.02.L') - bone.head[:] = 0.6757, -0.0408, 1.4538 - bone.tail[:] = 0.6958, -0.0568, 1.4376 - bone.roll = -0.6963 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.01.L'] - bone = arm.edit_bones.new('finger_pinky.01.R') - bone.head[:] = -0.7287, 0.0810, 1.4747 - bone.tail[:] = -0.7698, 0.0947, 1.4635 - bone.roll = 3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.04.R'] - bone = arm.edit_bones.new('finger_ring.01.R') - bone.head[:] = -0.7386, 0.0553, 1.4781 - bone.tail[:] = -0.7890, 0.0615, 1.4667 - bone.roll = 2.9892 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.03.R'] - bone = arm.edit_bones.new('finger_middle.01.R') - bone.head[:] = -0.7420, 0.0250, 1.4835 - bone.tail[:] = -0.7975, 0.0221, 1.4712 - bone.roll = 2.9816 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.02.R'] - bone = arm.edit_bones.new('thumb.02.R') - bone.head[:] = -0.6757, -0.0408, 1.4538 - bone.tail[:] = -0.6958, -0.0568, 1.4376 - bone.roll = 0.6963 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.01.R'] - bone = arm.edit_bones.new('finger_index.01.R') - bone.head[:] = -0.7361, -0.0074, 1.4823 - bone.tail[:] = -0.7843, -0.0204, 1.4718 - bone.roll = 2.9498 - bone.use_connect = True - bone.parent = arm.edit_bones['palm.01.R'] - bone = arm.edit_bones.new('finger_pinky.02.L') - bone.head[:] = 0.7698, 0.0947, 1.4635 - bone.tail[:] = 0.7910, 0.1018, 1.4577 - bone.roll = -3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.01.L'] - bone = arm.edit_bones.new('finger_ring.02.L') - bone.head[:] = 0.7890, 0.0615, 1.4667 - bone.tail[:] = 0.8177, 0.0650, 1.4600 - bone.roll = -3.0006 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.01.L'] - bone = arm.edit_bones.new('finger_middle.02.L') - bone.head[:] = 0.7975, 0.0221, 1.4712 - bone.tail[:] = 0.8289, 0.0206, 1.4643 - bone.roll = -2.9995 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.01.L'] - bone = arm.edit_bones.new('finger_index.02.L') - bone.head[:] = 0.7843, -0.0204, 1.4718 - bone.tail[:] = 0.8117, -0.0275, 1.4660 - bone.roll = -3.0064 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.01.L'] - bone = arm.edit_bones.new('thumb.03.L') - bone.head[:] = 0.6958, -0.0568, 1.4376 - bone.tail[:] = 0.7196, -0.0671, 1.4210 - bone.roll = -0.8072 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.02.L'] - bone = arm.edit_bones.new('finger_pinky.02.R') - bone.head[:] = -0.7698, 0.0947, 1.4635 - bone.tail[:] = -0.7910, 0.1018, 1.4577 - bone.roll = 3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.01.R'] - bone = arm.edit_bones.new('finger_ring.02.R') - bone.head[:] = -0.7890, 0.0615, 1.4667 - bone.tail[:] = -0.8177, 0.0650, 1.4600 - bone.roll = 3.0341 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.01.R'] - bone = arm.edit_bones.new('finger_middle.02.R') - bone.head[:] = -0.7975, 0.0221, 1.4712 - bone.tail[:] = -0.8289, 0.0206, 1.4643 - bone.roll = 3.0291 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.01.R'] - bone = arm.edit_bones.new('thumb.03.R') - bone.head[:] = -0.6958, -0.0568, 1.4376 - bone.tail[:] = -0.7196, -0.0671, 1.4210 - bone.roll = 0.8072 - bone.use_connect = True - bone.parent = arm.edit_bones['thumb.02.R'] - bone = arm.edit_bones.new('finger_index.02.R') - bone.head[:] = -0.7843, -0.0204, 1.4718 - bone.tail[:] = -0.8117, -0.0275, 1.4660 - bone.roll = 3.0705 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.01.R'] - bone = arm.edit_bones.new('finger_pinky.03.L') - bone.head[:] = 0.7910, 0.1018, 1.4577 - bone.tail[:] = 0.8109, 0.1085, 1.4523 - bone.roll = -3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.02.L'] - bone = arm.edit_bones.new('finger_ring.03.L') - bone.head[:] = 0.8177, 0.0650, 1.4600 - bone.tail[:] = 0.8396, 0.0677, 1.4544 - bone.roll = -2.9819 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.02.L'] - bone = arm.edit_bones.new('finger_middle.03.L') - bone.head[:] = 0.8289, 0.0206, 1.4643 - bone.tail[:] = 0.8534, 0.0193, 1.4589 - bone.roll = -3.0004 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.02.L'] - bone = arm.edit_bones.new('finger_index.03.L') - bone.head[:] = 0.8117, -0.0275, 1.4660 - bone.tail[:] = 0.8331, -0.0333, 1.4615 - bone.roll = -3.0103 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.02.L'] - bone = arm.edit_bones.new('finger_pinky.03.R') - bone.head[:] = -0.7910, 0.1018, 1.4577 - bone.tail[:] = -0.8109, 0.1085, 1.4523 - bone.roll = 3.0949 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_pinky.02.R'] - bone = arm.edit_bones.new('finger_ring.03.R') - bone.head[:] = -0.8177, 0.0650, 1.4600 - bone.tail[:] = -0.8396, 0.0677, 1.4544 - bone.roll = 2.9819 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_ring.02.R'] - bone = arm.edit_bones.new('finger_middle.03.R') - bone.head[:] = -0.8289, 0.0206, 1.4643 - bone.tail[:] = -0.8534, 0.0193, 1.4589 - bone.roll = 3.0004 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_middle.02.R'] - bone = arm.edit_bones.new('finger_index.03.R') - bone.head[:] = -0.8117, -0.0275, 1.4660 - bone.tail[:] = -0.8331, -0.0333, 1.4615 - bone.roll = 2.9917 - bone.use_connect = True - bone.parent = arm.edit_bones['finger_index.02.R'] - - bpy.ops.object.mode_set(mode='OBJECT') - pbone = obj.pose.bones['torso'] - pbone['type'] = 'spine_pivot_flex' - pbone = obj.pose.bones['torso'] - pbone['spine_pivot_flex.later_main'] = 1 - pbone = obj.pose.bones['torso'] - pbone['spine_pivot_flex.layer_extra'] = 2 - pbone = obj.pose.bones['thigh.L'] - pbone['type'] = 'leg_biped' - pbone = obj.pose.bones['thigh.L'] - pbone['leg_biped_generic.layer_ik'] = 12 - pbone = obj.pose.bones['thigh.L'] - pbone['leg_biped_generic.layer_fk'] = 11 - pbone = obj.pose.bones['thigh.R'] - pbone['type'] = 'leg_biped' - pbone = obj.pose.bones['thigh.R'] - pbone['leg_biped_generic.layer_ik'] = 14 - pbone = obj.pose.bones['thigh.R'] - pbone['leg_biped_generic.layer_fk'] = 13 - pbone = obj.pose.bones['head'] - pbone['type'] = 'neck_flex' - pbone = obj.pose.bones['head'] - pbone['neck_flex.layer_extra'] = 4 - pbone = obj.pose.bones['head'] - pbone['neck_flex.layer_main'] = 3 - pbone = obj.pose.bones['DLT-shoulder.L'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['DLT-shoulder.R'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['shoulder.L'] - pbone['type'] = 'copy' - pbone = obj.pose.bones['shoulder.L'] - pbone['copy.layers'] = 1 - pbone = obj.pose.bones['shoulder.R'] - pbone['type'] = 'copy' - pbone = obj.pose.bones['shoulder.R'] - pbone['copy.layers'] = 1 - pbone = obj.pose.bones['DLT-upper_arm.L'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['DLT-upper_arm.R'] - pbone['type'] = 'delta' - pbone = obj.pose.bones['upper_arm.L'] - pbone['type'] = 'arm_biped' - pbone = obj.pose.bones['upper_arm.L'] - pbone['arm_biped_generic.elbow_parent'] = 'spine.04' - pbone = obj.pose.bones['upper_arm.L'] - pbone['arm_biped_generic.layer_fk'] = 7 - pbone = obj.pose.bones['upper_arm.L'] - pbone['arm_biped_generic.layer_ik'] = 8 - pbone = obj.pose.bones['upper_arm.R'] - pbone['type'] = 'arm_biped' - pbone = obj.pose.bones['upper_arm.R'] - pbone['arm_biped_generic.layer_fk'] = 9 - pbone = obj.pose.bones['upper_arm.R'] - pbone['arm_biped_generic.layer_ik'] = 10 - pbone = obj.pose.bones['upper_arm.R'] - pbone['arm_biped_generic.elbow_parent'] = 'spine.04' - pbone = obj.pose.bones['palm.01.L'] - pbone['type'] = 'palm_curl' - pbone = obj.pose.bones['palm.01.L'] - pbone['palm_curl.layers'] = 5 - pbone = obj.pose.bones['thumb.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['thumb.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['thumb.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['thumb.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['thumb.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['thumb.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['palm.01.R'] - pbone['type'] = 'palm_curl' - pbone = obj.pose.bones['palm.01.R'] - pbone['palm_curl.layers'] = 5 - pbone = obj.pose.bones['finger_pinky.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_pinky.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_pinky.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_ring.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_ring.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_ring.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_middle.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_middle.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_middle.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_index.01.L'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_index.01.L'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_index.01.L'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_pinky.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_pinky.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_pinky.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_ring.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_ring.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_ring.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_middle.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_middle.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_middle.01.R'] - pbone['finger_curl.layer_extra'] = 6 - pbone = obj.pose.bones['finger_index.01.R'] - pbone['type'] = 'finger_curl' - pbone = obj.pose.bones['finger_index.01.R'] - pbone['finger_curl.layer_main'] = 5 - pbone = obj.pose.bones['finger_index.01.R'] - pbone['finger_curl.layer_extra'] = 6 - - -class AddHuman(bpy.types.Operator): - '''Add an advanced human metarig base''' - bl_idname = "object.armature_human_advanced_add" - bl_label = "Add Humanoid (advanced metarig)" - bl_options = {'REGISTER', 'UNDO'} - - def execute(self, context): - bpy.ops.object.armature_add() - obj = context.active_object - mode_orig = obj.mode - bpy.ops.object.mode_set(mode='EDIT') # grr, remove bone - bones = context.active_object.data.edit_bones - bones.remove(bones[0]) - metarig_template() - bpy.ops.object.mode_set(mode=mode_orig) - return {'FINISHED'} - - -# Add to a menu -menu_func = (lambda self, context: self.layout.operator(AddHuman.bl_idname, - icon='OUTLINER_OB_ARMATURE', text="Human (Meta-Rig)")) - - -def register(): - bpy.types.INFO_MT_armature_add.append(menu_func) - - -def unregister(): - bpy.types.INFO_MT_armature_add.remove(menu_func) - -if __name__ == "__main__": - register() diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py deleted file mode 100644 index 6453ea9e038..00000000000 --- a/release/scripts/ui/properties_data_armature_rigify.py +++ /dev/null @@ -1,334 +0,0 @@ -# ##### BEGIN GPL LICENSE BLOCK ##### -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# ##### END GPL LICENSE BLOCK ##### - -# -import bpy -from bpy.props import * - - -class PoseTemplate(bpy.types.IDPropertyGroup): - name = StringProperty(name="Name of the slave", description="", maxlen=64, default="") - - -class PoseTemplateSettings(bpy.types.IDPropertyGroup): - templates = CollectionProperty(type=PoseTemplate, name="Templates", description="") - active_template_index = IntProperty(name="Index of the active slave", description="", default=-1, min=-1, max=65535) - use_generate_deform_rig = BoolProperty(name="Create Deform Rig", description="Create a copy of the metarig, constrainted by the generated rig", default=False) - - -def metarig_templates(): - import rigify - return rigify.get_submodule_types() - - -class DATA_PT_template(bpy.types.Panel): - bl_label = "Meta-Rig Templates" - bl_space_type = 'PROPERTIES' - bl_region_type = 'WINDOW' - bl_context = "data" - bl_options = {'DEFAULT_CLOSED'} - - templates = [] - - @classmethod - def poll(cls, context): - if not context.armature: - return False - obj = context.object - if obj: - return (obj.mode in ('POSE', 'OBJECT')) - return False - - def draw(self, context): - layout = self.layout - try: - active_type = context.active_pose_bone["type"] - except: - active_type = None - - scene = context.scene - pose_templates = scene.pose_templates - - if pose_templates.active_template_index == -1: - pose_templates.active_template_index = 0 - - if not self.templates: - self.templates[:] = metarig_templates() - - while(len(pose_templates.templates) < len(self.templates)): - pose_templates.templates.add() - while(len(pose_templates.templates) > len(self.templates)): - pose_templates.templates.remove(0) - - for i, template_name in enumerate(self.templates): - template = pose_templates.templates[i] - if active_type == template_name: - template.name = "<%s>" % template_name.replace("_", " ") - else: - template.name = " %s " % template_name.replace("_", " ") - - row = layout.row() - row.operator("pose.metarig_generate", text="Generate") - row.operator("pose.metarig_validate", text="Check") - row.operator("pose.metarig_graph", text="Graph") - row = layout.row() - row.prop(pose_templates, "use_generate_deform_rig") - - row = layout.row() - col = row.column() - col.template_list(pose_templates, "templates", pose_templates, "active_template_index", rows=1) - - subrow = col.split(percentage=0.5, align=True) - subsubrow = subrow.row(align=True) - subsubrow.operator("pose.metarig_assign", text="Assign") - subsubrow.operator("pose.metarig_clear", text="Clear") - - if self.templates: - subsubrow = subrow.split(percentage=0.8) - subsubrow.operator("pose.metarig_sample_add", text="Sample").metarig_type = self.templates[pose_templates.active_template_index] - subsubrow.operator("pose.metarig_sample_add", text="All").metarig_type = "" # self.templates[pose_templates.active_template_index] - - sub = row.column(align=True) - sub.operator("pose.metarig_reload", icon="FILE_REFRESH", text="") - - -class Reload(bpy.types.Operator): - '''Re-Scan the metarig package directory for scripts''' - - bl_idname = "pose.metarig_reload" - bl_label = "Re-Scan the list of metarig types" - - def execute(self, context): - DATA_PT_template.templates[:] = metarig_templates() - return {'FINISHED'} - - -def rigify_report_exception(operator, exception): - import traceback - import sys - import os - # find the module name where the error happened - # hint, this is the metarig type! - exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() - fn = traceback.extract_tb(exceptionTraceback)[-1][0] - fn = os.path.basename(fn) - fn = os.path.splitext(fn)[0] - message = [] - if fn.startswith("__"): - message.append("Incorrect armature...") - else: - message.append("Incorrect armature for type '%s'" % fn) - message.append(exception.message) - - message.reverse() # XXX - stupid! menu's are upside down! - - operator.report(set(['INFO']), '\n'.join(message)) - - -class Generate(bpy.types.Operator): - '''Generates a metarig from the active armature''' - - bl_idname = "pose.metarig_generate" - bl_label = "Generate Metarig" - - def execute(self, context): - import rigify - reload(rigify) - - meta_def = context.scene.pose_templates.use_generate_deform_rig - - try: - rigify.generate_rig(context, context.object, META_DEF=meta_def) - except rigify.RigifyError as rig_exception: - rigify_report_exception(self, rig_exception) - - return {'FINISHED'} - - -class Validate(bpy.types.Operator): - '''Validate a metarig from the active armature''' - - bl_idname = "pose.metarig_validate" - bl_label = "Validate Metarig" - - def execute(self, context): - import rigify - reload(rigify) - try: - rigify.validate_rig(context, context.object) - except rigify.RigifyError as rig_exception: - rigify_report_exception(self, rig_exception) - return {'FINISHED'} - - -class Sample(bpy.types.Operator): - '''Create a sample metarig to be modified before generating the final rig.''' - - bl_idname = "pose.metarig_sample_add" - bl_label = "Re-Scan Metarig Scripts" - - metarig_type = StringProperty(name="Type", description="Name of the rig type to generate a sample of, a blank string for all", maxlen=128, default="") - - def execute(self, context): - import rigify - reload(rigify) - final = (self.metarig_type == "") - objects = rigify.generate_test(context, metarig_type=self.metarig_type, GENERATE_FINAL=final) - - if len(objects) > 1: - for i, (obj_meta, obj_gen) in enumerate(objects): - obj_meta.location.x = i * 1.0 - if obj_gen: - obj_gen.location.x = i * 1.0 - - return {'FINISHED'} - - -class Graph(bpy.types.Operator): - '''Create a graph from the active armature through graphviz''' - - bl_idname = "pose.metarig_graph" - bl_label = "Pose Graph" - - def execute(self, context): - import os - import graphviz_export - import bpy - reload(graphviz_export) - obj = bpy.context.object - if(bpy.data.filepath): - path = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name) - else: - import tempfile - path = tempfile.mktemp(prefix=bpy.app.tempdir) + "-" + bpy.path.clean_name(obj.name) - path_dot = path + ".dot" - path_png = path + ".png" - saved = graphviz_export.graph_armature(bpy.context.object, path_dot, CONSTRAINTS=False, DRIVERS=False) - - if saved: - # if we seriously want this working everywhere we'll need some new approach - os.system("dot -Tpng %r > %r" % (path_dot, path_png)) - if not os.path.exists(path_png) or os.stat(path_png)[6] == 0: - self.report('ERROR', "Graphvis could not create %r check graphviz is installed" % path_png) - return {'CANCELLED'} - - bpy.ops.image.external_edit(filepath=path_png) - #os.system("python /b/xdot.py '%s' &" % path_dot) - - return {'FINISHED'} - - -class AsScript(bpy.types.Operator): - '''Write the edit armature out as a python script''' - - bl_idname = "pose.metarig_to_script" - bl_label = "Write Metarig to Script" - bl_options = {'REGISTER', 'UNDO'} - - filepath = StringProperty(name="File Path", description="File path used for exporting the Armature file", maxlen=1024, default="") - - def execute(self, context): - import rigify_utils - reload(rigify_utils) - obj = context.object - code = rigify_utils.write_meta_rig(obj) - path = self.filepath - file = open(path, "w") - file.write(code) - file.close() - - return {'FINISHED'} - - def invoke(self, context, event): - import os - obj = context.object - self.filepath = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name) + ".py" - wm = context.window_manager - wm.add_fileselect(self) - return {'RUNNING_MODAL'} - - -# operators that use the GUI -class ActiveAssign(bpy.types.Operator): - '''Assign to the active posebone''' - - bl_idname = "pose.metarig_assign" - bl_label = "Assign to the active posebone" - - @classmethod - def poll(cls, context): - bone = context.active_pose_bone - return bool(bone and bone.id_data.mode == 'POSE') - - def execute(self, context): - scene = context.scene - pose_templates = scene.pose_templates - template_name = DATA_PT_template.templates[pose_templates.active_template_index] - context.active_pose_bone["type"] = template_name - return {'FINISHED'} - - -class ActiveClear(bpy.types.Operator): - '''Clear type from the active posebone''' - - bl_idname = "pose.metarig_clear" - bl_label = "Metarig Clear Type" - - @classmethod - def poll(cls, context): - bone = context.active_pose_bone - return bool(bone and bone.id_data.mode == 'POSE') - - def execute(self, context): - scene = context.scene - try: - del context.active_pose_bone["type"] - except: - return {'CANCELLED'} - return {'FINISHED'} - - -class INFO_MT_armature_metarig_add(bpy.types.Menu): - bl_idname = "INFO_MT_armature_metarig_add" - bl_label = "Meta-Rig" - - def draw(self, context): - import rigify - - layout = self.layout - layout.operator_context = 'INVOKE_REGION_WIN' - - for submodule_type in rigify.get_submodule_types(): - text = bpy.path.display_name(submodule_type) - layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type - -menu_func = (lambda self, context: self.layout.menu("INFO_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE')) -import space_info # ensure the menu is loaded first - - -def register(): - bpy.types.Scene.pose_templates = PointerProperty(type=PoseTemplateSettings, name="Pose Templates", description="Pose Template Settings") - space_info.INFO_MT_armature_add.append(menu_func) - - -def unregister(): - del bpy.types.Scene.pose_templates - space_info.INFO_MT_armature_add.remove(menu_func) - -if __name__ == "__main__": - register() From f8ec6b8654962cd2fc77b9941f35c8127d37fc90 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 26 Oct 2010 12:48:07 +0000 Subject: [PATCH 019/163] move matrix decomposition out of object.c into BLI_math_matrix function: mat4_to_loc_rot_size(), use this now for pchan_apply_mat4() to support negative scale, visual keying now uses compatible eulers. also added access to this in python's mathutils.Matrix() loc, quat, scale = matrix.decompose() --- source/blender/blenkernel/BKE_armature.h | 3 +- source/blender/blenkernel/intern/armature.c | 40 +++++++-------- source/blender/blenkernel/intern/object.c | 51 ++++--------------- source/blender/blenlib/BLI_math_matrix.h | 2 + source/blender/blenlib/intern/math_matrix.c | 42 +++++++++++++++ .../blender/editors/armature/editarmature.c | 2 +- source/blender/makesrna/intern/rna_pose.c | 2 +- .../blender/python/generic/mathutils_matrix.c | 37 ++++++++++++++ 8 files changed, 115 insertions(+), 64 deletions(-) diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h index 466b5d9a845..06e24431df4 100644 --- a/source/blender/blenkernel/BKE_armature.h +++ b/source/blender/blenkernel/BKE_armature.h @@ -105,7 +105,8 @@ void armature_mat_pose_to_bone(struct bPoseChannel *pchan, float inmat[][4], flo void armature_loc_pose_to_bone(struct bPoseChannel *pchan, float *inloc, float *outloc); void armature_mat_pose_to_delta(float delta_mat[][4], float pose_mat[][4], float arm_mat[][4]); -void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4]); +void pchan_mat3_to_rot(struct bPoseChannel *pchan, float mat[][3], short use_compat); +void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4], short use_comat); void pchan_to_mat4(struct bPoseChannel *pchan, float chan_mat[4][4]); /* Rotation Mode Conversions - Used for PoseChannels + Objects... */ diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 029b3c2e141..b44bf751a8a 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -1177,32 +1177,30 @@ void armature_loc_pose_to_bone(bPoseChannel *pchan, float *inloc, float *outloc) VECCOPY(outloc, nLocMat[3]); } +/* same as object_mat3_to_rot() */ +void pchan_mat3_to_rot(bPoseChannel *pchan, float mat[][3], short use_compat) +{ + switch(pchan->rotmode) { + case ROT_MODE_QUAT: + mat3_to_quat(pchan->quat, mat); + break; + case ROT_MODE_AXISANGLE: + mat3_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, mat); + break; + default: /* euler */ + if(use_compat) mat3_to_compatible_eulO(pchan->eul, pchan->eul, pchan->rotmode, mat); + else mat3_to_eulO(pchan->eul, pchan->rotmode, mat); + } +} /* Apply a 4x4 matrix to the pose bone, * similar to object_apply_mat4() */ -void pchan_apply_mat4(bPoseChannel *pchan, float mat[][4]) +void pchan_apply_mat4(bPoseChannel *pchan, float mat[][4], short use_compat) { - /* location */ - copy_v3_v3(pchan->loc, mat[3]); - - /* scale */ - mat4_to_size(pchan->size, mat); - - /* rotation */ - if (pchan->rotmode == ROT_MODE_AXISANGLE) { - float tmp_quat[4]; - - /* need to convert to quat first (in temp var)... */ - mat4_to_quat(tmp_quat, mat); - quat_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, tmp_quat); - } - else if (pchan->rotmode == ROT_MODE_QUAT) { - mat4_to_quat(pchan->quat, mat); - } - else { - mat4_to_eulO(pchan->eul, pchan->rotmode, mat); - } + float rot[3][3]; + mat4_to_loc_rot_size(pchan->loc, rot, pchan->size, mat); + pchan_mat3_to_rot(pchan, rot, use_compat); } /* Remove rest-position effects from pose-transform for obtaining diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 9d93fac8ad0..5ade08478a2 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1680,54 +1680,25 @@ void object_rot_to_mat3(Object *ob, float mat[][3]) void object_mat3_to_rot(Object *ob, float mat[][3], short use_compat) { - if (ob->rotmode == ROT_MODE_QUAT) + switch(ob->rotmode) { + case ROT_MODE_QUAT: mat3_to_quat(ob->quat, mat); - else if (ob->rotmode == ROT_MODE_AXISANGLE) + break; + case ROT_MODE_AXISANGLE: mat3_to_axis_angle(ob->rotAxis, &ob->rotAngle, mat); - else { - if(use_compat) { - float eul[3]; - VECCOPY(eul, ob->rot); - mat3_to_compatible_eulO(ob->rot, eul, ob->rotmode, mat); - } - else - mat3_to_eulO(ob->rot, ob->rotmode, mat); + break; + default: /* euler */ + if(use_compat) mat3_to_compatible_eulO(ob->rot, ob->rot, ob->rotmode, mat); + else mat3_to_eulO(ob->rot, ob->rotmode, mat); } } /* see pchan_apply_mat4() for the equivalent 'pchan' function */ void object_apply_mat4(Object *ob, float mat[][4], short use_compat) { - float mat3[3][3]; /* obmat -> 3x3 */ - float mat3_n[3][3]; /* obmat -> normalized, 3x3 */ - float imat3_n[3][3]; /* obmat -> normalized & inverted, 3x3 */ - - /* location */ - copy_v3_v3(ob->loc, mat[3]); - - /* rotation & scale are linked, we need to create the mat's - * for these together since they are related. */ - copy_m3_m4(mat3, mat); - /* so scale doesnt interfear with rotation [#24291] */ - /* note: this is a workaround for negative matrix not working for rotation conversion, FIXME */ - normalize_m3_m3(mat3_n, (const float(*)[3])mat3); - if(is_negative_m3(mat3_n)) { - negate_v3(mat3_n[0]); - negate_v3(mat3_n[1]); - negate_v3(mat3_n[2]); - } - - /* rotation */ - object_mat3_to_rot(ob, mat3_n, use_compat); - - /* scale */ - /* note: mat4_to_size(ob->size, mat) fails for negative scale */ - invert_m3_m3(imat3_n, mat3_n); - mul_m3_m3m3(mat3, imat3_n, mat3); - - ob->size[0]= mat3[0][0]; - ob->size[1]= mat3[1][1]; - ob->size[2]= mat3[2][2]; + float rot[3][3]; + mat4_to_loc_rot_size(ob->loc, rot, ob->size, mat); + object_mat3_to_rot(ob, rot, use_compat); } void object_to_mat3(Object *ob, float mat[][3]) /* no parent */ diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h index d25707d480c..76de8f827be 100644 --- a/source/blender/blenlib/BLI_math_matrix.h +++ b/source/blender/blenlib/BLI_math_matrix.h @@ -144,6 +144,8 @@ void mat4_to_size(float r[3], float M[4][4]); void translate_m4(float mat[4][4], float tx, float ty, float tz); void rotate_m4(float mat[4][4], const char axis, const float angle); +void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[][4]); + void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3]); void loc_eulO_size_to_mat4(float R[4][4], diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index 86eee4c2202..80d7709f3a9 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -952,6 +952,48 @@ float mat4_to_scale(float mat[][4]) return mat3_to_scale(tmat); } +void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[][4]) +{ + float mat3[3][3]; /* wmat -> 3x3 */ + float mat3_n[3][3]; /* wmat -> normalized, 3x3 */ + float imat3_n[3][3]; /* wmat -> normalized & inverted, 3x3 */ + short is_neg; + /* location */ + copy_v3_v3(loc, wmat[3]); + + /* rotation & scale are linked, we need to create the mat's + * for these together since they are related. */ + copy_m3_m4(mat3, wmat); + /* so scale doesnt interfear with rotation [#24291] */ + /* note: this is a workaround for negative matrix not working for rotation conversion, FIXME */ + is_neg= is_negative_m3(mat3); + normalize_m3_m3(mat3_n, (const float(*)[3])mat3); + if(is_neg) { + negate_v3(mat3_n[0]); + negate_v3(mat3_n[1]); + negate_v3(mat3_n[2]); + } + + /* rotation */ + /* keep rot as a 3x3 matrix, the caller can convert into a quat or euler */ + copy_m3_m3(rot, mat3_n); + + /* scale */ + /* note: mat4_to_size(ob->size, mat) fails for negative scale */ + invert_m3_m3(imat3_n, mat3_n); + mul_m3_m3m3(mat3, imat3_n, mat3); + + size[0]= mat3[0][0]; + size[1]= mat3[1][1]; + size[2]= mat3[2][2]; + + /* with a negative matrix, all scaled will be negative + * flipping isnt needed but nicer to result in a positive scale */ + if(is_neg) { + negate_v3(size); + } +} + void scale_m3_fl(float m[][3], float scale) { m[0][0]= m[1][1]= m[2][2]= scale; diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 28165c0e018..fd747cc32aa 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -681,7 +681,7 @@ static int pose_visual_transform_apply_exec (bContext *C, wmOperator *UNUSED(op) invert_m4_m4(imat, pchan->pose_mat); mul_m4_m4m4(delta_mat, mat, imat); - pchan_apply_mat4(pchan, delta_mat); + pchan_apply_mat4(pchan, delta_mat, TRUE); where_is_pose_bone(scene, ob, pchan, CFRA, 1); } diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c index e4a3be023ca..b4a132dd1ec 100644 --- a/source/blender/makesrna/intern/rna_pose.c +++ b/source/blender/makesrna/intern/rna_pose.c @@ -550,7 +550,7 @@ static void rna_PoseChannel_matrix_local_get(PointerRNA *ptr, float *values) static void rna_PoseChannel_matrix_local_set(PointerRNA *ptr, const float *values) { bPoseChannel *pchan= (bPoseChannel*)ptr->data; - pchan_apply_mat4(pchan, (float (*)[4])values); + pchan_apply_mat4(pchan, (float (*)[4])values, FALSE); /* no compat for pradictable result */ } #else diff --git a/source/blender/python/generic/mathutils_matrix.c b/source/blender/python/generic/mathutils_matrix.c index 36a9bf8b55d..c74ec3536e5 100644 --- a/source/blender/python/generic/mathutils_matrix.c +++ b/source/blender/python/generic/mathutils_matrix.c @@ -942,6 +942,7 @@ PyObject *Matrix_scalePart(MatrixObject * self) scale[2]= tmat[2][2]; return newVectorObject(scale, 3, Py_NEW, NULL); } + /*---------------------------Matrix.invert() ---------------------*/ static char Matrix_Invert_doc[] = ".. method:: invert()\n" @@ -1009,6 +1010,41 @@ PyObject *Matrix_Invert(MatrixObject * self) return (PyObject *)self; } +/*---------------------------Matrix.decompose() ---------------------*/ +static char Matrix_decompose_doc[] = +".. method:: decompose()\n" +"\n" +" Return the location, rotaion and scale components of this matrix.\n" +"\n" +" :return: loc, rot, scale triple.\n" +" :rtype: (:class:`Vector`, :class:`Quaternion`, :class:`Vector`)"; +static PyObject *Matrix_decompose(MatrixObject * self) +{ + PyObject *ret; + float loc[3]; + float rot[3][3]; + float quat[4]; + float size[3]; + + if(self->colSize != 4 || self->rowSize != 4) { + PyErr_SetString(PyExc_AttributeError, "Matrix.decompose(): inappropriate matrix size - expects 4x4 matrix\n"); + return NULL; + } + + if(!BaseMath_ReadCallback(self)) + return NULL; + + mat4_to_loc_rot_size(loc, rot, size, (float (*)[4])self->contigPtr); + mat3_to_quat(quat, rot); + + ret= PyTuple_New(3); + PyTuple_SET_ITEM(ret, 0, newVectorObject(loc, 3, Py_NEW, NULL)); + PyTuple_SET_ITEM(ret, 1, newQuaternionObject(quat, Py_NEW, NULL)); + PyTuple_SET_ITEM(ret, 2, newVectorObject(size, 3, Py_NEW, NULL)); + + return ret; +} + /*---------------------------Matrix.determinant() ----------------*/ static char Matrix_Determinant_doc[] = @@ -1755,6 +1791,7 @@ static struct PyMethodDef Matrix_methods[] = { {"translation_part", (PyCFunction) Matrix_TranslationPart, METH_NOARGS, Matrix_TranslationPart_doc}, {"rotation_part", (PyCFunction) Matrix_RotationPart, METH_NOARGS, Matrix_RotationPart_doc}, {"scale_part", (PyCFunction) Matrix_scalePart, METH_NOARGS, Matrix_scalePart_doc}, + {"decompose", (PyCFunction) Matrix_decompose, METH_NOARGS, Matrix_decompose_doc}, {"resize4x4", (PyCFunction) Matrix_Resize4x4, METH_NOARGS, Matrix_Resize4x4_doc}, {"to_4x4", (PyCFunction) Matrix_to_4x4, METH_NOARGS, Matrix_to_4x4_doc}, {"to_3x3", (PyCFunction) Matrix_to_3x3, METH_NOARGS, Matrix_to_3x3_doc}, From d5f66ea92584ce0d707387c9daebd05913c7209a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 26 Oct 2010 16:55:38 +0000 Subject: [PATCH 020/163] partial bugfix [#24002] Constraint "Limit rotation" doesn't work properly this fixes the obvious problems but there are still some rotation jumping when clamping in some cases. --- source/blender/blenkernel/intern/constraint.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index c3f05e497f1..4d6ef612c83 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -1381,6 +1381,7 @@ static bConstraintTypeInfo CTI_LOCLIMIT = { static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets)) { bRotLimitConstraint *data = con->data; + float eul_zero[3]= {0.0f, 0.0f, 0.0f}; float loc[3]; float eul[3]; float size[3]; @@ -1388,8 +1389,9 @@ static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *U copy_v3_v3(loc, cob->matrix[3]); mat4_to_size(size, cob->matrix); - mat4_to_eulO(eul, cob->rotOrder, cob->matrix); - + /* use compat function because it uses the rotation without axis flipping [#24002] */ + mat4_to_compatible_eulO(eul, eul_zero, cob->rotOrder, cob->matrix); + /* constraint data uses radians internally */ /* limiting of euler values... */ From a44f4dd40059e6303ce40a76818e9f0c60bdd06e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 26 Oct 2010 20:41:16 +0000 Subject: [PATCH 021/163] dont use const for matrix arg, since it needs to be cast in most cases. --- source/blender/blenlib/BLI_math_matrix.h | 4 ++-- source/blender/blenlib/intern/math_matrix.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h index 76de8f827be..2144107a6cd 100644 --- a/source/blender/blenlib/BLI_math_matrix.h +++ b/source/blender/blenlib/BLI_math_matrix.h @@ -102,9 +102,9 @@ void transpose_m3(float R[3][3]); void transpose_m4(float R[4][4]); void normalize_m3(float R[3][3]); -void normalize_m3_m3(float R[3][3], const float A[3][3]); +void normalize_m3_m3(float R[3][3], float A[3][3]); void normalize_m4(float R[4][4]); -void normalize_m4_m4(float R[4][4], const float A[4][4]); +void normalize_m4_m4(float R[4][4], float A[4][4]); void orthogonalize_m3(float R[3][3], int axis); void orthogonalize_m4(float R[4][4], int axis); diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index 80d7709f3a9..4cd4ea2a12b 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -750,7 +750,7 @@ void normalize_m3(float mat[][3]) normalize_v3(mat[2]); } -void normalize_m3_m3(float rmat[][3], const float mat[][3]) +void normalize_m3_m3(float rmat[][3], float mat[][3]) { normalize_v3_v3(rmat[0], mat[0]); normalize_v3_v3(rmat[1], mat[1]); @@ -770,7 +770,7 @@ void normalize_m4(float mat[][4]) if(len!=0.0) mat[2][3]/= len; } -void normalize_m4_m4(float rmat[][4], const float mat[][4]) +void normalize_m4_m4(float rmat[][4], float mat[][4]) { float len; @@ -967,7 +967,7 @@ void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wm /* so scale doesnt interfear with rotation [#24291] */ /* note: this is a workaround for negative matrix not working for rotation conversion, FIXME */ is_neg= is_negative_m3(mat3); - normalize_m3_m3(mat3_n, (const float(*)[3])mat3); + normalize_m3_m3(mat3_n, mat3); if(is_neg) { negate_v3(mat3_n[0]); negate_v3(mat3_n[1]); From f13417a969681bf60115948302341981ecaa7d2c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 26 Oct 2010 20:51:11 +0000 Subject: [PATCH 022/163] keep the view centered with camera shift, camera view grease pencil intentionally ignores shift. --- source/blender/editors/gpencil/drawgpencil.c | 2 +- source/blender/editors/gpencil/gpencil_paint.c | 2 +- source/blender/editors/include/ED_view3d.h | 2 +- source/blender/editors/space_view3d/view3d_draw.c | 11 ++++++----- source/blender/editors/space_view3d/view3d_edit.c | 2 +- source/blender/editors/space_view3d/view3d_view.c | 7 ++++++- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index e19f774412b..29cdfffa551 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -754,7 +754,7 @@ void draw_gpencil_view3d_ext (Scene *scene, View3D *v3d, ARegion *ar, short only * deal with the camera border, otherwise map the coords to the camera border. */ if(rv3d->persp == RV3D_CAMOB && !(G.f & G_RENDER_OGL)) { rctf rectf; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &rectf); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &rectf, -1); /* negative shift */ BLI_copy_rcti_rctf(&rect, &rectf); } else { diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 75156571cf4..23e2755613c 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -890,7 +890,7 @@ static tGPsdata *gp_session_initpaint (bContext *C) /* for camera view set the subrect */ if(rv3d->persp == RV3D_CAMOB) { - view3d_calc_camera_border(p->scene, p->ar, NULL, v3d, &p->subrect_data); + view3d_calc_camera_border(p->scene, p->ar, NULL, v3d, &p->subrect_data, -1); /* negative shift */ p->subrect= &p->subrect_data; } diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index fe024be29e0..d2c13b7bf85 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -106,7 +106,7 @@ int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winx int get_view3d_ortho(struct View3D *v3d, struct RegionView3D *rv3d); void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4]); void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]); -void view3d_calc_camera_border(struct Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, struct View3D *v3d, struct rctf *viewborder_r); +void view3d_calc_camera_border(struct Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, struct View3D *v3d, struct rctf *viewborder_r, short do_shift); /* drawobject.c itterators */ void mesh_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, int clipVerts); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 30880db0c90..0421fdadb7b 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -843,7 +843,7 @@ static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2 } } -void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r) +void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r, short do_shift) { float zoomfac, size[2]; float dx= 0.0f, dy= 0.0f; @@ -882,12 +882,13 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi viewborder_r->xmax-= dx; viewborder_r->ymax-= dy; - if(v3d->camera && v3d->camera->type==OB_CAMERA) { + if(do_shift && v3d->camera && v3d->camera->type==OB_CAMERA) { Camera *cam= v3d->camera->data; float w = viewborder_r->xmax - viewborder_r->xmin; float h = viewborder_r->ymax - viewborder_r->ymin; float side = MAX2(w, h); - + + if(do_shift == -1) side *= -1; viewborder_r->xmin+= cam->shiftx*side; viewborder_r->xmax+= cam->shiftx*side; viewborder_r->ymin+= cam->shifty*side; @@ -922,7 +923,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) if(v3d->camera->type==OB_CAMERA) ca = v3d->camera->data; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder, FALSE); /* the offsets */ x1= viewborder.xmin; y1= viewborder.ymin; @@ -1259,7 +1260,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d) if(rv3d->persp==RV3D_CAMOB) { rctf vb; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE); x1= vb.xmin; y1= vb.ymin; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 42767d98c80..d3f977072c1 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1594,7 +1594,7 @@ static int render_border_exec(bContext *C, wmOperator *op) rect.ymax= RNA_int_get(op->ptr, "ymax"); /* calculate range */ - view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE); scene->r.border.xmin= ((float)rect.xmin-vb.xmin)/(vb.xmax-vb.xmin); scene->r.border.ymin= ((float)rect.ymin-vb.ymin)/(vb.ymax-vb.ymin); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 85c8e06a555..046ba29365f 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1021,6 +1021,11 @@ int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi, if(cam) { float dx= 0.5*fac*rv3d->camdx*(x2-x1); float dy= 0.5*fac*rv3d->camdy*(y2-y1); + + /* shify offset */ + dx += ((cam->shiftx/10.0f) / cam->lens) * 32.0; + dy += ((cam->shifty/10.0f) / cam->lens) * 32.0; + x1+= dx; x2+= dx; y1+= dy; @@ -1762,7 +1767,7 @@ static int game_engine_exec(bContext *C, wmOperator *op) if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */ rctf cam_framef; - view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef); + view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef, FALSE); cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; From b6880139e233929f2ac1bc8992b29781cfb30aa7 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Tue, 26 Oct 2010 21:16:11 +0000 Subject: [PATCH 023/163] Revert 32710 for now, otherwise can't test release building with scons. --- source/blenderplayer/bad_level_call_stubs/stubs.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 87a33922f3d..f2970293b05 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -374,12 +374,10 @@ struct wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, int type, int struct wmKeyMap *WM_modalkeymap_add(struct wmKeyConfig *keyconf, char *idname, EnumPropertyItem *items){return (struct wmKeyMap *) NULL;} /* intern/decimation */ -/* int LOD_FreeDecimationData(struct LOD_Decimation_Info *info){return 0;} int LOD_CollapseEdge(struct LOD_Decimation_Info *info){return 0;} int LOD_PreprocessMesh(struct LOD_Decimation_Info *info){return 0;} int LOD_LoadMesh(struct LOD_Decimation_Info *info){return 0;} -*/ /* smoke */ void LzmaCompress(void) { return; } @@ -425,19 +423,17 @@ void sculpt_set_brush_alpha(struct Brush *brush, float alpha){} char blender_path[] = ""; /* CSG */ -/* struct CSG_BooleanOperation * CSG_NewBooleanFunction( void ){return (struct CSG_BooleanOperation *) NULL;} void CSG_FreeBooleanOperation(struct CSG_BooleanOperation *operation){return;} void CSG_FreeFaceDescriptor(struct CSG_FaceIteratorDescriptor * f_descriptor){return;} void CSG_FreeVertexDescriptor(struct CSG_VertexIteratorDescriptor * v_descriptor){return;} int CSG_OutputFaceDescriptor(struct CSG_BooleanOperation * operation, struct CSG_FaceIteratorDescriptor * output){return 0;} int CSG_OutputVertexDescriptor(struct CSG_BooleanOperation * operation, struct CSG_VertexIteratorDescriptor *output){return 0;} -*/ typedef struct CSG_VertexIteratorDescriptor {int a;} CSG_VertexIteratorDescriptor; //workaround to build CSG_PerformanceBoolean Operation typedef struct CSG_FaceIteratorDescriptor {int a;} CSG_FaceIteratorDescriptor; //workaround to build CSG_PerformanceBoolean Operation typedef struct CSG_OperationType {int a;} CSG_OperationType; //workaround to build CSG_PerformanceBoolean Operation -/* + int CSG_PerformBooleanOperation( struct CSG_BooleanOperation *operation, CSG_OperationType op_type, @@ -446,6 +442,5 @@ int CSG_PerformBooleanOperation( CSG_FaceIteratorDescriptor obBFaces, CSG_VertexIteratorDescriptor obBVertices) { return 0;} -*/ #endif // GAMEBLENDER == 1 From c0314f10411ce74cc954e9098dcb3e82da29f3b7 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Tue, 26 Oct 2010 22:13:37 +0000 Subject: [PATCH 024/163] Make sure plugins/ goes under shortversion/ dir --- SConstruct | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/SConstruct b/SConstruct index 032b1eb1ea8..12926a29cef 100644 --- a/SConstruct +++ b/SConstruct @@ -538,24 +538,24 @@ for tp, tn, tf in os.walk('release/plugins'): df = tp[8:] # remove 'release/' for f in tf: pluglist.append(os.path.join(tp, f)) - plugtargetlist.append( os.path.join(env['BF_INSTALLDIR'], df, f) ) + plugtargetlist.append( os.path.join(env['BF_INSTALLDIR'], VERSION, df, f) ) # header files for plugins pluglist.append('source/blender/blenpluginapi/documentation.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'documentation.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'documentation.h')) pluglist.append('source/blender/blenpluginapi/externdef.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'externdef.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'externdef.h')) pluglist.append('source/blender/blenpluginapi/floatpatch.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'floatpatch.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'floatpatch.h')) pluglist.append('source/blender/blenpluginapi/iff.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'iff.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'iff.h')) pluglist.append('source/blender/blenpluginapi/plugin.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'plugin.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'plugin.h')) pluglist.append('source/blender/blenpluginapi/util.h') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'util.h')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'util.h')) pluglist.append('source/blender/blenpluginapi/plugin.DEF') -plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], 'plugins', 'include', 'plugin.def')) +plugtargetlist.append(os.path.join(env['BF_INSTALLDIR'], VERSION, 'plugins', 'include', 'plugin.def')) plugininstall = [] for targetdir,srcfile in zip(plugtargetlist, pluglist): From 50c5b7fc5cb05e043f230b4b553f4c5bd3ac6ed0 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Tue, 26 Oct 2010 22:48:26 +0000 Subject: [PATCH 025/163] Some improvements to the uninstaller part: * don't just recursively delete $BLENDERHOME * seperately ask confirmation for recursive deleting contents of: - $BLENDERHOME\$SHORTVERSION\plugins - $BLENDERHOME\$SHORTVERSION\scripts - $BLENDERHOME\$SHORTVERSION\config * Have clear warnings about files going to be deleted --- release/windows/installer/00.sconsblender.nsi | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/release/windows/installer/00.sconsblender.nsi b/release/windows/installer/00.sconsblender.nsi index d16e0f1ae61..4a6a2ca4d8a 100644 --- a/release/windows/installer/00.sconsblender.nsi +++ b/release/windows/installer/00.sconsblender.nsi @@ -188,7 +188,7 @@ Section "Open .blend files with Blender-[VERSION]" Section4 SectionEnd -UninstallText "This will uninstall Blender [VERSION], and all datafiles from the installation dir. Hit next to continue." +UninstallText "This will uninstall Blender [VERSION], and all installed files. Before continuing make sure you have created backup of all the files you may want to keep: startup.blend, bookmarks.txt, recent-files.txt. Hit next to continue." Section "Uninstall" ; remove registry keys @@ -197,23 +197,38 @@ Section "Uninstall" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" DeleteRegKey HKLM "SOFTWARE\BlenderFoundation" SetShellVarContext all - - StrCpy $0 "$SMPROGRAMS\Blender Foundation\" - MessageBox MB_OK $0 + ; remove files [DELROOTDIRCONTS] + ; remove bundled python + RmDir /r $INSTDIR\$SHORTVERSION\python + Delete "$INSTDIR\uninstall.exe" - MessageBox MB_YESNO "Erase $BLENDERHOME? This includes all installed scripts and configuration files and any file you may have created there." IDNO Next - RMDir /r "$BLENDERHOME" -Next: - ; remove shortcuts, if any. + MessageBox MB_YESNO "Recursively erase contents of $BLENDERHOME\$SHORTVERSION\scripts? NOTE: This includes all installed scripts and *any* file and directory you have manually created, installed later or copied. This also including .blend files." IDNO NextNoScriptRemove + RMDir /r "$BLENDERHOME\$SHORTVERSION\scripts" +NextNoScriptRemove: + MessageBox MB_YESNO "Recursively erase contents from $BLENDERHOME\$SHORTVERSION\config? NOTE: This includes your startup.blend, bookmarks and any other file and directory you may have created in that directory" IDNO NextNoConfigRemove + RMDir /r "$BLENDERHOME\$SHORTVERSION\config" +NextNoConfigRemove: + MessageBox MB_YESNO "Recursively erase contents from $BLENDERHOME\$SHORTVERSION\plugins? NOTE: This includes files and subdirectories in this directory" IDNO NextNoPluginRemove + RMDir /r "$BLENDERHOME\$SHORTVERSION\plugins" +NextNoPluginRemove: + ; try to remove dirs, but leave them if they contain anything + RMDir "$BLENDERHOME\$SHORTVERSION\plugins" + RMDir "$BLENDERHOME\$SHORTVERSION\config" + RMDir "$BLENDERHOME\$SHORTVERSION\scripts" + RMDir "$BLENDERHOME\$SHORTVERSION" + RMDir "$BLENDERHOME" + ; remove shortcuts + Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*" Delete "$DESKTOP\Blender.lnk" ; remove all link related directories and files - RMDir /r "$SMPROGRAMS\Blender Foundation\" - ; remove entire installation directory, including any file created by the user - RMDir /r "$INSTDIR" + RMDir "$SMPROGRAMS\Blender Foundation\Blender" + RMDir "$SMPROGRAMS\Blender Foundation" + ; Clear out installation dir + RMDir "$INSTDIR" SectionEnd !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN From d9757e270552fadc9e8543a7cccce5874520d166 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Tue, 26 Oct 2010 22:49:49 +0000 Subject: [PATCH 026/163] Don't reset view clipping to 0.1 on entering local view, if you're working on something close up with < 0.1 clipping, then toggle into local view it gets very annoying. --- source/blender/editors/space_view3d/view3d_view.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 046ba29365f..aac03d97022 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1484,7 +1484,6 @@ static void initlocalview(Main *bmain, Scene *scene, ScrArea *sa) v3d->cursor[2]= -rv3d->ofs[2]; } } - if (v3d->near> 0.1) v3d->near= 0.1; v3d->lay= locallay; } From e3f8bcbe88543244ae0d06c53bb5f5f18fed03cb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 26 Oct 2010 23:28:10 +0000 Subject: [PATCH 027/163] bugfix #24334] Filename looses all parts after a dot when saving replacing the extension could remove the frame number added to a path when writing images, so just add the extension rather then replacing even though it gives odd names at times. eg: foo.png0001.tga --- source/blender/blenkernel/intern/image.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 09622b2acfe..1345c6c9b61 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -832,7 +832,10 @@ int BKE_add_image_extension(char *string, int imtype) } if(extension) { - return BLI_replace_extension(string, FILE_MAX, extension); + /* prefer this in many cases to avoid .png.tga, but in certain cases it breaks */ + /* return BLI_replace_extension(string, FILE_MAX, extension); */ + strcat(string, extension); + return TRUE; } else { return FALSE; From f875777212efb7e1a59f8ccf2e76d50898d605e4 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Tue, 26 Oct 2010 23:32:59 +0000 Subject: [PATCH 028/163] Change /WX away for now, some odd thing going on between cloned environments. Need to check after release. --- build_files/scons/config/win32-vc-config.py | 2 +- build_files/scons/config/win64-vc-config.py | 2 +- intern/ghost/SConscript | 2 +- source/blender/blenkernel/SConscript | 2 +- source/blender/blenlib/BLI_winstuff.h | 2 +- source/blender/makesrna/intern/SConscript | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build_files/scons/config/win32-vc-config.py b/build_files/scons/config/win32-vc-config.py index 57199192e98..a2d5c5af712 100644 --- a/build_files/scons/config/win32-vc-config.py +++ b/build_files/scons/config/win32-vc-config.py @@ -170,7 +170,7 @@ BF_OPENGL_LIB_STATIC = [ '${BF_OPENGL}/lib/libGL.a', '${BF_OPENGL}/lib/libGLU.a' CC = 'cl.exe' CXX = 'cl.exe' -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267', '/we4013'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W0', '/Gd', '/wd4018', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267', '/we4013'] CXXFLAGS = ['/EHsc'] BGE_CXXFLAGS = ['/O2', '/EHsc', '/GR', '/fp:fast', '/arch:SSE'] diff --git a/build_files/scons/config/win64-vc-config.py b/build_files/scons/config/win64-vc-config.py index 18d9dc93eec..8d5bfab4900 100644 --- a/build_files/scons/config/win64-vc-config.py +++ b/build_files/scons/config/win64-vc-config.py @@ -166,7 +166,7 @@ CC = 'cl.exe' CXX = 'cl.exe' CFLAGS = [] -CCFLAGS = ['/nologo', '/Ob1', '/J', '/W3', '/Gd', '/we4013', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] +CCFLAGS = ['/nologo', '/Ob1', '/J', '/W0', '/Gd', '/we4013', '/wd4018', '/wd4244', '/wd4305', '/wd4800', '/wd4065', '/wd4267'] CXXFLAGS = ['/EHsc'] BGE_CXXFLAGS = ['/O2', '/EHsc', '/GR', '/fp:fast'] diff --git a/intern/ghost/SConscript b/intern/ghost/SConscript index c71402b352b..25880e9679b 100644 --- a/intern/ghost/SConscript +++ b/intern/ghost/SConscript @@ -62,6 +62,6 @@ if window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64-v incs = env['BF_WINTAB_INC'] + ' ' + incs if window_system in ('win32-vc', 'win64-vc'): - env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15], cc_compileflags=['/WX'] ) + env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15]) #, cc_compileflags=env['CCFLAGS'].append('/WX') ) else: env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] ) diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript index 3793eb8cc64..e8919a1008a 100644 --- a/source/blender/blenkernel/SConscript +++ b/source/blender/blenkernel/SConscript @@ -90,6 +90,6 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): - env.BlenderLib ( libname = 'bf_blenkernel', sources = sources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [166,25], cc_compileflags = ['/WX'] ) + env.BlenderLib ( libname = 'bf_blenkernel', sources = sources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [166,25]) #, cc_compileflags = env['CCFLAGS'].append('/WX') ) else: env.BlenderLib ( libname = 'bf_blenkernel', sources = sources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [166,25] ) diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h index c9a85cf890e..b66790f701f 100644 --- a/source/blender/blenlib/BLI_winstuff.h +++ b/source/blender/blenlib/BLI_winstuff.h @@ -35,7 +35,7 @@ #ifdef _WIN32 #ifndef FREE_WINDOWS -#pragma warning(once: 4761 4305 4244) +#pragma warning(once: 4761 4305 4244 4018) #endif #define WIN32_LEAN_AND_MEAN diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index ecee3f94796..702955980fd 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -6,7 +6,7 @@ def normpath(path): return os.path.abspath(os.path.normpath(path)) Import ('env') -cflags = ['-Wall'] +cflags = [] #['-Wall'] defines = [] root_build_dir=normpath(env['BF_BUILDDIR']) From 16e478cdb7db4cf8907d8c79d0de69896846f102 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Tue, 26 Oct 2010 23:52:34 +0000 Subject: [PATCH 029/163] Fix [#24053] 64-bit Windows installer installs keys to 32-bit registry Reported and patch-suggestion by George Pollard --- release/windows/installer/00.sconsblender.nsi | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/release/windows/installer/00.sconsblender.nsi b/release/windows/installer/00.sconsblender.nsi index 4a6a2ca4d8a..7edb0924131 100644 --- a/release/windows/installer/00.sconsblender.nsi +++ b/release/windows/installer/00.sconsblender.nsi @@ -11,6 +11,8 @@ !include "FileFunc.nsh" !include "WordFunc.nsh" !include "nsDialogs.nsh" +!include "x64.nsh" + SetCompressor /SOLID lzma @@ -148,6 +150,9 @@ Section "Blender-[VERSION] (required)" SecCopyUI [DODATAFILES] SetOutPath $INSTDIR + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} ; Write the installation path into the registry WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "Install_Dir" "$INSTDIR" WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "ConfigData_Dir" "$BLENDERHOME" @@ -179,6 +184,9 @@ SectionEnd Section "Open .blend files with Blender-[VERSION]" Section4 + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} WriteRegStr HKCR ".blend" "" "blendfile" WriteRegStr HKCR "blendfile" "" "Blender .blend File" WriteRegStr HKCR "blendfile\shell" "" "open" @@ -192,6 +200,9 @@ UninstallText "This will uninstall Blender [VERSION], and all installed files. B Section "Uninstall" ; remove registry keys + ${If} ${RunningX64} + SetRegView 64 + ${EndIf} ReadRegStr $BLENDERHOME HKLM "SOFTWARE\BlenderFoundation" "ConfigData_Dir" ReadRegStr $SHORTVERSION HKLM "SOFTWARE\BlenderFoundation" "ShortVersion" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender" From 27b527c164fcb4b4bd13a1fc49c6627ed460baa6 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Wed, 27 Oct 2010 02:18:24 +0000 Subject: [PATCH 030/163] Fix [#23972] 2.54 beta crashes when rendering scene with many volume objects Sticky-taped on more hacks to the already crumbling shading system. --- source/blender/render/intern/source/rayshade.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 1172bee7d67..17ec48c8422 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -718,7 +718,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, flo shi.mask= origshi->mask; shi.osatex= origshi->osatex; - shi.depth= 1; /* only used to indicate tracing */ + shi.depth= origshi->depth + 1; /* only used to indicate tracing */ shi.thread= origshi->thread; //shi.sample= 0; // memset above, so dont need this shi.xs= origshi->xs; @@ -1458,8 +1458,8 @@ void ray_trace(ShadeInput *shi, ShadeResult *shr) float diff[3]; int do_tra, do_mir; - do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f); - do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f); + do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f && (shi->depth <= shi->mat->ray_depth_tra)); + do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f && (shi->depth <= shi->mat->ray_depth)); /* raytrace mirror amd refract like to separate the spec color */ if(shi->combinedflag & SCE_PASS_SPEC) @@ -1570,7 +1570,7 @@ static void ray_trace_shadow_tra(Isect *is, ShadeInput *origshi, int depth, int memset(&shi, 0, sizeof(ShadeInput)); /* end warning! - Campbell */ - shi.depth= 1; /* only used to indicate tracing */ + shi.depth= origshi->depth + 1; /* only used to indicate tracing */ shi.mask= origshi->mask; shi.thread= origshi->thread; shi.passflag= SCE_PASS_COMBINED; From 676829ccba10da1d83f809ad243685707bb7543d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 06:05:22 +0000 Subject: [PATCH 031/163] workaround for python bug [#24400] If Script is executed with TEXT Editor, it becomes an error. having the blend file as a part of the __file__ variable is not essential, this is fixed in python 3.2 so add an ifdef and don't use the blend file path for py older then 3.2. --- .../python/generic/bpy_internal_import.c | 21 ++++++++++++------- .../python/generic/bpy_internal_import.h | 18 +++++++--------- source/blender/python/intern/bpy_interface.c | 3 +-- source/gameengine/Ketsji/KX_PythonInit.cpp | 10 +++++++++ 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index 3ee0c76a44a..643ee1e143f 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -26,7 +26,13 @@ * ***** END GPL LICENSE BLOCK ***** */ +#include +#include "compile.h" /* for the PyCodeObject */ +#include "eval.h" /* for PyEval_EvalCode */ +#include "osdefs.h" /* for 'SEP' */ + #include "bpy_internal_import.h" + #include "DNA_text_types.h" #include "MEM_guardedalloc.h" @@ -62,16 +68,17 @@ void bpy_import_main_set(struct Main *maggie) /* returns a dummy filename for a textblock so we can tell what file a text block comes from */ void bpy_text_filename_get(char *fn, Text *text) { - sprintf(fn, "%s/%s", text->id.lib ? text->id.lib->filepath : G.main->name, text->id.name+2); - - /* XXX, this is a bug in python's Py_CompileString()! +#if PY_VERSION_HEX >= 0x03020000 + sprintf(fn, "%s%c%s", text->id.lib ? text->id.lib->filepath : G.main->name, SEP, text->id.name+2); +#else + /* this is a bug in python's Py_CompileString()!, fixed for python 3.2. the string encoding should not be required to be utf-8 - reported: http://bugs.python.org/msg115202 - */ - BLI_utf8_invalid_strip(fn, strlen(fn)); + reported: http://bugs.python.org/msg115202 */ + strcpy(fn, text->id.name+2); +#endif } -PyObject *bpy_text_import( Text *text ) +PyObject *bpy_text_import(Text *text) { char *buf = NULL; char modulename[24]; diff --git a/source/blender/python/generic/bpy_internal_import.h b/source/blender/python/generic/bpy_internal_import.h index f191ab22651..dd7a3ab9f64 100644 --- a/source/blender/python/generic/bpy_internal_import.h +++ b/source/blender/python/generic/bpy_internal_import.h @@ -28,8 +28,8 @@ /* Note, the BGE needs to use this too, keep it minimal */ -#ifndef EXPP_bpy_import_h -#define EXPP_bpy_import_h +#ifndef BPY_INTERNAL_IMPORT_H +#define BPY_INTERNAL_IMPORT_H /* python redefines :/ */ #ifdef _POSIX_C_SOURCE @@ -40,16 +40,12 @@ #undef _XOPEN_SOURCE #endif -#include -#include "compile.h" /* for the PyCodeObject */ -#include "eval.h" /* for PyEval_EvalCode */ - struct Text; -PyObject* bpy_text_import( struct Text *text ); -PyObject* bpy_text_import_name( char *name, int *found ); -PyObject* bpy_text_reimport( PyObject *module, int *found ); -/* void bpy_text_clear_modules( int clear_all );*/ /* Clear user modules */ +PyObject* bpy_text_import(struct Text *text); +PyObject* bpy_text_import_name(char *name, int *found); +PyObject* bpy_text_reimport(PyObject *module, int *found); +/* void bpy_text_clear_modules(int clear_all);*/ /* Clear user modules */ void bpy_text_filename_get(char *fn, struct Text *text); @@ -60,4 +56,4 @@ extern PyMethodDef bpy_reload_meth; struct Main *bpy_import_main_get(void); void bpy_import_main_set(struct Main *maggie); -#endif /* EXPP_bpy_import_h */ +#endif /* BPY_INTERNAL_IMPORT_H */ diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 3ff0d86b433..47b4c114944 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -23,13 +23,12 @@ * ***** END GPL LICENSE BLOCK ***** */ - - /* grr, python redefines */ #ifdef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE #endif +#include #include "bpy.h" #include "bpy_rna.h" diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 3ffef0db803..b0e631babda 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -36,6 +36,16 @@ #ifndef DISABLE_PYTHON +#ifdef _POSIX_C_SOURCE +#undef _POSIX_C_SOURCE +#endif + +#ifdef _XOPEN_SOURCE +#undef _XOPEN_SOURCE +#endif + +#include + extern "C" { #include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */ #include "py_capi_utils.h" From a49d1c20f1804eae46ee2f60c82114363b47e3ea Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 06:41:48 +0000 Subject: [PATCH 032/163] Convenience defines SEP and ALTSEP (python has these), move BLI_*_slash function into path_util.h since these are not fileops. --- source/blender/blenlib/BLI_fileops.h | 4 - source/blender/blenlib/BLI_path_util.h | 13 +++ source/blender/blenlib/intern/fileops.c | 62 ------------ source/blender/blenlib/intern/path_util.c | 99 +++++++++++++------ source/blender/editors/space_file/filesel.c | 1 + .../python/generic/bpy_internal_import.c | 1 - 6 files changed, 85 insertions(+), 95 deletions(-) diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h index b721a21b1b9..552de7b170c 100644 --- a/source/blender/blenlib/BLI_fileops.h +++ b/source/blender/blenlib/BLI_fileops.h @@ -54,10 +54,6 @@ int BLI_gzip(char *from, char *to); int BLI_delete(char *file, int dir, int recursive); int BLI_move(char *file, char *to); int BLI_touch(const char *file); -char *BLI_last_slash(const char *string); -int BLI_add_slash(char *string); -void BLI_del_slash(char *string); -char *first_slash(char *string); /* only for the sane unix world: direct calls to system functions :( */ #ifndef WIN32 diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h index b9a4468fe57..5dbb137ec07 100644 --- a/source/blender/blenlib/BLI_path_util.h +++ b/source/blender/blenlib/BLI_path_util.h @@ -88,6 +88,14 @@ char *BLI_get_user_folder_notest(int folder_id, char *subfolder); #define BLENDER_SYSTEM_FORMAT "%s/blender/%s" #endif +#ifdef WIN32 +#define SEP '\\' +#define ALTSEP '/' +#else +#define SEP '/' +#define ALTSEP '\\' +#endif + void BLI_setenv(const char *env, const char *val); void BLI_setenv_if_new(const char *env, const char* val); @@ -98,6 +106,11 @@ void BLI_split_dirfile(const char *string, char *dir, char *file); void BLI_join_dirfile(char *string, const char *dir, const char *file); char *BLI_path_basename(char *path); int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char *base_dir, const char *src_dir, const char *dest_dir); +char *BLI_last_slash(const char *string); +int BLI_add_slash(char *string); +void BLI_del_slash(char *string); +char *BLI_first_slash(char *string); + void BLI_getlastdir(const char* dir, char *last, int maxlen); int BLI_testextensie(const char *str, const char *ext); int BLI_testextensie_array(const char *str, const char **ext_array); diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 06b427240ba..180cfdbbc5a 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -53,68 +53,6 @@ #include "BLO_sys_types.h" // for intptr_t support -/* implementations: */ -char *first_slash(char *string) { - char *ffslash, *fbslash; - - ffslash= strchr(string, '/'); - fbslash= strchr(string, '\\'); - - if (!ffslash) return fbslash; - else if (!fbslash) return ffslash; - - if ((intptr_t)ffslash < (intptr_t)fbslash) return ffslash; - else return fbslash; -} - -char *BLI_last_slash(const char *string) { - char *lfslash, *lbslash; - - lfslash= strrchr(string, '/'); - lbslash= strrchr(string, '\\'); - - if (!lfslash) return lbslash; - else if (!lbslash) return lfslash; - - if ((intptr_t)lfslash < (intptr_t)lbslash) return lbslash; - else return lfslash; -} - -/* adds a slash if there isnt one there already */ -int BLI_add_slash(char *string) { - int len = strlen(string); -#ifdef WIN32 - if (len==0 || string[len-1]!='\\') { - string[len] = '\\'; - string[len+1] = '\0'; - return len+1; - } -#else - if (len==0 || string[len-1]!='/') { - string[len] = '/'; - string[len+1] = '\0'; - return len+1; - } -#endif - return len; -} - -/* removes a slash if there is one */ -void BLI_del_slash(char *string) { - int len = strlen(string); - while (len) { -#ifdef WIN32 - if (string[len-1]=='\\') { -#else - if (string[len-1]=='/') { -#endif - string[len-1] = '\0'; - len--; - } else { - break; - } - } -} /* gzip the file in from and write it to "to". return -1 if zlib fails, -2 if the originating file does not exist diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index 61b525d50af..8a6f6205eac 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -471,11 +471,7 @@ int BLI_has_parent(char *path) int BLI_parent_dir(char *path) { -#ifdef WIN32 - static char *parent_dir="..\\"; -#else - static char *parent_dir="../"; -#endif + static char parent_dir[]= {'.', '.', SEP, '\0'}; /* "../" or "..\\" */ char tmp[FILE_MAXDIR+FILE_MAXFILE+4]; BLI_strncpy(tmp, path, sizeof(tmp)-4); BLI_add_slash(tmp); @@ -1143,42 +1139,28 @@ void BLI_char_switch(char *string, char from, char to) void BLI_make_exist(char *dir) { int a; - #ifdef WIN32 - BLI_char_switch(dir, '/', '\\'); - #else - BLI_char_switch(dir, '\\', '/'); - #endif - + BLI_char_switch(dir, ALTSEP, SEP); + a = strlen(dir); - -#ifdef WIN32 + while(BLI_is_dir(dir) == 0){ a --; - while(dir[a] != '\\'){ + while(dir[a] != SEP){ a--; if (a <= 0) break; } - if (a >= 0) dir[a+1] = 0; + if (a >= 0) { + dir[a+1] = '\0'; + } else { - /* defaulting to drive (usually 'C:') of Windows installation */ +#ifdef WIN32 get_default_root(dir); - break; - } - } #else - while(BLI_is_dir(dir) == 0){ - a --; - while(dir[a] != '/'){ - a--; - if (a <= 0) break; - } - if (a >= 0) dir[a+1] = 0; - else { strcpy(dir,"/"); +#endif break; } } -#endif } void BLI_make_existing_file(char *name) @@ -1495,6 +1477,67 @@ int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char return 1; } +char *BLI_first_slash(char *string) { + char *ffslash, *fbslash; + + ffslash= strchr(string, '/'); + fbslash= strchr(string, '\\'); + + if (!ffslash) return fbslash; + else if (!fbslash) return ffslash; + + if ((intptr_t)ffslash < (intptr_t)fbslash) return ffslash; + else return fbslash; +} + +char *BLI_last_slash(const char *string) { + char *lfslash, *lbslash; + + lfslash= strrchr(string, '/'); + lbslash= strrchr(string, '\\'); + + if (!lfslash) return lbslash; + else if (!lbslash) return lfslash; + + if ((intptr_t)lfslash < (intptr_t)lbslash) return lbslash; + else return lfslash; +} + +/* adds a slash if there isnt one there already */ +int BLI_add_slash(char *string) { + int len = strlen(string); +#ifdef WIN32 + if (len==0 || string[len-1]!='\\') { + string[len] = '\\'; + string[len+1] = '\0'; + return len+1; + } +#else + if (len==0 || string[len-1]!='/') { + string[len] = '/'; + string[len+1] = '\0'; + return len+1; + } +#endif + return len; +} + +/* removes a slash if there is one */ +void BLI_del_slash(char *string) { + int len = strlen(string); + while (len) { +#ifdef WIN32 + if (string[len-1]=='\\') { +#else + if (string[len-1]=='/') { +#endif + string[len-1] = '\0'; + len--; + } else { + break; + } + } +} static int add_win32_extension(char *name) { diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 8ad3ef08e85..6442cfbb4eb 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -59,6 +59,7 @@ #include "BLI_blenlib.h" #include "BLI_linklist.h" +#include "BLI_path_util.h" #include "BLI_storage_types.h" #include "BLI_dynstr.h" diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c index 643ee1e143f..dae0da82dbd 100644 --- a/source/blender/python/generic/bpy_internal_import.c +++ b/source/blender/python/generic/bpy_internal_import.c @@ -29,7 +29,6 @@ #include #include "compile.h" /* for the PyCodeObject */ #include "eval.h" /* for PyEval_EvalCode */ -#include "osdefs.h" /* for 'SEP' */ #include "bpy_internal_import.h" From defc47bcb923984f27f9e2b72db16ac1f8a7c46a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 08:55:13 +0000 Subject: [PATCH 033/163] recent fix r32626 for [#24339] wasnt correctly clamping the depth rectangle, crashing with grease pencil in some cases. --- .../editors/space_view3d/view3d_draw.c | 27 +++++++++++-------- .../editors/space_view3d/view3d_edit.c | 6 ++--- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 0421fdadb7b..4c153c2d0c1 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1573,22 +1573,27 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) { int x, y, w, h; + rcti r= {0, ar->winx-1, 0, ar->winy-1}; /* clamp rect by area */ - + /* Constrain rect to depth bounds */ - if (rect->xmin < 0) rect->xmin = 0; - if (rect->ymin < 0) rect->ymin = 0; - if (rect->xmax >= ar->winx) rect->xmax = ar->winx-1; - if (rect->ymax >= ar->winy) rect->ymax = ar->winy-1; + BLI_isect_rcti(&r, rect, rect); /* assign values to compare with the ViewDepths */ - x= ar->winrct.xmin + rect->xmin; - y= ar->winrct.ymin + rect->ymin; + x= rect->xmin; + y= rect->ymin; w= rect->xmax - rect->xmin; h= rect->ymax - rect->ymin; - if( d->w != w || + if(w <= 0 || h <= 0) { + if(d->depths) + MEM_freeN(d->depths); + d->depths= NULL; + + d->damaged= FALSE; + } + else if( d->w != w || d->h != h || d->x != x || d->y != y || @@ -1604,13 +1609,13 @@ void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) d->depths= MEM_mallocN(sizeof(float)*d->w*d->h,"View depths Subset"); - d->damaged= 1; + d->damaged= TRUE; } if(d->damaged) { glReadPixels(ar->winrct.xmin+d->x,ar->winrct.ymin+d->y, d->w,d->h, GL_DEPTH_COMPONENT,GL_FLOAT, d->depths); glGetDoublev(GL_DEPTH_RANGE,d->depth_range); - d->damaged= 0; + d->damaged= FALSE; } } @@ -1655,7 +1660,7 @@ float view3d_depth_near(ViewDepths *d) const float *depths= d->depths; float depth= FLT_MAX; - int i= d->w * d->h; + int i= (int)d->w * (int)d->h; /* cast to avoid short overflow */ /* far is both the starting 'far' value * and the closest value found. */ diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index d3f977072c1..a70774f27ce 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2575,10 +2575,8 @@ static float view_autodist_depth_margin(ARegion *ar, short *mval, int margin) view3d_update_depths_rect(ar, &depth_temp, &rect); depth_close= view3d_depth_near(&depth_temp); - - MEM_freeN(depth_temp.depths); - - return depth_close; + if(depth_temp.depths) MEM_freeN(depth_temp.depths); + return depth_close; } /* XXX todo Zooms in on a border drawn by the user */ From 7b8db3fab7bc6c7f2d5c53796f7311b6df216406 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 10:36:22 +0000 Subject: [PATCH 034/163] [#24414] Render hanging on small render border. large render sizes could cause an the threaded tile processor to hang because winx * winy wrapped into a negative value. also convert winx/winy to floats before multiplying for vector passs. --- source/blender/render/intern/include/render_types.h | 3 ++- .../blender/render/intern/source/convertblender.c | 6 +++--- source/blender/render/intern/source/pipeline.c | 13 +++++++------ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index b124102f50b..d3f52a5a911 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -131,7 +131,8 @@ struct Render ThreadRWMutex resultmutex; /* window size, display rect, viewplane */ - int winx, winy; + int winx, winy; /* buffer width and height with percentage applied + * without border & crop. convert to long before multiplying together to avoid overflow. */ rcti disprect; /* part within winx winy */ rctf viewplane; /* mapped on winx winy */ float viewdx, viewdy; /* size of 1 pixel */ diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index e70287e522e..50e52bfe2f7 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -5186,7 +5186,7 @@ static void calculate_speedvector(float *vectors, int step, float winsq, float w static float *calculate_strandsurface_speedvectors(Render *re, ObjectInstanceRen *obi, StrandSurface *mesh) { - float winsq= re->winx*re->winy, winroot= sqrt(winsq), (*winspeed)[4]; + float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq), (*winspeed)[4]; /* int's can wrap on large images */ float ho[4], prevho[4], nextho[4], winmat[4][4], vec[2]; int a; @@ -5225,7 +5225,7 @@ static void calculate_speedvectors(Render *re, ObjectInstanceRen *obi, float *ve StrandSurface *mesh= NULL; float *speed, (*winspeed)[4]=NULL, ho[4], winmat[4][4]; float *co1, *co2, *co3, *co4, w[4]; - float winsq= re->winx*re->winy, winroot= sqrt(winsq); + float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq); /* int's can wrap on large images */ int a, *face, *index; if(obi->flag & R_TRANSFORMED) @@ -5292,7 +5292,7 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float * VertRen *ver= NULL; float *speed, div, zco[2], avgvel[4] = {0.0, 0.0, 0.0, 0.0}; float zmulx= re->winx/2, zmuly= re->winy/2, len; - float winsq= re->winx*re->winy, winroot= sqrt(winsq); + float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq); /* int's can wrap on large images */ int a, j; float hoco[4], ho[4], fsvec[4], camco[4]; float mat[4][4], winmat[4][4]; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index ca9aef24803..68b6a04035e 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1537,8 +1537,10 @@ static RenderPart *find_next_pano_slice(Render *re, int *minx, rctf *viewplane) static RenderPart *find_next_part(Render *re, int minx) { RenderPart *pa, *best= NULL; - int centx=re->winx/2, centy=re->winy/2, tot=1; - int mindist, distx, disty; + + /* long long int's needed because of overflow [#24414] */ + long long int centx=re->winx/2, centy=re->winy/2, tot=1; + long long int mindist= (long long int)re->winx * (long long int)re->winy; /* find center of rendered parts, image center counts for 1 too */ for(pa= re->parts.first; pa; pa= pa->next) { @@ -1552,12 +1554,11 @@ static RenderPart *find_next_part(Render *re, int minx) centy/=tot; /* closest of the non-rendering parts */ - mindist= re->winx*re->winy; for(pa= re->parts.first; pa; pa= pa->next) { if(pa->ready==0 && pa->nr==0) { - distx= centx - (pa->disprect.xmin+pa->disprect.xmax)/2; - disty= centy - (pa->disprect.ymin+pa->disprect.ymax)/2; - distx= (int)sqrt(distx*distx + disty*disty); + long long int distx= centx - (pa->disprect.xmin+pa->disprect.xmax)/2; + long long int disty= centy - (pa->disprect.ymin+pa->disprect.ymax)/2; + distx= (long long int)sqrt(distx*distx + disty*disty); if(distxr.mode & R_PANORAMA) { if(pa->disprect.xmin==minx) { From 2f0f25741063b236853e606952658261ec480daf Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Wed, 27 Oct 2010 10:45:36 +0000 Subject: [PATCH 035/163] Revert /WX here until fix in Blender.py is done. --- source/blender/blenloader/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenloader/SConscript b/source/blender/blenloader/SConscript index bab08c89b57..87cfc47b4de 100644 --- a/source/blender/blenloader/SConscript +++ b/source/blender/blenloader/SConscript @@ -12,6 +12,6 @@ incs += ' ' + env['BF_ZLIB_INC'] defs = [] if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): - env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30], cc_compileflags=['/WX'] ) + env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30]) #, cc_compileflags=['/WX'] ) else: env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30] ) From d666b4fae57b5b395e48e043c2a4bb4b4ecf8723 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 11:05:46 +0000 Subject: [PATCH 036/163] fix for shift offset in own recent commit for drawing the camera border in camera view. --- source/blender/editors/space_view3d/view3d_view.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index aac03d97022..6cbce905f33 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1022,9 +1022,15 @@ int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi, float dx= 0.5*fac*rv3d->camdx*(x2-x1); float dy= 0.5*fac*rv3d->camdy*(y2-y1); - /* shify offset */ - dx += ((cam->shiftx/10.0f) / cam->lens) * 32.0; - dy += ((cam->shifty/10.0f) / cam->lens) * 32.0; + /* shift offset */ + if(cam->type==CAM_ORTHO) { + dx += cam->shiftx * cam->ortho_scale; + dy += cam->shifty * cam->ortho_scale; + } + else { + dx += cam->shiftx * (cam->clipsta / cam->lens) * 32.0; + dy += cam->shifty * (cam->clipsta / cam->lens) * 32.0; + } x1+= dx; x2+= dx; From a213dc2679a5bfc2905a2bedc7413606166253ee Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Wed, 27 Oct 2010 11:33:04 +0000 Subject: [PATCH 037/163] Commit new splash and bump version. Ready for tagging! --- release/VERSION | 2 +- release/datafiles/splash.png | Bin 218043 -> 174539 bytes source/blender/blenkernel/BKE_blender.h | 2 +- source/blender/editors/datafiles/splash.png.c | 12271 +++++++--------- 4 files changed, 5458 insertions(+), 6817 deletions(-) diff --git a/release/VERSION b/release/VERSION index 6020b0f868b..104a379ad75 100644 --- a/release/VERSION +++ b/release/VERSION @@ -1 +1 @@ -2.54-beta +2.55-beta diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png index 36ebb154ca933fd071a80f547ba78e61a03aca02..faedd4b19f1d1baa7e567c0b93588e7a1f2f7a13 100644 GIT binary patch delta 173198 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%0AS= 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⪙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

Tei*$c^c^9=IE)NkX6zNiCXxq#&-!Yh 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 =$O0FJ|nUWN?VSyy79qGbilZHBK(2?4*>s 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

g>w# z;_v_6zt3=FXbmnxc#7Zn?f3cjhZ8&z;HwBBAn+nCoV&=4cWyDAOz3oa93GBXN=rI@ z-`Q&rPt`Y^IPE^gZD60#p&u(%-RXJpkTnw}ElxPBHIDMNa3Grtl$0cpJ~r?O+g<9) zu(Gnox%1~)UR&jraltpf{eK=e-+zbNz$-7k%BYeoZ=59z6nooS+`V_7y}bkSvSc(( zQJzQS`IN@NL_#U?q)({}=kKk3b`SR%PHHj(=gu$V`E7hZCY>H3Lqnkx%6d#?M&!i~ zfimc0LU9kB8KT=_KXGox8mLX~pR?XZh@#Z*c$49n$H9VVaO-BQSz)r%S8rLTZlE zl%yDP>HI~`ojpxm7k^GDSCtNi5(XG;34EVno>S!+VGs}+ixrZ?;SqV3GM*HyET1LI zYrgaDw>cW^bN=iq2*I9F{DYtW8oOD|#A=X&Wg(enHBkV2H}3QLn?Hb(9y_~7EU%p< z_F|M7xem5LWMTxqwM0_jVeqWLm$rern0ef)r(EHVLuVHaLw`3)_x2z^h}Zq3!xNvF%zsIe)!ANyBl@2xDrjsi>=xA}h($ zoT{i?-i8oJPdWQqE5r-j;YE4Qmu_Zjr{=IIth2<;tkT9h^8QSqSZn<>^}BthFI{{L zp7jrcIQQLl+4J9%gk{y`?5Pzt@7{)KMq7m(?Cmod9)ht*p}<=1 zKiJ~JpZ+m!zV~$m6-AoTX?4l6obFQG+-T%8<9}4=#a-AFc9G{5^tn=Xu@hG_po5&p z3NFSV&c^Ta@tmA>K$5_dND*_ex6AF@cj4AOzV+>Q`Qi`$AXT2Sw$x?tJ)h;)M;|aL z;q_`Gf7LL_7at@xPJQqK^T)v5{%iy7nadsK~)tT9NwebZ8I7r zRF%N<1-drezO&8hpv_>pO;z=IaQ6Y1FMpgTog`ejcm)}GWV+&m_uglJXNQ%g0cTFF zQ)DSgI^}REs4GiS)STTo!-cC?_||(Lar2}1vD%`W(XGpI-zD?}QRvfZwEb z7a@e>Bxu8fhY#_kLU|oNx^|PjgMB9BJ>knfLRQb6WqW=dCKhk}kMTR~qLJ+xfmUuZ;JEs_ zEUC(ZBF!kWoVu##I9TOL!Z;+1BK)x7{(EXJ9G;VKjI%3>N;o2?R7mN$SA>vg1C`b; zPyJZn^!&a0C#AQ2x4)h>f`5Pfv?a^-eoIAhH+JDLlN_ozbm;uG$?lIJPCvlqCzoA9&0{w~(Qt1n&PAN|w+FMsWS{gYh# zxqrcHYZ0L-kfF!XoqK%dg|iHg_9%SGTDQ#^UyvC=r8Sj+$O<|_&@vE7i&Wr+0zZ;#a@w#+sj1Q0DY<76 zun0jE#rVF@_U2|2mZEuZ=Qe{ukK4CzF&rLn`qUbAT`-x95JDkUz`f0fE>g4=bMN{! z){c(2Tz|jF*|60J;cAMiqN+4iWzn_k&}%)TWD56lDYv?qk=bU4@_A=I(;YO*eRs&2 zdEQNPfD&NkQw!r0yT9kujVE^MPiTUed;X0v?l5QUT>oQ*Y}OBA=2dJ$t{yMuJds>? z3{4Y_xOl-e)OgbCvZTy1veZGPtajo!;rYa^kbhRYMHEK_q3hPA@*2hc@x2q{RPxky zV-?htRY_hHZlY3E6lHzfsh=#MPZ>==WHR;B`TS)xp|+x-7Qvnf>ReS zaP!^{VW-RB)COUc#dD9Q=7QS2XNoNuqNb2uW+EeA(AQoF!e$K|V6DT!;Ym5XTW&p0m5N%}Xy_ z;iVU^;58Jsy4FmRl)e2!cDHvpbLI?1p3w?hOr}GsTF@ITQ`!t$A5vEtleFf){n@WG zEgb#r{aZKr8~^EFlDJy~D*5M-#rbE`21}u4kSbzEqry0UR zTSz)cVyp2jC?BK`Dv$(`M;HYJLD*Q?+;!+Toq7G z7sPQ-7M144(uAL2Y~w4gor}g3Sc6k-H$qdbYhHizbw2pueeT@3Pq*74ieiEwpe}Nk zSJ3KV4bIM)PU&{L=-S<{rhn4}&mXe1JY{cxpS*BT6Xi?7DCFL~JM?=!dc7X|`}J6?I1G7x*3Tht8wi0ZxZT+ z6mus(_qa~-mvv?JnMYAVHY~{g~B;6rcbFT&sYzh$bVb6EEvX*)%EiZ zeICTJ*uWh(awl>*9v^5gmW9R4_U3&@j;kokf;@9?x^5m%AqYaBRy(HEZV|R(yfAR< zN+Hp+^?dWg8{>BKWl@l4IcbuTBq>E%y6H;g4u0M&jb^qckc%gS1-83vEKtYO2r&;& zI8g*o6!*s;4spV!_J2t`{6$3G$BkdqV;}oCc6R<;h#7I+joGm--ti=wePQ-4XLbVI ziMK&U3TxR|U*~9)(27Ie{^swnyt2yH_7-`WVw7cnyv?a(74T42A*+n>!7U==_75iUIvw&PCx7q-p%R=wx5|sJT;b{q7idKR zQfvIi)>3QDa5CX=I3g)4@-(AkGv0h;^%(zLvHPl7}bhA4OmhYt#Qh| zJNGHAWaI2bcJ~hX+OPZ?r`DF~Ee#kYDGxTcIT%k_+c@LYwzeXjjJf*aOSE5lnZw}$ zT6lO8s(;$0Z52gHndcxBLVDo0nAUw&m30o+usB7(zuu{;m5L<&U3}FCa8-fr* zUoP0!JiI_5J=r+Nq#J80(b&^ubFWy437(PY=6~=SH?>o^>)YK9n)I$_e?GHH8|$*& zg|SFoHOLU_Qo@9FcNw9Ytap$`;$!%cANdjf>3{z};0G~MC^Qgt6jB7lVGAKFolb}` znySvIN<&rTpbbYyV|I4;_`WZEf#GCKyWQdCSFfOpnuiY_;(OqElCAA6z{lvCJNNIC z*?)kry-ZdI_&VbL?h*Y`FfcKr$s?2!tgf$sHfSnzvx@UP*@UqunCTYguWuJoI$O0N z76Cvsg0E(eZ7R?fiJpT3=ZR{w`}izBq?w!`1y%}-6nHphzMDwfCt40+k8RQOhIFCX zpC@+81OD}S4>FOG4u^S!^D*f@b)Nu5`eX-Qtzlv-nj zbu5I)!;b@G;30zm;khQkG`X-d5}wvI##B^UPL(ATNjir*RW(!%SKn9O?~N$;apUrj z1H&ATt$uH#`)85qp0_6WxQI~kl&0P;KB-URSqVo%(sj*bJYu=m=kCKzmRHwEl7A_O zhx?R8MwX@Q9~@9t?ukyaDOHuz>n_o5x0y_a>>q67g$fl&zWU2Q$KESfNe}mF)fIpD zZ~aYLt&qL#eI!0V`;Y$#r%tW&#tT>3o)lzJjFPBj1Mc58pEUb{9jPL)n?)^E>$A8mSB(rW@G`PgsLCsSFPc>98C5e2^Ehn9*n7k|%Utg{D2 zVMw>zq1#im!ZvZ>6Gba1&xz3Xw+~SUE?zlDZY+VP7;k4xL`EHk><_23q~OYhRbG1W zD$8rDh_KD>C}H<-$esI-*xcS{I7&&23R7#&oKQJa*Ic@KmHygkcJ>Z1 zM&tV)NuHBRc=+HxXU?7>P>O3GeMsm@rjs#C{Uz$EVmcmE8(3OCV(rvf%G#1oNBC_Y zTTfBtlr)93)!|>hdy_=xD4`u)RM8@=c z{D69z(2)X9KwB6>0lp7WR}r^ds#Op)Ui8L_<~KX^Stsc!Ik&4x#oR_Y6ZVREOtNEr z9~XCd!os%re&aB5U8b?18<@)+yy(PdZa40VovCM;5Uq~}03K@gB;DW}e!;mny0k~Bdo4`C&L@h|>GZr!@h z?YlRqj3v(tr106T(urBE+#+R$8o-ZaQZTMmMVUCLi5cIU8^+?0>6Iw7~Pj)QqWNrEGXv z;wfYB=j(v%<1PO&TkGi@l!m4^cl^vy*mI6Oa|;~{;y$Bm>Z+tF9U(Bya%!y`DT11l z0;4D*2waCQ5Y4q@=G4c!b{dDO%E{A=beb?3Pnk@U#&P1NG)^e$e|JUwlN9DpQrv&9 zKJwoSa`vgZfPdM(h@ z45QJATeog;>xL5|-FtYC?|kzcR9Qw@<=nkHqMUAX`P3^qSz! zH{YZ#3w9npVrOfMI?svy08bhwWx-)u;QJv*dB!wNDVi}`AO$Tiz%)Kl*+8@MvP5H< z)|LY)7=IsSyw>jF*P2>G?MVu4=*B+F%L6o)(PRR~vbr|FnwsT7k7SZi;!~C>o-!np zly)m-GEG=oUEXJ#35TeOdmm52phrIF{S9tMQIA_{%N&?juH zRG#k<20?>)m3R#uPBg;U*;v-us~T;QwI_&{qPgSC1%Q$`ZU>JU55mmvImT#a%X(cq z8=5B_1x+f^VR_??H`v|TV|!~CsedF@rHTBY$@3OeWr-ig>>Z5huk`R@cW{zk zK%N)u?QGLu>eB1=&<2XU#0bf!KK*I%B)|B}zl!oY>~8I|KP*vIj%pi@CQ~FnUJ#K# z+Gae>7%UCwcG^sm6s)AxifMN`beCK+Q0uy}nz^02R5O>r@tW;8O>9ATAYAAU27lMF zBO17iXh^N%v4U&oYzrZp1DCLK`>mbnbnGWzA)c%S;$%jN{g^uNl($(SpA~q!z}>dS zp}=)nQ|2XEno(7*0MF`%yFUGS!($sx{oGdF2o@c|uc9mpvNUBnNf=M2BuP$HyU&rr zWe6yxKCY;X-&d#pw8&Q5*cl!##(z(Q%0DNW?YkA|J=JpXtOB(tx;QbufAV{pi^7zm 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 LNkvXXu0mjfyMDA2 diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 70badbc96e8..8f6d3451de2 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -44,7 +44,7 @@ struct ReportList; struct Scene; struct Main; -#define BLENDER_VERSION 254 +#define BLENDER_VERSION 255 #define BLENDER_SUBVERSION 0 #define BLENDER_MINVERSION 250 diff --git a/source/blender/editors/datafiles/splash.png.c b/source/blender/editors/datafiles/splash.png.c index de4fcb8f865..82a8d54b837 100644 --- a/source/blender/editors/datafiles/splash.png.c +++ b/source/blender/editors/datafiles/splash.png.c @@ -1,6820 +1,5461 @@ /* DataToC output of file */ -int datatoc_splash_png_size= 218043; +int datatoc_splash_png_size= 174539; char datatoc_splash_png[]= { -137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, - 0, 0, 8, 90,206, 70, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 10, 79,105, - 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, - 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33, -161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163, -136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53, -128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, - 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192, -116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, - 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, - 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11, -178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16, -231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97, -154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142, -182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6, -128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161, -144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190, -226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, - 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44, -251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193, -212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, - 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, - 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, - 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, - 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61, -114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, - 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192, -232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, - 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, - 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, - 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, - 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, - 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53, -143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105, -175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25, -155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, - 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125, -174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, - 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, - 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7, -227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150, -151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103, -143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152, -158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, - 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163, -213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, - 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, - 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214, -187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182, -125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180, -114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, - 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, - 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195, -200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183, -165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111, -158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191, -142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231, -152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26, -209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, - 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226, -157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, - 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, - 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32, -109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139, -183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137, -202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88, -230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174, -126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223, -181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169, -171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245, -246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, - 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213, -102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182, -215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35, -112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70, -155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218, -233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116, -225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254, -147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255, -214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, - 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254, -145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, - 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25, -175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255, -104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0, -122, 37, 0, 0,128,131, 0, 0,249,255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23,111,146, 95, -197, 70, 0, 3, 72,230, 73, 68, 65, 84,120,218,236,253,121,152,109,217, 89,222, 9,254,214, 90,123, 56,251, 76, 49, 71,220, 49, -103, 73, 41, 52, 66, 74,128,177,193,137,157, 52, 5, 24, 99, 99,167,120,112,151,241,227, 1,169,202,213, 3,174,110, 36,185,203, -213,118, 85, 25,131,178,236,198,116,217, 84,145, 6,187, 41,219,101,140,192,216,198, 54, 96, 37, 34, 65, 18,160, 33, 65,179,114, -188,202,241,222, 27,115,196, 25,247,176,134,254, 99,173,125,134,184,113,111, 14,202, 76, 33,113,190,124, 78,198,141,136, 19,231, -236,125,246,218,235,253,134,247,123, 63,225,156, 99, 97, 11, 91,216,194, 22,182,176,133,125,229,155, 92,124, 4, 11, 91,216,194, - 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, - 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 63, -240, 22, 93,239, 23, 66,136, 87,226,253,234, 23, 77,129,155,164, 68, 90,203,211,192, 40,252,238,101,235,175, 91,180,234, 45,108, - 97, 11, 91,216,194, 22,160,254,202,153, 0,132,148,226,182,191,249,231,222,252,119,239,253,134, 91,255, 68, 20, 9,245,239, 63, -241,212,135,255,206,207,125,242,127, 44,181,125,232,229, 6,246,133, 45,108, 97, 11, 91,216,194,254, 48,153,184, 94, 68,251, 10, - 68,234, 2, 72,254,155,239,124,221,255,242,143,190,255,141, 63,232, 14,135,208, 89, 66,108,172,242, 27,159,124,234,210, 15,254, -227, 15,253,205, 39,174,244,127, 9,208,117,176,189,136,212, 23,182,176,133, 45,108, 97, 11,123,225,246,106,214,212, 5,144,102, -213,176,195,149, 39, 25, 95,121,134,209,227, 95, 96,244,232, 99,124,235, 27, 46,220,246, 91, 63,250, 61, 63,251, 93,111,191,248, -183,128,149, 0,232, 98,113,121, 22,182,176,133, 45,108, 97, 11,251,131, 9,234, 0,226,199,127,253,217,159,254,199, 31,223,251, -100,115,165, 65,164, 4,118,247, 10,163,135, 63,199,217, 44,110,252,251,255,254, 79,253,191,255,187,239,123,235, 63, 17,130,215, - 44,128,125, 97, 11, 91,216,194, 22,182,176, 23, 9,178,175,114,250,189, 1, 44, 3,111,248,175,254,216,230, 15,253,131,239,188, -240, 93,169,134,113, 81, 33,211, 6,209,205,119,144,108,110,240, 75, 31,126,248, 51,127,253, 39, 63,244,158,171,135,227,255, 12, - 88, 94, 66, 42,126,145,126, 95,216,194, 22,182,176,133, 45, 64,253,149, 3,245, 89, 96, 95, 2, 46,252,177, 59, 58,127,233, 95, -124,255,109,127,237,230, 44,106,140, 70, 21, 40,133, 60,119, 11,141,139, 23,121,226,242,126,239, 93,255,232,193, 31,253,245, 79, - 62,247,147, 64,191,198,234,151, 3,212, 95,161,115,195, 57,119, 23,190,124, 0,112, 73, 8,113,233,171,121,241,252, 97, 59,223, -133,125,213,172,219,197,135,176,176, 5,168,191,204, 38,129, 46,176,117,166, 27,253,233,127,253,151,110,255,111,255,216,153,214, -153,124,108, 0,139,216,186, 64,118,211,173,148,206,242,255,252,103, 31,249,223,255,151,127,247,153,191, 5, 60,195,139, 96,199, - 63,207,141,123, 91,120,188, 16, 59, 20, 66, 60,244, 2,223,243, 3,192, 61,225,219,247, 10, 33,222,247, 85,190, 57,126, 85,156, -111,112, 78,238, 9, 14,202, 93, 51,191,122, 8,184, 4,188, 95, 8,113,248, 50,188,207,201,215,231,229, 94,131,215,188,231,125, -119,191,184,181,254,238, 7, 31,226,171,220, 22,160,190,176,175,102,123,169, 45,109, 18,159, 22,239,172,181,227, 55,173,181,162, - 53,235,166, 94,128, 8,255, 19, 66, 8, 87,255, 68,212, 63,159,252, 54, 2,154,149,113,227,191,241,159,118,126,245, 31,254,153, -139,127,230,155, 54, 91,203,101,229,224,112,159,188,217, 38, 94,219,226,255,251,174,187,127,224,174, 59,182, 94,247, 67, 63,245, - 91, 63,124, 52, 40, 63,204,203,211,246,118, 47,240, 99, 47,114, 19,120, 63,240,128, 16,226,254,197,178,249,170,201, 50,220, 27, - 30,215, 3,189,218, 97,249, 41,231,220,253,193,113,249, 82,192,253, 46,224, 3, 47,225,239, 30, 0,190,237, 85, 89,235,247,221, - 61, 93,235,239,126,240, 85, 91,235,238,190,187,231,179, 62,239,126,112,145,245, 89,216,194, 94, 37, 80, 23,128,104,165,234,174, -191,251, 29, 55,255,189,239,127,203,230,221, 75, 89,156, 88, 33, 61, 96, 75,233, 31, 66, 32, 34, 53,247, 61, 82, 34,148,154,126, - 47,252,239, 44,194, 85, 78, 88, 29, 69,200,153,215,209,166,194,142, 5,127,233,219,222,248, 13, 95,123,199,198, 47,254,213, 31, -127,224,111,127,226,209,221,127, 6, 20,188,250,253,236,247, 2,247, 58,231,238, 5,222,241,114, 68,110, 11,251,178,218, 39, 94, -228,243,223, 9,220,227,156,123,199, 75,141,154,191,130,204,175,245,251,238,246,107,253,221, 15,190, 26,107,253,199,102,156,168, -247, 2,239, 91, 44,209,133, 45,236,213,139,212, 55,238,251,238, 91,127,252,175,127,211,249,111, 46, 71, 22,103, 5, 74, 10, 31, -192, 59,225, 31, 72,132, 21, 30,122, 29, 32,133,143,237,173, 3, 21,210,251,210,255, 78, 9, 33, 34, 41,212, 36, 45, 38,234,191, -115, 88, 33, 40, 70, 37,111,190,121,115,227, 3,127,239,123,255,209, 95,255,201,223,120,205,191,250,224,163, 63, 10,236,242,242, -137,213, 60,112,131,223,221,115,202,247, 31,112,206,125,219, 2,216,191,106,236,161, 16,157, 62, 36,132,120, 32, 68,242, 43,225, - 90,191,115,102, 13,220, 6,252,188,115,238,109, 47,211,181,191, 31,159,222,127, 62,123, 57,215,217,139, 95,235,247,221,253,109, -175, 18,176, 47,108, 97, 11,251,114, 68,234,105, 44,111,251, 83,175, 95,121,187, 27, 86, 84,121, 1,214,122,144,158,100,214,235, -120, 94, 76,113, 87, 73,228,218,102, 0,119,139,144,128, 13, 89,124, 1, 19,132,151,214, 3,191,148, 96, 0,229, 95,162, 44, 42, -150,146, 68,254, 31,239,254,206,191,241,246,215,157,121,211,223,252,233,143,188,187,168,204, 39, 95, 14, 96, 23, 66,220, 48,181, - 25,162,243, 31, 99,154,166,189, 43,108,246,139,104,226, 43,219,238, 7,238, 63, 45,242, 14,160,253,126,224,253,206,185,159, 10, -215,187, 6,246,151,235,218,191,191,118, 34, 94, 45, 19,239,126,240,198,107,221, 71,231,139,181,190,176,133,125,133,218, 75,233, - 83, 87,101,101,247,127,238,211,187, 31, 21,178,160,149, 24, 90, 25, 52, 27, 46, 60,236,244,223,169,165, 33, 75, 48, 21, 34,109, -122,144,183, 22,172, 61, 65, 86, 41,193,230, 96,199,224,114,160,240,223,187, 50, 60,223,225,156,165, 50, 22, 93, 24,254,198,159, -123,251, 61, 31,184,239,207,253,219, 91,182,186,223, 27, 96,255, 21,237,183, 23, 66,188, 31, 95,211,156,141, 86,238, 93, 44,159, -175,104,251, 54, 33,196,187, 94, 72, 42, 93, 8,241,174, 19, 17,245,123,190, 90, 63, 20,241,238, 7, 23,107,125, 97, 11,251, 67, - 22,169,227, 96,255, 61,255,238,201,191,253,159, 62,187,247,189,175, 63,147,221, 44, 64, 90,231,108,216, 22,176,206, 67,246,168, -180,242,107,111,234,124,205, 15,126,203, 29,183, 53,162,134,180,214,130, 82, 62,182,182, 22, 87, 14, 16, 74, 32, 47,190, 5,185, -113, 7,162,123, 6,209,232,130, 46,176,195, 93, 92,255, 10,118,247, 81,208, 99, 16, 25, 14,131,113, 96, 7, 37,223,252,198,155, -110,250,181,251,254,220,207,252, 23,239,253, 55,234,139, 87,142,127,145, 41,121,239,149, 2,246, 75,206,185,247,207, 68,108,119, -189, 28,175,123, 10, 35,250,161,151,137,105, 61,203,122,126, 73,237,102, 47,199,107,188, 26,231,123,226, 56, 95,208,235,189,132, - 8,249,126,166,132,179, 21,231,220, 93, 95,173,181,117,241,238, 7, 47,185,251,238,126, 73,107,221,221,119,247,181,215,247, 85, - 72,221,159, 32,218,189,106,239,187,176,133,125, 53,128,186, 1,134,192, 23,126,243,137,193,143,255,230, 19,131, 44, 68,203, 39, -109,237, 59,222,188,249, 87,191,247,109,183,158,109,202, 68,106,235,124,234, 61,207,113,197, 16,204, 16,245,218,111, 38,122,219, - 95, 64,221,250,141,215, 77, 33,184,131, 39,209, 79,252, 58,230,169,143, 32, 84, 2,206,225, 4,148,163,146,215,158, 91, 91,250, -183,255,195,247,252,227, 63,249,195, 63,127,176,119,156,127,144, 87,126, 32,204,203,194,200, 13,192,246,206, 16, 1,221,117,202, -239, 47, 49, 77, 13, 31, 94,231, 53,126,108,230,111,223, 47,132,184,127,230,117,223,201, 9, 70,119,120,205,247,189, 16,246,190, -115,238,157, 33, 26,189,237,197, 30,215, 43,113,190, 55, 56,215,247,132,215,157,221,204,191, 20,166,248,141,236, 36,128,175,124, -149,239, 13, 47,120,173, 7, 32,191,254,245,189,239,238,233,245, 61, 1,180,238,190,187, 63,112,138,227,240, 78,119,223,221,247, - 92,231,237,222, 27,142,237,158,240,184,235,122, 78,199,141,222,119, 97, 11, 91,128,250,212, 44,144,227, 7,175,244,153, 84,189, - 39,146,174, 78, 8,190,230,125,127,254,181,127,231,135,239,190,229,110, 83, 66,105, 12,174, 42,112,249, 8,116, 1,145, 35,253, -206,191, 73,244,182,239,127,254,168, 97,245, 22,226,213,191,138, 60,243,102,244,199,127, 26,164,241,144, 47, 4,229,168,226,205, -175, 57,187,254,227,255,245,221,247,253,197, 31,251,213,239, 5,158,126,133, 65,125,118, 35,127, 73,155,132,115,238, 30,224,231, -159, 7, 20,110, 11, 81,225, 59,111,192,182,174,123,171, 1, 30, 8, 45, 90, 63,117,131,168,234, 54,124,107,214, 93, 33,157,124, - 61,240,253, 41,174,159,110,173,143,235, 94,231,220,183,189,138,231,123,218,185,126,224, 15, 1,176,126, 57,237, 5,173,245, 0, -190, 47,252,250,222,119,247, 59, 78,244,194,223,115,157,231,223,118,131,227,122, 39, 47,172, 77,175,126,223,247, 4,178,223, 67, -139,203,186,176, 5,168, 95,231, 94, 6,170,240, 96, 6,208,213,205,235,141,239,254,169,239,191,243,125,223,254,218,245,215, 20, - 99,139, 49, 21, 20, 99,208, 21, 8,135,136, 33,253,179, 63,138,122,227,119, 77, 94,172, 55, 46,248,181, 79, 62,201,175,125,234, - 73, 14, 6, 99, 98, 37,120,253,185, 85,254,244,219,238,224,235,110, 63,235, 95,248,226,219, 17, 73,135,234,195,255, 0,146,200, - 31,130, 20,232, 65,193,127,249, 39,223,248,181,255,226,215, 31,254,171,191,246,241, 39,127,132, 87,168,221, 45, 0,222,189, 39, - 34,194, 23,251, 26,247,134, 13,240,100, 4,248,192,204,198, 57, 27,237,220,198,148,105,255,208,243,108,192, 63, 63,179, 17,190, -127, 38,178,188,235,196,113,191,211, 57,119,233, 58, 66, 49, 63,118, 10,160,207,190,214,189, 51,145,209,207,127,153,206,119,229, - 4,160, 31,206, 28,223,109,175,224,189,114,207,243, 68,238, 95,202,186,122,217,203, 47, 95,210, 49,249,200,251,121,215,122, 32, -213,189,248,235, 59, 15,176, 15,204,172,211,149,153, 44,193,245, 50, 5,135,167,100, 20, 46,157, 56,198,219,194,245,186,109,118, -205,184,251,238,126,219,162,255,125, 97, 11, 80,127,126,171, 83,222, 75,223,241,198,213,191,113,255, 59, 94,247,238, 11,237, 44, - 27, 15, 13,206, 20, 80, 21,225,157, 20, 66, 15,137,255,232, 95,155, 3,244,223,125,236, 10, 63,252, 47, 63,196,165,189, 62,141, - 52, 38,142, 36,210,193,167,158, 57,224, 23,126,231, 97,190,251,109,183,243,223,223,251,205, 52,211, 24,185,117, 39,209, 27,223, -129,254,253,127, 6,157, 45,192,249, 34,186, 19,252, 15, 63,240, 77,127,237, 63,127,226,201, 95,112,142,207,226, 75, 4, 47, 55, -160,255,212, 9,208,184,255, 69,190,198,109,225, 53,102, 55,163,119,157, 82,219,125,223,137,232,182,126,239,183,221,224,229,223, - 51, 3,192,239, 58, 9, 10,225,189,127,126,102,115,125,143,115,110, 46,213, 29, 82,238,239, 60,177, 57,191,227, 68, 29,125,246, -216,238,249, 50,157,239,123,102, 94,239,189,129,196,120,242, 90,189, 18,118,239, 43, 0,188,167, 70,184,161, 28,241,126,124, 57, -226, 85, 5,161, 0,232,207,187,214,131, 82,221,181,215,247,221, 15, 94,123,125,231,163,249,185,235, 91,179,241, 67, 26,190, 94, - 83,247,139,119, 63,248,190,231,201, 14,188, 15,120,255,141,162,111,119,223,221,117, 68, 63,251,190,223,198,194, 22,182, 0,245, -231, 5,244, 91,127,232, 79,156,255,159,126,236, 59,110,249, 63, 71, 54, 98, 84, 84, 96, 74, 48,218,215,209, 5,224, 12, 98,253, - 34,209,215,255,192,228,143, 31,187,122,200, 15,252,227, 95, 99,103,172,105,182, 50, 42,165,136, 99, 69,162, 4,202, 37, 8,163, -249,197,143, 62,142,146,146,191,251, 23,238,246, 17,251, 29,223,138,121,228, 87,193, 12, 32,202, 64,128, 46, 43,190,246,246,205, - 51, 95,255,250, 51,223,254,209,207, 95,253, 2, 47,114, 8,140,115,238, 61,207, 19,161,157, 4,176,119,189, 4,162,213, 79,157, -136, 46,175,219,235, 44,132,120, 32,164,183,235,136,244, 46,231,220, 59,159,167, 30,254,128, 16,226, 29,215,121,189, 75,206,185, -247, 50, 85, 51,171,123,176,223,127, 10, 88,214, 27,244,169,125,248, 51,199,246,137, 47,227,249, 94,186,222,235,189, 18, 81,110, - 88, 31, 47,217,161,123,158, 12,203,105,118, 91,184, 30,239,113,206,189,172,242,187,238,190,187, 95,252, 90,191, 22,168, 79,191, -190,215,169, 91,139,119, 63,248,128,187,239,238,249,235,123,223,221,239,124,169,138,117, 55, 2,252, 19,207,187, 63,212,213,235, -117,127, 79,112, 70, 22,209,250,194, 22,160,126, 29, 64, 23,171,173,232, 79,254,228,189,183,255,253,239,123,243,250, 91,138, 28, - 10, 81,129,245,169,118, 98, 57,121,166,171, 74,162,215,126, 11,162,189, 62,121,129,247,254,203,143,240,216,179,199,176,212,230, -120,160, 65, 24,148,128,166, 18,172,183, 34, 86,178,136,165,165, 54,255,246, 99,143,113,247, 27,110,230,158,183,220, 10, 42, 66, -221,246, 45,232, 79,254, 44, 98,227, 22,112, 22, 43, 4, 73,150,240,125,119,191,238,158,143,126,254,234, 63, 5, 14,120,113, 41, -248, 23, 42,163,121, 63, 47,161,183,120, 70, 91,124,114,234,207, 7, 62, 66,136,135,130, 52,233,123,102, 54,220, 27,109,130,239, -122,158,215,123,192, 57,247, 16,243,169,208,250,248, 78, 74,165,190,239, 70,199, 55,115,108,239,252, 50,157,239,251, 94,173, 20, -117, 56,151, 31, 59, 17,165,191, 28,160, 94,235,202,207, 70,154,179, 26,244,147,181,233,156,187,237,122, 60,136,151, 96, 47,110, -173,159, 2,232,129,105, 62,127,125,159,135,136, 38,222,253,224, 67,238,190,187, 95,204,122,126, 89, 44, 56, 20,179,235,254, 94, - 22, 61,247, 11,251, 42,182,151,210,223, 93,147,226,218,223,124,123,231,191,253,200,127,243,134, 95,248,190,215,175,190,101, 52, - 50, 24,140, 7,116, 9, 40,129, 80, 2, 17, 9,132,146,136, 72, 32,207,189,113,242, 34, 95,220, 62,226, 87, 62,249, 52, 52, 51, -223,230, 38, 37, 40,133, 65,210, 47, 12, 95,220, 29,113,105,103, 68,229, 4, 86, 41,126,253, 51, 79, 77, 15, 96,253, 14,220,184, - 7,232,112, 52, 14,180,229,206, 11,171,183, 3,103,121,229,230,176,223, 27,162,200, 23,155,226,157,221, 0, 15, 95, 4, 40, 60, -112,226,189,175, 11, 16, 47, 48, 77,123, 61,130,210, 61, 39, 0,246,133, 28,223,251,191, 76,231,123,233,213,210,223, 15, 37,132, - 89,173,246,195,231,115,158,158,199, 14,241,236,237,219,133, 16,111, 19, 66,188, 67, 8,241,190,153,199, 59,132, 16,171,225, 57, -179, 32,249,206,224,120,189,154,118,111,136,168, 87,158,247,250,190,240,136,251,133,174,231,151,219,222,255, 2,178, 35, 11, 91, -216, 31,202, 72,189, 78,183,159,251, 43,223,184,241,119,126,242,187,111,254,193,216, 42, 70,165, 5,229,192, 89,132, 3, 97, 5, - 78,137,144,122,247,127, 34,162, 4,185,114,211,228,133,158,220,237, 49, 30, 85,208, 77,167,126, 66, 29, 91, 75, 9,206,113, 52, -168,168, 74,205,133,165,136,126, 94, 77, 15,162,179, 5, 40, 40, 70,136,172,131,195,129,214,220,186,213,217, 76, 19,117,166, 40, -205, 23, 94,228,121,189,247, 6,191,155, 37,221,172, 48,195,254,126, 17,209,226, 61,215, 1, 86, 94, 64,116, 61, 23, 53, 94,135, - 64,246, 66, 51, 7,151,110,112,142, 47,234,181, 78, 30,219,171,120,190,175, 10,131, 57, 56,110, 39,107,222,239,253, 82,122,211, -195,223,190, 16,177,155,247, 57,231, 30, 96,190,196,241, 99,207,227, 72,189,114,107,253, 90,153,216,151,118,125,125,212, 60, 23, -241,191, 28,140,244,144, 57,184, 17, 99,254,158, 19,217,144,133, 45,108, 1,234,117,244,219,105,168,111,250,159,191,235,194,125, -239,186,107,227,143,150, 37,228,177,151,124,117,198, 33, 42, 75,146, 72,142,141,177, 25, 82, 18,169, 73, 7,187, 0,112,122,242, - 98,155, 75, 77, 84, 18, 99, 44, 65, 47,222, 5, 80, 15, 95,157, 0, 37, 25,142, 42,158,202,115,210,183,204, 28,170, 51,224, 42, -208, 57,200, 46,194, 89,156,181,172,182,226,230, 82, 51, 89,217, 41,199, 47, 42, 3,241, 66,106,150,161,174,250, 30,166,227, 57, - 63,192,141,201,107, 92,103, 35,185, 45,140, 44,125, 41,182,114,131, 8,240, 75,177,151,180, 73,135,231,222,245, 42,159,239, 43, - 14,234, 1,208, 63,112,226, 60,222,245,106, 78,232, 11,229,136,247, 50, 77,151,223,230,156,187,247, 36, 49,240, 69,191,238, 11, -168, 71,135,186,251,141,214,250,252,245,157,246,154,191, 92,235,249,133, 0,121,221,218,246,158, 69,244,189,176,133,189, 56, 80, -175, 83,217,241,157, 91,141,191,240, 47,191,239,214,247,125,221,102,115,115, 92, 90, 72, 35, 15,232,149, 37,170, 44, 73,166,248, -239,126,253,185, 79,221,188,156, 44,255,224, 93, 27, 55,231, 14, 68, 29,173, 87, 21,118,239,113,228,197,183, 3,240,250,243,107, -124,195,107, 54,249,237, 47,236, 66, 20,121, 16,151, 1,208,107, 93, 56,235,255, 54, 63, 24,242,154, 51,211,251,214,245, 46, 67, -209,195, 21,203,136, 48, 49,198,217,218, 41, 64,242, 10,164,223, 67,244,196,204, 38,251, 66,200,107,167,109, 94, 47,102,190,245, -151,195, 14, 95,134,231,126, 37,157,239, 11, 1,244,247,126,153, 70,238,206,170,216,241,106,125,142,226,221, 15,190, 47, 68,212, -211,181, 62, 79,108,251,178, 94,223, 16,153, 47,116, 10, 22,182,176,151, 0,234,117,186,125,243, 29,111, 93,253,225,159,248,206, - 11,255,183, 51,141, 56, 25, 89,129,104,250, 16,220,149,150,134,117,228, 9,252, 95,127,249,169, 95,190,255, 35, 59,191,244, 51, -239,184,229,221,194,133,204,187, 10,236,247, 72,226,182, 63, 59,121, 97, 41, 5,127,235,207,190,141,239,252,252,127,128,188,130, - 52, 9,211,221, 2,168, 91,192, 89, 24,140,248,218,175, 57,207, 95,252,227,111,152,252,173,221,249, 2,206, 85, 8, 83,250, 39, - 58,135, 20,142,131, 65, 62,238,141,202,254, 43, 24, 61,189, 47,168,155,213,118, 47, 47,158,236,115,163, 30,220,151, 19,112,255, -160,216, 87,218,249,158, 4,244,251, 95, 78,246,249,139, 92,111,135, 39,200,141,117, 43,215,171, 5,236, 47,100,173,191,170,215, - 55, 68,232, 39,117, 10,238, 15, 25,156, 75,167,165,243, 67,230,225,199, 88,216,194,254,144,131,186, 0, 68,164,196,107,127,228, -191, 56,247, 19, 63,252, 71,206,124,187,214, 48,138, 36, 34,149, 56,235,112, 99, 67, 43, 18, 60, 89,232,252, 47,255,139, 47,254, -244,131,143,246,254, 37, 96,159, 62,174,182, 17,238, 78, 55,137,212,129, 70, 19,243,228,135,137, 14,159, 68,172,220, 2,192,119, -124,237, 45,220,255, 95,127, 43, 63,244, 51, 31, 98,116, 84, 64, 35, 5,229,235,233,148, 21,140,198,124,221,157, 91,252,194, 15, -127, 23,173, 70,236,143,170, 26, 99, 62,255,139,136, 36, 5, 97,192, 89,156, 53, 32, 37, 79, 92, 61,218,205, 75,179,203, 43, 71, -148, 3, 95,115,190,103,102,147,125,209,209,215,151, 11, 36,190, 76,246, 21,115,190, 97, 26,219, 73, 64,127,215,151,249,176,190, -156,142,220, 11, 89,235,247,191,208, 22,179,151,201,222,121, 2,208, 23, 74,113, 11, 91,216,140,201,231, 1,245,205, 31,251,206, -243,255,248,221,127,244,204,183,231, 26,170,102,132,200, 20,206, 2, 35, 67,171,161,248,141,203,195,237,187,127,242,225,191,253, -224,163,189,255, 21,120, 18,120,238,145,189,252, 17,164, 0, 19, 72, 79, 74,250, 20,187, 30, 80,125,248,199,231,222,228, 7,255, -228, 27,248,157, 31,253,243,252,208,159,122, 19,183,174,166, 52, 92, 69, 91, 26,190,233, 53,235,252,163,191,254, 39,248,173, 31, -185,151, 91,183,150, 38,207,215, 31,255,105,220,209,147, 16,167,184, 64,194, 67, 27,144,130, 71,158, 61,124, 10, 63,103,221,254, - 1,251,156,159, 79, 22,243, 43,245,248,238,249, 10, 61,223,235, 1,250, 59,255,128, 1,250, 31, 84,251,114, 94,223, 89,214,252, -251, 94, 32,160,223,182,184,100, 11, 91, 68,234,192,197,149,228,238,191,252,166,213, 63, 89,230, 22,218, 49, 34, 17,184,210,161, -114, 77,218, 82,252,243, 79,237, 63,252,127,249,133, 39,255,231,222,216,124, 8,216,199, 15,122,105,252,214, 19,253,143, 93,233, - 87,127,101,189, 25, 71,198,185,105, 19, 92,214,196, 62,253, 91,232,143,252, 67,162, 63,250, 67,147,247,121,243,205,235,252,248, - 95,249, 22,126,244, 47,106,174, 30, 12, 73,226,136,115,171,173,107,142,199,124,254,223,161, 63,253,207,161,209,244, 94,135, 84, - 56, 99, 17,198, 82,229, 5,191,248,161, 39, 62,130,215,163,127, 37, 65,253,165,108, 16,115, 41, 84,231,220,202,151, 91, 10,244, -132, 93,154, 57,190, 23,196, 14, 14,253,219, 95,169,231,251,149, 4,232, 47,149,196,248, 74,174,245,249,235,123,223,221, 43,175, -226,192,148,187, 94,194,231,241, 21,225, 88, 46,108, 97,175,116,164, 30,221,178,154,190,102, 37, 85,104,235,217,237,110,100, 72, - 74,131, 72, 5, 63,252,107,207, 60,240, 3,255,252,137,255, 71,111,108,126, 29,216, 6,142,129, 18,168, 46, 31,149, 31,251,197, - 47, 28,126, 50,142,192,229, 6,112, 8,137,239, 87,111,118, 48,159,254,223,169, 30,248, 91,184,209,222,220, 27, 54,226,136, 91, -182,150,174, 5,244,106,140,249,232, 79,162, 63,244, 35,136, 52, 65, 40,229,235,245,113, 10,149, 38,150,240,187,143, 92,185,250, -219,159,223,126, 0,175,253,254,138,128,250,137, 17,159, 47,102, 83, 57,217, 38,246,206, 63, 96,235, 96,246,248, 86,130,108,235, -151,178, 81,254, 65, 63,223,175, 8, 64, 15,210,189, 39,157,175, 87,231,189,189,242,218,245,214,250, 87,206,245,245,146,178,139, - 72,125, 97, 11, 80, 7,212,231,183,199,143, 62, 91, 26,221,108, 42,154,149,161,169, 96,160,172,251, 47,127,254,210,191,250,251, - 31,184,242,119,128, 79, 1,123, 33, 66,247,232,237,135,188,108,255,196,111,110,191,255,184, 50, 68,149,129,202,122,214, 92, 16, -165,161,213,193, 62,241, 43,148,191,248, 3,152,207,253, 34,174,247,220,233, 55,228,112, 23,251,196, 3,148,191,244, 87,208,191, -255, 79,160,209, 0, 21,121,177, 25, 33, 16, 50, 70,228, 21, 40,199,223,253,185,223,255, 37,224,241,240,254, 47, 59,168,207,244, - 45,207,218, 11,106, 47, 10,109, 72,179, 27,242,123,158, 39,210,125,181,237,253,204,215,110,223,243, 2, 62,139,247,124, 5,159, -239,245, 0,253, 33,110,220,199,253,188, 78,159,115,238, 61, 51,143,123, 78,124,102, 47,118,189,205,146,187, 14,121,121,250,212, - 95, 8, 16,222,112,173,139,119, 63,120,237,245,245,140,244, 47, 53, 91,196, 11,200, 22, 29,190,208, 8, 60,156,199,130, 32,183, -176, 63, 84,118,195,244,251,254, 64,127,252,251,254,213, 23,223,247, 67,223,178,117,239, 90, 51, 90,250,194, 94,254,236,255,246, -225,157, 95,254,220,229,209,191, 7,174, 0, 71, 33, 58,159, 5, 81, 3,140, 31,223,205,127,229, 71, 62,120,245,158,251,190,235, -226,183,233,129,134, 72, 34, 82, 53,165,176, 53,187,160,143,169, 62,252,247, 16, 73, 27,177,118, 39,114,245,118,136, 26, 96, 43, -236,209,211,184,221,207, 65,126, 4,113, 12,173,165,153,187, 21,176, 18, 87, 8,146,182,228,103, 31,120,228,243,255,249,247,158, -251, 87,248,212,123,245, 10, 68,231,247,112,237,124,241,154,117,251, 66,237, 93,204,107,175,127, 32,140, 25,125,224, 5,188,255, -189, 1, 44, 95, 17, 66, 82, 96, 89,191,111,102, 3,188,199, 57,247, 83,167, 69,172, 51, 45, 95, 43, 95,169,231,123, 3, 64,255, -182, 47,177, 76,112,219, 9, 16,121,239, 76, 84,123, 87,208, 58,184,255,249,122,205,103,198,232,206,126,198,175,184, 52,110,136, -206, 95,232, 90,191,246,250,250,177,170, 15,188,128,247,184, 55, 56, 7,239,187, 14,168,223,123, 3, 97,154,247,207, 92,183,119, -186,251,238,126,255,117, 24,239,167,181, 38, 46,108, 97,127,168, 65,189, 2, 14,126,231, 82,255,159,254,206,165,254, 7,128, 14, -190,110,126, 21,159,106, 31,132,231,156,148, 21,171,231,173, 95,253, 7,191,126,229,199,191,246, 98,243,214,239,127,203,218, 29, -227, 94,137,232, 38,144, 74,175, 52,135,131, 56, 70,196,177,103,176,239,127, 10,189,243,208,228,229,132,140, 32, 74,160,213, 62, -113,183, 2,165,193,217,140, 70,154,240,208, 99,219,135,255,247,127,242,209,251, 66,148, 62,230, 37, 76,104,115, 55,144, 70,187, - 17,104,189,152, 77, 54,168,165,189,139,233,100,171, 26,232, 30, 8, 27,255, 67, 39,192,161,222, 96,239,154, 1,136, 87,210,238, -103,126, 76,230, 59, 67,164,121,255,204,177,221,195,148,125,124, 41,108,246,119,125,165,157,111, 56,175,211, 82,198, 63,255, 34, -150,194,251, 95, 66,239,250, 61,193, 97,170, 71,133,158,166,253,126,114, 84, 46,120, 25,224,151,197,193,113,247,221,253,210,214, -250,137,154,121, 80,135,187,246,250,222,119,247, 75,189,190,181, 46,124,237,200,124, 34, 12, 99, 57, 89,114,152, 43, 21,133,231, -221,207,116,220,107, 45,152, 51,203,146,127, 63,175,174, 44,237,194, 22,246, 7, 18,212, 77, 0,110, 29, 64, 92,134,159, 21,225, - 97,184,254,208, 20, 13, 12,172,115,159,249,175,126,238,139,127,119,173, 21,253,200,255,233,142,165,243,249,113, 9,157, 24,209, - 80,211,254,117,143,224,144, 52,110,220,135,230, 0,235,160, 48,216, 94, 73,118,118,139, 47, 92, 57, 28,188,227,125,191,249,190, -227, 97,245,161, 25, 39,227,149,182,135, 2,160,191,104,210,146, 16,226,254, 25, 1,155,149,217,141,254,203,189, 16, 66,180,254, -142, 16,221,220,118,157,200,115, 54,114,123, 7,207,147,218,252,131,124,190,167,216,139,141,232, 30,248, 18,222,235, 54, 94,120, - 29,250,254, 87,193,161,187,241, 90,191, 14,195, 60, 76, 65,123, 89,174,175,120,247,131,135,238,190,187,223,203,252, 56,215,211, -132,109,222, 23,178, 4,179,207,123,231, 13, 62,207,119,133, 99, 91,128,250,194,254, 80,152,124, 30, 24,213,248,122,249, 33,126, -242,217, 17, 48, 10, 63,119,207,243,183, 5,112,220, 27,155, 7,255,236,253,143,254,191,254,249,239,239, 63,220, 72, 36,113,175, -194, 30, 87,144,219,201,171, 8, 4, 66,156,242, 8,255, 97,128,210,226,122, 26,113, 88,144,173, 44,243,224,165,227,171,223,254, -183, 31,248,219,151,182, 7,255, 38, 28,219,136, 87,142,245,254, 64,216, 92,223, 17, 6,113,124, 41,250,223,247,227, 37, 55,239, -231,133,245, 32,191, 63,108, 76,175,252, 68, 43, 63, 20,230,109,207,243, 94, 15,224,199,158, 62,244,149,126,190, 95, 6,128,124, - 47, 47,156, 92,249,126,124, 57,224, 93,175,114,231,192,116,173,191,251,193,183, 61, 95,203, 88, 80,153,123, 89,174,111,120,173, -219, 79,100,135,174,247,158,239,224,198,196, 65,191, 78, 95,226,120,215,133, 45,236, 43,213,196,245,210,141, 66,188, 44,250, 45, - 10,104, 6, 79,249, 13,127,249,155, 54,255,218,255,244, 29,231,255,244,249,165, 36,210,133, 67, 71, 2, 26, 10, 17, 73, 31,185, -203,153,247,116, 14, 12, 56,109, 33, 55,168,202, 18,199,130,158,129,191,247,161,131,223,248,255,252,242, 19, 63, 85, 25,251,113, -166,173,116,122,206,171,184, 65, 26,245,101, 58,183,151,197, 66, 42,248,100,148,120, 9, 63,221,236,129, 47,227,113,213,233,210, - 89,161,143, 7, 94,224, 52,184,175,184,243,253, 50, 93,247,219,184,150,155,240, 16, 62,221,126,248, 21,121, 94,158,109,126,250, -245,125,158,122,251,203,244,126,151,128,135,196,187, 31,188,116,131,207,126,177,243, 47,108, 1,234, 95, 34,176, 55,128, 37,224, -204, 77,171,233,159,120,231, 55,111,254,153,191,116,215,250,215, 95,232,196, 49, 78,224,156,195, 10,129,157,121, 75,233, 64, 58, -231, 91,215, 4,236,231,198,254,235, 79, 29,124,230,167, 62,178,243,203,159,126,102,248,159,128,103, 67,230, 96,124, 18,208, 23, - 55,238,194, 22,182,176,133, 45,108, 1,234,175, 92, 52, 43,128, 4,104, 1, 93,224,204,106, 59,122,235,215,223,210,254,250, 63, -255,150,213,183,191,229,124,243,236, 74,170, 90,173, 72, 36,145, 20, 82, 91,220,200,216,242,184,180,163,199,118,198,187,239,255, -228,193,239,253,246,165,193,199, 46, 31,149, 15, 1,207, 1, 61,124, 13,253,186, 61,233, 11, 80, 95,216,194, 22,182,176,133, 45, - 64,253,149, 1,245, 26,216, 37,144,226, 83,242, 77, 60,163,126, 21,216,106,166,114,173, 17,201,110,172, 68,162,173,211,185,118, -253, 81, 97,246,157, 99, 7,159, 98,239,225,235,230, 67,158,159,168,183, 0,245,133, 45,108, 97, 11, 91,216, 2,212, 95, 65, 80, - 63, 9,238,113,136,222,235, 71,196,100,250, 58,132, 8,188, 10,143, 50, 0,185,126, 62, 48, 95,128,250,194, 22,182,176,133, 45, -108, 1,234,175, 30,168,159, 4,248, 26,228,235,175,179,160,238,102,190,190, 40,148, 94,128,250,194, 22,182,176,133, 45,236, 15, -155, 69, 95,230,247,119, 51,192, 93,131,252,236,239, 22,182,176,133, 45,108, 97, 11, 91,216,151, 26,169, 47,108, 97, 11, 91,216, -194, 22,182,176,175, 44,147,139,143, 96, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, - 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22, -182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,246,234, 88,244,189,127,252, 46, - 39,133,244, 10,108, 66,120,245,151,240, 63,175, 4, 35,252,164,180,201,215,249,159, 93,207,124,255,187,155, 40,211, 57,231, 38, - 42,111,254,223, 98,230,121, 39, 21,224,228,220,207,102,213,237,174,215, 87,127,218,115,103,191, 23, 66,160,132, 37, 86, 18, 37, - 98, 34, 37, 16,202, 33,227, 24, 41, 51, 86, 55,110,230, 13,111,251, 22,214, 54, 55,185,227,117,183,241, 31,254,211,127,224, 39, -255,215,159,228,169,167,158, 34,138, 34, 90,205, 22, 89, 26, 19, 69,130,181,213,117,182, 54,206,242, 23,127,224, 7,248,238,239, -249,118,112,134,159,248,135,255, 27,255,224, 39,126,130,102,187, 77,140,160, 29,199, 68,177,100,101,125,153,170,200, 89, 95, 91, -195,152,146, 72, 66,154, 54,144, 66,208, 72, 50, 4,130, 52,142, 81, 73,202, 19, 79, 62,201,239,124,244,163,108,116,187,156,219, -220,224,150, 11,231,248,212, 35,143,112,215, 91,223,202,241,209, 49, 31,254,216,199,105,116,218,228,121, 14,165,230,204,198, 38, -171,171,203, 52,155, 25, 27, 27, 27,156, 59,127,145, 55,188,249,173,172,174,159,101, 56, 46, 56,218,223,101,255,240,152,227, 94, - 15, 41, 21,121, 81, 80, 86,134,162,172,104,118, 58, 52,154, 93,140,145, 24, 43, 24, 15,118,185,185,107, 57, 39,143,105,187, 17, -149, 5, 99, 29,198,128,214, 22,173, 29,149,177,104,109,208, 90, 99,172, 65, 91,139,117, 14,109, 29,214,185,160, 32, 36, 48, 86, -224,194,181,119,128, 19,128, 16,126,125,137, 20,135,195, 90,141,181, 22, 99, 1,149,210,200,150,104,181,151,104,100,109,178, 86, -135, 36,109, 18,197, 9, 82, 66, 36, 64, 10,135, 16, 18,164, 36,138, 34,162, 40, 38,142,147,201, 35, 74, 26, 68, 73, 70,210, 72, - 73,146,132, 40,137,137,211,148, 40,142,144,145,194, 41, 57,183, 54,234,127, 91,107,131, 4,146,195, 89,235, 39, 6, 26,131, 51, - 22, 93,105,172,209, 56,163, 49,218, 96,140,193, 88,227,159, 99,173,127, 62, 6,235, 76,248,222,191,134, 53, 6, 29, 94,131,176, -238,157,115, 88,103,177,198, 98,234,191,117,118,242,179,250,189, 9, 15,107, 29, 22,139, 51,254,245,140,213, 96,131, 78,147,115, -254,125,173,245,239, 91,255, 93,248,252, 29, 2, 68,132,144,138, 56,110,144, 54, 90,164,105,147,164,209, 36, 73, 82,162,212,127, - 62, 42,138,137,227,136, 88, 41, 98, 9, 73, 44,105,196,130, 36,141, 81, 73,132, 76, 36, 50, 18, 72, 9, 50,232, 68,137,233, 14, -128, 16, 10, 34,127, 77, 80, 10, 68,236, 47, 51, 14,225,252,215,250,217, 0,198, 89, 28,154,157, 71, 63,205, 7,255,233, 79,114, -248,200,103,217,217,219,103,187,159,179,177,188, 74, 35,141, 40,139, 49,199,199, 71,180,178, 38,227, 81, 65,179,217,161,223,207, -113, 88,138, 60,199,148,154,102, 42,217,218, 92, 70, 23, 35,150,151, 58, 44,183,218, 72, 32,203,154,108,157, 57,199,246,222, 30, -170,209, 0,165,136, 4,108,108,174, 83, 86, 37,253,225,144,189,131, 3, 68, 20,177,127,120,196,202,218, 26,113,146,176,177,182, - 78,146, 36, 28, 30, 28, 34, 35,133,144,138,237,221, 29,127,253, 4,180,150,150, 56, 26, 12, 72,155,109, 16, 17, 69,161, 89,106, -119,217,189,122, 25,129, 33, 75, 21,131,222, 49,194, 90,186,157, 46,177,140, 17, 86, 83,233, 10,237, 44, 81,146,128,131, 98,156, - 19, 73,137,144, 18,227, 12,157,118, 27, 93,105,156,117, 88,173,145, 82, 82, 85, 21, 8,139,181,134, 78,171, 69, 35, 77,200,243, - 49,121,158,227,128,213,149, 21, 28, 10,149,102, 12,242,146, 50, 31,147,197,138,225,209, 62, 43,237, 6,111,122,205, 45, 36, 81, -196,225,225, 49,253,254, 0,128, 86,171,205, 51,207, 60, 75,123,121, 25,149,196,140, 43,205,110,127,192,200, 41,218,155,103, 73, -187, 43,228, 56,172,148,224, 64, 88, 17,214, 83,173, 11,102,195,186,114,215, 72,130, 73, 89,239,175, 4,252,240,216, 80, 47, 71, - 33, 64, 34, 16, 98,250,144, 82,206,125,173,239,199,147,223, 35,252,123, 58, 28,198,186,176, 95, 56,140, 11,235,222,223, 10,216, -153,251,203, 57,255,123, 23,246, 36,103, 29,198,218,240,152,254,219, 26,135, 53,150, 82, 87,104,235,208,214, 80,105,127,223,234, - 74,227, 12,225,254, 12,175, 61,139, 97, 66,133,123,240, 26, 16,194,137,235,171,166, 77,238,141,240, 57,248,207,111,230,179,144, - 32,195,191, 39, 95,235,127, 11, 17,182,208,217,207,146,185,251, 75, 8,129, 49,134, 72, 73,133,148,242, 26,176, 60,109, 3,188, -209,191, 79, 57,133,107, 64,119, 22,192,173,157,190,134,115,243,224,239,127,198,220,207,102,223,243, 36,200,207,254,253,201, 99, -154,253,157,113, 2, 97, 5, 22,139,113,194,143,118,197,160,148,165,213,238,160,203,146,131,221, 93,236, 29, 55,243,185,207, 62, -204,219,223,254,141,244,122, 3,122,189, 30,149,214, 72, 1,198, 56,148,146,220,122,243, 77,216,124,204,149, 47, 94, 98,105,185, -195,159,248,227,223,194, 63,249,103, 63, 3, 82, 33, 17, 84,198, 48,202,135, 36,205, 20, 97, 13,131,126, 31, 21, 9,146,102, 3, - 99, 52,113,218, 96,156,143, 17, 14,202, 92,210,234,192, 99,143, 63, 78, 85, 20, 56,224,230,155,111, 34,137, 21,183,220,116, 1, - 99, 12,218,106,138,170, 98,255,234, 14, 82, 10, 98, 4,151,183,175,162, 34, 73,179,149, 97,157,191,225, 70,195, 33,103,207, 69, - 28,247,122,104,237, 39,210, 38, 73, 2, 8, 50, 41,169,244, 16,107, 44,189,222, 49,121, 89,161, 84,131, 36,109,146,165, 77,140, - 43, 25, 22, 14,171, 43, 42,231, 2,168, 91, 42,109,209,149, 69,155,176,240,173,197,134, 27,196, 34,176, 4, 80,119,224,156,191, -118, 82,248,205, 75, 42,137, 16, 97,113, 74,133,146, 17, 66, 10,156, 83, 24,227,175, 73,156,117,104,117,214,104,181, 87,201,218, - 75,180,187, 75, 52,178, 22,113,156, 32,165, 64, 56,131,213, 26,167, 43,127,158, 56,164,148, 40,165,194, 6,226,127,175, 41,113, -214, 98,180, 38,170, 98,180,214, 19,128,151,113,132, 84, 10, 21, 69,147, 13, 3, 1, 66, 73,175, 85,108,167,107,201,249,157,130, - 56,181, 56,107,112, 86,227,156, 7, 94, 59,243, 28,255,240, 27, 73, 13,202, 19, 96,175, 65,126,238, 57,225,115, 10,160,110,172, -241,155,140,214,216, 0,222,214,214, 95,131, 19, 97, 12, 46,124,239,172, 63, 30,107, 29,214, 85,254,123, 51,243,254,225,186, 88, - 52,198,150, 56, 35, 40,109,137, 49, 99,202, 50, 37, 26, 39,196,113,138,140, 26, 68,113,140,138, 34,162, 40, 34,150,130, 88, 65, -150,198,180,179,152, 86, 51, 37,201, 82,162, 42, 66, 68, 2, 39,241, 91,171, 11, 87,219, 9,132,144, 8, 21,121, 48, 87, 49, 66, - 41,132,148, 19,231,205, 9, 57,183, 15, 56, 43, 17,182,226,232,185,207,241,203,255,228,239,115,245,145, 47, 48,222,239,113,124, - 52,162,213,234,144, 70,160,139, 17,199,135, 71,100,141, 6,229,184,196, 84,142,203,207,238,146,164, 41, 8,129,213, 2,103, 29, - 75, 75,109,156,179, 52,178, 6, 43,203,203,228,195, 17,157,118,155, 70,179,201, 81,175, 71, 94,150, 40, 4, 81,154,208, 89,234, -114,120,116, 68,101, 44,189,193, 0, 17, 55, 56, 30, 12,136,179, 22, 82,197,180,154, 25,227,241, 16,171, 43,142,143, 14, 57,119, -225, 2,251,135, 7, 36,113, 76, 37, 53,163,113,129, 27,107,180,137, 72, 93,130,117,150, 36,137,120,238,153, 47,210, 74, 34,172, -169,232, 29, 30,209,206, 50, 34, 41, 25,245,143,201,210,140,210,104,172,117, 68,113,140, 67, 16, 39, 41, 73,146,145,168, 24, 25, - 9,170, 42,167,170, 42,172, 53,164, 73, 76,214,109,162,164,223,188,149,242,155,187,181,142,162, 40,105, 52, 26,140,199, 57,237, - 86, 27,173, 53, 14, 75,127,156,147, 53,219,180,150,151, 72, 36, 8, 91,113,176,191,195,206,206, 30,237, 86,147, 91,111,189,141, -253,221, 29,246,118,119,177, 85,193,109, 55,157,167, 55,206,201,203,130, 72, 42,150,154, 25, 54, 47, 25, 29,237,147, 54, 26,108, -109,110,146, 59, 15,148,224,193,221, 5, 64,119,206, 33, 17,211,123, 99, 6,208,230, 64,102, 22,189, 38, 0,232,239, 45, 78,252, - 94, 4,160,226, 84,176,242,206, 65, 45, 28,238,156,195, 88,131,117,210,239, 59,206,175,243,217,123,202,225,252,239,235,251, 43, - 96,140, 49, 53,152,251,123,203, 24,137, 17, 22, 43, 44, 70, 8,164, 0,109, 44,218, 10, 34, 33, 49, 74, 97,164,194,134,253,160, -126,237,201,191,157, 99,226,174,214,120, 22,254,231,159, 89,255,216,205,161,249,244,220,221,228,124, 65, 32,164, 64, 5,240, 22, -194, 59, 73, 82, 42,164, 20, 40, 33,231, 64,126,178,109, 9, 57,247, 26,254,221,124, 80,110,141, 36,154, 5,201,107,190,226, 23, -215,181, 7, 86, 71,244, 55,136,212,153,223, 36, 79,130,182,148,226,154,232,122,250, 60, 49, 1,251,231,119, 30, 78, 7,127, 78, - 89,116,206,129,177,222,239,244,128,110,193, 25,178, 88,209,235, 15,216,189,242, 28, 34,142, 57,216,187,157, 44,107,113,101,103, -135,111,248,134,111,228, 35, 31,249, 16,206, 9, 84,156, 96, 77, 65, 49, 30,147, 40, 5,186,100,176,191,203,232,112,151, 91, 47, -190,134, 55,188,254,117,124,230,225, 71,192, 73,108, 85, 81, 85, 21, 59,123,123,156,219,216, 0, 4, 74,197, 56,235, 64,134, 8, - 17,208, 70,227,144,148,101,193,234,114,135,222, 97,202, 29,183,221, 76,171,153,129,179,108,109,108,144,143,114,158,121,230, 25, -110,185,229, 38, 46, 93,185, 74,175, 63, 4, 37, 24, 85, 21, 81,164, 40,138, 2, 1,140, 70, 67, 6,189, 30,186,204,105, 36, 17, -107,107,107,200, 40, 33, 29,141, 24,142,198,184,178,162,209,104, 80, 85,134, 92,151,244,123, 71, 44, 45,175, 33,164, 99,121,117, -131,182, 40,233, 95,185, 74, 94,150,104,107,176,206, 97,140,243,139, 94,123, 15, 87, 27,135,182, 22,227,240, 32, 18,226,183, 58, -211, 3, 32,133, 2, 33, 81,202, 3,169,140, 34, 15, 32, 74, 17,201, 24,169,188,119, 93, 25, 71,170, 82, 26,237, 53,218, 75, 27, - 52, 59,107, 52,187,171,116,151,150,201,154, 25, 73,146,160,148, 4,103, 49,101,137, 30,143,168,170, 10,173, 75,176, 6, 33, 65, - 40,127,243, 59,204,228,122,234,210,133,232,186, 66, 23, 57, 81, 28, 19, 37,254, 17, 39,137,143,198,148, 66, 40,233,211, 8,181, -119, 45,220,116,245, 42, 23,214,168, 68, 16,207,175, 47,231, 38,235,219,175,189, 0,230, 64,240,108,230,129, 63, 68, 56,147,173, -208,185,233, 90,180,206, 3,119, 0,115, 99, 60,200, 99, 45,214,106,116,216,248,107,160,183, 38, 56, 0, 86,251,231,107, 51,117, - 6,180,193, 24,141,181, 21,218, 84,126,195,179,214,191,175, 41,169, 76,129,209, 57, 66,230, 40, 21,161,164, 34,138, 36,177,148, - 52, 98, 73,100, 82,140,139,177, 34, 67, 8, 13, 78,129,241, 27,143, 63,190, 50, 56, 57, 32,164, 66, 70, 9, 68,145, 7,245, 72, -249, 1, 14, 66,130, 84, 56,233, 35,248,250, 19, 85, 8, 6, 59,207,242,171, 63,243,143,216,255,252,167, 25,236, 30, 51, 44, 28, - 42,137, 72,163, 10,103,198,236,108, 31,178,178,210,161,204, 13,182,130,222, 81, 78, 51, 75,208,214,175,151,124, 92,178,212,109, -144,101, 41,174, 42,105,119,218, 24, 99, 72,211, 20,127, 55, 11, 70,227, 49,214, 65,172, 20,105,218,192, 88, 75,169, 53, 71, 61, - 15,228, 71,189, 62,165,241,107,119,163,217,162,209,136,209, 69,197,104, 52,228,204,214, 38,101, 81,248,135,209,236,247,142,233, - 46,175,163, 13, 44, 45,111, 82,148,222,145,186,114,229, 73,218,141, 24, 87,121, 71,179,149,196,148,227, 17,173,165, 46,235,231, -207,130,133, 60, 56,185,227,113,137,181,254,254, 41,243, 18, 65, 78, 35,139,137, 99,193,242,114, 23,156,165,217, 72,145,206, 82, -149, 57,227, 81,159,238,114,151,202, 24,172, 80, 12,181,166, 40, 74,210, 36,163,219, 93,198, 97, 73,146,132,210, 88,226, 52, 67, - 8,193,120,112,204, 82,183, 75, 51,146,148,218, 34,162,132,199, 30,127,130,215,222,113, 27,105,146,176,187,125,213,191, 79,154, - 98,140,102, 92,142,105, 54, 50, 10, 45,144,206,112,124,245, 57,186,157, 38,155,155,155,148,218, 7, 60,224,131,159, 58, 43, 52, -235,244, 90, 55, 93,227, 19,199, 77,204,160,219, 36,112,115,156,132,137, 9, 24,213,192, 77, 13,100,181,243,239,127, 39, 67,150, - 15,225,157, 73, 37, 21,214,133,251,197, 74,140,116,254, 30,145, 76,157,102, 8,193,133,119,168,141, 1, 45, 12,210, 88, 36, 2, -131, 65, 98, 81, 66,224,164,192, 74,133,150, 18,171, 44,198, 42,159, 13,112, 22, 99,108,184,141,235, 96, 37,100,217,236,244,125, -166,160, 62,123,238,117,162,109,234,244, 76, 48, 44,252,207,103, 48,175, 5,117,165, 20, 4, 80, 87, 74,162,164, 66,224,113, 82, -138, 41,168,203, 25, 60,155,126,244, 2, 51, 1,117,227, 65,253, 26,143,107,226, 73,213, 62,201,233,169,247,235, 97,109, 8,116, - 48,115,233,118, 55, 23,197,207, 30,216,181,224,125,253, 72,253, 26, 82, 64,200, 50, 60, 95, 90,190, 6, 29,231, 19, 68, 56, 81, - 71,100, 22, 17,202, 15,227,254, 62,253,113, 73, 49,206,209,218,176,185,185,197,127,248,229,127,235,211,129,205, 14, 90,171,201, -245,211, 85, 73, 22, 71, 84,195, 33,105, 26,147,198,138,111,250,198,111,224,119, 63,241,113,218,173, 14, 69,233,111,102,161, 45, - 79, 60,113,137,115,103,182, 56,115,118, 19, 99, 28,113, 34,113, 56,198,227, 33,206, 58, 98, 21,147, 57,203,157,175,185,157, 51, -235, 43,172,116,151, 16,194, 71,201,207, 93,185,204,198,218, 58, 55,223,124, 11,131,162,228,145,103,158,197, 74,208,206, 17, 11, - 65,179,217,164,209,240,209,255,120, 52,164, 44,114,242,241,136,172,209,196,152, 34,128,160, 79,237, 1,116, 58, 29,148,138,201, -171,138,188, 24, 83, 22, 67,132,140, 24,136,132,173, 51,235, 28,148, 32,198, 37,198,249,205,219,123,198, 76, 0,222, 24,139,161, - 78,121, 77,197,251,165,240,145,154,148,146, 72, 37, 40,165, 60,136,199, 49, 81,164, 60,136, 40, 69,162, 34,164,130,202, 56,132, - 21,164,217, 18, 89,119,157, 86,119,141,102,119,157, 86,119,149,230, 82,135, 70,214, 32,109,164,196, 81,132, 4, 76, 89, 97,203, - 49,101,145, 83, 22, 57, 90, 23, 24, 93, 98,173,241, 11, 91,168,233,226, 11,215,214, 26,131,113, 62,205,166,171,138,168,140,168, -146,210, 71,169, 73,140,138, 35,239, 21,215,107, 81,156,178, 86,133, 63,215, 73,116, 31,126, 56,235,236, 34,102,252, 1,230,255, -237,194, 77, 87,223,251,179,158,189,113, 34,164, 16,103, 35,125,139, 49, 6, 38, 81,121, 29,129,107,156,177,193, 1, 48, 1,212, - 45,166,210,147,136,222,104,237, 35, 57,173,209,166,242,231, 29,126, 94, 71,254,214,134,148,164,209, 96,181, 7,109, 37,176, 50, - 66, 90, 9, 22,172,145, 24, 13, 82, 69, 56,132,191,143,141,241,160,110,124,186, 88, 8,133,141, 98, 68, 20, 35,226, 8,169, 34, - 31, 85, 9,137,144, 49, 78,250,235, 33,164,255,219,241,232,136,255,248, 47,238,231,139, 15,125,156,193,229, 61,138, 42, 70, 75, - 69,154,105, 98, 85,176,115,117, 64,183,213,164,202, 75,138, 81,197,160,175, 73,227, 8, 37, 37,149,118,140,243,146,102, 83,113, -246,236, 42,184,146, 36,141,104, 54,155, 84,121, 65,154, 68,168, 72, 49, 42, 10, 6,249,152,172,213,166,212,154,150, 84, 88, 96, -123,119,151,180,213, 97,231,224,144,164,213,230,232,224,128,219,111,191,131,241,120, 68, 51,105, 19,197, 49,121,175,199,210,210, - 50,151, 30,123, 28, 99, 13,253,209,136, 82, 64,211, 66,183,187, 68,127, 48, 2, 28,189,195, 93, 26, 73, 76, 51,137,177,227, 17, - 70,151,180,178, 46, 91, 27,155, 88,237,203, 52, 82, 74,156, 80, 32, 4, 75,203, 25, 69, 94,160,164, 34, 75, 83,226, 36,102, 52, -232,211,110, 54,201,210,132, 98, 60,194,150, 57, 73, 26,177,117,110,139, 52, 58,203,104,112, 76,127,152, 83, 26, 65, 20,199, 52, -178, 54,214, 88, 70,227, 28, 41, 44, 90,151, 24, 7,186,170,168,180, 65, 9, 71,169, 53, 89,146,160,157,193, 2,113,163,193, 51, -151,175,114,211,197, 11,244, 7, 62,219,152,196, 9,171, 43, 75,140,139,146,203, 59, 59,180,155,109, 92,101, 72, 34,197,238, 51, - 79,210,237,180, 89,238, 46, 49,174, 44, 90,128, 67,250, 12,145,153, 70,160,206, 90, 36,206,239,159,118,230, 94,113,204,148,127, -220, 76, 26,222,157, 90,165, 21,167,196,132, 39, 35,118, 41, 4,126,183, 17, 8, 7,114, 18,185,251,123,204, 9,137, 18,117,118, -208, 97,112,200, 16,161, 91,233,166,211,194,156, 47,223, 73, 43,188, 19, 44, 28, 2,137,117,190, 28,107, 39, 41,123, 31,108,217, -153,168,220, 90,235, 51, 3,115,101,180, 16, 27,187, 19, 25,235,218,177,176,179,251,136,131,217,232, 93,158, 8, 54,235, 20,123, -112,108,164,146,147,180,251, 92,164, 78, 56,127,102,157,162,169,153,240, 4, 99, 36,145,156, 73,148,203,107,106, 30, 83,224, 62, -153, 38,247,207,151, 51,145,185,155, 7,210,176,225, 27,227,107,144,245,215, 41,152, 79,107, 9, 53,224,204, 58, 5, 32,230, 54, -215, 27, 1,187, 16,194, 3,168, 16,215,164,249, 79, 47, 27,132,207, 86, 8, 92,248,249,197,243,103,233,102, 41,191,243,208,167, -216,190,122,153,172,153,113,233,243, 95,100, 56, 26, 33, 68,184,184,198, 96,109,197, 48,207,249,252,195,143,240, 45,111,255,122, -246,182,247,105,102, 49, 42,125,130,111,122,219,219,248,135,120, 16, 81, 82, 33,140, 99,169,213,101,167, 63, 96,111,111,143, 78, -183,141,106,103, 97,243, 54, 8, 33,136,226,136, 98,156,211,239, 91,148, 18, 36,113, 68, 94,140, 73,162,136, 34, 47, 24,229, 99, - 74, 93,146,101, 41,133,115,100,141,148,209,184, 0,160,187,212,101,117,109,157,162, 24,161,181,166,170, 10, 70,163, 1, 79, 94, -186,196,214,217,115,200,168,193,217,179,103, 41,203,138, 43, 87,175, 82,148,165, 79,165, 73, 73, 36, 99,210,216, 80,148, 35, 70, -163, 1, 85,169, 24,173,172, 82,184, 8, 93,250,141,187,190, 6, 46, 56, 89,214,129,149,179,252,139,233,162, 83, 50,154,164,182, -149, 18, 1,220, 35,146, 56,246, 41, 94,165, 2,208,199,126,115, 16,150, 72,165,164,205, 14, 89,107,153,102,123,149,102,103,133, -102,103,153,172,221, 34,105,196,164,105, 76,164,188,199, 26,197, 9, 52, 18, 26,182,229, 55,181,170, 68,235, 18, 93, 22, 24,163, -113,198,129,157,174,221,185, 18,141,181,152,144, 66, 51,198, 80, 21, 37, 82, 41,162, 52, 33,142, 35,159, 81,168,215,161, 60, 81, -198,145,211, 90, 24,115,217,163,240, 28,121, 58,152,139,144,193, 16,242,250,235, 28,161,166, 30,189, 15, 67,230, 75, 0,147,180, -186,131, 80,127,175,211,236, 30,216,235,116,125, 29,229, 79, 35,119,163,125, 93,214,104, 31,249, 27,163,253, 87,109,176,166,162, -170,124,164, 47,112,164,145,160, 17, 11, 26,141,132, 40,149,200,196, 19, 25,156, 4, 43, 8, 5, 22,227,211,139,194,133,124,170, -197, 25, 3,174, 66, 88,133,141,164,231, 45, 72,137, 19, 17, 66, 40,148, 0,116,137,176, 21,191,249,111,127,142, 75,191,255,219, - 28,111,239, 83,244, 45, 70,129, 72, 44, 89, 26,115,116, 48,166,221,202,144, 66, 48, 24, 20, 12, 6,150, 40, 86, 24,231, 24, 23, - 21,163, 66,211,105, 39,172,175,182,193,149, 40, 89,215,247, 5, 74, 70, 72, 25,129, 80,140,243, 28,164,162,172, 52,205,102, 19, -231, 28,207, 60,123, 25,149,164,244, 6, 99,210,172,197,209,241, 49, 43, 43, 75,100,169, 98,117,249, 12,101,145,115,120,116,196, -202,218, 6, 79, 63,123, 25, 21, 69,140, 6, 5,198, 10, 26,237, 14,113,218,100, 92,228, 36, 73, 68, 62, 28,208,109,183, 16,174, -194,153, 2,131, 99,235,236,121,148, 80,140,242, 10, 28, 88,171,105, 52, 82, 84,154,226, 28, 12,135, 35, 26,113, 68,179,145,176, -180,188, 68,163,217,160,219,186,157,222,225, 1,253,222, 49, 55, 95, 56,207,214,250, 10,197,104,200, 51, 79, 61,137,169, 74,202, -106, 76, 94, 89,140, 76, 17, 42, 99,123,255,144,193,113,143, 52,137, 89, 89,238,208, 78,155,232,162, 96, 48, 28,225,128,102,179, -137,138, 34,140,115, 84,101, 73,127, 92,144, 53, 26,196,141, 6, 99, 99, 89,218, 58,135,141, 27, 84,195, 1,214, 64,183,221, 65, - 27,195,206,193, 17, 89,218, 96, 88,140,137,226, 6,143,127,246,243,124,237, 55,124, 3,141, 88, 49,170, 52,218, 5,110,132,148, -152,186,140,228,175,252,196, 97,245, 32,230, 2,113,102,126, 15,159,163,122, 92, 3,222, 76, 56, 87, 66, 76,131, 3, 55,243,123, - 33,166,206,132, 13,120, 98, 77,248,254,132, 35,125, 50,211, 44,132,240,206,135, 19,128,242, 72, 43, 44, 2, 21, 2,108,131,115, -114,230,126, 83, 83, 7,123, 38,195,102,103,178, 19,117, 26,222, 57, 57,117,207,221, 52,106,247,153,130, 19, 37, 58,235, 38,216, - 88,167,200,103,203, 21, 98,166,110, 46,164, 8,145,186,242, 17, 60,245,207,165,255, 93,240, 82,164,144, 33,144,153, 9,140,133, -192, 9,143,183, 81,189,201,159, 44,218, 43,165,106,202,205, 53,155,228,105,233,240,217,159,121,242,145,247,100,106,176,173,127, - 62,253,222,191, 71,253,254,243,155,158,120,193,160, 94,127,120, 39,121, 1,179,209,255,244,216,166,155, 65,189,112,100, 36,113, - 86,211,106,166, 60,240, 43,255, 1,210, 22,189,163, 67, 86,151, 87,124,122, 92, 23,128,165, 44,115,138,178,160,217, 76,168,180, -225,173, 95,247, 54, 90,221,101, 14, 47, 63,133,176, 45,142,119,246, 88,218, 88, 39, 18, 48,236,245,104, 40, 31,101, 38,113,194, -242,242, 10, 56,239,193, 91, 99, 41,203, 2, 41, 5,121, 62, 66, 10, 69, 26,135,180,216,112, 68,150,166,140,134, 57,135,123,251, - 36, 73,202,198,198, 26,253,126, 31,139, 96,191,215,167, 24, 23,126, 24,189,144,116, 91,109, 14, 15, 15,105, 54,253,223,215,105, -154,245,245, 53,150,150,186, 12,199,158,140,214,110,183, 88, 91, 91, 99, 52, 30, 51,206,139,224, 80, 73, 4,138,141,141,117,118, -118,123, 24,227, 24,140, 74, 68,154,144, 91, 67,228,212,164, 46, 94,187,125, 74, 8, 63,214, 79,212,159, 99,120, 29, 33,144,210, - 71,226, 82, 73,164,242, 41, 35, 37, 37,113, 72,187,251,133, 43, 39,112, 39, 85, 20,136,109, 45, 26,205, 14,141,246, 18,173,246, - 10,205,118,135, 44, 75,137, 26,138, 40,246,192, 32,156,196,213,127,239, 18, 18,151,134,122,178,193,232, 10,163, 43,108, 85,249, -239,237,148,116, 54,113, 66,221,204,109,101,125,164,235,140,198,234, 18, 29,136,119, 34, 82, 68,161, 76, 32, 84, 13,240, 18,233, -252,205,118,178, 76, 53,189,153, 66,157,108, 6,156,231, 86,155,112,193, 57,246,219,225,228,111,133,207, 22, 77, 51, 78, 30,228, - 61,201,172, 94,255,245,177, 91,239, 84,212,117,206,153, 58,253,164,182,104,102,136,115,147,186,188,243,209,189,118, 88,227, 48, - 85,229,129,191,170, 2,200, 87, 56,163,137,165, 35,139, 5, 89, 18,145, 52, 36,113, 26,121,130,156, 18,224, 44,206,106, 80, 18, -108, 4,206,151, 10,132, 53,147, 40, 68, 40,135,147, 6,132, 13, 27,158, 5, 39,144,214, 66, 57,226,119, 31,252, 32,159,254,173, - 7, 57,124,106,155, 97,191,242,159,171, 42,232,180, 82, 70,189,146, 70,220, 4,231, 24, 12, 11, 6, 35, 71,146, 38, 56, 4, 69, - 89,162,141,165,221,142,105,119, 98, 90,237, 4, 73, 69, 85, 22,156, 93,223,244,196,179, 40, 38, 73, 82,140,181,244, 7, 67,154, -221, 14, 73, 35,197,226, 56, 58, 62,162,210, 26, 27, 69, 88, 4,123, 7,135, 84,186,228,226,185,155,169,198, 3, 6,210,208,108, - 47,131,244, 14, 68, 20,167, 24, 4,134, 49, 43,107, 27,104, 25, 19, 69, 9,206, 25,156,201,137,148, 33, 17, 18, 97, 99, 74, 93, -177,182,190,201, 56,175,104, 54, 27,104,107, 41,138,156, 52,141, 25,230, 37,173,198, 18, 43,221, 14,141,141, 77,132,213, 40,233, - 73,130,203,221,140,149,229, 46,205, 88,176,181,182, 76,162, 36,229,104, 72, 57, 26,177,181,182,206,112, 56,160,212, 41, 29,145, - 80,136,152,227, 97,193,234,218, 58, 23,111,186,137,118, 51,195, 85, 57,237, 44, 35,207,199,244,135, 67,178,102, 19, 21, 37, 40, - 21, 51, 30, 15, 89, 95,105,145,231, 5,221,110,151,126,191, 15,141, 22,206, 90, 84,101, 16,206, 81,141,135, 84,101, 69,167,221, - 97, 92,106,198,101, 69, 22,199,158, 67,163, 53,159,252,248, 39,120,203,215,127,131,223, 79, 43, 61,225,151, 88, 27,106,212,182, - 38,161,205,112, 70,102,234,203,215,236,205,156, 66, 40,171, 1,109, 82, 83,247, 0, 44,157, 69,216,249,108,241,228, 62, 10,165, -190, 41, 96, 6,127, 58, 68,232, 46,160,255,148,215, 51, 3,204,194, 77, 50,102, 82,133, 96,206,186,153,104,123, 38, 5, 96,231, - 3, 66, 79,144, 11, 64,125,130,228, 61, 11,234,179,239, 55, 91,127,247,100,218,153,140,241, 41,251, 72,141,125,158, 7, 60,253, - 94, 49, 19,100, 75, 1,115,193,182,156,255,156,164, 15, 80,141, 49,126,143,174, 65,177,206,217, 79,210, 1,147, 52,136, 12, 76, -102, 55, 97,190,214,185,252,147,192, 62, 33,186, 5,210, 78,164,252,135,101,165,196,104, 61,185, 56,158,128, 97, 61,121, 42,128, - 59, 76,107, 43,243,142,194,137, 15,242,100,170,223,147, 84, 39,243, 91,235, 69, 54, 95,203,241, 27,171, 68, 18, 73,159,182,145, - 82, 96,133, 96,109,109,131, 94,111, 68,111,208,103, 41,107,179,191,191, 71,111, 84,113,229,202, 21,159,102,196,161, 77, 5, 8, -250, 3,205,230,230, 25,198,163, 49, 42,242, 17,222,241,241, 17, 14, 80,237, 22, 27, 43,107, 60,122,233,105,218,235, 29,156,177, -196,113,194,198,198, 38, 82,216, 64,128,240, 17,133, 53,154,170, 40,105,100, 25, 73, 35,193, 25,141, 36,243, 44, 95,173,185,186, -179,203,112,148,179,188,220,225,226,133, 11, 36,113, 66, 99,156,227,140, 65, 1,177,148, 44, 45,117, 88, 93, 89, 38,142, 21,113, - 20,211,202, 50,146,200,131,107, 28, 69, 36, 13,197,112, 84,144, 23, 5,205,102,147,213,149, 85,158,187,178,237, 63, 87,235,136, -100,228, 29,139, 72,121,114,146, 46,200, 90, 45, 70,113,131,216, 5, 71, 75,169,105,221, 8, 25, 60,197,154,113, 45,103,202, 52, - 51,145,238, 76,237,135, 57,110,133, 13,233,114, 95,111,143,162,132, 52,109,145,100, 45,178,102,155,172,213, 36,107,101, 36,205, -152, 56, 81, 40, 37,112,194, 34,172, 7,118,159, 30,183, 8, 23, 60, 88, 55, 45,161, 56, 83, 65, 93,123, 14,117,105, 95,203,244, -233,233,105, 45,219, 71, 31, 19, 47,218, 25, 42,107,161,114, 84,194,159,111,148,120,112,143,227, 24, 23,121, 22,185, 16, 34,144, -254,106, 18, 79, 29, 97,204, 78, 14,158, 43, 43,250,223,203,122, 3,115, 51,222,117,104,240, 16, 51, 4, 79, 23,206, 13,129, 20, -243, 53,185,192, 41,246, 78,129,231, 18, 99,157,103,237,203,217, 58,191,157,166,252,172,213, 33, 93,234,192,248, 77,217,232,192, -166, 47, 13, 90,123,112,116,182, 34,141, 4,205, 68,145,165, 49,113, 38,145,137,242,124, 5,225,176,206,224,116,133,211, 62, 93, -111,173, 70, 88, 27,178, 10,102, 26,117,137, 58, 39, 42,113, 50, 6,103,137,116,201,227,159,252, 44,191,243,193, 7,184,250,197, -231,168, 14, 75,140, 16,136,200,209,106, 71,148, 69, 73, 68, 66, 81,248,200,169, 55,208, 68, 42,194, 24, 71, 81, 85, 56,103,105, - 54, 35, 90,205,132, 78, 59,195,154, 10,135, 38,141, 99,202,178, 10,155,180, 39,236, 29, 29, 30,160,226,136, 40,142, 41,170,138, -102,179,201,209,254, 1,105,171,205, 81,127,128,136, 99,138,124,204,217,115,103,136,149,100,121,101, 21,235, 96,239,224,144,229, -229, 85, 70,195, 33,165, 54, 24, 11,155, 91,103, 41,141, 1, 98,156, 19, 52,179, 6,197,240, 24,165,192, 84, 37, 10, 69,154, 52, - 40, 10, 77,171,221,101, 52, 42, 60,233,174,211, 0, 12,157,118, 43,240,111, 42, 76,169,105, 53, 18,182, 54,214, 25,151, 62, 93, - 63, 30, 14, 72,227,152, 36,203,232, 29, 31, 33,173,231,110, 12,250,125,210, 52,163,179,180,194,179, 87,118,104,116, 91, 92,221, - 59,228,232,120,192,213,171,154, 44,137,232, 54, 19,202,110, 23,231, 4, 7,123,251,140,138, 43, 40, 37, 89, 95, 91,167,153, 37, -228,121,132, 49,150, 65,127,196,104, 92, 18,167, 13,116, 89,176,113,211, 69,158,248,253, 93,186, 89,155, 60, 31,145, 32, 89, 91, - 94, 97,123,111,207,175, 45, 43,208,214,160,171,146, 47,124,238,115,220,249,230,183, 34, 69, 68,105,170, 73,198, 7, 12, 56,129, -195,206,144,211, 44,117,134,221,221, 16,212,103,156,235,122,221,123, 18,138,191,183,172,155,212,211,231, 82,240, 33,194,157,173, -113,123, 44,112,152, 26, 87,231, 0,183, 6, 86,166,105,115, 59,173,145, 79, 66,198,144,145,147, 51,169, 54,231, 60,176,206,166, - 24, 92,248,185,229, 90,231,197,157, 60,215,154,180,231,184,134, 80, 59, 9,120,103,238,121,230, 64, 61,212,215, 5,212,228,245, - 58, 16,242,191,147,160,152,225, 30,120,160,175, 51,129, 1,188,125, 77,221, 90, 27,218, 18,108,128,107,231,235, 15,194,249,200, -107,174,205, 96,190, 45,232,100,202,101,194, 50, 55,161,206,233, 44, 6, 9,210,120, 6,173,242,155,163, 54, 51,109, 65,174,118, - 42,148, 39,163, 41,144,210, 77, 60,150,250,125,167,224, 48,243,182, 62,223,129, 10,193,129, 4,180,144, 8,107, 67,132,233,194, -249, 4,172,145, 18, 37, 20, 17, 2, 37,189, 39, 80, 9,201, 96,172,217,188,112, 27,231,110,190,157,188,178,180, 90, 93,154, 43, - 77,190,235, 59,191,155, 11, 23,207,243,193, 95,255, 85,180,243, 41,111,165, 18,214,150, 54, 57,123,230, 28,130,138,172, 41, 17, - 86,225,132, 7,146,181,149, 53,226,100,135,194,129,146,130,210,104,226, 36, 69, 87, 26,147, 23, 52, 26, 41, 81,220, 32,175, 6, - 36,141,148, 86,187, 9,194, 16, 73, 73, 81, 89,118,143,142,232, 13,135, 28,143,114,132,113,172, 46,175, 50, 26,230,172,173,181, -104, 68, 17,221, 36, 98,104, 12, 81, 36,232,180, 83, 90,205, 4, 25, 37, 72, 39, 48, 85,129, 41,199,232,178,164,187,188,134, 44, - 42,242,106,207,183, 97, 89,193,202,234, 58,189,254,136,131,131, 67,226, 56,193, 58,201,104, 8,205,172,141,182, 5, 68, 49,194, -198, 36,201, 18,137, 40, 61, 97, 35, 92,179,185,245, 60,185,185,236, 52, 95,198,148, 4,226, 9,102,118,146, 23,177, 51,233,181, - 8,129,144, 49, 82, 38, 68,113,134,138, 27, 36, 73,147, 40,201,136, 26, 9, 50,133, 56,141,124, 43,154,100,194,190,245,209, 95, -132,196,206, 0, 97, 32,157, 32,144, 54, 70, 98, 67, 10,212,160,181,103,141, 87,149, 70,235, 10,140,158, 16,210,132,155, 73,119, - 91,231,249, 3,206,131,148,117, 21,165, 22,168, 72, 65,146,160,146, 24, 73, 74, 20,199, 30,232, 66, 4, 47,100, 93, 75,247, 25, -143,153,140,122,136,108,172,143, 14,228,180,181,211, 9,112,178, 6,119,144,225,239,234,122,254,220,189,228,252,249, 5, 34,242, -180, 36, 21, 62,103, 89,239, 59, 97,131,171, 9,127,245,247, 74, 38,225, 58, 89, 80,190,174, 45,132,175, 53,226,252, 17, 91,235, -143,161,217,140,201,178,132, 52,141,136, 26, 17, 68, 10,159, 59,247,209,147, 51, 62,179,129,213, 56, 91,249, 63,180, 33,131, 48, -195,125,145,148, 96, 35,140, 74,209, 20, 28, 60,254, 5,126,255,193,223,228,242, 35, 79,145,143, 12,214,231,242,233,100, 13, 48, -126,127,168, 42,223, 85,210, 31, 21,225,115, 20,148,165,111,253,140, 83, 69,150, 42, 90,153,194, 86, 5, 73,171, 73, 62, 46,233, -116, 59,228, 69, 73,171,217, 36,205, 26, 84, 14,122,131, 17, 75, 43,203,222, 1, 3,122,195, 17, 46, 74, 24,148, 22,153,182, 56, - 58,220, 99,117,165, 75,167,153, 32,149,100, 84, 24,226, 56,166,217,200,136,163, 8,107, 29, 42,142,176, 66, 5, 98,158, 36,106, - 54, 89, 94, 89,166,191,119, 5,105, 12,249,120,128,179,142,230,210, 10,227, 81, 65,167,213, 33, 47, 42,156,132,172,149, 1,208, -206,154, 20,227, 17, 73,148,179,181,186,198,250,242, 42,249,104,196,115,207, 62,141,138, 34,154,237, 22,221,141, 37,202,188, 96, -255,168,135,174, 12,166,212,140,243,138,181,173, 11,244,122,125,158,123,106, 27, 37, 12,163,227, 67,154, 74, 80, 36, 10, 99, 4, -177,176,196,194,208, 80,142, 36,202,104,156, 57,207,147,207, 61,135,146,142,245, 86,131,102, 35, 97, 92,105,191, 38, 29,200, 74, -208, 59,234,209, 89,237, 82, 86, 57, 75,155, 91,152,193,144,102, 20,145,247,250, 44,117,218,228,205, 49,135,131, 62,145,138,104, -197, 9,189,209,152,252,248,144,203, 79, 94,226,142, 55,188,129, 81, 89, 82,216, 10,165,125,135,137,213, 6, 93,213,109,150,150, - 50,148,132,132,113,147,246, 51,107,237,196,213,117,206, 33, 13,115, 96, 75,112,118,103,161, 81,214,164, 48, 57,195,236,150, 34, -236,224,211,250,245, 28, 80,138,217,123,131, 19, 29, 41, 2, 99,231, 9,123,211,192,115,210, 4,118, 77, 97,223,137, 58,136,116, -115,220, 49, 21,222,204,205, 61, 95, 76,156, 25,231,124,105, 42,240,100,167,164, 58, 55, 79,182,113,194,206,180,122, 79, 83,238, -190, 51, 40,252, 59,148,177,148,244,153, 79, 31, 4, 73, 16, 46,100, 66,163,153,125,104, 82, 31, 12,159, 65, 84, 71,234,243,233, -234,185, 30,185, 9,221,254,148, 20,252, 53,160, 30, 72, 83, 82, 32,109,125,113, 66, 43,129,180, 40,229, 38,181, 4, 51,249,176, - 93,168, 85,219,240,136, 2,152,204,151, 4, 38, 23,228, 68,195,156,147,210,111, 48,194,255,125,228, 57,208, 19, 32,168, 23, 75, -237,204, 40,225,124,187,139, 16, 56,233,189,189, 60,212,179,210, 70,134, 70, 99,156,229, 96,111,151, 15,126,240, 1,190,240,240, -103,168,116, 17,178, 10, 49,157,206, 18, 23, 46, 92, 64, 74, 65,146,196,180, 55,215,209,229, 24, 67,131, 86,167,203,153,115,231, -136, 31,125,130,170, 42,105,180, 91, 68,113, 68, 89,122,214,112, 26,197,181,115,234, 9,214, 74,209,204,154,148,227, 28,227, 4, - 7,189, 1,159,250,252,163, 24, 28,155,203, 75,188,245,141,119, 18, 75,129,144, 48, 30, 14,104, 52,252,141,107,180,102,235,204, - 38,221, 78, 11, 37, 5, 90, 27,226, 36,193, 90, 75, 62, 30, 51, 28, 14,112,206,210,233,180,209, 70,115,120,112, 76, 81,150,168, - 56, 33, 73, 18, 90,173, 22,198, 88,202,188, 32, 82,190,174, 27,199,138,170, 44,161,172, 72, 27, 25,169, 80,147,218,248,201,242, -137,179,128,177, 88,231, 35,198, 73,198, 38,172, 9,103,197,228, 14,113,225,123, 33,195,239,234, 90,152, 16, 72, 21, 17,199, 9, - 73,154,146,166, 9,113, 18, 17,199,145, 79,187, 43, 57,195, 75,179,158, 63,237, 0, 33, 39,183,146, 96, 74,228,148,248, 20, 30, - 66, 16, 57, 71, 20, 0, 59, 14,145,186, 11, 53,101,223,131,106, 38,237, 96,214, 24,164,147, 56,103, 38, 17,125, 77,178,171,202, - 50,212,168,124,186, 89,186, 4, 71, 52, 77,127, 41,233,183,163, 9,176,214,184,234, 2,123, 55, 84, 31,197,233,192, 61,155,237, -154,237,246, 8,132, 21,102,182, 30,159,149,152,253,195, 25, 7, 75,212,239,107,167, 41,191, 73, 25,172, 62,207,176, 33,155,170, -194, 20,154,170,244, 68,195, 52, 81, 40,149, 18,165, 17,178,145, 32, 18, 21,218,212,196, 36, 51, 34,173, 5,155,224,155,119,245, - 28,243, 89,204,221,141,190, 78,169,132,160,218, 57,228,227, 15,254, 38, 31,251,216, 39, 24,246,199, 20,185, 33,141, 4, 73,146, -146,196, 49,189,222,104,226,176, 15,199, 85,136,184, 44, 69, 89,161,148, 32,107, 68, 40, 5,205, 44, 69,224,104,181, 50, 70,163, - 1,105,210,160,172, 52, 74, 68, 12, 71, 5,157,238, 10, 7,135,199, 32, 37,105, 35,101, 52, 30, 17,167, 41,253,193,128, 86,123, -153,241,200,167,169, 27,105,226,217,210,198,128,243, 90, 17, 90,107, 54, 55,183,120,238,242,101,180, 5,169, 18,116,149, 83,149, - 37,103,206,158, 67,196, 9,227,193, 49,173, 44,229,224,234, 30, 24, 75,156, 54,232,247, 7,180,187,203, 12,242,156,113, 62,102, -101,109, 21,131, 33,141, 35,180,201,217, 58,179,206,230,106,135, 42, 31, 51, 26, 13, 25,133, 52,121,171,221,102,101,125,149, 94, -175, 79, 85, 20,180, 90, 45,122, 71,199, 24,107,200,178, 6, 87,175, 94,197, 90, 75,101, 13,253,241, 0, 33,161, 48, 14, 25,167, -236, 31,238,162,199, 3,226,141, 46, 35,171, 17,141, 22,141,172,205,215,189,241,117, 60,125,229, 10,165, 19,228,163,156, 40, 75, -105,100, 41,101,161,137,155, 41,187,219, 59,108,172,173, 81, 13, 70,108,172,109,240,228,193, 33, 75, 89, 70,171,221,166, 63,232, -179,181,117, 6, 13, 28,244,135,164,157, 6, 73,101, 24, 27,203,238,213,171,116, 86,150,185,233,142,219, 25,228, 99, 74,231,124, - 39, 70,101, 48,229,180,221, 82, 25, 51,233,248,240, 36,179, 41, 67,220,132,182, 77,135,153,107, 61,115,179, 44,241,128, 33, 86, -248,123, 24,107,103, 72,100, 33, 32, 56, 65, 76,155, 77,155,207, 70,207,215,166,188,197, 84,199,225,154,186,123,184,103,102,210, - 12,117,234,124,178,162, 29,115, 61,247,167,150,159,197, 76,231,143,171,157,241,105,247,214,108,249,217,123, 90,114,190, 3, 64, -136, 73,240, 44, 3, 19,190, 46,255, 73,165,144, 33,168, 82, 74,249, 72, 61,128,122, 13,232, 66,200,185,222,120,231,156,175,169, -135,112, 43,156,196,148,145,167, 66,191,156, 12,233,199,105,195,187, 56,149,252, 48,249,185,146,126, 99,149, 18,173,124, 45, 89, - 86,138, 82, 86, 24, 99,253,107,215,139,192,186,169, 83,225,172, 23,251,112, 2, 99,252,137, 68, 33,197, 61, 57,241,186, 95,175, -246,241,130, 32,135,169,185,142,110, 74,194,112,212, 41,247, 64,170, 17, 14, 37,156,143,212,133, 3, 37,112, 72, 68, 44,120,238, -153, 39,125, 47, 38,112,238,220, 57, 14, 30,125,130,178,202, 25,141,142, 65, 24,164,138,144, 50, 97,235,204, 89,206,157, 59,203, -185,179, 91,140,135, 3,180, 29,177,182,186, 66,186,180,137, 72,155,188,230,117,119,242, 75,191,242,107,180, 59, 29,178,102, 19, -109, 13, 10, 65,171,221, 33, 82,161, 85,196, 58, 84,168, 5, 58, 11, 89,163,137, 53,112, 56, 24,144, 91,131, 18,130,209, 40,167, - 17, 37,232,106,204,234,234,186, 23, 80, 17,146,115, 7,103, 41,202,146, 51, 91,103,104,196,177,111, 31, 11,139, 81, 69,178,166, -168,134, 13,221,177,188,188,140, 49, 14,231,250, 84,218,208,108, 54,189,128, 76,168,237, 39,137,160,116, 62, 29,101,156, 69,231, - 5, 75,141, 38,137, 95,127,147,108,137, 49,230,121, 91, 11, 79,227, 58,184, 19, 29, 16,214,185, 41, 16, 75, 69, 20, 39,196, 65, -168, 39,138, 36, 81, 92, 47,240, 25, 65,139, 80,139,159,118,113,136, 73,204, 42,102, 87,163,152,222,140,190, 34,229, 80, 54,154, -128,155, 13,194, 18,147,182,176, 64, 28,115,161,182,172,148,154,128,161, 79,123,227, 1,177,168,208,198,247,160, 41, 27,135,207, - 58, 10, 45, 92,222,123,151,136, 57,172, 13,121,195,201,207,167,108,213,217, 58,226, 60, 41,111,150,120,106,197, 60,249,116, 34, -236, 81,111,112, 97,183, 17,110, 74, 84,173,137,116,132, 99,117, 53,243, 93, 87,232,178, 66,235, 10, 83,148,216,178,164, 42,115, -156, 51,168,180,141,138, 64, 68, 2, 17, 73,156, 82,160, 60,175,192, 10, 91,187, 74,129, 70, 81,103, 76,152,219,248,166,169, 74, -233, 51, 1,195, 35, 30,251,232,199,248,157, 15,124,144,253,195, 35, 48,144, 8, 73,179, 25,145, 36, 49,251,251, 3,226, 88, 97, -141, 67,107,131, 20, 2, 19,128, 33,137, 5,113, 34,145,210,146,166, 9, 73, 12,221,165, 54, 85, 85,250,171,238,240, 90, 9,206, -178,188,188, 66, 94, 26, 70,121, 65,218, 72, 41,181, 38,138, 99, 70,227, 28, 33, 35,142,142,142,200,141,193, 84, 5, 50,105,210, -233,180, 81, 74,145,101, 25,205,166, 23,183, 25,246,135,180,154, 29,134,227,156, 60,207,145,113,194,202, 74,139,172,149,145, 15, - 7, 36,174, 98,239,234,101,176,134, 72, 69, 56, 7,141,172,197,112, 56,166, 44, 11, 54, 54,214,200,203,156,173,141,117,148, 20, -172, 47, 47, 35, 29,129, 19, 19,163,171, 10,109, 12,141, 70,202,185,155, 46,114,120,116, 68, 81,149, 88,173, 57, 58, 58, 98,103, -123,155, 88, 69,108,135,175,121, 89, 32,226,152,188, 42, 57,238, 29,179,123, 52, 0,213, 64,151, 21,235,221, 54,157,165, 21,110, -191,233, 28,221,212, 59, 59, 54,141,217,223, 19,228,101,238,249, 7,177,228,169, 39,175,178,185,117,150, 51,103,206,178,187,189, - 67, 62, 28, 35,181, 23,191, 73,179,140,202,104,116,145, 19, 39, 41, 71,199,199,156, 57,123,142,194, 60,199,113,127,192, 82,119, -153,170,215, 71, 41,197,147,151, 46,177,186,185, 78,119,109,133,161,246, 89, 21, 83, 25, 76, 84,133,246, 73,131,210,158,112, 57, -213,100,112,147,108,146,169, 3, 53, 51, 21,110,154,136,191,212,189,228,206, 7, 7,206,217,153, 30,236,192, 99,177,146, 90,210, -234, 52, 78, 85,184, 67, 39,160,235,219,132,221, 4, 83,166, 68,223,186, 43,198,151,236, 8,130, 56,238, 68,119,212,108,164, 63, -219,134, 54,193,197, 25,199, 92,156,214,131,206,180,158, 63,185,213,229,124,185, 14,105,167, 89,232, 19,193,179, 82, 83,246,187, - 8,160, 94,147,230,164, 82, 56, 53, 45, 55,213,156,159,169, 64,207, 52, 48,136,230,210,170, 39, 90, 10,148,148, 19,146,211,105, -253,236,215,245, 94,194, 71,110,165, 36,114, 62,149, 26,107, 67, 18,122,183, 43,173,209,122,190,197,102,182, 13,192,217,169,130, -143,181,150, 40,138,230,179, 8,245,113, 58,231, 25,186,110,170,120,197,132,157,233, 38,164, 35, 85,115, 5,132, 35, 22, 46,124, - 31,180,146,116,137,181, 99, 42,237, 23, 80,220,236,178,182,177, 73,119,123,151,178, 44,124,141,133, 58,171, 96,121,250,233,167, -248,236,103, 62,205, 31,255,250,187,216,221,121,142,118, 2,113, 18,179,185,118, 30, 11,188,249, 45,111,241, 17,115, 81,128, 32, -168,173, 89, 42, 99,137,226,120,114,158, 8, 73, 28, 39,147,158, 95,165, 36, 85,169, 39,192,149, 37, 49, 78,107,150,186,109,202, - 50,103,117,105,147,223,251,212,103,217,217,221,231,246, 91,111,166,217, 72,112,198, 80, 22, 5, 50,106,248, 62,248,224,237,225, - 44, 69, 62,166,211,234, 32,149, 98,117,117, 21,107,161, 44, 53, 66, 40,242,188,192, 85, 21,113, 18,227,170, 18, 97, 12,121, 49, -196, 40,137,168, 12, 50,139,161, 10,139,209,213, 92,138,144, 46,226,198, 55,218, 11, 1,251,208,235,132, 84,158,121,174, 98,133, -138, 37, 50,150, 19,162,157,175, 23,157, 80, 95,154,112, 45,166,137,232,233,205, 87, 31,167,155,130, 13, 65, 96,200,121,132, 85, - 54, 66,165,177, 7, 60,235, 60,192,107,141,171, 74, 79,182,155,244,121,187,192, 12, 15,206,181,117, 8, 99, 48,149,191,225,141, -214, 68, 73,130, 50, 17, 50,138,144, 74,226,130, 3, 44,230,116,212,196,233, 98, 76,142, 57,103, 68,156,162,181, 48,219, 66, 39, -194, 61, 90,215, 23,235,141, 67, 76,196,110, 12, 86,155, 73,219,155,173, 52, 78, 91, 76, 85, 98,170, 10,171, 43,223, 45, 80,149, -152,178,196,149, 5,186, 42,137, 19,127,127, 42, 50,148,244,217, 46, 33, 3,184, 7,130,164, 19, 39,210,140,245,106,112, 39, 4, -158, 16, 88,167,176, 46,231,202, 99,143,242,192, 47,254, 27, 46, 63,254, 69,144,130, 40, 82,180, 82, 69,156, 8,142,143,135,196, -145,240,107, 29,129, 20,202,139, 4,197, 18,107, 45,113, 44,137, 34, 72, 98,104,183, 99,186,221, 22,198,104, 6,253, 62,157,118, - 23,109, 28,141, 52,165,200, 75,146, 70,139,163,163, 35,132,148,164,141, 12, 25, 69,148, 85, 69, 89, 85,196,105, 70, 53,202, 25, -143,134, 68,137,162,221,206, 72, 98,197,250,218, 26, 82, 70, 28, 29,245, 16, 82,209,136, 61,207,165,168, 52, 89,171,133,113,222, -153,232, 29, 31,161,170, 49,123,219, 87,168,202,130,172,145,225,149, 55, 65,107,205,120, 56,100,109,121,137,225,241, 49,183,221, -118, 43, 70, 87, 52,162,152,241,113, 31, 41, 32, 74, 98,198,165,102,255,224,144,243, 23,206,179,177,185,193,195,143, 93,226,240, -232,128,141,149, 21,168, 52,135, 7, 7, 12,135, 67,172,241,153, 54, 99, 53,105,150, 50,172, 52, 69, 85,162,226,148,102, 91, 34, -147, 22,107,203,203,116,211, 8, 18,197,213,195, 49,201,170, 34,139, 44,221, 36,229,117, 55,159,225,112, 48,166,223, 27,251, 54, -215,245, 53,246, 14,247,232, 53, 27, 32, 97,239,232,144,245,213, 53,142,143, 15, 88,219,218,226,233,199, 30,165, 17, 41,148,144, -228,101, 73, 83, 27,206,108,108,145, 63,251, 28,174,210,116,155, 77,242, 64,214,252,220,167, 63,205, 55,253,241,111, 38,203, 50, -164,210,152, 72,163,163, 8,167, 13,166, 50, 68,129,187, 82, 3, 97,205,142,247,117,101, 15,222, 38, 0,127, 53, 17, 85,178, 33, -210,215, 84,218,139, 91, 77,218,200,172, 13,125,164, 18, 33, 66, 29,159, 27, 72,180,205, 0,187,157, 21,123, 10, 14,224,188, 10, -222,180,253, 78, 50,163, 39,193,137,182,210, 25, 62,214,105, 45,223,147,125, 39,252,251,121, 21, 79,107, 54,191,172, 3,102, 49, - 5,238, 89, 80,143,166, 0,238,193, 93, 33,163,128,191, 74, 78,212, 27,253,223,170,186,166, 60,173,186,225,247,132,232,180,254, -192, 57, 70,222,204,247,167,157,220,245,163, 55, 95, 23,143,128, 72, 69,232,200,215,176,170,178,162,210, 30,216,171,170, 10, 23, -216, 78,234,235,214, 56,172,152,175, 73,104,173,167, 81, 95,164,124,186,179,174,179, 7,182,175,239,183,242, 23, 74,212,125, 15, -117, 45, 61,108, 74, 83,224,183, 56,234,243,115, 84, 69,193,184,210,164,173, 38,145,144,228, 69,193,167, 63,243, 89,134,163,161, -143,172,141,131, 80,231,191,237,150,155,249,214,111,249,102,156, 53,148,149, 65, 54, 51,132,138, 89, 89, 94,198,169,136,165, 78, -155,172,209, 32,105, 52, 25,141, 75,186,221, 44,244, 87, 74,132,140, 16,210,183,189, 36,113, 74, 18,165, 56,103, 73, 27, 13,198, -163, 49,210, 24,146, 0, 10, 43,157, 78, 64, 20,223, 91,190,119,120,200,104, 52,162, 50,150,241,120, 76,150,164,164, 73, 76, 20, -121,181,180, 40,108,158, 2,139, 49,149,103,236, 18, 34, 33, 41,137,227, 24,109, 60, 79, 34, 77, 83,138, 74,123, 30,131,209,147, -136,174,200, 43, 50,103,209,198,215,190,107,189, 0, 2,184, 19,212,226,156,171, 5,130,100,168, 95,205,170, 27,205,168, 28, 57, - 78,252,108, 26,181, 34, 36, 66,120,113,154, 40, 82,168, 40,164,251,235, 71, 93,179,158,220, 92,211, 27, 77,206, 68,190, 98,234, - 74,207, 69,182, 53, 25, 78,204,122,173,210,161,172,244,117,239, 16,109,251,122,113,236, 1, 48,164,231,141,214,152,154,249,235, - 28,194, 89,207, 84, 15,153, 36,129, 69, 59,139, 53, 10, 25,197,193,163,142, 38, 94,246,172,226,134,112, 39, 19, 91,243, 9,235, -211,148, 28, 39,100,190,153, 77,104, 2,162, 33,235, 64,232, 65,183,198,224,116, 96,242,107,141,169, 74, 92, 85, 97, 75,207,110, - 55, 85,137, 51, 30,216,157,174,176, 90,131,169,192, 84,190, 29,172, 82, 72,147,162, 92,138,144,241,244, 50, 9, 78, 85,134,155, -100, 76,234,207, 87,122, 14,139,179,190,206, 63,218,221,225, 67,191,252,239,248,204, 71, 63,134,172, 28, 73, 35, 70, 70,208,200, - 18,122,189, 94, 96, 44, 75,226, 64,136,243,145,186,196,106, 67,146, 70,190, 84, 34, 33,203, 50, 54,214, 86,176,206,208,239,245, -104,102,109,202,210, 32,101,196, 96, 48,164,221,238, 50,206,199,148,149, 38,109, 36, 8,169,168,180,102, 92,150, 20,186,162,114, - 80, 25, 67, 28, 75,226, 72, 18, 71,138,110,167, 67, 89,148,196,169, 98, 48, 28,177,177,177, 9,214,176,189,179, 71,218,106,161, -141, 33,207,199,232, 98, 76, 36,161,183,119, 21, 87,230, 68, 97,239, 8,101, 94, 14,246,247,200,210, 20,170,130,115,155, 27,140, - 7,125,170,178, 98,224,124,105,175,211,238,176,125,116, 76,163,217, 98,235,226,205,244,243,156,222,211,207,144, 68, 9, 23,111, -186,141,254,225, 33,253,163, 30,149,118, 68, 73, 3,165, 4,189,163, 35,202,170, 96, 52, 26,131, 84,140, 71, 57,237,229,101,110, -218, 92,193,160, 80,206, 50,234, 29,177, 51, 26, 49, 94, 93, 65,148, 99,110,222,232,226,142, 15, 89,222, 88, 71,218,138,173,246, - 58, 85,110, 25,149, 37,194,104,196,120, 72,214,200,120,250,202, 51,164,221, 54,237,149,101,178, 52,241,193, 86,156,208,239,247, -104,119, 58,244,123,125,206, 93,184, 64, 94, 22, 60,119,117,135,238,250, 38, 20, 21,253,178, 68,146,241,216, 23, 30,229,206,175, -187, 11,149,197,228, 69,137, 84,145,239,199,143,172,175,181,187,121, 80,159, 21, 31,243,130, 73,190,235, 34,214, 1,212,245, 52, -125, 95, 85,122, 42,207,106, 29,122, 2,240,204, 71,188,136, 19,169,119,230,216,230,211, 20,253, 12,169, 90, 76,245, 97,234, 54, -235, 73, 95,119,205,114,159,193, 25, 59, 3,236, 19, 69,147, 58,107, 48,231,104,187,235,102,173, 79,118,139,157,116, 10,148,172, -235,232,211,136,188,230, 45, 9, 41, 17,170,110, 97,243, 64, 46,164,240, 95,149,151, 98, 22, 65,153,147, 32,160, 51,201, 98, 50, -229, 52, 68,179, 82,115,167,121, 37,190, 53,105, 26,133, 48,219, 99, 87, 23,243, 78,213,128,159,214, 57,132,112, 40, 21, 99, 34, - 15, 42,177,142,252,133,140,171, 64,100, 10, 23,218, 26,140,176, 84,214, 77,122,207,107,229,181,105,239,174,157,122, 43,245,230, - 93,247,242, 90, 55,145,244,156,144,141,106, 86, 63, 54,164,225,125,110,212, 9,233,107,194, 88,134,163, 17, 69,165, 80, 89,138, - 3, 58,157, 46,205,102,147,183,191,237, 27,216,221,189, 66,145, 87, 62,101, 46, 28, 10,199, 82,183, 77,191,223, 39, 47, 43, 14, - 7,144,117, 52,194, 89, 34, 33,216, 92, 89, 97,115,109,141,195,254,136,195,163, 1,227,194,178,190,210, 69, 41, 77, 28, 69, 24, -103,136,165, 23,141, 1,129,140, 34,126,231, 19, 31, 39,113,130,209, 81,143, 22, 18, 17, 43, 86,150, 58, 36,169, 87, 64, 67, 69, -236, 29, 28,210, 93, 89,163,187,188,138, 41,115,159,246,181,150,102, 35, 67,196, 9,197,104,136, 16,241,244, 51,194, 6, 45,105, - 77, 89,106,164, 16,158, 24,212, 20, 28, 31,247,136,227,120,146, 86,175,170,194,147,166,132, 87,205,243,146,111,207,151,106,159, - 1,124,230,193,123, 22,204,103,123, 85,189,159, 53,253,189,144, 42,148, 53,234,250, 61,115,252, 7, 49,243,239, 89,101, 42, 49, - 43, 45,233,174, 45, 51, 79,123,198,197,180,181,210,249,243,115,194, 33,172, 3,139,231,109, 72, 9,177, 66,197,202, 51, 71,141, - 65,151, 37,186,244, 81,188, 23,105, 17,147, 62,245,186,115,192,225, 83,137, 86, 91,132, 84, 24, 85, 77,110, 80, 41, 37, 40, 57, -233, 26,153,166,224,174, 21, 80,150,179,106,138,215, 73, 7, 82,235,211,215, 90, 9,218,183,229,153,210,171,235,153,178, 12, 41, -246,130,170, 44,176,149,255,222, 25, 29, 74, 11,158, 40,136,179, 56,237,201,110,194, 25,172,136,176, 57,216, 34,198,150, 41, 42, - 81, 16,197,224,162,192,180, 23, 97, 45,137, 57, 66,159,155,187,234,110,178, 9,186,241,128, 71, 62,244, 33, 30,252,133, 95,196, - 86,150, 72, 70, 40, 11,173, 78,131,225, 96,228,179, 82, 66,129, 83, 20,133,119,232,107, 39, 33, 77, 98, 76,101,137, 19,104,164, -138,173,141, 13,148, 18,140,122,125,112,146, 36,105, 50, 30,141,124,205,185,170,104,181,219, 28, 31, 31,251,107, 30,148,235,122, -253, 62,218, 90,210,172,201,104, 92,144,151, 37,221, 86, 74,214, 72,136, 35, 73, 18, 71,244,250, 67, 84,105, 16, 8,170,170,226, - 96,111, 27, 25,197,236,238,239, 98,140,229,204,153, 45, 14,118,174, 32,108, 69, 62,232,121, 1,156,200, 7, 35,113,170, 56, 58, - 62,242, 4,189, 36, 38,201, 18,118,246,118, 40,141, 69,197, 49,205,102,139, 98, 60,102,127, 56,230,236,205, 55,163,173,101,183, - 63,100,121,105,137,118,179,201,149,103,158, 97,251,234, 30,101, 62, 70,231, 99,180,246, 12,255,225,176, 79,163,145,224,156, 69, - 91,135, 43, 43, 90,205, 22,141,164,193,225,193, 1,163,188, 98,120,184,199,197,245, 37,108, 57, 70,209,161,215, 47, 40, 86, 59, - 72, 98,142,143,250, 72, 39,232,180,155, 20,137,166, 58, 28,211,141, 5,227, 50,247,179, 18,156,101, 48,232,211,220, 88,199, 58, -199,230,217, 51, 28,110, 95,197, 90, 15, 92,173, 86,155,170,200, 57,119,102,157,209,120,196,254,225, 1,157,181, 77, 10,227,208, -121,197,222,206, 1,135,187, 7,172,110,109,208, 72, 82,242,170,244,206,158,180,126,157, 59,119, 90, 19,186,135, 24,107, 61,159, -165,214, 73, 48,117, 86,201,119,166,232,144, 89, 41,171, 10,173, 13,149,148, 84, 33,208,243,160, 45, 79, 48,205,197, 68, 21,197, -205, 52, 41,215,100,186, 57, 31,217, 77,163,121,113,162,185, 78, 4, 69, 83, 39,132, 87,200,171,107,224,245,189,232, 2,190,213, -117,242,185,125,200, 78,121, 50,215, 40,177,138,185,247,152,229, 7, 8, 57, 75,140,147,215,232,224, 83,179,255,107,102,247,204, -247, 19, 98, 29, 98, 46,213, 63,207,195,247, 55,103, 52,187, 65,158,214, 59, 39,197,172, 54,173,152,219, 84,231, 62,234, 19,233, - 66, 59, 17,119, 15,100, 1, 2, 65, 32, 14,105,253,200, 98, 76,140,142,125,196, 94,150,254,171,179, 94, 2,180, 38,207,205,138, -203, 76, 54, 56, 21,104,255, 51,169,151,201, 48,142, 16,165, 79,100,108,157,239,153, 37,212,103,156,244, 68, 58,156, 79, 97,104, -237, 61, 69,165, 98, 26,205,140, 56, 73, 56,238,245,177,214,241,216,227, 79, 80,228,101, 40,144, 26,150,151,186,220,124,243, 77, -156, 57,115,134,193,225,161, 23, 15, 17, 10,135,100,112,116,196,168,168, 24,150, 37,171,203,203, 60,125,121,151,164,217,197,138, -200,147,212, 48, 8,103, 81, 18,218,161,206, 45,157,227,184,127,204,149,157,109, 94,119,225, 38,108, 81,144, 73,201,210, 82, 23, -163, 75, 6,227, 1,113, 22,211,219, 63, 96,103,247,128,195,222,128,155, 47, 92,228,153,103, 47,179,210,237, 32,156,161,213,106, - 49,202, 75,242,162,160,106, 68,164,113,132, 53,154,124, 60, 98, 85, 42, 10, 91, 77,116,215,227,216,139,191,164,105, 74, 81,106, -146, 56, 33,137, 99,156, 0,157,123, 5, 50,240,169, 76, 6,189, 19, 24, 46,107,237,184, 73, 59,226, 73,109,253,121,237,126,119, -221,148,153,171, 19,249,117, 29, 41,242,233, 38, 15,136, 98,210,222, 49,149, 18,119,115,192, 34,102, 2,126,196,181, 45,150, 98, - 78, 1,195, 3,187,116,179,169, 98,199, 76,131,105, 96,169,135,190,120,227,136,162, 8,147,248,168, 93,151,165,207,124,216,105, - 54, 73, 4,178,163, 16,161,239, 93, 24,172, 22,161,155, 98,202, 73, 17,147, 8, 62,212,198,212,108,251, 73, 45,234, 34,166, 17, - 3,204,245,184, 78,136,137,166,126, 24,116, 85, 97, 42,141,173, 10,127,108, 85, 16,226,169, 10,108, 85, 97,117,137,209, 37,206, -148,161,204, 80,129,174,112,161, 21,205, 90,141,177, 26,233, 52,202,165,152, 76, 97,242, 12,147, 15, 17, 81,132, 16,145,119,136, - 34, 95, 82,168, 63,100, 71,125,236,179, 60, 6,129, 51,254,115,215,101,206,213,199, 62,207, 47,253,244,253, 84,123,135,126, 51, -140, 35,150, 90, 77,198,197,144, 92, 87, 40,231,163,138, 34, 47, 9,229, 79,223, 55, 28, 24,211, 4, 93,249,141,181, 53,112,150, -241,168,100, 48, 24,209,110,175, 48, 26, 21, 40,233,107,206,237,118,215, 75,232,106,223,178,101,172, 97, 52,214, 24, 99, 17, 74, -162,181,161,212,190,181, 81, 8,200, 26, 9,173,166,111, 31, 19, 42,102, 56, 28,176,182,126,134,103,159,125,150,110,183,193,168, - 40, 24,143, 70,156, 61,119,142,203,207, 60, 69,100, 43,170, 98, 68, 34,160,204,115,226,134, 64,169,132, 65,175, 79,150, 36, 68, -248,249, 15,135,131, 30, 42, 73,104,173, 46, 19, 55, 50,142,142,250,172,159, 57, 75, 20, 37, 20, 14,186,203, 43, 88,103, 57, 26, -140,120,226,210, 83, 52,148,162,127,112,236,165,169, 27,137,119,168,117, 69,163,221, 69,151, 5, 66, 72,146, 70,147, 76,197, 28, - 29, 29,209,239, 95, 37,183,240,236,149, 93,206,174,182, 88, 91,110,179, 92, 74, 26,162, 96,115,117,141,225,184,192, 40,201,122, -119,149, 65,127,128, 25,140,104, 45,101, 44,199,171, 68,251,135, 52, 75,195,176,178,136, 60, 39, 63, 58, 98,144,166,196,113,196, -202,234, 26,207, 92,122,130, 70,156, 48, 24,141,104, 55, 59, 28,247,142,185,121,245, 2,107,107, 43, 28,244,159, 99, 52, 24,210, -110,181, 25, 85,134, 72, 37, 92,122,236, 9,150,215,214, 32,176,179,231,242, 78,147, 76,152,152,215, 97, 8,197, 80, 97, 20, 70, -123, 73, 86,165, 13, 86,134,122,124, 80,132,243,221, 86, 80, 73,233, 37, 93,131, 52,181,159, 99, 32,102,100,150,231,137,114,238, - 20,254,206,220, 94, 52, 19, 57,219, 19, 76,116, 81,139, 82,213,186, 14,206, 98,141,192, 8,223,230, 92,223,143, 19,172,156, 25, - 86,131,148,243, 78,254, 9, 65,153,201, 0,150, 19,153,110, 21,244, 42,102, 63, 35,174, 27, 14, 79,247, 2, 17, 30, 88, 91,119, -212, 79,196,102,166,251,233, 12, 81,238, 70,169, 3,112,161,141, 39,104,237,205, 2,250,204,201,156, 76,145,248, 22,181,144,166, - 8,195, 31,172,192,171,126, 5,141,191, 64,134, 70, 73,129, 83, 94,141,202, 25,129, 9,253,241, 88,135,211, 38, 16,171, 66, 90, - 82,121,207, 80, 24,207, 92,159, 12, 17,112, 83,253,223, 90, 34,180,246,180, 68, 24,226,226,228,164,201, 2,171, 82,172,202, 88, - 63,115, 11,219,143, 95, 66, 68,128, 46,208,229,152, 56,130,139, 55,157,225,241,199, 31,230,201,167,158,192,184, 18,129, 1, 41, -232,143, 70,164,205, 46, 82,164, 52,162,148,172,211, 33,107,167,180,187, 93, 28,138,221,237,103,233, 44, 47,115,219,197,155,248, -228,231, 31,163,170, 52, 42, 46, 16, 34,198, 10,129,136, 34, 26,105, 10, 74,121, 39,198,149,116, 91, 75,124,253,155,222,194,209, -238, 30, 78, 88,218,173,140,179,103, 55, 61, 81,201, 57,180, 21,124,252, 19,191,207,218,218, 6,119,222,122, 43,163,113, 78,146, -181,184,116,121,155, 52, 77,216, 56, 95, 98,139,130, 8, 24,143,115,210,172,225,153,237,253, 1,105,164, 40,149,130, 88, 49, 46, - 43,210, 52, 35, 31, 23, 56, 41, 88, 89, 94, 34, 31,143,136,226,148, 82, 91,148,208, 52, 26, 13,164,146,148, 78,146, 32, 16, 78, - 35,133,195,134, 60,135, 17, 98, 34, 60,115,163, 41,121,167,105,250, 79, 0,181, 78,109, 9,139,148,222,201,137, 20, 33, 5, 47, -136,148, 67, 5,221,117, 33,221, 36, 17, 52, 59,107, 64,204, 42,186,213,125,175,167,100,139,220,132, 22, 26,234,207,190,138, 18, -110,134,112, 92,118, 94, 29,177,230,107,212,195, 95,162, 56,154, 68,236, 58, 8,220,216, 32,213,234,163,231,169, 64, 70, 45, 41, - 59, 81,142,146, 18, 41, 3,167, 36, 73,188, 44,173, 82, 65,200, 69, 76, 68, 51,188, 24,142,241, 29, 5,225,181,117,237,216, 26, -235, 25,235,101,221, 78,228,133,118,180, 30, 97,170, 10, 93, 21, 1,192, 13, 46,200,184, 98, 43,172,245,145,186, 13,204,127,103, - 76,232,131, 15,142, 49, 48,150,144,229, 21,201, 96, 76, 34,251,196, 26,168, 52, 52, 50,136,163, 48,176, 69,214, 77,245, 30,228, -101,136, 84,144,148, 50, 1,145, 32,141,166,216,219,229, 87,127,250,103,120,238, 11,143, 32, 68, 68,156, 8,210, 52,161,168, 52, -163, 97,133,239, 56, 86,140,243,106, 34,209,233, 73,134,254, 90,107, 12, 73, 36,104,181, 82,154, 89, 66, 85,149,244,122,125,146, -164, 69,105, 44,227,178,164,153, 53, 49, 78,144,181,219,244, 71, 99, 92,152,180, 40,132,161,215, 31,144,100, 25, 42,142,169,180, - 97,127,119,159,205,205, 85,218,141, 6,205, 56,193, 86, 6, 41, 85, 96,162,183,232, 29,239, 98,117,133,165,203,246,246, 21,214, -214, 87, 57,218,187,130, 45,134,228,225,126,234,231, 35,150,151,151,193, 57,138,145, 23,110, 90, 89,219,240,221,205,105, 66, 44, - 44,203, 43, 43, 20, 85,133, 76, 82, 46,220,178,206, 96,152,211,106,117, 89,107,181, 65, 73,158,188,252, 28, 90, 56, 92, 51, 35, -215,154,229,243,103, 17, 90, 51, 56, 62, 70,139, 24, 34,133,118,150,180,153,146,143,251,236, 30, 28, 16,225,136,133,244,217, 34, - 1,218,228,228,227, 8,105, 97,101,125,149, 74, 23, 28,244,142, 88, 95,222, 0,171, 48, 68,100,203,203,236,236, 94,197,198,138, -172,213, 68, 45, 47, 35,198, 57,241, 96, 76, 55, 85, 68,229,152,225,113,159,164,213,166,153, 89,178,118,155, 72, 74, 6,199, 3, - 63,199,193, 41,134,163,146, 86, 35,227,236,250, 42,207,108,239,209,108, 55, 49,145,164, 40, 10, 80,146,237,103,159,101,253,220, - 89,239, 88, 6, 57, 86,103,237,156, 38,121, 77, 0,115, 98,218, 33, 37,156,243,140,110, 87,183,126,250, 44,144, 69,214, 77,174, - 65, 3, 67, 35,165, 37, 82,214,183, 21, 90, 79,128,158, 37,224,205, 42, 59,217, 73,180,234,230, 2,138, 73, 38,121, 38,133,238, - 78,200,181,214, 25,205,186,244, 59, 87,235,159, 12, 77,154,200,197, 77, 2, 17,127,142, 97, 98,100,157, 45,228, 90, 80, 23,129, -224, 43,103, 34,109,159,110,119,215,148,186, 39,228,216,192,145,145,130,160,134, 23,218, 90, 29, 8, 25, 50,212, 42,240, 93,130, - 24, 77, 13,234,118,102,234,105,116, 93,241,118, 78,100, 85, 79,148, 71,231,164,175,197,137,180,128,240,180,126, 55, 51,130,213, -111, 88,126, 90,142, 49,198, 19,121,140,157, 68,228,174,142,176, 3,233,166, 38, 49,216, 25,121, 89,105, 45, 24, 95, 95,112,147, -246, 56, 49, 73, 91,186, 48,124,160,238,123,244,100,115,255, 1, 72,100,208, 44,150,104, 36, 43,235,231,208, 42,163,116, 10, 39, - 21, 73, 26, 81,149, 37,105,234,199, 71,222,121,231,235,120,234,217, 39,233,245,119,189, 76,169,138,120,221,107, 94,203,219,223, -246, 54,142,143,142,137,170,130, 84,217,112, 30,128, 76,232,118,186, 40, 41,120,243,155,222,200,175, 60,248, 17,100, 35, 67, 74, - 73,169, 53, 69, 49, 38,142, 34,207,112, 45, 42, 70,253, 30,253,222, 17, 66, 87,220,113,241, 38,246,246,246,144, 18, 86, 86, 87, - 88,234,118,112, 66,176,178,182,134, 72, 26,220,116,203,205,140,134, 99, 42,171,121,228,210, 19, 24, 41,201, 15, 11,242,113,193, -153,141, 45, 46,108,172,209,109,183,201,203, 49,101,208,255, 30,246,123, 20, 65, 3, 62,175, 42,146, 52, 33, 73, 98, 70,195,145, -175,175,231, 37, 27, 27, 27,196,113, 76, 89,110,211,202, 34,100,236,111,186, 66, 87,164, 74,129,173, 60, 9, 43, 48,155,167, 98, -135,238, 90,176,190,102, 40,207,141,148, 0,125,125, 82, 73, 71, 20,121, 89,217, 72,133, 62, 77, 85,179,238, 79,146, 85,174, 67, - 78,153,212,218,221,169, 60,154,201,219,219, 16,225,215, 58, 49,202, 59,142,136, 80,182,113, 83,233, 75,159, 38,155, 97,157,198, -177, 39,113,233,192, 32, 15, 4, 59,107,140,175,181,219,233,100,183,122, 74,155,255,220, 60, 33,210,196, 49, 70, 87,196,113, 60, - 33,214,249,238, 29, 49,153, 42,231,140,193, 86, 37,186,244,132, 61,109, 60,247,196,106,141, 46,125,109,220,134, 90,191, 53, 26, - 99,198, 62,181,110, 53,194,250, 44,144,215,101,215, 56, 91,226,156,158,240, 77, 68,221, 71, 89, 59,186,214, 96, 29, 12,135,218, -119, 61, 4,209,145,108, 60, 34, 26,117,144, 89,138,140, 19,100, 28,251,169,131, 42,158, 76,101,115, 42, 66, 69, 96, 85,140,136, - 19, 95,230, 25, 15,249,216,127,254, 85,126,239,193,223,192,228,185,151, 73, 13, 65,192, 81,111,224, 51,119,218,247,181, 87, 6, - 95, 6, 8,174,130,196, 79, 62, 76, 83, 95,130, 57,115,102,131,162,244, 19,204,242,194,176,214,109,177,179,191, 71,156, 54,176, - 2,146, 70, 6, 66, 82,150, 37, 42,146, 33,141,107,136, 66,175,121,162, 34,158,126,230, 57, 26,169, 34,142, 20, 73, 28, 81,228, - 57,105,154,122,173,244,178, 36,107, 54,217,190,122,133,243, 23,111,225,201,103, 46, 35,133,164, 42,114,142, 15,246,200,226,136, - 72, 66, 62, 24,177,177,190,238,117,224, 7, 3,162,164,201,109,119,188, 6,237, 4, 66, 37, 84,206,178,178,186, 68,146, 36,164, - 77,193, 56,207,217,221,221,101,235,204, 57,150,150,150, 56, 58, 62,226,234,238, 30,105,203, 75,184, 42,227,216,216,220,192, 22, - 57,207, 61,251, 12,166,210,180,187, 75, 20,121,142,112,142,131,189,109,242,209, 49,194, 25,136,125,215,143,169, 52,135,251,251, - 96, 45,113,236,219, 48, 15,143,253,192,151,181,181,101,198,199, 3,150,151,151,216,223,217,102,109,107,147,141,141, 45,170,178, -160,204, 43,100,146, 80, 84, 37,157,181, 21,162, 70,131,253,253, 67,178, 52, 99, 48, 28, 51,206, 98,214, 55, 54,216,219,221, 37, - 74, 83,122,163, 17,203, 75, 75, 28, 30, 30,179,181,185, 65,218, 59,102,117,169,197,241,209, 62,173,213, 77,202,188,162, 28,143, -121,234,137, 47,210,108,183, 41,172,161,170,253, 97, 55,109,129,246,188, 24, 53, 81, 62,171, 37,150,167,109, 98,211,122,242,164, -220,100, 21, 78, 66,164,124, 29, 93, 8,139,114, 14,105, 12,214,202, 48, 92,134,144, 34,103,206,129,118,167,132,184,117,192, 41, - 17,215, 14, 63,153,139,236,205, 36,251,102,235, 57, 17,198,143,149,214, 53,207,235,196,224,154,169,122,219, 12,246,204,206, 65, - 9, 98, 57,114,118, 96,203, 68, 1, 46, 56, 23,115,129,240,181,128,238, 68,125,174, 14, 39,173, 15, 54,164,207, 64, 57, 9,210, - 4, 65,176,186,254, 30, 90,218,234, 25,215,215,128,250,132, 5, 56, 11,198, 55,152,138, 38,130,194,149,156,103,254, 76, 52,171, -173,181,126, 76,167,118,104,163,253,112, 9,227, 38, 42, 95,147,209,146, 65,134,112, 10,240,161,191, 28,225, 9, 19,118, 42, 92, - 96,157,243, 36, 37,235,107,198,184,147, 53,202,186, 31, 61, 92, 84,234,214, 33,159, 66,180, 78,161,146, 14,157,245,179,244,199, -154,149,245,117,142,118,198, 56,231, 63,172,163,195, 30, 56,193,206,206, 62, 91, 91,231,121,250,233, 39,177, 54, 39,141, 18, 58, -105,147,118,214,196,152,138, 36,145,140,134, 5, 73,214, 34,138,154,116,151, 87,216,223,189,202,254,246, 54, 23,206,156, 35,146, -138,188, 40,105,100, 13,142,142,123, 68, 74,160,100,143,170, 44,233,133, 25,225,207, 92,190, 76, 57, 30, 66, 89,145,231, 37, 42, - 74, 88, 89, 94, 33,142, 18,186, 75, 75, 84,198,240,145,223,249, 93,142,142,123, 56,224,182,102,147,195,241,144,194, 88,140,115, - 36,192,225,225, 1,183, 95, 60, 79,132,247,246,101,172,130,162, 90,197,241,241, 33,171, 27, 41, 56, 71,150,164, 84, 70, 19, 41, -201,114,167,205, 80, 12,177, 38,100, 53,148,164,153, 54, 64, 8,246,143, 14, 73,133,165,165,188, 68,106, 61, 11,185, 86, 44,171, - 3,245,147,128,126, 90,164,126,106, 27, 74,205, 74,175, 71,177,170,186,149, 67,204, 12, 51, 56, 89, 18,154,122,148,179,228,148, -217, 18,214,245, 8,155, 98, 66, 29, 15,181,124, 41, 38, 53,192,122, 40, 69,200,103, 33,106,112,158, 84, 26, 60, 81,197, 33,188, - 8, 75, 28,161, 76,234,137, 63, 1, 96, 77,229,107,132, 70,151,216,170, 22,232,240,165,140, 90, 94,210, 68, 17, 85,161,168,194, -184, 83, 15,234, 94,170,210,104, 67, 21, 64, 91,151, 37,186, 40,124, 27, 84, 85, 82, 85,197,164, 37,205,153, 16,121, 91,239, 0, - 8,103,188, 24,140, 51,193,155, 15, 63,115, 14, 48,161,100,225,157,107, 27,102,192,215,242,178,218,150, 33,245,107, 57, 28,244, -201,142,142,105,119,186,180,218, 29,154,237, 46, 89,179, 69,146,101, 68,141, 6, 73,218, 8, 45,173,126, 80,139,136, 18,108,154, - 32, 26, 41,194, 10,148, 43,121,246, 51,159,230,223,255,255,126,134,209,241, 1,105,170, 2,127, 67, 50,234,143,144, 82,162, 43, - 79, 76, 45, 43,139,157, 29,230,161, 4,218, 58, 26,169, 66, 56,199,218,234, 50,214, 24,138,178, 98,119,255,136,141, 51, 91, 28, - 15,135, 62,174, 19, 2, 99, 44,237,118,155, 60, 47,195,166,107,137,227, 38, 69,153,131, 16,164, 73,194,115,207, 93,241, 78,132, -177,164,177,164, 44,198,172, 46, 47,161,171,138,237,157, 29,206, 94, 56,207,222,206, 14,141, 70,131,227,163, 3, 70,253, 30,235, - 27,171, 28,236,238, 16, 69, 94,179, 34, 81, 17,205,172, 65, 85,229,228,121,201,210,242, 42,155,103,207,145,107, 67,145, 87, 24, -109,232, 44,117,201,210, 6, 8,199,246,206, 54,103,207,158,231, 53,183,157,197, 57,201,211, 79, 63, 75,207,228,172,159, 63, 3, -218,225, 42,203,250,106,151,157,171, 87,121,238,217,167, 57,123,238, 76,168, 99, 23,196, 42, 70,151, 99,150,187, 45,122,102, 68, -171,217,166,149,101, 60,251,212,211,129, 59, 97,217, 90,107,179,220,105, 81,153, 10,163,225,240,104,196,153,141, 51,180, 54, 19, - 14,123,187,156, 59,119,129,131,221, 29, 84,156,208, 93, 94,166,221,105,209,239, 31,179,114,254, 2, 59, 79, 62,197,153,243,231, -201, 29,236,238,237,146,181, 58,236,109,239,114,241,166,243, 28, 28, 28, 18, 37, 17,133, 30, 99, 5,152,170,242, 67,110,178,140, -188, 44, 25,228, 5,227,193, 49,141, 70,139,126, 81, 80, 73,193,229,167,158, 97,101,107,147,202, 84,190, 21,141,105, 84,170, 66, -118, 75,213, 68, 47, 57, 25,127, 53,193, 3, 47, 59,108, 38,160, 62, 91,234,141, 34, 63, 21,208,205,212,184,149,155,145,138,197, -157,168,175,203, 83, 39,114,214, 17,244, 60,184, 50, 23,169, 11,226,185,153, 36, 53,160, 43,165,136,102, 37,151,107, 41,230, 16, -245, 75, 41,174, 25,170, 50, 87,122,158,145,140,230, 52,210,156,184, 78, 71, 80,157,249,152, 8, 85,249,254,118, 27,178,134,210, -132, 26,187,146,126, 31, 86, 18,105, 69,224,147, 76,103,152, 60,111,164,238,174, 51,198,116,226,117, 57,252, 70,200,204, 4,155, -137,136, 12, 83, 50,132, 49,104, 29,254,109,141,215, 99, 14,162, 51, 70,135, 84, 71,168, 87, 26, 51,149,246,116, 97,144, 68,205, -134,170,103,230, 10, 59,147,230, 23,243, 58,184, 74,212, 64,228, 38,163,252,234,209,160,214, 8, 52, 49, 91,231,110, 99,108, 35, -142,134,125, 54,182, 54, 56,218,127,134, 39,159,124,134, 91,110,121, 45,189, 94,159,163,195, 30, 89,214,226,201, 47, 62,197,249, -243, 23,217,222,126, 22, 83, 9,238,184,253,245,126,112, 68, 57,100, 84,121, 86,236, 74, 99, 25,149,173,208, 92, 90, 6, 33,216, -221,222, 38,110,117, 57,183,185,193,163,207, 92,166,175, 53,107,235,203,116, 58, 29,142, 14,247,113,110,132, 53, 21,155,235,235, -220,118,199,107,120,226, 11, 15, 51, 28,140,201,139,146,243,103, 54,200,178, 38,145,242,105,194,206,210, 18, 18, 56,234,245,217, -220,218, 96,255,240,208,215, 10,169,251,202, 29,163, 60, 39,137, 99, 18, 37, 81,177,244, 41,222,224,208,152, 74,227, 76,133, 0, -198,227, 49,198,122, 38,183,174, 10,170,170,228,224,224,144,209,104, 72, 20,199,244,250, 61,218,221,101,132,140,168,116,137, 85, - 17, 22, 53, 37, 23, 58, 55, 83,234,224,121, 35,245,235,183,187,185, 9,137, 68, 42, 49, 81,173,139,148,156,214,211, 79, 68,232, - 39,135,241,156,156,160,114,122,139,229,204, 82,158,220,124, 51, 36,152, 64, 36, 71,214,169,123,133,245,243, 37,145,174,158, 95, - 16, 20,241,124,195, 32, 72,129,138, 28,210, 70, 68,198, 98, 18, 31, 85, 87,101,133, 27, 91, 42, 29, 24,231, 69, 65, 85,230, 24, -109, 38, 25, 46,169,124,125,122,174,182,110,189,222,118, 89, 20,232,162,160,156, 1,117,107, 42,175, 16,104,167,242,172, 94,209, - 77,251, 57, 2,174, 86, 75, 20, 19, 73,103, 41,106, 50, 96, 24,242, 50,113,150,125,134,172,110, 37, 45,141,166,210,154,178,242, - 17,123,148,106, 90, 67,199,242,178, 98, 89,167, 44,185,140, 78, 28,131,246, 18,185, 88,252,108, 1, 12, 42,117, 72, 27,163,164, - 36, 83, 80, 28,237,243,159,254,143,159,229,232,169, 39, 72, 34, 48,165, 33, 74, 34,122,189, 17, 74, 40,138, 82,163,132,162,212, -214, 11,169,128,231,232, 40,133,209,154, 36, 81,168, 56, 34,182,134,229,110,135, 97, 62, 96, 48,204,113, 74, 97,132, 96,144,151, - 56, 99, 73,211,134,111,197,116, 48, 26,143,253,181, 49,144,231, 57,149,214,164,141, 38,189,254,128,170, 44,209, 85,197,230,250, - 50,105, 36,105,166, 94,112,105, 48, 24,248, 22, 78,235, 24,141, 70,108,157, 61,203,227,143, 63, 65,214,236, 80, 21, 35,208, 37, - 56,104,196, 17,186, 44,137,155, 45,146, 40, 34,106, 71,172,175,175,115,220, 31, 48,214, 6,226,152,179,231,206,249, 49,196, 85, -197,104, 56,224, 53,183,222, 70,187,221,230,104,127,143,178, 52, 56, 93,178,186,178,194,184, 63, 64, 26, 73, 34, 21,191,255,217, -207, 19,167, 49, 55,221,113, 7,131,225,144,150, 84,180,219,109,174, 62,253, 36,197,240, 24, 97,114, 86,186, 45,198,131, 1, 59, - 71, 7, 96, 53,163,209,152, 78,179,197,106,183,201,241,254, 62,107,173, 38, 43,235,231,216, 63, 60, 98,239,160,199,214,122,155, -181, 51, 27, 28, 29, 31,178,212, 89,101, 52,174, 56, 60, 60, 34,203, 50, 95,106, 59,236,113,246,206, 59,217,126,234,105,214, 46, -156,167, 95, 94,161,170, 74,172,173, 48, 14,100,156, 82,234, 2,149, 52, 40,140,165,153,164, 12,199, 99,210, 68,209,110, 53, 41, -141,229, 96,144,227,162,152, 88, 42, 76, 85, 49,234, 29,211,233,116,252,100, 63,231,107,222, 62, 66,149, 65,232,200, 96,107, 80, -175,243,122, 66, 79, 74,111,132, 97, 86, 83, 48,179, 62,219, 38,125,248,165,106, 66,109, 29,205,135,225, 41, 78, 76,189, 65,247, - 60, 35,184,231, 65,118,158,139, 51,153,150, 22, 28, 92,165, 60, 95, 75,169,144, 49,140,252,124, 14,103,220, 28,175,235, 36,151, -108, 22,212,231,100, 96,103, 4, 28,156,187, 86,195,197,203, 47,159,228, 29,184,233,118,230,196,108,132, 29,132,220,102,228,109, - 69, 61,100, 56,200,218, 6,197, 84, 59, 35,143, 62,175, 40, 55, 35,150, 63,105, 1, 8,172,114, 33, 5,206,216,185, 3,169, 61, -174,217,135, 9,242,129,126,236, 99,152,195, 61,147,214,208,117,154,195,233,201,198,227,220,180,207,176,158,134, 54,209,177,158, - 83,186,147,147,249,178, 19, 15,111, 50,107, 86,204,203,218, 33, 39,175, 45, 4,152,240,124,167, 26,164,203,155,236,143, 44,221, -213, 85, 58, 73, 69, 18, 75, 14,143, 14, 89,237,245,216, 58,187, 66,165, 53,111,120,195,215,208,238,118,120,248,209,207,178,187, -115,133,175,123,219, 31,225, 77,111,253, 70,246, 15,143, 80,102,204,106,183,201,109,183,190,134,245,115,183,209, 94, 94,165,114, -142, 81, 62, 66, 9,135, 45,114,222,250,166,175,225,115, 79, 60, 65,210,108, 35,133,196, 24, 77,183,219, 69, 58, 67, 89,192,149, -171, 87,233,118,219,172,172,173, 49, 58, 56,198, 34, 73, 27, 45,132,242,196,186, 70,163,129, 53,134, 55,190,246,117,236,237, 30, -208, 80, 49,253, 94,111, 50,130,208,134, 13,114,121,101,153,188, 42,177, 26, 82,145,120, 9,209,204, 59, 92,166,204,177,186, 68, - 8, 69,153,143,184,186,179, 75,145, 87,126,126,111,148,248, 89,218,177, 79,229, 52,178, 22,149,129,179,103, 47, 48,236, 29, 33, -170, 35,172, 45,176,182, 10,253,254,242, 84,125,231,211,106,234,167, 69,236,179, 99,117,235,255,215, 17,122, 20,213,195, 12,102, -219, 43, 79,222, 12, 83,125,224,105,132, 46, 38, 45,138, 39,129,125,126,136,207, 20,229,229,204, 77, 35,107, 5,188,144,157,154, - 48,209,173,239,215,150, 65, 47,161,230,108,212, 13,161, 66,120,178,166, 12, 89, 42,137, 67,216, 8, 87,130,118,154,178, 28, 83, -141, 71, 20, 65,227,159, 32,170,225,230,102, 71,123,231,211,107,176,151,148,165, 39,190,249,175, 1,208,181, 31,188,226, 92,229, - 35,113,172,151,111,150,130, 68,122, 1, 10, 17, 41, 63,240,198, 9,180,112,147,161, 22,190, 12, 99, 41, 42,255,181,212, 26, 99, -125, 43,143, 19, 49, 42,110,160, 90, 13,178, 52,163,213, 89, 34,107,183,105,181,187, 52, 58, 93,100,179, 9,205, 14, 34,203,208, -224, 29, 23, 93, 34,132, 35,149, 49, 66, 38,196, 78,160,243, 33, 31,254,213, 95,230,227,191,245,235,180, 34,201,120, 88, 96,172, -101, 56, 28, 33,156, 96, 56, 44,125, 31,186,181, 20,149, 65, 42,129,181, 16, 73,133, 49,102,114,189,171, 66,115,246,220, 10,121, - 57,194, 2,195,162,164,217,105,147,151,134,188, 42,201,146,196, 43,205, 69,137,119, 68,172, 69, 42, 63, 22,180,172, 42,180,179, -148,131, 62,136,136,178,168,136, 35,252, 28,246,106, 76,182,220,161, 8, 35, 82,219,205,140, 65,191,207,202,242, 10,219, 87,174, - 80, 21, 37,203, 75,146,131,157,171, 52, 27, 49, 66, 91,134,163,130, 51, 91,235,164,105,194,168, 63,100,121,109,141,163,227, 99, - 10, 39, 73, 90,109, 54,182, 54,105,183,219,140,134, 35, 14,118,247,121,237,107,238,192, 58, 67,149,143,113, 85,137,178,176,185, -178,204,238,209, 17,157,102,135,199, 30,127,156,195,163, 30,103,206, 95, 96,105, 99,149,195, 81,143, 91,110,186,136, 29,141, 25, - 30,237, 35, 93, 69, 59,145, 20, 35, 77,255,176, 71, 18, 75,148,213, 52, 27, 9,105,154,208,202, 90,236,239,236,147, 40, 65,111, -208,231,220, 77, 77, 54,227, 6, 15,125,242,243,252,145, 63,242,102, 84,156, 80, 57, 73, 89,105,146, 36, 65, 8,193,206,222, 62, - 43, 65, 50,183,236, 13, 89,189,120, 19,131,163, 30,103, 47,158,227, 96,231,128,131,227, 3,122,253, 1, 42,138, 81,177, 67, 83, - 49, 46, 11,150, 59,171,228,163, 1, 75, 89,151,209,184, 64, 73,201, 74,167,205,176, 52,196, 42, 98, 60, 26,147, 53, 50,242, 65, -159,230,202, 50, 0, 85, 40,165, 16, 82,216, 88,139, 80, 42,148,182,106,249, 84, 51, 25, 0,227,187, 41,230, 57, 54,117, 86, 88, -214,179, 85,103,116, 16,228,236,224,164, 73,234,125, 86, 18,153, 83,181, 32,102, 9,182,167,237, 13, 46, 68,198,181,172,181,181, - 98, 18, 84, 56,105,253, 35,146,147, 25, 11, 39, 39, 55,158,246,122,179,243,215, 79,205, 84,214,204,246, 25,117, 84, 41,103,167, - 73,158,222,226, 58, 17,163, 99,134,242, 31,230, 86,216,144,133, 20, 51, 14, 70, 52,187,241,218, 19,147,102,252,200, 74, 66,234, -107, 70, 66,243, 68,111, 95,157, 50, 55,115,234, 65, 94, 81, 72,107,141,209,214, 19,127,108,232,173,181,206,171,122, 89, 59,169, - 37, 76, 37,254,106, 90,206,181,227, 96, 79,246,206,159,172,229, 79,164, 76,231,116, 6,236, 68, 31,220, 57, 88,219, 92,161, 18, - 41,217,114,198,106, 75,177,115,233, 83,108,109,172,176,190,182,130, 82,130,170, 42, 57, 60,220,231,163, 31,253, 40, 31,253,248, -199,232,245, 15,200,243,156,103,175,110, 35,227,136,106, 60,194,149, 71, 16, 21,252,246,111, 61,192,205,111,120, 59,111,122,219, - 31,161,221,240, 67, 72,202,114,204,250,230, 50, 95,247,214, 55,242,171,191,249,155,228,214, 95,173, 44, 77,168,138, 28,109, 53, -163,209,136,189,189,109,174,110, 27,150,178, 22,103,215, 54,168,242, 17,185,174,200,171,146,229,165, 14, 81,146, 16, 37, 9,103, - 54,218,124,237, 27,223,196, 83, 87,158,163,170,204, 36,250,148, 66,176,220,237,176,186,182,198,165, 75,151,248,154,215,220,225, -235,190, 50,166, 44,252, 44,247, 34,207, 41,198, 99,134, 69,193,112, 48, 34,146,112, 60, 26, 32, 17,180, 58, 75,164,105,130,138, - 98,242,210, 48, 46, 53, 68,138, 70,163, 69,172, 34,228,208,144,231,125, 98, 33,161, 38, 88,185, 25, 41,212,151, 32, 60,115, 93, -239, 90,184,233,192,147,211,212, 10,165,155, 39,225,207, 23,140, 94,156,210,157,152,233, 29, 23,211, 16, 96,194,226,173,123,238, -157,195, 74,135,180, 54,136,188, 48,145,150,117, 70,251, 44,146,246,255,182,149,111, 25, 83,206,160,132, 65, 88, 63,251,189, 26, - 15, 40,203, 28, 99,244,169,250, 15, 94,225,174,244,130, 76, 1,208,125,164,233, 35,126,156,153,108, 80,145, 10,237,126, 74, 76, - 84,222, 16, 62,125,109,195,189,105,172, 47,109,149,198,131,104,165, 13,214,249,246, 77, 25,181,137, 26, 9,205,172, 77,163,213, - 37,107,181,105,182, 59,164, 89,147, 70,171, 77,163,217, 36,105, 52, 72, 26, 25,113,154,120, 98, 95,228,219,252,202,188,192,201, -220, 15,120, 73, 99,226,180, 73,154, 68, 60,249,153, 79,242, 31,255,245, 63, 39,170, 74, 70,253,138,170,116,196,177, 31, 40,146, -231,190,255,220, 88, 71, 89,121,182,184,113, 22,165,228,100, 46,128,146,120, 6,180,132,118, 39, 99, 48, 30,209, 27,142,144, 73, - 66,171,221,101,103,119, 31,225, 20, 73,146, 82, 20, 5,221,110,230, 37,151,157,240,154,241,210,159,243,184,204, 73,146,140, 34, - 47, 49,198,209,105, 38, 36,145, 36,137, 61, 33,179,215, 63, 6, 4,205,216, 51,206,181,113,244,142,123,180, 90, 77,138,241,128, - 88, 58,132,213, 20,121,193,133,243,231, 24,143, 71, 12, 6,125,150,218,109,142,143,142,137,155, 29,146, 52, 97, 99,109,157,173, -181, 13,142,142, 14,216,191,122,149, 91,110,190,213,183,178, 2,194, 88,218, 13,159, 77,232,237,239,163,180,229,210, 83, 95, 32, -207,115, 86, 87,151, 17,210,111,194, 23,206,156,161, 24,245, 73,141, 97,116,180, 79, 51,130,209, 96,128,211, 99, 86,130,208,206, -114, 51,163, 55, 30,209,104,182,184,250,244, 54,174, 52,108,156, 89,161,151, 15, 65,250,186,235, 77,183,222,206, 67,159,122,130, -175,127,219,155,217, 90,219,194, 20, 57, 69, 85,226,100,140,115,134,241,120, 76,163,217,164,223,239,179,178,188, 76,115,117, 21, - 49,214,228,121, 65,127, 52, 96,123,123,151, 78,183, 27, 8,109,126, 96, 73,105,193, 32, 40,130,236,180, 28,121, 96, 79, 19, 69, - 81, 86, 36,113,204,209,225, 62,105, 43,163,179,186, 76,210,108,162,133, 31,156,226, 42,223,107, 46, 66,203, 87,205,242,150,174, -198,119, 47,249,138, 80,190,107,164, 14, 2,220,116, 90,154,157, 37,110,201,121, 73,242,217, 98,112,205,127, 21,167,100, 12, 79, -241,227, 79, 13, 64, 84, 29,228, 9,175,102,103, 67,170, 91, 5, 66,182,181,238, 84, 86,253, 73,101, 57,102,134,202,212, 99, 87, -173,117,215, 47, 65,202, 19,242,151, 51, 25, 4,203,180, 91,231,164,159, 50,209,191,159,176,242,167,242,153, 94,183,101, 42,229, - 29, 77, 65,114,186, 89, 91, 99, 48, 82, 80, 57,135, 21, 2,173,245, 28,104, 78,234, 16, 33, 77,105,102, 70, 62,214,145,122, 13, -224, 58,204,119,214,214,120,205, 12, 83,123,109,102,146,114,135,217, 13, 79, 77, 64,125,238,216,230,100,106,231,107, 17,110,238, -195, 11,155,134,152,147, 65, 8,159,129, 34,109,181, 33,105,112,241,150, 59, 88,138, 10,158,252,212,111, 50, 62,222,165, 24, 13, - 73,207, 70, 88,167, 65,104,254,244,247,252, 41,162, 36,225, 51,159,253, 61, 30,125,228,179,188,225,141,175,103, 60, 58, 70,228, - 61,150, 84,193, 19,191,247, 73,246,199, 21,199, 69,197,219,254,216, 55, 18,103, 49,231, 47,158,227,202, 23, 31,166,149,197,108, -174, 45,243,166, 55,222,201,199, 62,249,105, 6,253, 99, 36,134,172,145, 98,202,138,225,160,143, 51, 6, 41, 28,195,241,136,125, -142,144,206,160,117,206, 56, 31,114,203,197,243,108,110,109, 82, 25, 67,162, 4, 87,118,118,232, 13,135, 84,206,248,200, 41,164, - 48, 81,146, 71, 30,125,132,168, 44,217, 90, 93,241,243,218, 35,133, 85, 38,172, 5,139,148, 80, 22, 94, 18,116,109,101, 5,133, -164,215,235,211,239, 29,147,181, 59,129,116,225, 16, 17,228,149, 33,138,189,183,239,242, 4, 23,198,179, 58, 99,167,202, 76,238, -218, 94,234, 23, 3,170,215,136, 53,136,169,176,140, 56, 65,194,100,226,109,207,215,163,132,184,254,235,189, 96, 96,159,233,121, - 17,115, 58,206,158, 76, 55,171, 41, 45, 3,185, 19,171,125, 71,134,214,129, 45,171,113,101,229,211,229,165,239,158,176, 85, 1, -182, 68,160,193,149,216,106, 68, 21,230,216,207, 48, 3,252,204, 3,171, 41,203,146,178,238, 55,159, 25, 58,131,117, 83,246,172, -144,129,211, 39, 60,203,213,129,213, 62, 69,232, 44,104,107,169,180,119,164,173,117, 88,169, 64,165, 68,173,148, 52,107,211,104, -182,201, 90, 93,210,172,229, 71,219,182,218, 52, 50, 63, 12, 37,206, 26, 68,141, 6,113,154,160, 66,205, 95,169, 40, 8, 98,248, -180,123,148, 23, 68,105,226,163,133, 40, 70,170,136, 81,239,144,223,253,224,175,209,191,252, 12,162, 95,128,145,164, 73, 66,158, - 23, 19,193, 35,173, 29,149,113, 40,169, 2,243,222, 51, 91,188,243, 41,136,149,192,104,205,197,155,183,130,214,185, 98, 88,148, -108,108,109,113,120,220,163, 44, 43, 26, 73, 35,100, 71,252,174, 80, 85,158,112,168, 75, 67, 35,139,233, 15,251,200, 88, 17, 69, - 49,195, 97, 73, 18,250,197,171, 34,167,219,242, 95,203,178, 32,203,154, 56,107, 73,227,152,171, 59,123, 56,231, 72,226,136,241, -240,152, 72, 2, 86,179,210,109, 49, 26,248,222,247, 36, 73,168,116,137, 84, 41, 74, 41, 58, 75, 43,108,174,111,209, 59, 60,162, -127,116,196,205,231, 47,208,204,154, 20,249, 8,165, 64, 40,133,209,134, 98, 52, 66, 23, 57,219, 59, 59,168, 36, 33,145, 41, 43, - 27,171, 44, 47,175,160,203,138, 70,105,169, 74,205,254,222, 21, 98, 97,176,249,144,149,118, 70, 89,128,197, 82, 90,131,176,134, -243,231,206,242,212, 51,207,210, 72,253,172,131, 52,138, 81,145, 98, 52,234, 83, 86,130,155,110,125, 13,143, 92,122,138,237,131, - 17, 81,146,177,177,212, 68,168,146,202, 8,116,105,200,199, 37, 82,197, 88,231, 24, 29, 28,211, 60,123, 22, 43, 74,178,102,198, -202,218, 26, 7,135, 71, 94, 78, 87, 72, 79,106, 84, 80, 89,104, 52,187, 12, 70, 35,186,157, 14,141, 66, 51, 42, 42, 63, 5,178, - 30,163,173, 5,101,145, 99,173,165,219,110,161, 85,136,122, 67,103,134,209, 94, 39,196, 89, 55, 33,174, 69,206,215,175,237, 36, - 45,109,103, 84, 34,235,242,215,236,204,142,122,174, 66,157,206, 22,115, 68,237,137, 82,220, 9,224, 61, 57, 68,101, 50,141,113, -118,146,225, 68,198,246,196,115, 67, 96, 33,165, 39,176, 10, 41,230,230, 45, 76, 58,195,164,156,116,130,205,242,208,176, 22, 89, - 15,210,177, 92, 35,145, 61,113, 78,196,124, 58,191,238, 18,240, 66, 78,106,174,157,237,212,173, 83, 76, 70,108,204,232, 1, 76, - 15, 73, 56,136,252, 5,240,222,148,151,100, 8,128,109,141,239, 43,156,245,148,234,154,121, 29,137, 35, 66,154, 93,207,212,210, -103,128, 61,252,110,218, 54, 48, 21,170,152,120,114,129, 96, 33, 38,105,117,137,194,205,164,212,197, 28,147,217,205,230, 42,234, -250,203,236,152, 60,220,252,200, 63, 49,221,156,133, 84, 52,151, 55,104, 52, 91, 92,188,112,129, 71, 31,250, 48,199, 71, 3, 62, -255,153, 47, 48, 28,149, 52,178, 46,198, 9,122,135,125,206,223,122, 59, 31,250,240,131,236,238, 94,161,221,238,240,198,215,223, -201,225,206,101,226,252,136,253,209, 33,219,151,159, 97, 48, 30, 65,163, 77, 43,145, 84,197,152, 86,183,195,217,243, 23,233, 29, - 29,178,220,110,242, 71,222,254,181,124,244,161, 79, 96,113,236,237,237, 32,133, 32,141,163, 9,153,207, 6,105,133,222,104, 64, - 43, 73, 41,202, 2,167, 50,174,238, 31,144,180,154, 24, 4,135,219,123, 92,122,238, 89,182,206,109, 49, 58,238, 79, 64,200, 58, -203,225,209, 49,145, 54,220,121,203,205, 92,221,219,163, 50,190,215, 95,103, 37, 75,157, 46,221,205, 13,178,102, 6,199,125,146, - 36, 69, 9,104,183,154, 68, 42,166, 55, 28, 49, 24,142, 16, 50, 34,109,118,208, 78, 7, 50,134, 66,197, 2,209,108, 35,148,194, - 86,214, 59,205, 51,173, 35,207,135,163, 47, 20,232,197, 76,155,200,244,101,221,220,168,220,147, 53,115,113,234,235,212,213, 59, - 59,247,140,249,251,194, 93, 91,217, 23,179,178,173,243,233,250,169,100,177, 65,132,182, 48,107, 42,108,229, 85,219,108, 85, 81, - 85, 37, 46,244,138, 87, 69,129, 46,198, 84,197, 8, 93,142, 48,122, 12,166, 64,186, 10,233,202, 41, 79,196,214, 35,104,157, 7, -227,202, 59, 8, 54,100, 4,100, 16,196,112,114,218, 74, 99,194,156,105, 83, 79,195,114, 6, 75,168,105, 58, 25, 24,234, 25,113, - 35,165,153,101, 36,205, 54,141,102,135,172,217, 34,107,119,167,209,120,214, 36,110, 52,104,100,141, 73,139,157, 74, 98, 79,186, - 81, 94,146,114,162,104, 21,238,183,200, 70, 68, 73, 68,148,198, 24,227, 80, 68,216,106,196, 51, 79,124,142, 79,125,248, 65,108, -127,140,170, 28,113, 28,211,235,143, 61,143, 64, 8,156,113,104,235,130, 62,190, 11, 85,177, 25, 49, 34,225,181,255,147, 88, 16, - 41,112, 66,113, 60, 24,147, 54,154, 56,161, 56,236, 13,105, 38, 73,184, 87, 36,113,146,160, 67, 41,163,172, 74,164, 18, 12, 71, - 99,170,202,208,106, 54, 61,107,216, 26,146, 88,145, 68, 42, 12,154,139, 57, 62, 62, 14,233,122,133,118,126,198,186,148,146, 72, - 73,198,195, 30,182, 42, 81,141, 4,137, 7,171, 52,137,177,214,209,110,181, 56,234, 13, 88, 63,179, 74,179,211,101,105,105,137, -209,104,200,120, 52,226,220,153, 45,146, 40,162, 24, 28, 51, 28, 12,184,120,211, 69,116, 85,113,216, 31, 80, 85, 21,251,135, 7, -136, 56, 66,166, 9,235,221,101, 86,214, 86, 73,163, 4, 41, 5,131,253, 61,170,188, 79, 83,104,178, 86,140,150, 10,116, 1,174, - 66, 56,199,234,242, 18,249,120,204,193,238,190,207,146, 73, 73,220,204, 80,145,162,219,108,123,254,133,243,186,246, 95,243,198, - 55,242,240,227,143,115,225,226,121,142,134, 99, 54,215, 87, 17,185, 38, 47, 10,198, 69,133,147, 99, 86, 55,214, 25,231, 5,163, -157,109,150,206, 94,160,234, 15, 17,114,192,250,250, 26,219,219,187, 72,169, 40,181, 87,251,204,139,130,245,181, 45,246,183, 71, -168, 40, 9,211,192, 12,145, 82,100, 8,138,225,144, 52, 75,169,180,102, 56, 24,112,190,121, 11,180, 51, 42,171, 17,198,115, 12, -170,160,163,224,130,192,204,116, 70,249, 84,144,102,170,200, 38,194, 61,235,203,123,211, 72,124,218,170,229,196,201,136,149,201, -208,152, 58, 13,109,103,238, 41,234, 72,121,146, 97,243,153, 91, 87,103,133,235, 50, 49,179,229,221,208, 7,111, 79,100, 35,103, -218,212,152,237, 59,151,110, 78, 8,199, 90,223, 85, 53,217, 51,228,116, 64,204,201, 89,204,147, 96,115, 70, 95,163, 14, 38, 78, -234,209,207,189,134,152, 33,209,157,140,226,221,124,121, 34, 50, 85,229,123,168, 67, 58,208,204, 40,220, 72,121, 98, 80,189,179, -126, 0,134,115,190, 54,110,185, 22,204,235,154,121, 72,191, 59, 59,141,230, 20, 98,102,110,187, 59,117, 18,220,220,168, 85,166, -162,252,245, 28, 9,199, 84,112,255,180,218,131, 21, 53,156, 7,165,108, 59,173,237, 38,205, 46,173,149, 45,162, 52,161, 17, 73, - 30,123,244, 9, 62,255,240, 23,121,234,202, 17,155, 91,107, 36,141, 37,112,146, 47, 62,246, 4,223,253,103,191,135,183,191,253, - 46,126,229, 87,254, 35, 95,127,215,215,211,206, 90, 12,243, 29,198,197,144,167,158,122,154,131,157, 61,198,123,251, 36,157, 77, -170,254,128,161, 30, 34,141,225,194,173,119,240,248,231, 62,205,185,115, 27, 20,186,228,194,153, 53, 30,253,226,115,254, 60,180, - 38,247,236,194,137,166,182, 11, 35, 90, 13,142,194, 90,244,112,204,241,104,140, 76, 26,172,175, 90,126,239, 11, 95, 32, 55,134, -178,172,176, 85, 73, 2,196,137,239,255, 85,128, 54,150,195,129,175,151, 27, 99,105,101, 25,214, 89,140, 51,148,213, 24, 33,160, -221,233, 50, 28,142,189,144, 80,104,179,242, 68, 20, 75,239,232,128,150, 49,196, 89,155, 40, 82, 20, 85, 73,156,164, 72,153,248, - 72,113, 34,255, 32,103,250,187,195, 34,146, 98,114, 35,156, 70,148, 59, 13,216, 93, 72, 41,207,227,173,156, 43, 84,157, 20, 68, -154,180,193,185,122,220,233, 41, 16, 47,236,132,210, 54,223,131,201,156, 92,235, 44, 49,197,205, 78,130,169,179, 14,129,228,137, -177,158, 4,170,189,208,139,209, 26, 91,149,158,167, 80,122, 98,155,169, 10, 76,158, 83,149, 57, 85, 89,160, 75,255,111, 93,228, -152, 34, 7, 83, 32,108,133,180, 6,229, 44,132, 26,152,157,145,122, 85,147,227,148, 51, 27,149,159, 22,109, 49,129,210,226, 66, - 31,106, 16,179,137, 34,100,220, 36, 74, 83,210, 70,147, 52,107,121,224,110,250, 40, 60,205, 90,225,107,131,180,217, 36,105,164, -196,137, 79,169,203, 72, 33,227, 32,244, 51, 59, 90,185,190,182,202, 77, 54, 30, 89,107,255,203,216,215, 29, 43, 11, 6,236,224, -144,223,248,229,159, 99,231,137,199,105,104,223, 35, 59, 24,141,194, 36, 67,159, 77,208, 38, 72,200, 74,175, 59, 80, 11, 80, 85, - 97,160, 19, 74, 82, 26,203,230,198, 18,121, 62, 36, 82, 9,163, 97,193,242,214, 22,251,199,125, 12, 80, 26, 77,187,217,164, 40, - 11, 26, 89, 74, 94,230, 65, 11,192, 18, 41,201,176, 55,164,213,110,163,100,204,112, 56,166,170, 74,226,212,207,105,108,183,186, - 56, 43, 24, 14,134, 36, 89,230,235,188, 34,162, 52, 6, 93, 22,164,177, 36, 31, 14,189,248, 9, 14,173, 43,210, 36,194, 90,205, -234,210, 50,199,199,199,180, 86, 54, 72,219, 75,108,156, 59, 75, 89, 89, 70,131, 99,178, 44,193,152, 10,109, 74, 40, 11, 46,108, -174, 49, 60, 58,162, 63, 26, 81, 89, 71,169, 53,253,209,144,238,218, 38, 89,167,203,210,234, 6,203, 75, 43, 12,123, 71,140, 71, - 61, 26, 25,168,178, 96,115,185,205,238,222, 85, 34,105,217, 59, 62, 96,107,115,147, 36, 73,185,124,121,155,168,209,162, 24,247, -145,214,239,151,173,149, 46,227,113,206,198,242, 58,123,251,199,116,214, 54,216,222,185,204, 27,222,250,117, 60,254,197,199,184, -188,115,149,179, 27,107, 28, 14,114, 54,214,215, 41,181,230,112,111,215,151, 11,139, 18, 41, 44,228, 57,253,203,151,105, 46,173, -208, 25,143,184,114,229, 42, 27, 27, 43, 60,119,121,135, 56,107,122,114, 32, 21,206, 88,146, 36,165,210,134,180,217,162, 10,163, -112,187, 73, 66,127, 48,160, 50, 6, 87, 85,228,253, 1,186, 44,105,182, 87, 80, 82,128,118, 68, 70, 19,213,109,151, 85, 5,149, -231, 82, 57,107, 2, 56,217,233,112,148, 0,114, 54,148, 98, 38,147, 6, 3,147,219, 73, 49, 25,202, 58,155,113,245,105,110, 51, -105, 33,197, 19,234, 39, 51, 68,106,182,186,181, 33,227, 53,153, 17,226, 39,192,213,101,229,201, 56,165,144, 85, 16, 56,223, 70, -235,166, 37,131, 73, 13,188,214, 7,158,189, 87,102,102, 59, 72,102, 51, 6, 39, 2, 75, 59, 27, 8,137, 41,225,143,147,229, 5, - 55,229,171,205, 12,105, 98, 70, 46,122,174,199,254,148, 8,169,158,193, 16, 21,101, 21,134,128, 48, 17,155, 23,115,140,114, 38, -158,144,179, 46,204, 66,175,163,241,105, 58,222,154, 48,102, 47,212,199,173,152,170,134,205, 74,206,214,206,194, 68,228, 67,206, -232,101,135, 19, 53, 19,198,161,240,227, 28,237,137,168,107,102,200, 4, 39, 90,156,156,152,140,244, 0, 66,116,131,103, 56, 54, - 59, 29,140,112,180, 26, 9,203,171, 93,198,213,152, 39,158,121,138, 88, 9, 94,247,250,215,211,233,180, 24,246, 70,236,110, 95, -229,119, 63,242, 59,220,116,225, 2,107, 43,171,220,126,235,109, 28,236, 31, 32,170,130, 98, 60,230,184,231, 91,204,154,205, 6, - 74, 10,250,253, 30,207, 93,126, 26, 5,124,227,215,125, 45,203,203,171,140, 6, 67,154,105,194,155,238,124, 29, 15, 63,254, 20, - 66,168,137,102,182,138, 34,175,154, 23, 72, 35, 82, 72, 42, 93,249,158,104, 96, 84, 22, 60,252,196, 19,116,183,183, 25,140, 71, - 24, 96,239,224, 32,200,194,166, 94,150,180, 50, 40, 41,136,130,220,107,146, 36,190,198,106, 12, 82,122,110,128,174, 42,202,178, -164,221,110,179,191,119, 72,214,109,161, 34,133, 27,123, 49, 21,107, 60, 9,238,232, 96,159, 40,205, 73,219, 75, 94,145, 47,170, -181,135, 35,127,227,217,153, 69, 53,115, 33, 94,174,186,250,139, 74,155,139,235,145,245,228,252,141, 50,199,102,113,147, 6,245, -169, 56, 93,152,216,132, 8, 35,100,167,164, 80,167,117,144, 88, 13,181,237,170,192, 20, 1,172,203, 49,174, 40,168,138, 17, 85, -225,127, 94, 21, 5,101,153, 83, 21,121, 24,105, 90, 5, 77,118,131, 10, 3,123,140, 16,104, 39, 48,120,135, 23,132,119, 64,165, - 5,235,193,222, 56,225,123,100,173, 11,135,226, 35, 22, 21,167,196, 73, 70,210,200,104,100, 77, 26, 89,139, 70,107,153, 70,179, - 69,150, 53, 73,155,205, 0,234,205, 16,141, 39, 68,169,143,196, 39,189,241, 65,181, 15, 9, 82,137, 27, 23, 29, 79,100, 52, 60, - 6, 11,172, 4,105, 53,143,126,226, 19, 60,244,129, 15,210,112,120,146,154,214,232,202,162,132, 7,109,231, 44,145, 82, 32, 64, - 41, 49,233,145,175,115, 41,113, 96,235, 43, 37, 73, 27, 9, 69, 94, 81, 86,154,172,217,164,172, 42,122,199, 61,162, 36, 66, 10, - 73, 20, 7, 61,248,144,254,173,247,147,178, 44,137,162,136, 44,107, 50, 42, 42,198,163, 2,112,164, 73,140,115,154, 40, 82, 12, - 6,253, 32, 83, 45, 41,203,138, 82,151,126, 99,181,150,162, 44,145, 66,146,101, 9,163,209,152, 44,139, 16, 82,208,233,116,232, -245,251, 52,178,140,238,234, 26, 89,171, 69,154,166, 28, 31,239,134,185, 18, 18,140, 99, 56, 30,179,220, 93, 98,239, 96,159,254, -112,132, 74, 26,140, 10,205,195,143, 60,198,237,119,188, 22,153, 53,105,183,151, 72,147,132, 81,191,135,206,135,232,241,128, 36, -114,172, 45,117,120,242,210,227, 8, 37,216,217,217,230,206, 59, 95,135,115,240,204,115, 87,105,181, 59, 60,187,125,196,206,229, - 3, 46,158, 93,165,217,237,114,212, 31, 16, 75, 63,110, 83, 10, 73,255,184, 79,107,101,137,171,151,159,227, 53,119,220,193,231, - 31,126,152,181,213,111, 34,178,112,208, 59,230,236,133,243,228,227, 49,251,135, 7, 88,107, 56,115,230, 12, 66, 8,226, 72, 50, - 56,218,167,217,202, 88, 93, 94,226,168,215,167,211,106,114, 60, 24, 19, 41,133,182,134,193,160,207,218,218, 26,219, 87,175,210, - 93, 90,162, 8,123, 72, 97, 42,162, 36,162, 26,142,137,173, 39,226, 30, 28, 29,178,244,186,155,145, 73,130, 52, 18, 99,189,204, -178,159, 51,160,113,149,198,150,154,202, 20, 62, 96,212, 26,172, 9,227, 73,235, 25,107,106,118,144,185, 47, 53, 73,233, 65, 93, - 76, 92,203, 41, 49,219, 90,140, 22,158,101, 31, 50, 1, 78,224,231, 88, 72, 55,217,175,172, 85,147,113,176,218,250,182, 79,105, -157,223,115,235,145,168,206,103,119, 16,118,162, 49, 97,235, 97, 85,117, 38, 65,202,233, 80,149, 90,240, 69,138,235,138,107, 77, - 34,230,217,178,240, 76, 26,223,205, 41, 96, 50, 55, 93,141, 83,244, 63,102,247,218, 9, 14,159, 58, 1,211, 78, 30, 81, 89,234, -137, 14,110,205, 42,159, 75, 13,132,153,180, 53, 96,215,195, 85,140,177,158, 32, 49, 51,132, 94, 78,122, 4,229,140,148,231, 12, -176, 51,155, 82,119,115,196,187, 57,160, 16,115, 19,235, 39, 26,183,206,205,207, 4,225,132, 50, 79,221,155,120,141, 38,185,243, -245,249,172,213,162,212, 6,163,125, 31,247,235,223,244, 53,252,194,207,195,205, 55,221,236,107,140, 74,112, 48, 26, 32, 28,124, -252,119, 63, 74, 43,107,242,173,119,127, 43,105,156, 98,170, 10,170,146,126,191, 79, 20, 69, 52,218, 93, 4,154,179,103, 54,249, -237, 15,127, 24, 99, 45,111,122,211,155,200,218, 75, 84,214,209, 63, 60,164,208, 21, 55,111,109,208,136, 36,133,177, 88,124, 36, -211,110,181,168,170,138,193,104, 64,162, 34,150,187, 75, 32, 28,189,209,128, 82, 87, 8, 37,169,132,229,112, 60,160, 8,245,236, - 74,251,133,185,188,177, 66,154,164, 20, 69,233,103,186,199, 49,121, 89,144,197,209,180,191, 19, 40,203,146,209,112,192,193,254, - 1, 75,107, 9, 89,214, 96, 52, 26, 33, 85,140,140, 36, 73, 28, 35, 0, 93,249,141,110, 52, 56,198, 56, 16, 81, 10, 73, 4, 66, -122, 1, 12,107, 39,158,232, 12, 43,100,158,217,254, 18,234,218, 47, 25,216,175,155,202, 23,167, 14, 87, 96,110,238, 50,243, 3, - 82,220,140, 16,133,243,224,234,116,133,211, 37,174, 42,125,100, 94, 21,216,114,236, 65, 61, 31,163,139, 17,166, 8,218,221, 1, -196,167,105, 71,175,169, 46,173, 9,105,116,135,149,225, 70, 54, 2,167, 8,189,189,142,202,122, 98, 81, 89, 85,148,218, 98,156, -196, 32,113, 34, 66,166, 49,105,156,145, 54, 58,196,105, 74,163,217,166,209,234,144, 54,219,164, 89,147,102,171, 77,218,104,145, -181,154,164,141,148, 40, 73,136, 83, 79,172,140,226, 8, 25,123, 97, 10, 89, 11,232,132,238, 2, 39,110,240,121,206,104, 77,206, -101, 53,194,166,228, 89,247,150,203, 79, 61,206,191,255,217,159,165, 53, 46,201, 71, 5,133,213,104, 3, 10, 65,165,141,239,233, -247,170, 34,196,145, 12,164, 40, 48, 2, 42, 61,175,228,189,182,218,241, 34, 50, 74,209, 31,143,201,186,203, 92,221, 63, 12, 89, - 36,175, 35,160,141,241,142, 40,206,143,157, 20, 2,163,253,231,150, 54, 26, 20,101, 73, 85,129,174, 28,145, 84, 68,145,164,217, -108,144,164, 49,207, 62,115, 64,146, 38, 84,149, 70, 84, 26, 67,228, 91, 8,203,156, 24,136, 34,129,179, 16, 43, 1,198,176,178, -182,194, 96, 48,160, 44, 53, 43,235,103,104,181,187,108,157, 59,199,149,203, 87, 88, 94,234,250, 97, 40, 69, 78, 49, 30,209,110, -101, 12,134, 3,246, 14, 15, 41,181, 35, 63, 28,240,236,149,109,238,120,237,157,104, 39,104, 68, 9,214, 57,242, 65,159, 72, 24, -142,183,159,227,166, 51,171,152,124,192, 99, 15,127,129, 36, 82, 28, 31, 13,184,253,142,215,178,119,216, 99,239,224,144,229,149, - 53,158,120,118,135, 71, 46,237,114,235,185, 46, 73,187, 67,229,252,124,243, 52,107,160, 17, 44, 47, 47,241,197,103,158,161,217, -109,178,191,183,195, 27,222,242,117, 92,222,190,202,167, 62,251,121,238,186,235,235,216,191,186, 77,179,213,102,253,204, 25, 42, -173,201, 75,205,222,238, 62, 91, 91, 27, 96, 52, 38, 31,210, 94,191,128,206,135,244,251, 61,100, 28,211,206, 28,199,189, 62,173, -102, 74, 85,105,210, 52,245,193, 66,104,193, 52,206,226,132, 98,109,109,157,254,240, 89,164,177,152,188,228,240,224,128, 11, 88, -162,102, 19,108,228,197,193,172, 95,255,232, 10, 97, 44, 86, 27, 68, 53,246,130, 73, 85, 21,134, 13,121,208,175, 71, 7,251,241, - 2, 53,179, 60,168, 79, 69,129, 71, 81, 71,245, 53, 8, 3,194, 10,172,118,160,103,120, 89,245,212,178,122,189, 59,233,131, 67, - 39, 81, 78, 34,106, 86,122, 29,153,135, 72, 95, 88,137, 13, 42,145,152,217,201,194, 33, 50, 87, 18, 25, 69,147, 18, 85, 61,104, -101,110,222, 51,243, 53,118, 78, 2,250, 76, 45,127,162, 56, 57, 59,176,169,126, 13,107,152,105, 78,155, 0,253,164, 13,143,105, -166, 97,118,248,140,157,148, 16,194, 84,211,162,170,230,122,207,231,102, 56,135, 8,102,154, 98,159, 37,183,185,153,217,208,114, -174,111,143, 80,119,144, 39,167,186,213,100, 11, 33, 64,213, 41, 23, 55, 55,218,145, 48,101,103,210, 78, 56,245,103,166, 35, 43, -167,217,194, 9,145,168, 30, 67, 39,101, 45,233,167, 2,201,105,186, 91, 73, 25,161, 75, 67, 53, 44,120,228,179,143,240,141,223, -240, 77,124,247,247,124, 47,227,195,125,108,233,133, 39, 98, 47,113,197,179,207, 62,195,109,175,255, 26, 90,205, 54,163, 81, 78, -214, 80, 68, 66, 82,228, 5,166,178,220,124,238, 28,141,170,203,197,139,231, 41,139, 17, 50, 74,105,119,150, 17, 81, 74,107,121, -141,189,237,171,236,237,237,162,172,161,145, 68, 20, 99, 31, 73, 88,231,168,180,246, 25, 17, 7, 90, 87, 28, 28,239,147, 38, 41, - 74, 74, 26, 89, 74,127,168,189,232,142,153,182,238, 88,231,232,100, 13,112,142,231, 46, 95, 38,137, 19,218,237, 22,205,102, 70, -148,196,164,145,191,249, 84, 20, 97, 66,171, 79, 25, 24,213,113, 18,177,190,190,198,179,207, 60, 69,187,209, 32,118, 2,198, 57, - 72, 69, 28,251, 77, 47,137, 35, 70,195, 62,142, 17, 42,138,253,168,197, 40,193,134, 73,108,215,232,166,159, 54, 78,245, 6, 34, - 48,167, 78, 41, 19,226,212, 66,249,196,177,115,243, 2, 52,238, 68, 73,223,157, 86,103,159, 29, 30, 83,175,117,225, 35,130, 9, -177, 47, 12,254,169,167,250, 57, 27, 6,158, 88,237,117,210,117,129, 45,115, 76,153, 99,202, 2, 83,140, 40,243, 49, 38,207, 3, -168,135,159, 87,133,159,122,102, 29,202,216, 32,169, 11, 86,250, 86, 24, 43, 44, 78, 24,180,181,148,198, 80, 24, 63,217, 47, 47, - 75, 42,237, 48, 70, 97, 69,140,108, 36, 36, 73, 70,212,104,146, 52,154, 52,154, 30,180, 27,141, 38, 73,150,145, 52,154,164,173, - 38, 73,179, 69,146,102,164, 89, 70,156, 72,226, 36, 38,138,149,215,152,143,130,210,148,154, 14,142,152,235,215,175, 21,109, 39, - 51,152,220,105,179, 32,230,117,221,167,204, 72, 36, 80, 13,122,252,254,135, 30,224,224,169, 39, 48,189, 62,169, 18,140, 66,197, -195, 89,135,148, 42,100,198, 32, 75, 61,203,217, 58, 40,141,191,167, 45,144,168, 16,165, 75,207, 47, 49,166, 96, 84,142,137, 50, - 63,195,160,172,180,111,211,171,179,124,210, 71,107,149,174,136, 34, 21,122,237, 53,149,174, 72, 27, 41, 8, 65,127, 48, 36, 77, - 83, 18,101,201,210,148, 52,142, 25, 14, 6,228,165,166,217,110, 51,202, 43,136,140,151, 92,173,188, 48,144,136, 36,173, 44,163, - 24,143,145,192, 82,199, 15, 53, 49,198,146,181, 59,164,173, 22, 75, 75, 75, 60,251,244,211, 52,146,152, 84, 65, 53,236, 49,232, -251, 33, 47,227,161,102,239,176,207,113,127, 8, 82,241,236,229, 29,110,189,253,181,244,250,158,240,151,180,154, 56, 45, 40,202, - 17,219, 59,151, 57,187,182, 68,111,255, 42, 79,127,241,113, 34,165,216,221, 31,113,225,194,121, 46, 95,221,101,152, 23,168,180, -201,115,187,251, 28, 14,198,156,185,176, 74,179,219,130, 36,241, 26,241,169, 31,217,108,227,148,106, 60,102,121,121,137,126,191, -143, 72, 18,250,189, 67,110,186,233, 38, 62,255,249, 47,176,189,179,203,234,234, 10,159,125,248, 97,190,246,205,111, 38,206,154, -244, 14, 15,144,101,233,117,226, 71,125,150,150, 58, 12,246,247,104,181,154,108,109,174,115,101,123,159, 86, 51, 99, 56, 26,146, - 23, 57,173, 86,147,131,163, 35,210, 70, 3,109, 60,192, 39, 73, 66,101, 28,227,241,136,213,149, 85, 14,118, 15,200, 71, 99,196, -104, 76,255,240,152,213,229, 53,136,146,144,137, 12,105,213,208,222, 38,141,193,234, 24,103, 12,170, 42,113,165,215,113,208, 69, -238, 65, 94,135,154, 58,245,176, 32,159,122, 71,120, 57, 84, 23,114,110, 66, 4, 98,182, 54,232,210,119,139,216,202,119, 86, 89, -231,103,122,200,216,139,223,136, 32,130, 67, 36, 67,157,218,131,184,156,104,157,132,180,189,177,211,177,197,181,148,178,141, 38, -169,112,164,152,142, 63, 13,195,159,234,175,238, 58, 97,134,152, 1,243, 73, 73,207, 77,123,242, 39, 83,225, 78,164,209,235,160, -130,153,121,238, 39, 91,205,153,144,209,167,196,229,169, 64,206, 52,130,143,138, 74, 79, 53,219,107, 15, 98,166, 30, 48,235,121, -156, 84, 14,171,101,242,102, 31,115,209,220, 12, 99,126, 62, 82,159,201,165,134, 17,158,117, 75,145, 19,211, 41,170,204,120, 53, - 83,150,178,152,168,205, 77,132,233, 39, 35,233,100,232,103,158,214, 98,156,156,138, 0,152,170,162, 56, 62,102,100, 99, 30,217, -190,194,193,206, 10,111,126,227,215,112,233, 51,159,163,234,247, 57,216,219,163,217,104,227,128,170,210,236,238,238,243,103,191, -247, 94, 62,248,107, 15,160,164,100,220,235, 81, 22, 37,237, 86,139, 56,138,217, 92,217,228,117,175,125, 13,159,124,246,128, 24, -197,238,206, 14,168,183,176,178,126,134,135, 63,251, 41,242,188,160,145, 36,126, 26, 88,224, 2, 56, 41, 41,202,156, 88, 42,226, - 64,144,168, 76,133, 43,124,230, 67, 42, 53, 71,244, 19, 14, 34,229, 83,126,205, 44, 35,138, 20, 23, 47, 92, 96,111,255,128,188, - 44,145,195, 33,203,157,206, 68,183,189,223,239,211,106,164, 24,227, 69, 77,108,200,172,168, 72,209,110,183,252,168,211, 68,209, - 89, 90,198, 88,208,149, 65, 42, 77, 89,105, 98, 3,163,178,100,111,119,151,173,179,231,145, 50,154,150, 50,196,204,240, 28,119, -227,244,251,141,164, 98, 39,181,242, 89, 7,112, 70,102,113,218,170,120,173,227, 32,102, 28,187,185,153,222, 98,110, 10, 66,184, -137,236, 20,192, 1, 35,100, 72,223,233, 64,124,171,194,192, 19, 3, 58, 7,237, 71,148,122, 64,247, 76,118, 83,230,232, 50,159, -164,216,235,105,104, 46,200,186, 58, 99,153, 29, 84, 24, 74,241,104,227, 38,227, 36, 61,121,209, 80, 26, 71,105, 28,134, 8,178, - 6,141, 56, 37,138,151, 72,210, 38,105,195, 3,118,220,104,146,100, 45,255,125,163, 65,146,196, 36,141, 6,113, 35, 69,133, 72, - 92,198,145, 39,184, 41, 27, 68, 92,228, 68,142, 83,136,217,154,221,245, 4,164,174, 43,223, 63, 63, 8,105, 58,103, 17, 37, 5, -213,184,224,232,242,115, 92,254,236,167, 57,222,126,142,229, 68, 81,148,165, 23,130, 10, 68, 91,240,147, 12, 19,229,147, 61, 78, - 8, 74,141,223,140, 29, 19, 71, 35,138,164,215,119,215, 37, 90, 23, 24,103,105, 54, 91,108, 63,115,117, 50, 44,196, 24, 75,220, -204,252, 60,118,169,168,202, 2, 33, 34, 15, 48, 85,229,179, 72,198, 80, 21, 21, 14,135,177, 21, 81, 24,179,154, 53, 82,158,125, -238, 42,113,156, 96,172, 96, 52, 42,113,178, 36,205, 26, 20, 69, 14,214,210, 72, 27, 30,224,173,207, 40, 72, 41, 24, 12,250,200, - 56,161,213,237,144,100, 25,135, 7,123, 56,163,137, 16, 84,163, 1,163, 97,159,209, 96,136,104,181,232, 13, 70, 20,149,159,103, -177,183,183,203,250,218, 42,189,227, 67,132,138, 88, 90, 94,161, 28, 29,145,201, 6,187,207, 62,201,230, 74, 7, 83,244,121,230, -169, 75, 8, 4, 7,189, 49,183,220,113, 59,135,135,199,244, 6, 99, 58, 43, 43,244, 6, 67,134,101, 69,179,219, 36,105, 36,164, - 89,131,229,141, 53, 90,221, 54,178,215,163, 24,151,168,102,215,247,249, 27,195,120, 52,164,221,108,242,196, 99,143,113,238,166, - 91,184,112,225, 2,143, 63,126,137, 59,239,124, 45,101,101,249,194,163,143,115,225,220, 89,122,253, 62,199,131, 33, 74, 69,108, -110,174,254,255,169,251,207,103, 75,179, 44,189, 15,251,109,251,154,227,174,203,204,178,221, 61,221, 51,156, 1,201,129, 33, 40, - 58,136, 33,134, 28, 21, 82, 72, 17,252,231,244, 69,255,129,164, 80, 48,100,130, 65, 41,164, 0, 29, 8,130, 67, 12, 49,152,193, -116, 79,187,170, 46,147,246,154, 99, 95,183,141, 62,172,125,206, 61, 55, 43,187,167, 7, 4, 64,178, 34,110,100, 86,213, 77,115, -239, 57,239, 94,123,173,245, 60,191,135,113, 12, 52, 77, 67, 8, 9,239,189, 96,102,239, 30, 88, 44,231,188,126,253,154,190,239, -113,218,178, 92, 46,217, 31,246,104, 43, 78,136,161,239,200, 74,227,171, 90,178,226,187,142,102, 12,236,222,222,114,249,241,167, -168,218,161,138, 78, 3, 52,152, 66, 2, 77, 17,235, 28, 41, 6,180,157,200,110, 66, 89, 79, 54,150, 60,244,132,126, 40, 81,209, -169,104,102, 34, 42, 62,178,213,143,145,202, 57,171, 2,252, 9,140,227,196,208,143,140,253,200, 56,142,114,145,212, 10,235, 45, -174,242,248,202,227,144,172, 13, 93,210, 18,143,157,224,209,122,150, 99, 38,170, 8, 73, 23,209,166,146,177,255,209,201,117, 76, - 89, 43, 59,245, 92,160, 88,249,177,178,124,248, 28,124,175, 75, 63,213,193, 99,230,124,153,120, 63,109,158,207,132,125,241,241, -207,127,154,212,120,206,170,143, 79, 70,241, 71, 17,250,113,223,110,199,113,122, 98,158,127,223,147,247,161,221, 1,124,119,102, -247, 93,211,252,211, 67, 90,107,141, 81,250,201, 14,253, 92, 28,247, 56,106,120, 44,104, 71,111,222,163, 56,193,136, 5,226, 44, - 9,235, 40,246, 57, 69, 94,150,221,105, 78,234, 44,225, 77, 68,121,211,176,163,123,120,141,234, 59,250, 16,120,243,234,199,164, -220, 19,246, 27,118,239,238, 48,109,205, 48, 12,204, 86,115,148,173,112,190,102,138,240,209,199,159,241,246,245, 75,246,187, 45, - 49, 70, 22,139, 5,159,124,242, 17, 55, 85,230,243,207, 63,229, 31,252,236,107,252,204,243,237,203,151,124,245,237, 43,190,247, -217,247, 88,222, 60,231, 87, 95,255, 10,101, 12, 77, 85,145,183,187,211,247, 44,229, 92, 46, 38,178,167,137, 36, 18, 25,163,133, -102,100, 10, 30, 87, 6, 26,199,213, 8, 69, 9, 45, 20,246,205,126, 71, 76,137,190,239, 32, 37,174, 86, 75, 98,140, 12,227,192, - 48,244, 56,171, 73, 37,179,222, 25, 75, 72,177,236, 87, 29, 41,130,111,106,234,122,134, 82,154,183,111,222,160,147,112,216, 61, -138,125, 63,113,232, 58,102, 74,160, 38, 74,169,239, 40,201,159,236,125,242,123, 89,224,191,177, 91, 87, 79, 45, 34,239, 13,208, -207, 63,237, 59,208,136,252,244,231, 79,212,165,249,209, 21,145, 79, 56,202,116,202, 14, 16, 97,218, 17,183, 58, 66, 44,105,102, -101,103,158,199,161,160, 90, 59, 66,233,194,195, 52, 72, 55,113, 28,207, 37,158, 60, 68, 49,113,202, 51,152, 66,100, 74,153, 16, -115, 97, 52, 40, 82,182, 68, 60,170,178,212,174,162,117, 53,198, 55,152,170,198,215, 51, 92, 53,199, 85, 53, 85, 93,227,234, 6, - 87, 53,216,170,194,249, 10,235, 44,214, 73,214,188,246,101,252,103,213,137,196, 7,250,140,240,152, 79, 40,204,156,249, 14, 58, -249,175,106,254, 83,103, 78, 18, 13, 18, 54,147, 35,119, 95,127,197, 55,255,248, 79, 48, 58,178,155, 6,121,189, 67,230,152,109, - 99,202,134,180,118, 10,239, 52,135, 97, 98,152, 32,160, 9,229,253,165,203,163,220,212,142, 16, 36,110,115,182,156,243,230,221, - 61,161,168,252,157,183,140, 67,143,175,252, 41, 26, 83,105,141,117,142, 97, 24, 8, 49,210, 52, 53, 93,223, 81, 38,172,104,173, -184,184, 92, 18,166, 1,173, 13, 15, 15, 7,158,191,184, 96,191, 31,232,250,145,213,101, 85, 2, 72,192, 91,131,247,150,169,235, -176,198,114,185,154,209, 29,118, 56,107,176, 85,205,108,190, 64, 25, 75,119,216,211,214, 21,196,145,126,127, 28,187,207,216,117, - 29, 15,235, 45, 57, 89,238, 31, 30,104,154,154,105,232, 81,206,114,177,108, 9,211,158,198, 40,190,249,197, 47,184, 90, 54, 48, -110,248,230,245, 75,198, 49,144,148,225,249,103,159,242,205,219,119,188,124,245,150, 23, 31,125,202, 16, 97,202,160,189,167,106, - 43,234,218,114,117,125,193,197,205, 5,179,229,138, 80,123,186, 46,224, 77, 35, 55,164, 12,125, 8,236,118, 59,170,186, 33, 78, - 35,164, 68,219,212,188,252,230, 91,158,127,244,156,175,190,250,134,229,106,137,173,229, 76,123,216,237, 48,206,113,177, 90, 16, - 66,135,117,134,118,177,128,253,129,102,222,176, 63,116,180,109,203,225,112,160,174,234,114, 81, 74,132,105, 68,105,133,201,138, -108, 12, 73,107,162,146, 46, 87, 77,145,135,175, 94,241,226,179,239, 99, 47, 53,182,170,209,222, 75, 39,171,101,106, 68, 6, 83, -196,162,217,138, 78, 69, 91,143,178, 14,229, 28,202, 88, 18, 7,166, 94, 26, 16,131,150,201, 87,214, 24,132, 31, 47,181, 48, 17, -167, 72, 63, 78,116, 93,199, 97,191,103,183, 27,232,251,129,148, 34,214, 89,234,166,162,142,169, 64,150, 20,198,103,172,115, 88, -171, 30,129, 51,103,234,248, 83, 1, 45, 25, 36, 89, 68, 98,242,115, 37,163, 45,109,142,217,234,165,248, 27,243,168,234,127,178, -190,202,167,240,177,167, 16,183,199,194, 43,113,178,241,169,122,255, 73, 68,109, 81,233,199,115, 14,204,113,228,158, 79, 58,130, -115, 11,121, 58, 27,199, 83, 68,181,167,162,254, 8,166,127,143, 8,166,120,204, 39, 63,239,212,143, 93,122, 62, 3,215, 31,129, -253,170,240,188,245, 49,139,189,160, 64,207,246,235,239, 31, 49,249, 36, 94, 72, 37, 93, 75,126, 76,197,175, 43,158, 93,217,209, - 25,173, 78,191,231,135,129,253, 79,125,130, 41,229, 2,189, 24, 72,211, 26, 99, 53, 38, 6,188,238, 73,140,236,118,183,164,241, - 64,151, 19,245,245,130,186,153, 49, 96, 8, 49,241,247,255,203,127,128,138,153,113, 18,241,211, 52, 5,154,166,165,174, 27,102, -173,252,217,187,221, 22,162,102, 82,142,127,240, 71,255, 53, 47, 62,254,223,242,175,252,107,127,155,255,246,143,255,136,237,254, - 64, 93,251,179, 17,114,225, 12, 23,191,177,177, 6,148, 38, 76,129,182,174,101,100, 30, 35,222, 24,166, 20,177,218, 48, 78,129, -172, 20,117,219, 16, 67,228,221,235, 87,114, 0,150,211,247,197,139,231, 40,173, 36, 42,180,236,105, 99, 81,130,134, 16, 24,167, -129,113, 10,204,230, 11,118,251, 3,117,221, 18,179, 35, 38,205,205,243, 23, 88,231,248,230,235,111,133, 9, 62, 76,212, 85,205, -108, 62,167, 58, 28,136, 90, 67,124,106, 55,251,117, 66,185,223,218,202,246,157, 46,254,108,196,116, 78, 51, 60,253,119, 10, 0, -231,241, 38,124,122,168,210,163, 72,132,211,136, 43,202,248,175,248,190,137, 1,166, 94,152,236,161,151,110,124,234,136, 83, 87, -118,230, 19, 57, 68, 33,184,133, 35, 99, 61,150,206, 94, 18,212,132, 53,174, 36,187, 32,166,194, 92,200, 18,186,146,178,164, 86, - 21,165,184,242,150,218,121,180,173, 49,110,129,175, 27,140,151,130,110,235, 25,198, 75, 17,183,181, 61,129, 94,172,247,167,177, -161,210,246,140,133, 47, 33, 55,232, 44, 83, 40,117,156,119,235,179,204,122,245,129,233, 69,254,206, 69,232,183, 19, 44,168,179, -221,251, 35,109,123, 28,122,126,242,199,127,204,246,219,111, 49, 6, 38,167, 8, 83, 34, 6, 48,202, 16, 74,228,143,183, 48,111, - 43, 98, 78,132,144, 9, 81,166, 36, 49,131, 87, 10,173, 50,179,198,203, 56, 63, 69,140, 49,164, 12,155,237, 30, 20, 88,227,233, -135, 81,248,225,229,235, 11, 81,186,189,156, 5,241,170,148,162,239, 39, 82, 4,235, 29, 38, 6,170,202, 98,141,194,106,203,102, -179,193,104, 67, 74,154,237,182, 39,103,209,152,228, 99,222,128, 86,167,116,177,202, 90,186,174, 23, 5,183, 86, 52,109,141,210, -154,187,187,123,150,109, 13, 97, 66, 27,199,253,221, 59,174,174,174,217,238, 15,172,183,123,166, 49,178, 47, 88,218, 12,216,202, -211, 84,142,161,219,209,204,106, 94,127,253, 43,158, 93, 44, 88, 84,154,111,126,245, 37,253, 52,162, 93,195,124,117,197,203,119, -183,188,187,223,176, 88, 93,162,124, 77, 84,138, 49, 70,218,249,156,186, 54, 92,172, 26,102, 11,249,104,151, 51,174,219,134,237, -110, 96,183, 17,221,129, 55,150, 93,183, 39,171,140,117,154,135,251, 91, 86,171,107,166,113,226,112,232,152,198,192,205,243,103, -124,243,242, 21, 31, 61,127, 78, 40,207, 89,204,138,135,205,158,166,242, 52,170, 18, 20,245, 98, 65, 55,142,104,163, 89,173, 86, -236, 54, 91,134, 97, 96, 24, 71,156,115, 76, 49,224,156, 39,233, 81,238, 19, 10,230,171, 37,119,175,223,209,239, 14,212,219,142, -237,171, 55,180, 90,145,103, 51, 76,108, 81, 85, 6, 83,159,246,227, 71,207, 55, 38,146,205, 36, 13,153,117,104, 95,225, 92,133, -181, 14,235, 59, 66, 63, 18, 39, 41,174, 33, 4,193, 90,235, 82,200,166,137,161,239,217,172, 55,108, 55, 27, 54,235, 53, 15,155, -131,164, 78,230, 76, 93,123,230,109,203,124, 62, 39,204, 18, 85,136,216,224,112,206, 97,207,243, 22,242, 35, 88,237,152,235,158, - 75, 50, 98, 42,142,148,152,226,153,127, 92,147,147, 66, 69,249, 58,116, 41,252, 79,246,231, 71,112,219, 41, 30, 60, 63, 17,202, - 29,207,124,177,130,135,199, 24,241,179, 51, 84,138,116,105, 18,206,136,170,199,194,206, 25,130, 61,126,168,160,159, 71,175, 38, -125,158,143, 92, 36,253, 28,195, 47, 52, 41, 63, 38,161,145, 31,163,236,142, 7,128, 42,227,141, 35,187,219,148, 98,123,228,232, -158, 23,246,115,235,218, 35, 4, 64,157, 21,116,131, 74, 25, 21, 35, 38,171,130,180,204,103,136, 61, 78,226, 9,148,236,232,244, -241,231, 39,171,194,163,161, 93, 29, 25,222, 58,147, 85,194, 57, 77, 74, 19, 33,118,168,148,209, 49,179,126, 88, 11,220,194, 59, -158, 61,251,148,213,245, 13,205,114,201,184,239, 24,246, 91,194, 97,143,211, 6,239, 18,135,177,199,207,174, 88,204,175,176,186, -225,219,187,123,126,167,159, 10,176, 70, 81, 27, 67,191, 94,115,127,187,225,197, 39,223,231,179, 31,252,144, 87,223,126,193,204, -203,133,102, 74, 74, 70,218, 41, 48,165,112,178, 9, 46,155,150,102,233, 88,212, 53,111,222,188,198, 91, 75, 50,134,221, 40,173, -133, 42, 95,171,175, 91, 94,190,124, 73, 55, 12, 40, 96, 53,159,161, 82,226,147,143, 94, 48,246, 61, 99,154, 36, 28,228, 72, 29, -210, 14,149, 51,227,225,192, 48, 69,170,139, 43,156,171, 88,223, 63, 48,132,114,163,141,153,152, 53,151,207, 62,130,251, 13,125, -216, 18, 83,230,176,125, 64,197,190,128,110,128, 24, 74,146,186, 42, 31, 79, 21,157, 39, 64, 72,193,161, 74,243, 44,208, 20,115, - 86,196, 37,197, 55,227,180,194, 40, 25,215, 82, 98, 71, 85, 72,100, 23, 33,107,185,181,146, 81, 73,242, 5, 84, 6, 65,239, 80, -212,226,197,106,151,138, 85, 44, 37,114, 16, 64,140,138, 19,196,145, 28,134, 34,122, 27,136,225,216,129,247,132, 81,254,123,154, - 4,248,146, 75,142, 60,233,113, 55, 37,157,121, 38, 4,121, 16,195, 20, 9, 25,201, 48,144,103,191, 36, 36,121,140,247, 84,182, - 66,251, 6, 83, 73, 39,110,172,199, 84, 51,116, 53,127, 20,177, 85, 21,174, 18, 97,155,113, 14,237,100, 95,103,140,121, 18,130, -161,148, 66,153,115, 28,238,217,182,251,152, 94,252, 36,236, 38, 63,165, 84,157,111,252,206,172, 46,127, 41, 95,224, 20, 99, 43, -234,100,131, 34, 42,141,214,176,127,251,134,215, 63,251,115,212,184, 69, 79,145, 60, 66, 63, 28, 93, 4,194, 50,168,116,102,222, - 26,234,214,115,123,183, 35, 20, 1,148,202, 10,103, 52,228,136,181,138,182,245,132, 56, 73, 87,225, 27,222,220,117,146,173, 88, - 80,196,242,189,181, 12,195,200,229,197,146,126,191,167,170,107,250,161, 39,230,132,245,142,119,111,247, 92, 93,206, 57,236, 58, -170,166,162,118,142, 48,140, 92, 95, 95,240,171, 47, 95,177, 88,212,236, 15,157,120,176,125,113,133,164, 68,154, 38,218, 85, 75, - 24,122,116,142,104, 45,122,149,110, 72,124,254,253, 79,217,236, 14, 52, 83, 64,165,137, 60,193,242,242,146,245,118, 45,170,105, -163,121,119,119,199, 48, 74,214,251,122,187, 21, 8,139,119, 56,173,200, 83, 71, 59,155,115,255,250,107,174, 22, 51, 26,103,249, -234,235, 95, 49,198, 0,182,198,181, 43,238,183, 3,119,235, 14, 91,205,169,231,151, 4,237, 25,167,137,102,117,137,113,153,249, -197,156,249,114, 78, 51,111,168,218,138,102,230,176, 73, 16,210,135,195,107,166, 96,112,179, 11,116,125, 79,131,151,128,159,148, - 24,199, 81,246,191, 74,113,123,119,203, 71,223,255,140,168, 12,235,174,163,158, 45,120,120,123,139,114, 7, 94,124,252, 17, 81, -107, 54,125,207,194,104,180,142, 92,206,231,228, 49,210,135,200,106,177, 98, 28, 38,250,195,136,111, 42, 25,211, 55, 21, 91,179, - 39,166,196,184,223, 83, 59, 15, 58,179,239,118, 60,215, 31,241,240,237, 27,108, 93,163,198, 17,230, 19, 58, 76, 80, 71,178,107, - 80,214,149,179,219,144,180, 5,227, 81,182, 70,133, 17,103, 6,146,177, 40,231, 81, 77,195,216,139, 24,117,234, 7,113,152,140, - 19, 83, 22, 33, 91, 24, 70,134,126,224, 97,123,224,238, 97,203,221,253,150,135,237,150,125,215,161, 50,180,190, 97,222, 79,172, - 70, 9, 4,106,199,154,170,242, 56,103,177,101,133,192, 25, 6, 58,103, 69,206,177, 36, 36, 30, 39,122,178,211, 22, 1,120, 44, -207,161, 41,130, 83,125, 74,152, 59, 21,237,247,246,217,233, 61, 47,252,185, 98,253, 20,235,122,246,249,231,177,174,194,134,225, - 73,176,217,113,162,240, 72, 93,141,103,127, 94, 58, 5,205,156,184, 96,101, 50, 96, 83, 86,103, 58,113, 25,143,197,163,215, 56, - 29, 29,223,234, 4,162, 55,103, 93,184, 64, 28, 76, 73,216,209, 24,173,113, 69,180, 99,180,146,209,225,123, 99,114,173,244,147, -232,206,147, 15, 55, 29,189,239,137, 20, 36, 82, 81,197, 44, 98,163,156,159,160,198,242, 17,208, 81,190, 57, 79,130,102,206,200, - 58,100,137,132,201, 81,242,137,199, 41,224, 45, 88,103, 8,253,196,188,153, 49,142, 3,135, 16,185, 92, 94,210, 94, 94,145,180, -136,113, 98, 18,241,132, 67,246, 72,113, 10,140,195, 72, 83, 87, 92, 44,103,188,184,185,226,235,175, 54,104,101, 1, 45,135,116, -121,209,223,190,125,199,245,205, 21,159,124,250, 25,214,104, 86,179, 86, 60,229, 74, 50,210,205,249,126,186,120,198,239,215,107, -174,151, 11,174, 46, 47,176,117,197,253,110,207,174,235,249,189, 31,125,159, 28, 51,247,235, 7, 24, 3,141,177,252,225, 95,255, -235,236,119, 27,166, 41, 48, 13, 35,179,186,166,245,142,222, 40,250,195,254, 17, 76,146, 50,195, 32, 99,210,182,109, 25,198,146, -110, 85,130,116,246,135,158,174, 23, 17, 77,138, 80, 55, 51,174,157,231,229,203, 55, 60,220,223, 99, 43,225,157,199, 35,199, 89, - 61, 85, 80,159, 73, 16,159, 36,168,156,208,175, 37,120,192, 40,133, 85,178, 75,117,198,226,189, 19,241,145,213,232, 28, 81,113, - 36,135,158, 52, 41,208,246,212,140,146,101,207,164, 10, 97, 45,145,196, 71,158,197,251,170,210, 89,182,121,140,164, 88,148,235, - 97,132,208,147, 38,249, 8, 71,218, 91, 17,195,196, 88,132,113,229, 6,124,196, 19,159,178, 7, 10,134, 52, 68,113, 74,132, 80, -148,171, 24,178,174,132, 20,230, 60,214,215, 24,223, 98,171,186,252,188,193,214, 13,206, 55,104,231, 49,174,236,194,143,164, 54, -107, 81,214,136, 66,221,104,148, 61, 43,226,234, 41,221, 46,255,218, 54, 91,255,134,244,196,223,160,115,224,183,119, 41, 60, 38, -221,150, 73, 64,136,220,126,243, 21,191,252,233,143,233,251,158,126, 72, 36,165,137, 9,108,233,194, 44, 18,195,238, 43,195, 56, - 6, 81,244,167, 71, 17,144, 60, 27, 80, 87,174, 28,114,129,164, 4, 73,122,232, 71, 82, 6,231,116, 17, 50,201,120,222, 88,185, -236, 24, 37, 10,245, 30,177,180,237,118, 19,190, 50,116,195,136,177, 14, 69,146,203,122, 48, 76, 49,210, 15, 18, 82,210, 15, 34, -174,203, 41, 51, 13, 35,243,121, 67,208, 6,163, 52,219,253,200,179,235, 57,195,216, 19, 98,230,243,239,125,206,155,183,183,180, -237,140,110,127, 96,177, 92, 80,169, 76, 24, 7,222,189,126,197,199,159,126,202,253,237, 29,119,183,119,212,213,140,205,250, 65, -148,243,206,138, 64, 50,140,204,154,150,245,195, 45,109,235,240, 94,243,238,237, 91,186,126, 68, 91, 75,221,206,217,118, 35,235, -221,192, 56, 37, 62,122,126,131,171, 26,134, 41,156, 68, 84,215, 87, 87,212,149,161,246, 21,243,249,156,249, 98,129,247, 14,163, - 44,166,242,204, 47,150, 28,238, 14,116,187, 3,174,174,209, 89, 99, 85, 37, 34,184,148,177,222,209,168,150,110,232,153,250, 9, - 95,215, 76, 99,196,213, 13,237,229, 53,155,190,103, 54, 70,150,173,103,182, 88,177,126,184, 99,209,214,172, 86, 11,238,239, 30, -104,155,138,113, 24,193, 25,153,120,149,213, 85, 10, 73,206, 41, 85,196, 90, 49, 49,159,207,216, 29, 36, 88,231,221,235, 55, 76, -206, 50, 91,205,105, 47, 14,248,197, 28, 59,159, 99,155, 25,214,183,100, 91,161,173,151,179, 82, 31, 21,210,142,172, 43,180, 29, -208,110, 68, 87, 45,166, 22,253, 74,238, 71,134,195,158,110,119, 32,236, 59,166, 65,112,215,135,253,129,238,112,160,239, 71,250, -113,162,159, 34,253, 36, 29,119, 8,148,200, 84,201, 41,232,198,154,166,242, 56, 39,133, 93,146, 6,207, 80,226,199,143, 35, 36, -135,116, 82,198,199, 28, 79,160, 23,173,205,137,173,114,140, 78, 37,229, 15,186,182, 78, 49,174, 39,208,218, 99,225, 21,203,119, -233,198,207,168,172,167, 78, 61, 75,242,102,204,137, 20, 57,253,222,199, 49,254,185, 81,251, 52,169, 60, 75,137,203,197,245, 20, - 99,194,166,179,125,104,137,134,150,196,167, 92, 18,179, 52,143,197, 25,100,140,110,101,212, 37, 9, 91, 22, 99,180,236,163,202, -191, 91,107,165,168, 27,115,218,117, 31, 5, 11, 71,163,125, 62, 67,206,166, 44, 47,136,158, 38, 9,126, 57,122, 22, 83,250,181, -161, 33, 71,241,221,135,130, 68, 84,126,116, 55, 74,129,209,212,237,130,113,154,240, 5, 59,105,173, 5,173, 88, 44,151,120,107, -153,215, 51,146,115,244, 65, 46, 23,160, 11, 27, 24,178,213, 56,101,177,218,210,212,150,139,165,103,181,112,132, 23,215,132, 41, -161,149,103, 28, 38,134, 97, 68, 29, 58, 94,191,122,205, 15,126,240, 57, 87, 23,151,212,214,113,185, 90,224,140, 97,152,242,105, -170,160,138,194,114, 12, 19, 15,187, 45,149, 82, 28,250, 1,239,107,110,110,158,177,217,127, 73,227, 28,173,181,204,150,115, 8, - 19,171,229,146,185, 86,124,126,125,141,127,241,156,118, 54,227,207,255,226,103,140,251, 3,117,161,137, 21,215, 39, 83, 76,244, -163,136,144,170,170, 2,235, 33, 10,246, 87, 89, 3, 83,192,123,201, 9, 55,218,146,208, 28,186,158,166,106,248,228,147, 23,188, -122,253,134,144,182, 37,151,254, 12,140,242, 33, 95, 20,233, 4,138,144, 53, 76, 46,211, 27,112, 86,227, 75, 62,180,179, 22,103, - 29, 85,109,169,156, 66, 19,100, 26, 48,236, 72,157,149, 93, 93,174,209,177, 96,126,179, 20,110, 82,144, 93, 87, 16,203, 88,142, - 65,178,222, 99, 32,199,177,248, 95,167,146, 55, 46,202,244, 28,197,150,150, 99, 25,169,159,118,237,185,100,142, 63,238,168, 36, -151, 32, 51,133, 68,204, 48, 69, 33,181,137,184,203,161,171, 22,235,252,105,132,110,124,141,171,228, 67,215,115,140,175,176, 78, -138,189,113,210,185,107,107,203, 51, 33, 99,116, 85,158, 5,101, 10,200,226, 60, 54,246,131, 54,179,127,177, 12,128, 95,183,128, - 87, 57,147,198,158,215, 95,252,130,119,223,126,131, 41, 98,143, 97, 76, 56,107, 69,225,140,136, 57,141, 77,104,171,217,110, 71, -166, 40,122,140,148, 31, 17,156,214, 40,170,198,179, 59, 28,164, 49,112,158,245,166, 35, 4, 9,243,176, 86,108,153, 99, 12, 52, -117, 5, 49,162,201, 52,181,199, 26, 1,201, 24,231,233,186, 14, 95,123, 18, 6,149, 19,206, 73,132,111, 38,179, 89,239, 36,131, - 97, 72,132, 33, 98,156, 97, 28,133,114,102,181,161,109, 42,118,219,157,248,178, 67, 96, 28, 35,159,125,246, 41, 67,223,179,219, -238,249,248,227, 23,116,189, 76,114,218,101,203,195,221, 91,172,134,105, 24,120,253,242, 37,109, 85,241,240,240, 64,101,101,109, - 96,173, 38,199,129,122,177,164,235, 55,132, 52,177, 90, 85,236,119, 59, 54,251, 29,190,170,153, 45,151, 60,236,122,118, 93,100, -189, 61,240,252,227, 79,241, 77, 67,215, 75,114, 34, 4,110,174,159, 97, 85,100, 86,215,204, 42, 71, 91, 85, 37,236, 67,225,124, - 77,206,150,122, 54, 99,216, 78, 12, 57, 83,183, 11,118, 15,111,200, 86, 86,147,227, 36, 69,124, 76,129,186,105,216,222, 63,224, -125,195,226,226, 2,211,204, 64, 59,188,173,121,115,191,149,203,166,177, 44,175,159,179,126,251,138,113, 28, 89, 44, 23,220,222, -222,161, 80, 52,181,163,239, 7,134, 62,226,171,138, 48, 5, 82,140,212, 77,205,190,235,209, 70,244, 63, 90, 41,250, 67,199,110, -156, 88,127,249, 21,237,162,101,121,189, 98,113,177, 98,182, 90,210,204,102, 52,179, 5,122,182, 34,251, 6,108, 5,198,145,181, -149, 24, 95,237, 72,198,160,180,195,184,136,114, 21,218,214,224, 6,185, 4, 24, 95,194,171, 70,134,125, 96,236,123,186, 78, 10, -251,216, 15,132, 41, 18, 67, 38,133,204, 16, 39,185,248,231, 64,136, 35,253, 56, 80,251,170,236,212, 37, 14,246, 88, 11,227,201, -197,149, 79,100, 82,142,103,242,147, 93,121,126,106,201, 62, 81,240,212,211,139,193, 25,124, 45,159,129, 96,222,239,226,243, 89, -248,205,147,216,214,227,248,189, 76,200,211,217,142,252,113, 2,167,201, 5,169,171,206,110,222,143,140,250,199, 11,133,125,178, -227, 84, 71,187,137, 72,248,157, 81, 88,163,113,214,149,194, 46,255,110, 75, 33, 55, 70,151, 2, 47,130, 30,163, 21,206, 90,249, -255,214, 96,236,113,159,174,203, 77,233,177,211,142, 79, 8,116, 9, 29,226, 83, 42, 79,126, 68,201,254,186,211,239, 67,137, 54, - 71,130, 79, 58,225, 84,229,161, 88, 93,220,112, 56, 28,196,190, 53,175,184,156, 47,232,194,200,184,221,156,236,104,126,121,197, -237,122,203,148,192,107,208,214,148,104, 64, 73,146, 26,186, 30,106,197, 39, 47,174,249,222,103,207,249,236,147,143,249,118,223, -209,117, 19, 57, 31,176,206, 17,178, 98, 56, 28,232,119,123,186,237, 22,167, 20,243,170,194, 27,141, 10,147,220,183, 78, 44,123, - 67,204, 2,219, 25, 1,101, 52,243,229, 18,107, 44, 78, 27,129, 37,164,128,243,134,155,103,215,188,123,243,142, 23,207,110,176, - 90,211, 86, 21,105, 24,249,193, 39,159,130,202, 28,182, 59,170,186,162,174,106,185, 21,198,200, 88, 34, 86, 67, 12, 24, 99,113, -222, 51, 30,130, 8,240,140,198, 24,135, 86,162, 98, 62,116, 35, 97, 26,217,108, 54,104, 39, 35,226,120,144, 34,110,222, 43, 57, - 42,203, 8,253, 92,124, 46,175,179,140, 89,173,150,247,144,247, 78, 10,219,217,123,196, 25,141,179, 96,153,196,191, 58,108, 9, -157, 33,232,132,202, 1, 19,103, 40, 39,131,254,148, 38, 41,232, 81, 58,243, 56,246,168,116,204, 23, 31,203,142,124,144,127, 47, -182, 52,217,143,201,231, 75,222,120,217, 63, 37,185, 45,231,147,152, 45, 73, 38,122, 17,181, 69, 20, 89, 89,208, 14,188,199, 87, -173,140,208, 93,141,245, 51,172,175,164, 27,175,164,168,219,170,198,249, 26,237, 60,218, 57,249,126, 58, 43,221,183, 53,178, 19, - 87, 26, 91, 38, 92,226,161,125, 79,172,175,158,150,239, 99,162, 32,255, 2,125,255,127,217, 63, 58, 67,191,221,240,205,207,127, -202,184,223,209,148, 11,122, 78, 65, 60,232,229,114,221,212, 26, 99, 18,218, 42, 14, 67, 36, 68, 75, 82,134,148, 70,140, 5,103, - 21,198,200,196, 96,140,153,182,242, 28,186,145,113,146,117,198,172,178, 69, 3, 18,229, 50,104, 52, 70,101, 20, 17,231, 76,193, -233,194, 52, 76,104,173, 25,134,192,229,229,140,238,112,144, 75,163,209, 2,254,153, 38,166, 35,218, 24,117, 18,199, 89,163, 25, -187, 14,171,165, 59,187,185, 89,176,217,110,152,205, 23,196,156,184,187, 91,179, 92, 44, 72, 49,226,172, 38,134,145,177,135,254, -176, 99,214,206,216, 61,172, 9, 83,120,188,232,196, 9, 87, 85,132, 56,178, 88, 46, 81, 76,196, 60,113,125,179,162,235, 14,108, - 54, 59, 81,210,175, 46,216,117, 35,235,253,192,195,182,103,182,188, 98,177,186, 96,223, 29, 24, 71,177,185,126,252,241, 51,114, - 28,152, 53,115,150, 77, 77,227,229, 66,152,115, 70, 91,139,173, 43, 82, 54,204,150, 51, 14,235, 14, 63,155,193,168, 24,110, 51, -198, 74, 96,207,253,253, 61,207, 62,250,136,168, 18,132, 40, 19,215,113,164,219,119, 84,171,200,110,138, 92, 93,222,176, 93,175, -121,247,176, 67, 95, 93, 16, 66,192, 54, 51,246,251, 13,227, 52, 81, 55, 13, 41, 4,134,174,163,242, 21, 93, 63, 48,102, 17,157, - 57,231,196,137, 83, 70,252,162, 89, 72,244,125, 15,104,110,223,221,241,246,221, 59,234, 55, 53,139,139, 5, 87, 87,151, 92, 94, - 44, 89, 93, 92,226,174,246, 84,179, 5,174,153,161,171, 22, 92, 69, 54,158,172, 13,218, 56,193, 28,167, 68,214, 14,171, 43,178, - 29, 80,198,163,140,197,106, 9,135, 33, 71,134, 97,192,108,148,188, 54, 67,199, 56, 4, 33, 61, 70,113, 21,185,210,204,116,227, - 68, 66, 49,142, 9, 99,198,179, 9, 49, 37,120,236,168, 59, 74, 50,189, 43,133, 87,184, 50,143,221,185, 57,213,181,227, 26,185, -132,192,104,253,216, 65,159,130,208, 78,108,185,199, 41,151, 42,160,177, 39, 65,104,233,241,252,231,177, 41,213,199,162,156, 51, - 42, 27,244, 73, 90,255,104, 23, 63,218, 78,159,212,189,147, 87, 93, 46,215,164,132,149, 78, 90, 21, 80,229, 49,172, 94,138,138, -117, 10,239, 13,214,216,210,117, 75,144,189, 43, 93,136,228, 96,155, 83,247, 46,135,186, 20,117,109, 75, 49, 55,230,244,141, 58, -222, 44, 82, 9,160, 56,174,255,210, 17,211,167,158, 50,187,159,198,103,170,223, 74,116, 37, 37, 72,188,143,185,164, 2,205, 22, - 43,124, 51, 71, 27,143, 10,129,190, 31,185,188,244, 40,103, 57,244, 35,141,183, 84,245,130,122,126,193, 92,213, 28,134, 73, 4, - 17, 57, 1,146,184,213,119, 7,193, 31,198,128,213,154,237,102,203,167,159,255,144, 47,246,239, 88,111,214, 56,115,193,216, 29, -208,218, 17,199,129,219, 87,175, 80,227, 68, 30, 70,210,208,163, 98,196, 25,195,152,142,162,149, 92,246,229, 26,107, 28, 22, 81, - 77,207,230,115,194, 20, 80, 25,154,186, 65, 91, 67, 55,246,160, 53,247,187, 45,255,242,191,250,215, 48,206,128,211,108, 54,107, - 86,139,149,216,212,172, 33, 20,246,123, 85,205,100,244,222, 11,222,116,154, 6, 92,221, 66, 78,120,103,104,154,154,156,160, 59, -244,108, 55, 27,182,187, 61,235,205,142,126, 24,233,134, 17,109, 60,205,226, 74, 86, 5,103,118, 11, 37, 91,242,226,227, 20,202, -152, 42,158,227, 99,209,182, 90,201, 1,174,205, 99, 33,119,178,166, 49,186,104, 45, 76,150,162, 30, 59, 24,118,196, 78, 17,116, - 64,229, 9,166, 30,156, 38, 37, 33,222, 81,126,204, 81, 66, 83,114, 20,200, 75,138, 19, 41,140,210,205,159,165,200,229,227,141, -248,200, 85,136,199,116, 64,185, 93, 75, 65, 47,251,126, 42, 80, 26, 83, 53, 56,223, 74,183, 93,213,104, 95, 97,143, 69,221, 87, -101,188, 94,126,238, 43,180,117, 24,231,139,221, 71,157,137,218, 10,228,229, 73,132,172,122, 15, 73,203,175,247,184, 42,126,147, - 3,255, 95, 32,186,239,140, 43,157, 38,182,239,222,240, 15,255,243,191,139,158, 6, 48,150,110, 16,177, 83,152, 34, 6,104, 42, -141,183,224, 43,199,254, 16, 24, 35, 36,165, 9, 49, 21, 10,154,168, 48, 42,239,233,186,129,170,170,100,146, 52, 5,134, 16,101, -196,108,140, 76,197, 82,164,246,134, 20, 70, 46, 46,230,228, 48,225,154,154,245,122,139,214,134, 67, 55,145,162, 20,179,190,235, -105, 42,143, 81,146, 65, 97,173,103, 26, 70, 66, 76, 56,107,168,156, 99, 44,162,198, 20, 19, 97,232, 73, 4,150,139,154,174, 59, - 80, 85, 53,139,229,146,187,187,123,246,251, 3,223,251,222,167,244,125,135,214,112,121,177,228,176,123, 0, 37,250,138,135,245, -134,186,170,185,189,219,156,206,168,105, 28,105,230, 21,218, 64, 32,112,113,121,193, 20, 2,235,221, 1,227, 42,218,153,196,150, -222,239,123,214,219, 14, 95,181,124,254,217,103, 60, 60,108, 24,166, 30, 99, 21,243,213, 28,173, 35,222, 27,230,109,131,115,150, -182,173,169, 42, 89,215,248,166,198,183, 13, 42, 24,234, 38,201,123,179, 77,140,113,100,177,186,100,183,190,167,169, 43, 82,218, -129, 70, 28, 59,211, 1,173,164,248, 77,211,200,126,187, 35, 91,203,237,237, 45,151, 23,151,236, 54,107,190,122,245,154, 31,125, -254, 41,145,196, 97, 10,212,217,226,173,236,144,141, 51, 36, 37,197, 39,132,137,148, 11,157, 77,149,215,176, 36,182,121,231, 25, -250,158,106,117,201,240,176,102,127, 56, 16, 31,214,216, 55,239, 88, 46,222,112,125,185,226,250,230,154,213, 71, 55, 44,175, 46, -105,151, 43,234,249, 2,221,204, 48,199,226,174, 29, 90, 89,148, 54, 40,101, 72,202,128, 46,240, 43, 3, 90, 69,218,130, 21, 78, -192, 24, 35,221, 48,210, 15, 35, 67, 56,144,146, 38,155,130, 79, 46, 83,225,132, 98,152,142, 10,156,233,196, 95, 57, 54,145,211, - 20,232,167,137, 97,156, 74, 3,144,202, 42, 89, 73,243, 99, 45,222, 57,234,186,166,209,230, 68,102, 60,214, 60,101,236, 89,151, -252, 52,209,237, 84,123, 50, 31,132,210,164, 52,157,146,217,212,153,115,236,184,138, 62,106,204,158, 4,181, 41,117,226, 60, 60, - 13,161,225, 9,154, 86,105, 37,227,247,202, 25,241,241, 1, 86,107,204,105, 76, 42,133,219,123,125, 82, 16, 74,151,101, 31, 71, -240, 71,145,143,209,216,162, 42,181, 86, 46, 1,218, 60,170,211,207,193,247,177,176,191,245,217, 46,241,145, 65,146, 11,107,252, -187, 89,181,143,118,233,191,164,184, 75, 48,246,163, 95, 16, 69,221,206, 65,121, 22,139, 25,173,211,216, 12,117,211, 48,246, 29, -179,197,138, 89, 61,227,249,205, 39, 12,174, 37, 87, 17,125,232,217, 31, 14,244,251, 53, 97, 28, 32, 12,188,123,247,134,186,241, - 56, 91, 49,141,137,135,251, 61,174,186, 21,161,157, 86,164, 56,146,163, 71,167, 64,158, 6,190,253,242,151,196,205, 43,110,191, -253,134, 23,215,215, 92, 95,174,216,188,187,231,132, 64, 56,238, 73,114, 70,105,209, 21,236,118, 59,222,188,125,139,115,142,245, -118,203,245,245,141,136,104,154,150,113,138, 88,239,248,241, 79,127,138,183,154, 79, 62,126, 65,158, 2,179, 28,113, 74, 40, 71, -181,171, 37,132,195, 58,172,177,164, 16,177, 90, 51,116, 61,179, 89, 98, 8, 19,251,253,129,237,110,203,221,221, 3,219,237,158, - 16, 83, 9,198, 24, 75, 20,102,226,208,237,169,154, 37,139,182, 38,246, 69,204, 70,150, 52, 42,101,200,197,119,175,142,249,224, - 74,220, 5,214,104,236,233,225, 56, 94,250,244,233, 66, 40,226, 73,117,250,115, 84,236,201,147, 35,245, 48, 81,172,101,110, 67, -208,138,112,234,200,143,158,112, 25,181, 31,125,164, 18, 65,152,206, 84,241,162,132, 63, 37, 4,150,212, 50, 81,173,103,129,207, - 40,131, 50, 21,202,123,148,245,120,215, 96,125,133,171,102,210,121, 31,139,186,171,112, 85, 93,196,108,130, 89,181, 78, 80,171, -198,149, 3,200, 30,181, 34,143,144,165, 83,216,253, 57,242, 81,253,246,137,117,255,131,248,231, 12,163,123, 20,114,254,242, 47, -126,204,235, 47,126,201,220, 26,246, 83, 20, 23, 64, 17, 70,218,242,250,199, 16,208,106,198,253,122, 15, 74, 19,115, 36,228,132, - 47, 19, 62,173,100,138,119,232, 7,180, 82,165,168, 71,208,138,170,173, 78, 73,120,186, 36, 16, 42,192, 26,133, 83, 34, 84,218, -236, 58,148,241,244, 67, 47, 43, 63, 13, 99, 55,112, 49,247,244,253,132, 81,176,156,207,217,109, 14,114,176,231,136,209, 89, 44, -157, 86,196, 86,174,178,228,160,168,189,229,112, 24,153,173,102,244,195,200,221, 67,207,229, 69,139,181, 26,114,160,178,158,105, -232,216,237, 55, 34,140, 12,146,183,189,190,223,145,179, 38, 70, 25,235,199, 28,169,106,139,178, 80, 53, 53,202, 24,238,238, 31, - 48,126,134,245, 53, 67, 86,236,251,129,237, 97,196, 84, 13,223,251,222,247,121,247,246, 29, 97, 26,112,222,160,200,204,106, 71, - 78,129,155,103,207,105,154,134,118,214,226,188,120,180,125,237, 10, 37,208,131, 49, 84,110,194,215, 21,211, 16,152, 50,204, 86, -151,188,123,243,134,217,108, 70, 59,159,177,221,108,184,126,254, 17, 15,135,142, 68,194, 87, 2,167,241,243,150,182,185,228,254, - 97, 67,154,183, 50,121,156, 34, 95,191,122,205,199,215, 43,124, 51, 35,140, 19, 58, 91,136,129,203,171, 27,238,238,110,209,206, - 48, 13, 1, 84, 98, 26, 39,106,223,162,181,156,223,211, 52, 97,141, 57,217, 70, 21,242,154,238,135,129, 49, 70,222,222,111,121, -245,246,129,235, 55,107,110,238,238,120,246,252,134,171,155,107, 86,151,151, 52,171, 21,213, 98,137,109, 90,148,111,200,166, 66, -155, 10,148,197, 88, 71, 54, 70,240,201, 70, 21, 71,132,161,214,134,165,210, 36, 37,132,183,186,169,104,111,239,185,127,216, 50, - 78, 81,236,206,186,248,210, 93,209, 98, 96, 78,182,217, 84, 82, 67,213, 52, 17,179, 34, 71, 72, 42, 49, 70, 1,216,200, 25, 38, -231, 83,194,160, 12, 56, 36,224,202, 90,225, 69,212,222,225, 10,114, 89,240,233,233, 9,244,229, 17,215, 26,191,163,110,207,167, -192,116,251,212,216,171, 30, 21,244,145,167,217,234, 41,229,115,252, 6,233, 55,193,190,202,170, 38,198,128,109,188, 23,177, 14, -200,184,176,220, 82,188,243, 56,103,240,149,220,120,165,176, 75,151, 46,221,252,163,106,247,216,169, 29,185,238, 70, 63, 10,167, - 84,177,196, 29, 83,183,142, 31,178,175,120,191, 27,127,234, 81,126, 66,163,251, 53,234,221, 39, 9, 94,231, 8, 90, 93, 84,251, -198,210,180, 51,156,175,248,193, 15,126,128, 39, 17,250,142,186,169, 81, 85,133, 27, 38, 62,126,254, 41, 77,179,228, 62,122, 73, -213, 26, 21, 32,185,205, 97, 16, 17,215, 24,122,230,243, 25,151, 87, 87,124,252,209,247, 97,191,230,226,234, 25,195,215,175, 25, -195, 64,154, 12, 83,127, 32,213, 51, 14,155, 7,198,109,230,245, 47,254, 9, 47,174, 47, 9, 85,197,223,252,195,127,133, 95,253, - 39,127, 15,149,213, 41,109, 78, 29,195,107,138,178,241,112,232,136,151,137, 56, 12,140, 49, 96,157,229,163,155, 23,180, 77,203, - 31,255,201,159,136, 53, 3,131,119,158, 24, 18,239,222,221, 98,173,227,217,179,103,104, 5,239,222,189,195, 25, 79,211,100,156, -147,125,212,212, 15,236, 55, 91,124,213,138,144, 36,136, 69, 75, 14, 79, 69, 8,233,164,105,151, 60,110,177,238, 13, 67,199,204, - 5,185,216,101, 87,138,167, 58,141,133,142,222,121,113,138,100,180, 81,114, 41, 44,239, 13,173,180,252, 55,163,139, 35, 66,161, -117, 46,162,185,140, 86, 17,149, 39,226,184,103, 82, 73,198,233,227,129,169, 36,148,137,111, 52, 22,156,163, 76, 10,200,145,115, -252,124, 44, 74,209,152, 51, 36, 25,181,134,148,136,177, 56,172,181,220,170,181, 54, 50, 58,119, 21,182,106, 68,165,238, 26,180, -107, 48,190,194,213, 2,212,144,189,185,116,225,198,185, 66,146, 42,132, 42, 35, 42,112, 93, 14, 26,117, 76, 81,211,231,152, 28, -245,235, 77,226,239,191,111,243,119,133,135,239, 23,215,127,150, 37,255,175, 22,143,251,248,181, 76,125,207, 79,254,201,159,162, -195,128,211,162,254, 87,202, 16, 67, 46,175,183, 66,169,128,183,154,245,122,132,164,152,114, 36,102, 77, 86,199, 3, 79,209,212, - 13,195, 48, 74,119, 55, 78,140, 49, 17, 82,102, 54,175,229,251,138, 20, 75, 93,144,213, 85, 37, 20,178,170,169,216,245, 3, 83, - 86, 80,160, 36,195, 24, 88, 56, 65, 24, 91,149,217,238, 71,154,198, 49, 76,145, 97,140, 84, 78, 46,142, 57, 39, 82, 20, 97, 83, - 51,119,144, 18,139,182, 98,187,217,114,115,115, 73, 36,115,255,112, 0, 20, 77, 93, 9,140, 38, 4,102, 23, 75,250,161, 43, 64, - 15,197, 24, 18,218,120,246,135, 29,222, 91, 48,150,126,152,120,254,241, 2,227, 53,182,178, 84,117,205,187,187, 7,124, 61, 67, - 25,143,169,107, 54,219, 29,235, 67,143,111,230,124,242,241, 39,220,190,121, 75,154, 2,222, 26,194,216,241,226,227,231, 88, 3, - 87,215,151,212,245,163, 51,194, 85,242,123,214,179, 22, 95,213,194,151, 72,150,198, 79,248,202,179, 97, 79, 86,154, 16, 35,117, -211,146,146,164,228,189,124,245,138,249,252, 82, 86, 76, 68, 66,154,136, 41,208,109,215,212,174,226,106, 57,231,238,237, 43, 62, -254,236,123,124,189,219,243,242,213,107, 86,179,134, 74,137,167,124,140, 48,111,103,188,124,253,150,170,178,196, 56,146,114, 42, -194,225,132,206,176, 88, 44,152, 98,150, 96,151, 98,213,210, 49,162,202,164,113,140,138,110,146,136,220,205, 46,240,176, 30,184, -187,187,231,238,245, 61, 47, 62,122,224,197,139,103, 92,220, 92,179,184,238,104, 22, 75,220, 98, 46,154, 21,159,200,182, 70,105, - 39, 36, 55,231,193, 40,114, 89,255, 26,231,241, 85, 69, 93, 85, 44, 23,115,110,174, 47,185,191,123,224,221,187, 59,214, 27,241, -172,135,194, 75,208,199,245,239,153,219, 42,165, 84, 52, 20, 35,170, 55, 4, 45,171,210, 41,138, 47,252,100, 75, 37,161,116,192, - 38,251,232,240,209,162, 31,115,222, 81, 85, 21,206, 73,211, 34,103,208, 83,251, 89, 78,194,116,200, 31, 72,105,203, 39,130,234, -119,185,238, 57,231, 71, 87, 81, 74,146,154, 26,211,153,205,247,136,152,253,240,115,157, 75, 99, 30,162,198, 86,149, 59,117,234, - 70,107,156,147,162, 94,121, 41,234, 85,117,252,185,123,210,153,107,253,184,123,208,168, 34,234, 40, 34, 54, 30,233,113,153,199, -220,247, 35, 16, 48, 31,211,159,242,249, 23,247, 52,106,239, 73, 16,215,119, 10,247,111, 62,140, 68, 40, 39, 10,121,180,193,249, -154,217,108,206,199, 31, 63,103, 86, 89,238,222,109,120,120,120, 0, 18, 55,215, 75, 86,139, 57, 57,215,132, 41, 17,202, 8, 68, - 41, 85, 88,224, 3,195,254,129, 20, 19,135, 16, 49,117,205,118,189,101, 97, 12,243,143, 63,102,255, 71,127, 68, 30, 7, 70, 11, -195, 97,135, 85,134, 47,214, 91,110,223,188,230,219, 95,254,148,198, 38,126,244,135,191,207,255,234,127,241, 63,227,199, 95,125, -203,159,253,252, 11, 2,143, 66, 41,111, 13, 51, 87, 97,180, 98,182,152, 97,157,231,219,111,191,161,246, 21, 77, 85,227,189,231, -231,191,248, 57,155,237,150,223,255,221, 31,225,171,138,113,232,121,243,238, 22,173, 45,191,250,246, 21,198,215,212, 85, 69, 55, -140, 80, 41, 33,117, 77, 30,215,204, 25, 6,121, 48, 33,149, 29,143,236,131,140,214, 52, 85,205, 52, 5,172,182,104, 21, 24,194, -128,179,142,186, 93, 49,101,195, 52, 29,152,121, 67, 21, 31, 61,195,154,120,186,253, 30, 47,106,178, 94,161,236,156,142, 63, 47, -123,246,227,135,210,133,228,123, 36, 59, 69, 66, 28,201, 99, 38,165,192, 52,149,226,107,212, 41,189,233, 20,205, 90,246,248, 41, - 75,112, 80, 72, 89,108,101,145,211,200, 10,100,108,167,109,133,174,164, 19, 55,174, 28,148,174, 70,123,233,202,141,171,202, 72, - 93, 20,234,214, 57, 76,117,212,128, 88,116, 89, 29,157, 56,207,250,200, 94, 56,203, 51, 62, 35,188,228,247,139,121, 86,191,177, - 11, 63,209, 89,223,203, 55,248,238,187, 56,255, 51,104,185,249,176,237,237, 55,124,122, 49,138,158, 48,187,227,246,129,127,252, - 15,254, 30,149,210,132, 32, 93, 78, 74,170,116,210,226,157,119,206,144,148,101,183,235,201, 70,186,248,120,140, 79, 46,110, 15, -109, 12,253, 36,180,185,148, 50,113,138, 56, 3,171, 89, 35,145,195, 41,224,140,236, 4, 43,107, 73, 41, 18,130,194,186, 21,187, -187,151,104,173, 56, 12, 1,140, 70,133, 8, 49,211, 84, 86,118,237,128,175, 26,198, 73, 46,166, 74,201,175,143, 33, 97,200,180, -149, 69, 21,136,210,190, 31, 88, 46,103,140,113, 36,161,184,191,223,241,201,199, 51,150,203, 25,187,221,150,202, 57,114,134,195, -126,207, 56, 36,114,214,244,227, 64,223, 71, 22,179,138,126, 28, 25,251,137,213,101, 77,213, 24,134, 48,113,189,122,198,187,219, - 7, 40,154,140,170,153,113,183,125, 96,187,221, 49,111,231, 92, 95, 94,243,242,235,111, 75,243,163, 25,134, 3, 47, 62,186,198, - 87,150,217,188,102, 54,111,105, 27,121,134,189,181, 68, 50,151, 23,151,178,234, 49, 86,132,172, 25,156, 53,180,109,133,210,199, - 44,248, 61, 85,213,210,119,219,146, 78,151,185,123,245,146,106,209,240,176,223,112,177, 92, 80, 87, 21,135,237,134,172, 20,139, -229, 37,243,170, 97,251,240, 64, 91,215,196,113,224, 23, 95,124,201,239,255,238, 15,153,166,142,195,102, 75,229, 47,241, 85,133, - 53, 37,200, 73, 37,180,177,162, 79,209,138,249,124,206,253,122, 83,130,168,228,189,212,117, 18,129, 27,142,113,220, 25, 34, 90, - 82,235,134,145,105,154,216,247, 19, 15,219, 3,183,119, 27,158, 63,127,224,217,139, 13,151, 87, 87,204,174,150, 84,243, 57,213, -108,129,105,230,232,234, 40,168, 51,160,197,246, 41,164, 58,135,241, 21,166,170,168, 22,115,218,139, 5,171,103,215, 92,127,244, -156,237,122,199,250,126,195,102,189,165,239, 39, 66,148, 40, 84, 93, 70,242, 71,194,228, 56, 77,162, 7, 81,144,212, 72, 74,129, - 24,236, 25, 69,174,164,185, 41, 78,141,231,113,213,136,166, 0,144, 52, 85, 37,147,107, 85,226, 80, 83,153, 26, 30,153, 25,143, -185,237, 79,225,108, 57, 39, 84, 76,143, 28, 21,138,235,166,252,191, 99, 92,121, 42,150,241,227,164, 57,113, 38,172,227, 17,234, -118, 30,108,150,180, 8, 38, 49, 6,235,189,199,168,199,184, 85,239, 12,149,247,120,239,169,188,165,170,228,231,206,153, 51,159, -249, 83, 1, 91, 46,136, 76,165,212, 41,198,245, 24, 44,114,164,145,229, 98,170, 73, 37, 1, 7,245, 94, 82, 84, 65, 92,158, 46, - 1,167, 47, 73,157, 18, 38,212, 95,218,137,200, 0, 95,147,208, 57,146,148,198,215, 45,206,215,204, 23,115,110,158,173,136,195, - 64,214,142, 41, 41,230,139, 25, 31, 61,191,164, 50,158,251,135,200,161,235, 36,215, 86, 69,226,180,167, 59, 60, 48,246, 59, 94, -125,251, 13,203,139,143, 48,179, 57,237,114,201,219,183,111, 81, 23, 11, 58, 13,247,155, 53,244, 61, 67, 14,212,174,162,123,184, -227,235, 47,190,162,169, 26,200,154,249,229, 71,252,206, 15,127,159, 79, 62,254,148,255,195,191,255,191,228, 39,255,199,255,147, -216, 15, 68,254, 47,241,157, 90, 51,134,200,103,151,159,241,147,159,252, 4,167, 53,149,181,144, 19,111,238,110,185,219,174,121, -254,236,154,143, 94, 60,167,239,122,126,250,211,159, 18, 82,228,243,207,191,199,207,126,249, 43,158, 61,255,136,251,135, 53,211, -216,227,189,163, 27, 14,120,103, 65, 45,241, 85,133,210,229, 6, 88,232,122, 67, 1,102, 40, 45,110,133,152, 6,166,144, 32, 27, -137,184,140, 90, 70, 84, 68, 42,155,169,149,228, 29,159,119,168,170,136, 42,149,210,216, 83, 34, 95, 89,167,104, 78, 35, 87,163, - 69, 13,175, 82, 9,246,200,241, 52,137,137, 41, 98,162,216,155, 76,144, 34, 26,202, 8, 45,157,226, 12,207,148,166, 81, 2, 67, - 82, 22,113,144, 50, 98,149,177, 86,148,233,218,215,210,109, 87, 13,182, 22,155,153,124, 52,104, 91, 97,156, 43, 29,121, 41,220, - 86,138,185,114,250,145, 80, 88, 84,178,231,171,161,252,158,181, 44,171,247, 24,246,143,104,168, 39,142,140,247,129, 77, 31,170, -225,234,159,135,202,253,132,123,125,186,181, 87,239,101, 54,192,119,111,254,168,120, 90,128,169, 41,240,250,231, 63,225,246, 87, - 63,131,105, 64,101, 67,202,129,105, 74, 88, 37,130,199,202,201,161,183,221, 11,110, 58, 38,228, 96, 79, 25,175, 21, 78,139, 46, - 39,164, 81,246,236, 89,108, 96,125, 63,114,185,154, 97,114,164,117,150, 72, 98, 24, 7,154,202,160,117, 64, 17,209,166,161,159, -162, 0, 94,210, 72,204,154, 16, 20, 70, 41,166, 33,112,241, 98,193,190,235, 65,121,166,152,136,211,136,210,153,170,182,196, 49, - 51,246,145,198,195,162,177,236,118, 29,203,231, 43, 98,210,248,186, 98,223,109,217,110, 3,215,151,245,105,119, 27,195,136,178, - 21, 49,100,118,219,142,118,182,226,246,238,158,113, 8, 96,100, 50,160, 84,166,109, 12,139, 85,195,148, 70,158,191,248,136,119, -183, 15,116,125,160,153, 47,241,205,140,251,205,154,190, 59,112,181,186, 64,103,203,187,111, 95, 81,107,195, 20, 70,246, 99,207, -247,190,255, 49,203,139, 57,174,118,204,102, 45,179, 89, 67,229, 29,141,119,120,235,168, 46,102,100, 99, 49, 86, 84,234,249,152, -128,161, 34,222,105, 42,103, 8, 90, 17, 99,164,105, 26, 54, 15,183,248,166,162,109,106,238,223,190,226,179,203, 31, 97,188, 99, - 24, 3,207, 47, 86,188,185,125,199,184,127,160,170,103, 88, 83,177, 63,172,249,222,247,127,135,238,176, 99, 76,154, 95,125,251, -138, 23, 55,151, 52,179,138,119,183,111,249,244,163,103,188,123,245,138, 23, 47, 62, 34,167, 45,187,221, 1,227, 44,251,190,227, -202,104,198,113, 40, 46,145,137,186,174,138,102, 65, 17, 18,132,210, 77,106,165,136, 90, 50,207, 14, 57, 51, 29, 70,182,195,196, -253,246,192,187,251, 7,158,189,189,229,249,179, 27,174,110, 46, 88, 93,175, 88, 94, 93, 82,175,150,216,217, 28, 91, 47, 81,190, -145,231,219,104,208,158, 92,121,146,173,192,213,232,122,134,157, 45,168,167,145,217,117,199,245,225, 64,191,221,114,216,236, 88, - 63,108,217,110,247,236,187,129, 41,157, 98, 59, 73,197, 95,153, 74,152,146, 13, 19,222, 42,234,202, 97,202,212, 3, 36,107,195, -151,102,214, 89, 35,234,251,178,210,139,197, 37, 19, 83, 70,151, 73,165,212, 81, 41,168,153, 4,201, 72,227,250,222, 88,254, 8, -151, 17,251,229,163,199, 61,146, 31,109,112,101, 98,144,138,238, 74,105, 1, 76,157,166,163, 71, 64,237, 49, 52, 77, 63, 78,178, - 35, 18,222,164, 82,198, 86, 85,117,178,127, 25, 35,123, 47,231,220, 19,211,254,201,150,166, 31,227, 88,139, 42,255, 59, 52,177, - 39,233, 93,239,253,251, 63,175,168,206,167, 35,248,179, 64,138, 12,117, 93,227,156,149, 78, 79, 24, 39,236,118,123,172,117,212, -117,133,175,107, 54,247,107,186,222,112, 56, 28,232, 58,201,203,158,186, 13,251,205, 3,247,239,110,105,151, 55,204,231, 43,218, -229,130, 16, 18,191,124,245,146, 62, 14,252,141,102,198,171,175, 95,114, 88,239, 81,149,194,205,230, 60, 60,108,248,230, 87, 95, -240,195, 31,253,136, 16, 71,126,239,247,127,151, 23, 47,190,199,188,189,230,111,254,225,223,226,147,155, 27,190,121,243,166,116, -160,154,218,248,211,233,187, 94,175,185,190,190,102,183, 89,115,243,236, 25,179,182,101,152, 6,250, 67,199,239,255,206,143,216, -109,119, 44, 23, 11,254,221,127,231,223,161, 31,122,178,210,124,249,229,175, 36,198,117, 26,241,206, 97,141, 17, 53, 40,162, 36, - 70,169, 18,215,217, 16,147, 98, 24, 71,170,170, 38,231,145,105,234,241, 85,133, 41,226, 37, 95,107,148, 54,140,221,132,138, 35, -206, 38, 42,163,240, 37,226, 43,159, 88,237,199,238,188,196,233,170, 39,137,184,103,112,162,163,136, 68, 6, 5,137, 76,214, 5, - 63, 90, 20,169,201,148, 17, 94,161, 79,101, 53,157,250, 69,121,115,203, 24, 61, 43,141,214, 34, 82,179,174, 20,243, 18, 73,106, -171, 10,235, 91,249,168,188, 88,205,188,199,249, 99, 33,247,162,241,176,226,218, 80, 78,118, 98,202,148, 7,193,232,239,188,135, -254,135,188,246,254,237,140,230,143,177,142,239,199, 66,190, 31,144,115, 62,108,200, 69,147, 18, 35,216, 20,249,234,103, 63,101, -216,238,152,105, 75,119, 8, 88,235, 24,134,177,192, 60,228,242,150,146,176,238,181, 21,149, 58,230, 68, 47,192, 90,131,247,158, -195,208,151,152,224,196, 56, 38,156,179,204,218,134,105, 26,203,206, 83,222, 19, 85, 37,208,153, 41, 4,124, 85,177,222,108,232, -199,169, 92,182,101, 90,224,196,141, 74, 74,208,247, 19,243,185,199, 25, 75,183,219,209, 84,150, 56,133, 98, 95, 84, 44,231, 45, -135,253, 64, 59,171,232,199, 61, 23, 87, 11,246,221,129, 24,173, 68,228,234, 64,229, 27,250,190,199, 24,249,187,190,123,247, 64, -202,208, 15, 3, 49,203,168,185,173, 27,250,253,129,152, 21, 87,207,150, 28,134,129,155,143,111,184,189,223,112, 24, 38,234,102, - 65,213,204,120, 88,111,136, 41,113,181,188, 38,199,204, 97,119, 16, 93,203,208, 51,133,129, 31,124,255, 51,218, 69,141, 49,112, -185, 90, 49, 95,205,105,235,154,166,170, 48,206,224,107, 79, 59,159,203,251,220, 75,132, 46, 74, 82,234,156,117,248,202, 51,155, -181, 28, 30, 54,146,160, 86, 2,185, 98, 9, 95, 81, 10,214,247, 15,204,175, 86,220,189,189,101,217,204,168,235,154, 62, 69,182, -187, 45, 33,194,242,226,130,219,187, 91,158,191,248,152, 55,111, 95,179,239, 14,116,195,130,198,121,146, 25,217, 30, 6,170,118, -198,122,189,166,242,158, 93, 14,194,109, 8,242,186,185,178, 75,143, 33,138,173,173,235, 5,149, 92,194,114, 30,155, 91, 69, 42, -175, 83, 44,244,199, 93,215, 51, 78, 3,219,253,142,187,245,150,235,187, 37, 55, 55, 87,220,124,116,224,226,230,192,108,181,162, - 89, 78,184,166,197, 85, 13,217,213, 34,112,214, 50, 5, 81,214,130,110,208,110,142, 9, 3,174,238, 73,237, 64, 59, 95,178,184, - 56,176,184,220,179,221,110,217,172,183,236,247,123,250, 67,207, 56, 6, 66, 22, 59,182,137,182,236,222, 61,202, 4,172, 69, 28, - 22, 41,161,180,228, 28, 24, 43,246, 74,173, 69,205, 62,197, 64,223, 15, 18,225,157, 51,195, 96,112,174, 88,185,141, 76, 63,101, -205,168, 30,215,190,229, 2,113,252,241,196,129, 79,170, 48, 89, 10, 19, 35,137,114,253, 49, 15,254, 24, 93,162, 79,147,202, 19, -208,139,199,108,247, 83, 81, 47, 53,217,106, 35,177,181, 39,245,123,121,162,245,217,248,244, 8, 82, 57,247,232,125, 88,169,251, -155,131, 60,206,185,242,255,221,138,182,250,173, 62, 39,157, 5,192,128, 98, 54,155,227,156,135,156, 24,135,145,251,183,119,236, -247,123,230,139, 57,206, 87,188,124,245,134,135,219, 13,155, 93,224,139,219, 13, 57, 38, 60,153,135,119,111,249,250,235,175,216, -119, 7,254,237,191,243, 63, 37,247, 35, 87,203, 21, 41, 13,244, 10,246, 42,227,173,231,205, 55,175,185,127,251,142, 78, 7,214, - 70,243,236,250, 6, 69, 96, 28, 15,252,224, 71,223,103, 63, 28,152,178,231,179, 31,252, 1, 23,113,207,191,243,119,254, 45,254, -175,255,183,255,123, 73,255, 54, 40, 44,253,216, 99,173,102,189, 94,139, 87, 23,184,189,187,197,106, 33,224,125,244,236,154,197, -172,161,169, 26, 25, 43,150, 96,145, 67,215,243,163,239,127,143, 20, 35, 55, 55,215,172, 22, 11,194, 56, 62,193,209, 30,227,113, -219,166,101, 8, 17,180,230,250,230,134,253,190,195,186, 3, 15,235, 13,190,146, 98,217, 15,129, 88,222,252, 85,138, 84, 86,225, -173,194,199,226, 82, 56,223,247, 42,202, 34, 37, 21,107, 70,153,178,164, 92, 8,109,234,244,121,156, 71,231,234,199,254, 80,161, -209,122, 18, 4,176, 54,100, 45,147, 30,180,160, 82,149,169, 48, 86,172, 99,198, 86,101,247, 86,225,189,236,194,171,186, 41, 2, - 55, 95,104,110, 21,206, 75,142,184,113,246,148, 35, 46,182, 20,121, 79,115, 98,167,151,137,145, 62,187,140,240,212,125,241, 63, -202,130,126,190,202,202,249,212,161, 72, 94,194,209, 22,243, 97, 17, 95, 62,253, 90,249, 31,227,126,195, 79,254,248,143, 81,195, - 68, 10,138,113,202, 76,113,146,101,135, 61,226,125, 13, 93, 23,132, 4, 87,158,187, 41, 36,129, 13,149,131, 73, 0, 70,229,191, - 25, 75,119, 56,240,236,102, 9, 57,227,172, 37,132, 64,202,137,166, 17, 78,185, 51, 90,178,232,141,248,175, 99,204, 76,147,236, - 60, 99, 18,127,252,172,113,108,183,157, 4,187,132, 9,173, 36,193,208, 25, 67, 14,129, 20, 50,171,101, 37,129, 69, 42, 81, 85, - 25, 95, 25, 80,145,217,124,193, 55,223,188, 19, 15,184,147,176,152,148, 50,181,107,152,194,196,221,253,134,155,155, 25, 83, 84, - 12,195,132,241, 34,240,139, 9, 86, 87,115,134, 48, 82,205, 90,118,135,137,245,174,199,186, 6,215,180,172, 55, 59, 64, 81,187, -138, 56, 68,194, 36, 2,190,126, 56,224,189,225,243,239,125, 94,118,182,137,171,235,107,150,171, 57,179, 89,139,182, 26,235,197, - 70, 92,207,100,218,228,219,153, 20,116, 45,148, 70,141,194, 87, 25,231, 3, 85, 83,161,141,162,106, 42,214,187, 45,174, 4,172, - 88, 45,182,202,187,119,111, 65,195,172,105,120,123,251,150,231, 47, 62,166, 91,175,137,122,100,159,182, 52,243, 57,218, 40,230, -139, 5,247,235, 7,154,166,229,219, 87,175,249,252,211, 79,208, 85,195,187, 7, 1, 97,237,182,247, 84,222, 81,121, 71,127,232, - 8, 33,210,247,189, 68,117, 31,195,144,200,116,125, 7,202, 19, 74,154, 36, 5,233,125,132,108,161,149, 64, 85,142,176,177, 41, - 51,197,145,195,112,203,195,122,203,253,237,154,187,251, 45,207, 94, 92,115,245,236,138,171,235, 45,179,197,156,217, 98,137,106, -102,152, 74,244, 47,202, 86,100,229,192,120, 48, 94,236,112,174, 66,217, 30,229,156, 0,121,106,143,109, 61,245,204,115, 88, 59, - 54, 15, 27,233,220,163, 48, 43, 66, 8, 5,123,161,201, 24,140,117, 56, 35, 0, 33,163, 18, 70,139, 62, 72, 23,129,231, 17,181, -125, 40,226,219, 67,201, 11,112,206,226,172, 76, 77,142,211, 19, 95,196,180, 39,208,218, 17, 80, 83, 80,180,226,101,167, 0,114, -194, 9, 70,115,114,154,156, 69,205, 42,173,201,156,219,217,164, 9,164,172, 3,143, 69, 93,159, 50, 79,164, 86,199,148,176, 34, - 82,121, 68, 79, 42,245, 30,147,251,236,160, 83,239, 37,110,124,168,216,127,168,131,254,181,129, 48, 74,253, 83,157,158,239,143, - 52,159, 30, 75,199, 93,167,116,120,237,124, 46, 41,103, 41, 17,199,137,245,102,131, 47, 15,208,235,183,183,188,121,245, 53,251, -237,142,187,135, 29,183,253,132, 55,142,121,211,224,156,102,191,219,243,135,127,243,111, 97, 93,141,183,158, 52, 14,194, 47,246, -150,118,181, 98,220,119,252,236, 39, 63, 33,117, 61,179, 75, 41,168,155,237, 3, 87,207, 46,217,245, 91,126,116,185,160,158, 55, - 12, 74, 83, 93, 92,113,117,249, 9,255,251,255,224, 63,224, 63,252,127,253, 71,132, 41, 72, 6,117, 10,172,150, 75,198, 48,209, -206,102,220, 63, 60, 48, 14, 61,147,214, 60,203,153, 31,254,224, 7,242,239,195,200, 71,215,207, 78, 95,229,110,191,227,221,219, -183,180,109,139,213, 34, 82,211,103,148, 80,163,141, 88,210,180, 99,179,221,113, 51, 78, 24,239, 81, 33,161,181,145,203,142,111, - 72,104,166, 8,187,125,199, 20, 71,166, 40,225, 36, 38, 5,172, 74, 56,157,112,229,162, 25, 57,203,247, 61,197,181, 41, 25,221, -151,110, 43, 63, 17,115,156,173,104,142,191, 71, 78,101, 15, 85, 46,157,250,104,137,116, 24, 39, 33, 15,198, 85, 98, 49,171,102, - 88, 55,195, 85, 13,190,158,161,155,133, 64, 95,188,132,158,248,186, 22,244,170,243, 40,111, 81,174,136,244,140, 57, 61,148,199, - 17,149, 81,103, 10,245,114,216, 40,245,107, 12,102,234, 95, 68, 51,173,254, 74, 23,221, 15,129,150, 62, 36,184, 57,217, 87,131, -140,243,136,241, 84,192,141,119,143,201, 83, 57, 63,249, 50,207,233,128, 18, 23,153,216,222,190,225,229, 47,126,138, 75, 48,140, -129,172,141,188, 55, 12, 88,113,245, 8,223, 61,100,156, 85,116, 49, 17,138, 6,194, 40, 85, 24, 5,186, 48,188, 77,217,193,102, -234,202,208, 54, 13,227, 40,184,227,113, 24,112, 85, 37, 14,153, 16,101, 18, 83,114,211,149,150,247,215, 20, 33,196,128, 85, 10, -103,197,101, 49, 77, 17, 91, 57, 17, 38,197, 64, 91,105,114,156,138,120, 47, 83, 57,205,126,123, 96, 57,151,144, 20, 83, 65, 38, -114,119,127, 79, 72, 80, 89,161,219, 25,227, 49, 74,184, 5,125, 63,224,189,228, 49,108,119, 91,148,145,247,207, 16, 2,190,241, - 68, 21,203,148,199,114,191,222, 99,172,167,153,205,232,199, 81, 10, 90,148,195,223, 98,136, 99, 96, 26, 15, 92, 95, 95, 48, 95, -205, 72, 4,154,166,230,226,234,130,229,106, 65,211, 84,248,202, 83,213, 21,198,121,218,182,197,213,173,132,251,180, 77,153, 80, -153,211, 14, 85, 59,139,175, 28,205,172,198, 24, 77,211,212, 60,228,132,115,158, 93,183, 23,127,187,119,220,175, 31,136,133,221, - 30,114,162, 27, 58,114,138, 76, 67,143,171, 20,221, 97,203,234,242,134,221,126,207,199, 31,127,194,221,221, 29,205,124,193,195, -118,199,213,229,138,108, 43, 30,246, 29,206, 56,250, 97, 16,149,123,206, 76,227,200,208,119, 44, 22,115,250,219, 59,180,209,132, -105,196, 89, 75,156,146,116,194, 42,147,115, 41, 56, 37, 15, 64,144,172,199, 75, 96, 34,230, 72, 76, 48,141,137,105,232, 24,186, -145,245,174,231,238,254,129,155,119,183,188,120,126,205,245,205, 5,151,215,151, 84,203, 57,245,124, 89, 60,238, 51,178,107,192, - 8,196, 70, 91,115, 26,105, 43, 5, 88,141,211, 89,228, 53, 78, 26, 18, 99, 37, 59, 33,231, 44,175, 81,156, 8, 97, 44, 86,189, -132, 53, 6,111,132, 39,225, 76,150,206,219,233, 19,161, 45, 69, 65, 82,135, 73,220, 56,199, 6, 68, 43,133, 47, 96,173,202, 89, - 89, 85,123,153,114, 11, 65, 82,132,122,199, 70, 39,197, 76, 8,137, 41, 10,220, 44, 28, 73,118,103,171,111, 78, 2,115,125,194, -175,163,207, 98,205,203,231,105, 35,245, 75,254, 46,146,251, 78,153,124,234, 88,224, 51,143,231,111, 62, 85,133,252, 27,148,118, - 79, 34, 52,127,157, 95,252, 55, 30, 90,234,159,219,217,121,188, 28,102,228,193,155,205,230, 24,109,137,211,200,253,237, 45,155, -205, 3, 89, 25,110, 31,238,217,237,118,236,118, 91,214,247,111,217,108,215,100,101,200,245,140,201,104,198, 0,127,237,175,255, -117,174,158,221, 16, 99,100,189,189,199,140,189,128, 83,230, 21,205,172,229,139,191,248, 11,134,221, 30,235, 45,182,170,184,190, -122, 78,204, 19, 99, 28,104,231, 11,116,101, 89,221, 92, 49,191, 92,146, 12,100,109,248, 59,255,238,191,199,239,253,193, 31,240, -167,127,242,167, 40,147, 49, 10, 66, 25, 99,205,102, 51,140, 49,188,123,243,154,139,229,146,139,203, 11,102,179, 25,203, 89, 43, - 73,107, 33,156, 34, 86,251,193,242,252,230,134,203,203, 11,140,177, 5, 60, 83,177, 99, 71, 74,137,170,192, 81,172,115,120,239, - 9, 49,178,219,108,216,108,246, 76,163,140,210,250, 97,194, 58, 79,211,182,100,109,137,218,240,250,237, 59, 17,150,196, 81,216, -236, 26,244, 73,204, 81,248,195, 41, 23, 16,147,122, 84,101, 30,119,223,231, 74,205, 92, 70,238,197,110,150, 74,167,117,124,163, -203,184,179,162, 54, 66,146,242, 77,139,107, 90,124, 61,195,214, 51, 92,189, 40, 73,102, 45,190,153, 99,219, 89, 33,185,249,194, - 79, 47, 29,185, 49, 40, 39,188,116,153, 46,157,187, 39,206, 46, 23,234, 3,170,209,252, 63,162,254,251, 55, 60, 83, 79,166, 98, - 49, 74, 72,205, 24, 72, 33,138,120, 71,107,116, 74,224, 69,205,127,234, 0,206, 60,175, 20,193, 97, 74,153, 28, 3,111,190,250, -146,245,235,151,216,156, 56,196, 68, 31,101,190,100,173,236,222,173,113,164, 81, 2,150, 36,222, 86,212,196, 90, 43, 42,103, 80, - 89, 68,116,219, 97,160,106, 28,149,115,236,182, 7, 46, 46,151, 98,145,212,154,105,148,117,139,117,150,110,183,167,174, 42,226, - 20,168,231, 45,227, 56, 18,146,248,204,141,177,130, 62, 45,209,170, 93,215, 97,173, 76, 9,150, 87, 30,171, 51,202,106,226, 36, - 88,225,182,118, 76,195,128, 81,138,166,117,212,181, 67, 59,205,237,253,154, 97,202,248,170, 34, 5, 81,162,119,135, 3, 23,171, - 25, 97, 74,172,215, 91,170,202,113, 56,116, 69, 96, 10,195, 20, 49,214, 96, 43,199, 16, 38, 46, 46, 87,108,182, 82,208,219,217, -156,144, 97,156, 2, 83,223, 99,181,130,144,232,135,192,106,181,228,234,147, 27,166, 60,145,117, 98,117,113,193,108, 57,103,117, -185, 98, 62,111,241,206, 83,213,242,140,214, 77, 75, 53,159, 99,235, 10, 93, 85, 40,227, 30,181, 71, 74,132,170, 86,105,234,166, -162,105, 42,170,198, 23, 96, 76,205,208, 31, 78, 26, 21, 95,121,188,177, 76, 93, 79, 54,154,186,109,185,187,191,227,122,177,162, -239, 7,162,134, 48,181, 76, 99, 15,123,205,106,185,192, 26,203,245,229, 53, 63,251,249, 79,185,186,188,196,250,150,205,221, 91, -158, 93,204,217,247, 29,149,149,137,203, 52,142,236,182, 91,230,139, 21,222, 59, 98, 8, 2,132, 49, 53, 83, 55,202,247, 52,101, - 1,166,100, 69, 34, 17,242, 99, 64, 73, 76,177,248,176,245, 41,125, 44,149,255, 62,196, 61,135,126, 96,189,222,114,119,251,192, -179,155, 11,158,191,184,230,242,102,201,234, 82, 60,238,213,124,129,105, 22,232,186, 69,185, 74,198,241,136,203, 70, 41, 71,214, -197,126, 91,198,210, 86, 11, 61,211, 56,139,245, 98, 11, 76,100,134,161, 39,198, 1,210,132, 54, 98,221,110,188,165,169, 13,222, -138, 24, 14,117, 92, 43, 5,134,113,100, 26,167, 50, 46,143,132, 16,132, 83, 96, 52,195,160,232,140, 46,226,114,135,175, 69,104, -238,156,112, 6,140,214, 37, 94, 62,150,112,173,227, 94, 62,202,172,242,120,201, 70, 86,159,198, 90, 41,222,198, 22,238,197,145, -127, 97,206,146, 73, 31,139,189, 58,211,167,201, 52, 46, 98,143,100, 27, 72,239,117,221,249,215, 30, 44, 74,253, 38, 75, 25,191, -246,208,225, 76, 49,253,244, 47,243, 87,213, 1,229, 15,172, 3,212, 83, 92,151, 82, 88,235,104,154, 25,195, 48, 16,115,228,203, - 47,127, 73,204,145,151,175,223,240,139, 47,190,230,246,110, 75,219, 52, 76,211,129,119,111,190, 97, 81, 59, 94,124,246, 59,116, -125,228,217,103,191,195,234,226,138,177,223,147,166, 3, 93,191,193,246, 3,213,172,101,222,212,172,102, 51,254,195,255,243,255, - 5,163,145,192,131,126,192,245, 61,139, 69,205,162,174,153, 95, 8,195,125, 8, 19, 95,124,249, 83,150, 87, 23,124,244,233,103, -204,151, 11,254,253,255,249,255,134,127,242, 39,127, 70, 78, 1, 44,236, 14, 59,177,170,236,119,228, 24, 9, 57, 83, 85,190,164, -194, 13,180,203, 5, 38, 11, 13,169,235,247,196, 40,249,193, 55, 55,215, 40, 5,117, 93, 81,249, 74,138,164,115,194, 44, 47, 29, -154, 42, 99,182,170,170, 24, 99, 18, 14,129,171,200, 89,227,135,137,144, 50, 73, 89,194, 97,192,249,138,207, 63,255,156,237,102, -203,246,237,158,170,246,132,176, 71,199, 64, 74, 74,236, 98, 41,156,156, 11, 34,234, 16, 37,186, 4, 28, 29,139,250,249,190,232, - 49,238,240, 84,208, 51,104, 37,118, 73,237, 12,218, 53, 84,237,146,217, 98, 73, 61, 95,210,206, 87,184,102,134,169,230,152,122, - 38, 98,199,170, 70, 87, 13,206, 59, 25, 85,150, 81,151, 58,238,118,173, 92, 88, 31, 81,193,234,201,148, 9, 85, 88, 66,239, 69, -149,242,155, 69,232,127,245,164,179,255, 30, 11,254, 9, 55, 57, 78,196,195,192,120,232, 24,187,158,156, 51,174,242,228, 16,113, -109, 77,246,162,149, 81,199,111, 24, 39,182, 37,133,223, 76,158, 70,126,241,147, 31,227, 83,102, 59, 6,134, 0,202,123,244, 20, -176, 54, 98,108,198, 40,205, 20, 38,180, 50,114,104,137, 84, 8,103, 68,204,102,143,225, 77,133, 96, 88,162,169,101,151, 62, 10, -115,160,235,122,156,183,248,170, 98,191,221, 98,173, 99, 10, 16, 99, 16,140,106,140, 69,180,169, 33, 67, 93, 25,177, 95,134, 76, - 44,175,153, 51, 6,149, 34,211, 48, 10, 5, 83,131,183,154, 93, 63,114,113,225,168,106,249,196,221,126, 32, 37, 77, 8, 17, 99, - 19,202, 8, 88,166,170, 77,129,209,204, 64, 69,182,251,158,166,117,140, 83, 0,165, 25, 67,102,177,170, 25,166,145,213,245, 74, - 18,215,172,161,106, 90,172,117,236,186,142, 97, 28,209, 36,210,148,104,156,227,217,245,115,180, 81, 36, 21,105, 26, 79,179,152, -209, 46,231, 92, 92, 95, 51, 91,204,169, 43, 71, 93,214, 69,117, 45,186, 16, 83, 85,248,182, 69,251,170, 48,210, 31,113,165, 90, - 9,216,200, 87,142,186,169, 89,173, 86,220,237,123,102,179, 25,125,183,199, 90, 75, 72, 35,206,104,218,166,102, 56,244,216, 89, - 67, 63,245, 40,163, 72,161, 32,149,199,200,238, 1, 46, 47, 47, 25,250, 61,155,135,123, 46, 47,150,188,121,243,138,155,155, 43, -190,125,245,146,231,215, 55,216,170, 97,189, 61, 48,175,100, 90, 48,134,137,186,241,108,183, 91, 22,139, 21, 49,132, 19, 48, 44, -166,136,117, 6, 29, 74,130,102, 22,222,190, 78,138,172, 18, 42, 69,162, 86,146, 98, 88,154,197,227,229,255,152, 46, 18, 99,102, -236,133,231,190,239, 70, 30, 54, 59,222,221, 61,240,236,106,201,179,103,215, 92, 63, 47, 0,155, 85,135,155,207,177,117,131,241, - 13,202,122,180,182, 36,165, 73,198,160,241,101, 52, 45,197, 79, 57,139,118,186,188,199, 28,109, 93, 81, 59,139,189,179,108, 54, - 59, 82,138, 56,167,241,149,165,105, 60,117,229,241, 94, 46, 4, 41,101,134,105,100, 24, 12,195,104, 37,199,125,156, 4, 35,157, - 36, 56,102, 40, 71,138,140,228, 61,245, 96, 5,216,102,109, 33,105,218,114,246,148, 40,219, 24,138, 85, 77, 46, 30,198, 9,130, - 92,107,139,118, 86,132,188,198, 22,152,142,150,196,198,179,176, 39,206, 10,249,209, 93,134,146, 38,234, 88,228,173,156, 5,137, - 15,180,229,127,169, 39,252, 55,117,234,191,185, 16, 63,205,212,254,103,218,185,228, 76, 70,188,180,190,174,208, 90,115,216,111, -232, 54,247,124,252,226,138,119,247,239,248,211, 63,253, 51, 94,124,242, 61,254,141,127,243,239, 48, 78,129,221,246,158,111,191, -185,100,251,230, 21,219,205,150,127,233,111,252, 33,171,103,159,176,221,110, 25,118, 27,214,239,190, 97,187,123,192,199,204,204, -125,204,205,229, 5, 97, 24,248,211,255,246,143,153,198, 30, 29, 43,118, 41,115,227, 43, 76, 93, 99, 43,203,139,143, 63,193, 86, - 53,219,195,158, 38, 91,126,245,179,191, 64, 39,197,116,245,140,191,245,175,254,141,211,190,105,156, 38, 64,159, 70, 50,235,135, -123,102, 77, 83,232,110, 3, 83, 76,108,119, 59,154,170,166,219,237,101,124, 89, 87,204,218, 57,149,115,220,221,222, 22,206,186, - 97, 28,197, 62, 18, 99,162,170, 43,177, 93,148,113,234, 48, 12, 50,234,155,132,181,127, 56, 12, 82,100,179,132, 9, 56,231,217, - 30, 54,160, 52,171,213, 5, 75,175,160,255,150, 56, 5,134, 48, 18,147,145, 91,119, 22, 31, 89, 78,249, 44,177, 44,151,196,183, - 99,214,239, 81,233, 94, 44, 31, 89,226, 74, 99, 42,118, 41, 36,111,219, 84,134,108,156, 16,221,154,150,118,177, 98,113,113,205, -124,121,129,107,196,191,106,170, 86, 82,207, 92,133,118, 5,197,170,149,224, 88,141, 22,150,250,153, 56, 79,189, 39,252,146, 22, -146,194,149, 63, 70,156,129, 86,249, 49, 49,176, 36,147,253,211,213,238,252,223,159,170,238,189,191,112, 74,137, 48, 78,164,190, - 99,220,110,217,222, 63,112,216,110, 81, 25,234, 89, 75,179, 92,208,196, 57,186,174,113,222, 61,166, 79, 41, 85, 40,124, 98,158, -143, 49,176,185,127, 7,211, 72,154, 2,195, 16,137,165,171, 16,168,137, 69, 49, 49, 14, 35,113,202,160, 53, 33,103,166, 34,198, -147, 93,186,116,233, 33, 78, 56, 3,206, 90,166,113, 98,181,154, 75,162,152, 82, 12,163,208,181,154,182, 97,183,219,163,148, 98, - 28, 39,234, 34,150, 83,206, 19,131,136,237,186, 62, 20,181,178,231,208, 77,104, 45,211,162,186,114,228, 16,200, 90,242, 38,180, - 74, 24,173, 25,199, 64,229, 13, 77,235, 48, 86, 58,238,253,110,164, 31, 3,205, 76, 10,116, 78,137,125, 23,169,219, 22,178, 20, -206,113,140,100,244,233,226,188,221, 71, 46,175,231,116,195, 72, 61,107,200,192, 24, 3,203,229, 37,206,214,108,247,123, 17,136, - 77, 17,239, 12,171,217, 18,149, 19,227,216,115,121,125,129,171, 12,214, 91, 22, 23, 75, 46,159,221,208,204,151,204, 22, 45,144, - 36,187,189, 21, 27,171,173, 42,148,115,104, 39, 69, 73,214, 67,250,148, 93,129,210,130,105, 69, 83,215,158,229,114,206,195,235, -183,212, 77,131,214,154,186,174,217,239,197,213, 98,148,226, 48,116,144, 46, 8,211,132,213,142, 97, 26, 9,211,128, 85,158,126, -191,225,238,237, 43,170,118,201,125, 42, 19,147, 97,224,242, 98,201,159,255,248, 39, 60,127,246, 12,109, 45,251,237,134,182,154, - 49,132, 32,171, 19, 35, 22,194,152, 98, 17, 35,202,190, 25, 43, 30,114,194, 78, 58,211,152,139,107,164, 36, 5,151, 80, 38,125, - 74, 36, 59,243,125, 40, 93, 44, 92,146, 14, 58, 69, 69, 26, 18, 99,232,216,239,123,182,119, 59,238,222,109,121,126,187,225,250, -249, 21, 87,207,175, 89, 92, 94, 80,207, 23,248,197, 66,138,123,213, 10,153, 78,107,114, 41,130,162,157,209, 88, 39,144,180,202, -137,200,176,109, 27,218,121,195,108, 37,162,230,195,254, 32, 43, 31, 35,226, 55, 95,121,218,198,225,141, 52, 46,213,104, 25,188, - 99, 24, 71,250,126,196, 90,205,161,159, 24,114,146,243,175, 56,114,200, 9,109, 19,253, 32,120,117,115,178,127,155,211,217,116, -204, 65,231,152,161,226, 29,149, 22,247,141,117, 22,235,107,124,185,232,201,250,208, 60, 34,166,213, 83, 53,114,126, 82,166, 37, - 41,241,168, 43,179,239, 91,106, 50,144,142,254,242, 39, 29, 54, 31, 40,232,233,131, 7,154, 8, 12,222, 11, 99, 81, 71,147, 90, - 49,183,169, 72,201,213,148, 68, 47,245,129, 2,175, 74,126,116, 86, 39, 27,213,249,159,117, 20,224, 61, 13,115,209, 39,139,157, -183,142, 60,245,244,187, 59,140,154,120,123,255,138, 87,175, 95,243,175,254,245,191,134,117, 53,175, 94,253,146,245,102,203,183, - 47, 95,114,121,117,205,199,191,255,175,115,249,236, 19,178,118, 12,221,129,195,253, 91, 30, 94,126,201,195,183, 95,242,230, 97, -195,231,223,255, 62, 84,142,121, 93,243,179,127,242,167,124,251,238, 21,159,127,254, 25,202, 90, 76, 85,203,225, 22, 52,151,151, - 87,212,213,146,126,154,232,251, 1,210,150,215, 47,191, 97, 49, 95,209,206, 26, 62,254,228,134,197,197,130,183,247,235, 2,159, - 73,104, 20, 99, 8, 24,231,113,117,203,253,122, 77, 54,142,166,157,177,104, 26,192, 9,190,182,236,143, 46, 86, 11, 14,135, 3, -205,124,134,181,238,148, 80, 52,140, 83, 9,213,241,194,218,142,241,116,179, 27,199,137,172,160,239, 71,161, 66,133, 40, 55,228, - 65, 84,205,139,197,138,245,102,199,219,183,119,204,204,132, 27, 6,226,216,145, 84,102,159,196,142,164,131,196, 21, 30,115,197, - 5,187, 42, 31,161, 8, 65,142,201,123, 71,181,166,208,156, 68, 40, 19,143,241,189, 26,114, 54,104,237,112,190,162,110, 91,234, -249,140,106, 49,163,185, 88,226,103, 75, 76,213,144,173, 43,108,117, 67,182, 71,239,248,209,206, 1, 89,231, 39, 23,196,252, 62, - 89, 56,137,244,254, 36,224, 75, 69,244,103, 20,217, 9, 76, 70,159, 82,144,180, 92, 10,149,250, 32,206,245,253, 68,192,227,142, -240,172,159,226, 60,177, 78,157, 90,146,239,250,196,179,202, 69, 98,120,246,108,229,163, 7, 94,149,247,112, 62,165, 13,230,227, -207,207,110, 31,234,152,145, 80,214, 27, 42, 70,114, 63, 50,237, 59,186,237,134,253,195, 27,182,119,239,136, 83, 79,213,204, 88, -236,175, 72,221, 21,213,124, 73,174,107,241, 0,107, 83,240,202,114, 41, 35, 74, 18,222,244,250, 37,116, 3,155, 62,210,105, 75, -208,137, 74,141, 88,151, 81,214,138,216,104, 24,113, 74, 49, 41,216,163,152,200,212, 40,170,148,113, 94, 49, 41,217, 91,206,173, - 99,102, 28,111,167, 3,243,197, 28,171, 45,253, 56,178,235, 7,234,182,197, 52, 51,186,251, 59,156, 22,177, 80, 68,145,148, 33, -132, 76, 12, 9,133, 33,134, 64,237, 53,206,104,186, 41,210,182,142, 48, 6, 98,232,241,126, 69,138,195, 41, 49,174,169, 45,235, -205,192,205,205, 92,224, 44,185,227,126,179, 33, 98,240, 85, 13,122,196,146, 25, 38,176,181,226, 48, 70, 46, 22, 11,214,187, 61, - 93, 63,177, 88,205, 68,165, 29, 50,237,194,177, 31, 15,204, 86, 11,176,134,253,212,115,249,236, 25, 33,194,110, 24, 65, 27,140, -142, 44, 86, 45,179,186,166, 63, 28,208, 10,150,215,115, 76, 99, 48,149, 99,117,125,197,242,226,138,217,114,193,108,190, 0,173, -169,219,154,170,174, 49, 85, 85,200,133, 22,227, 93,129,144, 8,115, 95,165,146,112,103,203,153,166,193,228, 76,101, 20,139,229, - 28,229, 45,158, 86, 68, 98, 74, 65,215, 49,145,209, 85, 77,222,108,137,125, 39,200,101, 15,219, 16,184,110, 23,108, 31,238,105, -231, 45,195,230, 29,109,229, 24, 14,145,205,186,166,114,134,113,127,203,213,197,140,215,175, 95,177, 90, 93,136, 24,112,191, 99, - 94,105, 42, 99,216,236, 59,178, 18,240,149,202,114, 81, 27,178, 98,204,130,175, 34,130,202,233,113,245,150,133,248,152,148, 38, -169,179,179,191,236, 71, 53, 26,149,227, 41, 94,250,232,122,201, 89,220, 23, 99, 72, 28,198, 61,183,135,158, 55,155, 29, 55,119, -247,124,116,247,192,243,103,151, 92, 93, 93,208, 94, 45,105, 47, 46,112, 77,139,173,103,224,106,146,113,168,242, 97,180, 34, 89, - 7,166, 70, 85, 51, 84,181,195,183, 59,170,214,209, 46, 91,110,182, 43, 14,155, 29,227,190,147,241,122,150,125,186,116,248, 14, - 77,198,107,112,222,224,172,126,212,232,160,229,235, 10, 81,244, 30, 33, 17, 82, 66, 7,232, 85,194,106, 78,197,252, 9, 42,186, -224,169,197,229,145,105,148,193,121,201, 24,177,206, 82,213, 45,190,105, 11, 47,163, 20,114,163,207, 70,133,250, 12,135,254, 94, -243,156, 5,134,163,116, 62,219,169,255,230, 38,224, 44,100,229,195,130,157,223, 20,180,242,151,181, 26,138,167,123,129, 99, 1, - 63,125, 67,242,111,238,214,159, 76, 9,138,170, 58, 43, 9,117, 24, 14, 7,182,235, 7,140,142,220,175,239,249,107,255,242,223, -164,174, 91,118,251, 3,109,221,208, 54,151,124,246,217,239,209, 52, 45, 65, 65, 63, 78, 76,195,150,221,195, 3,187,251, 55,188, -126,245, 37,247,111, 95,178,188,184,225, 98,181,224,250,230, 10, 72,252,248, 39, 63,102,177,186,160,154,205, 49,198,226,219,250, -196, 66,119,206, 1,138,253,238, 64, 63, 78, 56,239,228, 54,159, 18,243,217, 12,215, 58,154,166,129,251,181,228,213, 43, 69, 63, -141,164,125,241, 47,174,215, 92,174, 46,208, 74,241,229,175,190,228, 71,223,255, 1,206,153,226, 43,215,167,100,187,148, 19,219, -251, 13,214, 30, 73, 71,238,116,187,139, 5,221,120,204,235, 62,133,177,148, 75, 87,152, 4,146, 48, 77, 19, 33, 6, 50,250, 20, -218,227,189,103, 60,108,216,237,118, 16, 37,116,226,144, 2, 33,101, 73, 85, 11, 81,194, 53, 98, 42, 35,249,199, 44,224,148,121, - 34,142, 75, 20,238,118, 46,128,135,130,253,156, 98, 32,171,140, 45,226,159,170,174,168,219,134,102, 62,167,154,205,168,230, 51, - 65, 72,106, 83,172,103,250,113, 92,172, 16, 50,159, 82,143, 49,173,138, 39,180, 57,206,114, 5, 8,137, 28, 69,132,149,203,220, - 79, 25,141,201, 74, 98, 38, 53,103,201,105,234,105,132,249, 83,105,104,177,125,157,255, 33,186, 60,115,167,252,164, 82,108, 57, -129, 43,242,175,153,239, 43,193, 16,157, 63, 96,167,184,227, 82,225, 37,229,172, 60,196, 71,214,180, 28, 14,249,233,175, 41, 66, -208,190,239,232, 54, 91,246, 15, 15,236,215, 27,186,221,142, 56, 13, 76, 83,144,195, 8, 45, 25,217,117,133,113, 22,138, 32, 45, -133,169,132, 99, 40,114, 10, 76,219, 13,187,135, 7,134,110,224,208, 5, 92,109,209, 10,234,218, 66,134,113, 8,168, 84,252,200, - 89, 66, 90,180,146,209,247, 9, 66,100, 13,113, 74, 88,103, 75,119, 98, 11,219,160,168,202,173,163,174, 27, 30,214, 59, 1,212, - 0,206, 58,134, 49,226,188,149,226,160, 96, 26,165,219,111,234,138,190, 31,241, 94,139, 46,100,140, 56,173,208, 5, 84,148,115, -166,118,150, 48, 6,218,198,115,115,125,193,225,112, 32,101, 77, 12, 66,195,187,186,110,216,108, 70,246,219, 64, 93, 91, 82,212, - 84, 85, 37, 66,209,105,194,122,241, 95, 39, 5,202, 41, 34, 9,231, 61,214,203, 62,253,242,242,146,105,156, 48,218, 75,158,131, -115, 44,102, 45, 41, 70,250,113,196,183,141,176,195,155,138,118, 49, 99,121,113,201,108,177, 96,177, 90,209,180, 51, 50,138,197, -106,137,243,162,101, 49,174,236,141, 20, 39, 95, 50, 33, 23,121, 83,185,176,197, 92,238,138, 50, 85,210, 70,211,204, 26,102,243, - 25,227,174,167,170,107, 66,223, 83, 85, 21,195,152, 74, 90,160,227,176,223,227,151,115,166,105, 66, 41,195, 24, 2,174,242,132, -105, 66,107,197,126,125,143,111, 87, 60,188,125,197,199, 31,191,224,225,118,131, 51,158,111,222,188,225,234,242,146,164, 97,189, -221, 96,105,104,138, 93,118, 8,137,161, 23, 11, 44,221,129, 88,136,123,147, 42, 9,101, 41, 23,150,133,122, 79,215,242,221,179, - 63,103,158,240, 18, 84,126,252,241, 36,206,142,153, 97, 10,116,125,207,118,187,225,254,254,129,183,239, 46,120,254,236,154,171, -231,151, 92, 61, 59, 48, 95, 93, 80,205,123,170,182,197,212, 53,198, 87,194,103, 87, 6,173, 44,217,149, 49, 54,182, 88, 96,231, -216,182,167, 93,118, 76,151, 29,161, 19,219,112,223,203,123, 64, 44,183,242,181, 24, 37, 96, 23,107, 29,222, 43, 82, 54,196, 8, - 85,200,132,136, 8, 56,131, 4,203, 12,177, 39,166,240,152,251,240,157, 41,182,156, 17,206, 59, 98,174, 49,214,208,148,104, 86, - 99, 44,214, 9,119,223,186, 50,109, 48,250,148, 10, 7,249, 73, 28,235,251, 63, 30,121, 48, 74,165, 95, 95,212,207, 85, 68,239, - 43,225,127,155,189,249, 95,221,132,243, 93,181,252,111, 59,130,127,242,249,249,116,161,193, 24,205,225,176,135,156,120,251,230, - 21,127,240,251,127,192,191,245,175,255,109,140,245, 76, 33,209, 13,129, 49,100,214,155, 29,235,205,142, 67,183,101, 56,236,232, -118, 27,222,124,243, 21,239,222,188,226,171,175,190,164,174, 43, 62,249,244, 99, 62,249,232, 57,139,249,140, 87,175, 94,243,171, - 95,125,141,114,142, 33,102,150,109,131,175, 28,139,249, 12,173, 50,202,192,253,253, 29,187,237, 1,235,107,250, 67,143,213, 53, -111, 95,191,225,254,254, 14, 92,113,169, 43, 37,254, 77,196,204, 25, 99,196,148, 81,250,106,177,196,104, 77,183,223,178,219,239, - 9, 97,226,114,185, 32,101,197, 56,142,220, 63,108, 48, 70, 83,213,117, 17,245, 72, 1, 24, 7, 17,172, 48, 72,236,234,113,212, -115,252, 30, 25, 99,168, 43,131, 70,118,227, 33, 69,116, 84, 76, 33, 18,114,164,174, 43,178, 51,140,131, 98,119,216,147,211, 64, -138,129, 17, 67, 72,160,162, 4,102, 68,161,183,158, 70,235,199, 27, 54, 37,186,247, 56, 29, 72, 57, 75, 65,207,143,147, 26,165, -228,193,119,206, 80, 55,158,217,124,198,242, 98,193, 98,185,164,153,205,241, 77,131,182,246,136,165, 43, 32,163,252,152, 92,116, -124,237, 79,185,235, 69,169,122,182, 31, 87,200, 97, 24,167, 72,154, 2,177, 31,137,211, 36,225, 52,136, 71,221,199, 10,162, 35, - 59,243,168, 10, 63,231, 47,159,101, 18,156,162,103,149, 58,117,206,167,113,127, 62, 83,103,158,176,142,169, 96, 38,159,198, 45, - 62,229,188, 76,114,144,157,146, 9,211, 9, 57,169,202,175, 61, 61,118, 39, 63,171,100,203,231, 98,183, 81,199, 63, 47, 37,194, - 84, 70,226, 99, 64, 41, 67,221,204,197,226, 21, 35,198, 90,172,111, 48,198, 19,167, 76, 31, 7, 82, 62, 48,141, 3, 67,223,209, -239,247, 12,135,142,169,140, 78,107, 53,241,240,238, 45,219,245, 6,149,193, 27, 77, 74, 17,165, 52, 97, 12,228, 32,151,230, 8, -132,242,253,247, 10, 76,241,166,135, 24,240, 72,254,131,107,106,182,251, 3,179, 89,131,177,150,177, 31, 25,134,137,122, 38, 68, -191,253,221, 3,115, 99, 81, 4,177,188,197,128, 43, 94,221,164, 68, 45, 93, 87,178,171,236,186,161,164,168,101, 84,146,244,183, - 20, 70,156,150, 11, 79, 83, 87,220,223, 13,252,240,119,111,152,198, 1,239, 12,175, 95,239, 9, 65,115,177,242,196, 56,208,119, -137, 24, 69,240,103,141, 69, 1,251, 67, 79,213, 56,198, 16,176, 78,254,254, 73,129,173, 28,117,219,162,181,230,226,226,242,132, -186, 5,196, 91,110, 31,243,182,155,249, 76, 46,167, 77,205,108, 46, 69,119,177, 92, 48, 95, 94,224,107,217,151,187,170,194,215, - 13,237,114,113, 82, 46, 11,171, 62, 63, 25,169,230,152,164,200,103,153,234, 72, 42,162,236, 97,117,229,240, 89, 49, 91,180,140, - 93,199,124, 49, 99, 51,142,180,179, 25, 73, 73,152,145,173, 60, 93,119,192,229, 92, 92, 4,153, 67,119,224, 98, 49,103,125,127, -199,124,222,210,237, 54, 24,165, 25,167,196,190,210, 24, 50,222,104,230,149,231,229,215,191,226,114,181, 96,156, 70,134,224,200, -147, 8, 26,199, 97,100, 28,122,218,182,133,245, 3,195, 24, 72,190,126,196,198,126,231, 2,171,158, 76,186, 30, 89,233,103,119, - 89, 85, 76,213,103, 36,181,116,124, 22,202, 32,108, 82,153,126, 26,217,247, 19,119,155, 3,111,238,182, 60,123,123,199,139,231, -107,174,159, 95,115,113,117, 41,121,238, 75,121, 13,108,221,128,159, 73,215, 94, 66, 98, 76,101,136,198, 99, 76, 77,237, 59, 92, -211,144,230,163, 96,185,187,142,225,176,103, 28, 7,134,174,103, 26, 6, 57, 59,114, 34,197,114,185,214, 18, 57,238,108, 98,242, - 25, 27, 34,198,136, 54, 35, 19, 79,162,186,120,140,117,125,175, 78,105, 37,184,217, 42, 6,129,220,120, 39,107,157,169, 46,223, -151, 72, 38,200,126,221, 10, 17, 15,101,202,145,146, 80, 42, 62, 1,218, 28,241,183,231,206, 47,165,126, 77,167,126, 14,161,255, -144,101, 70,169,255,238,203,192, 95,103,111, 83,239,229,204,254,211,168,223,211, 25, 95,190, 59,236,208, 42, 51,111, 27,126,255, - 95,250, 30,191,247,187, 47,112,206, 19, 19,244, 99,228,229,203,183, 84,182,162,219,190, 99,216,110,232,183, 27, 94,127,253, 5, - 63,255,233,143,185, 93,175,153, 82,230,226,250, 25, 23, 23, 23, 92, 44,231,196,113,228, 31,253,183,255,136,140,224, 48,251,125, - 71, 72,153, 69,172,201, 41,178, 88, 52, 24, 3,251,253,174, 40, 65,101,207,121, 68, 7,190,125,243,134,203,231,215,165,219,206, -143,180, 28, 45, 5,208, 89,205,106,185, 18, 12,167, 54,124,244,226, 99, 94,191,249,150,183,111,122,118, 23, 43, 52,153, 89, 91, - 11, 62,210, 40,154, 70,146,220, 66, 74, 28,142, 62,247,210,221, 74,168,137, 40, 54,187,195,129, 41,201, 97, 22, 99,102, 24, 38, -250, 97, 96, 26, 37,143, 60, 37, 24,134,137,205,118, 47,130,154,251,215, 76, 67, 79, 10,162,130, 31,146,116,243,148,110, 60,161, -138, 58, 23,180,118, 37,212, 68, 14, 55,123,204, 32,214, 90,188,197, 81, 20,159, 71, 0,138, 53, 70,148,162,133,165, 92, 87, 30, -239,228,166, 42,219,136, 72, 14, 2,213,224, 56,198, 66, 46, 64,143,182, 15,117, 70, 70, 59, 39, 10,230,199,164,163,152, 72,227, -200,212, 15,132,253,150,177, 63, 72,151,162, 20,190,174, 32, 54,184,208,160,189, 71, 89, 43, 98,164,227,235, 81,224, 57, 57, 63, - 29,191,159,156, 33,229, 96, 82, 60,194, 54,114, 41,174,199,220,246,148, 74, 97,207,242,251, 40,173,158,112, 17, 85, 74,103, 58, - 16, 78,152,201, 84,254, 28,125,142, 92, 56, 27,105,230,156, 37,205,234, 56,174, 63,137, 19,197,133,128,173, 49,141, 19,111,111, -150, 24,206, 35,195, 94,107, 43,100,193, 24,153,166,145, 62, 76,236,247, 19,235,187, 29,219,135, 7,186,190,195,232,204,210, 43, -126,249,139, 47,164, 64, 40,249,186, 40,175,113, 28, 3, 68, 57,140, 67,146, 93,186, 82, 10,155,161,114, 86,166, 48, 36,140,210, - 36, 36, 22, 51,146, 78, 17,188,187,105, 66, 27, 1, 67,117,157, 48, 26,156, 6,173, 44, 49, 36,156, 85, 76, 83, 96,214,182, 60, -236, 14, 0,180,141,147,233,147,214,164, 40,223, 27,171, 53,181,213, 56, 35,163,208,121,235,233,246, 19,215,215, 13,181,183,220, -175, 55, 76, 83, 34,132,140, 82,134,170,182,220,173,119, 12, 99,102,182,168,200,102, 98,182,172,185, 93,111,153,207, 43,246,135, -129,229,213,130,205,161, 35, 25,141,118,138,229,245, 37, 57, 37,170,186,129,172,104,155,150,105,156, 80, 10, 22,139, 57, 33, 69, -134, 48,113,245,236, 25,245, 76,224, 71,109,219,210,180, 21,203,197,226, 84,196,235,153,116,229, 85, 35,107, 38, 74,218,151, 50, -250,236, 18, 39, 36, 50,173,146,140,219, 83, 58, 35,105,150,145,143, 22,241,151, 73,138,197,106,206,250,254,158,197,114,206,230, -254,158,202,214, 76, 72,224,142,245, 21,169, 63, 96,140, 97, 10, 1, 82,230, 48,245, 92, 92,172,164,139,223,237,169,235,138,110, -183,198, 25,199,246,238, 13, 87, 55,207,136, 49, 80, 27,197,237,195, 29,139, 90, 94,175,205,118,195,220, 26,234,122, 46,211,207, -190,163,106,196,134,151, 67, 32,100, 89, 29,166,227, 95, 51, 61,238,206,243,185,112, 54, 62, 82,214, 78,239,121,117, 54,229, 58, - 35, 50, 74,180, 87,241,182,199,199,197,237, 56, 37, 14, 67,199,174, 15,108, 30,182, 60,220,174,185,126,115,199,245,243, 11,174, -159, 93,113,117,189,100,190,156, 81, 47,230,232,118, 41,185, 14,174, 6,227, 64, 21,122,164,113, 88, 7,218, 89,178,247,164,202, - 97,107,143,107, 61, 97, 24,152,186,142,225,112,224,176,219,211,231,158, 41, 8, 43, 33, 29,183,119, 39,157,131, 64,177,142, 11, -184,152, 17, 39, 68,204,223, 9,122,209, 37,127,222, 27,185, 0,219, 97, 44,128, 55, 33,184, 86, 85,133,170, 44, 56,141,177, 6, -167, 13,199,204,107,165,244, 89, 23,243,235, 53,107,199,127,236, 95,214,117,255,182,157,249,135,192, 51, 31,112,177,125,231,150, -198,135, 96,149,234, 47,211,224,255, 38, 97,158,140, 34, 41,129, 14, 49, 6,134,254, 64,156,122, 22,115,139,247, 29, 23, 43, 17, -163, 28, 14, 19,251,135,158,208, 29, 88,213, 35,239,194,158, 47,190,252, 25, 63,251,139, 31,179,217,238,200, 25,174, 86,151,252, -224,123, 63,164,157,181,100, 18,191,252,226,151,124,243,242, 37,222, 85,160,193,186, 66, 25,154, 34,186,239, 49, 6, 30, 44, 92, - 94, 92, 17,179, 41, 41, 79, 66, 90,234,246, 7,116,201, 62,206,101,100,120, 60,192,143,135,115,140,145,217,108, 38, 86, 52,231, -137, 49,112,113,113,201,171,238, 37,155,237, 86, 18,139,154,150,126, 12, 24,173,136,113,143, 49,134,113,156, 4,224,146, 3, 41, -245, 52, 77,141,214,154,105, 28,121,184, 23, 27, 95,204,226, 33, 13, 33, 49, 78,129,253,161, 99, 24, 39, 14,221,192, 16, 18, 40, -195,161, 27,136,221,134, 54,236,176, 58, 75, 94,184,134, 6,161,187,229,199, 59,225,137, 88, 38,160, 34,203, 49,198, 87,159, 96, - 46,138, 16, 51, 99,152,100,196,155,146,228,254, 26,137,104,205,113, 34, 76, 61,227,208,209,119,123,252, 97, 43,204,231,156, 4, - 56, 17,197,134,162,203,120,242, 8, 99,200,165,128,159,139,136, 52,160,146,122, 4,171,100, 81, 54,135, 97,100, 58,236, 25,183, -247, 28,118,130,239,132,132,175,106,102,243, 37,205,124,129,169,103, 18,167,122, 18,181,148, 81,215,233,125,149, 31,121,205,249, -177, 72, 75,161, 13, 20,179, 44,160, 11, 14, 50,159,252,167,191,126, 93, 37,113,138, 71, 91,224, 41,202,241,220,229,159, 31,183, -245, 39,139,233,241,247, 76,246,113,196, 87,238, 55,218, 40,180, 3, 93, 27,156, 82, 39,210,159, 61, 94,140,202,106, 38,147, 75, - 81,159,168,198, 1,215,174,176,205, 10,223, 62,176,125,184, 99, 26,247,164,212,179,217, 30,176,214,131,149, 92,122,109,100,236, -157,198,136,205, 18,188,147,140,248,197, 53, 26,173, 50,104,241,225,122,111, 4,228,100, 45,253, 56,224,154, 26,107,101,164, 62, - 14, 3,179,118,198,172,109,121,251,213, 75,170,218, 17, 38, 17,200,237,118, 3,243, 69, 37,218, 16,173,137, 33,210, 54, 2,248, -216,238, 70, 42,103, 48, 74,209,239,122,218,218, 81, 25,217,227, 26, 5,181,151, 84,177,231,207, 47,216,108,118, 56,239,120, 88, - 63,176, 59,100,174,158,205,232, 67, 96,187, 15,216, 90,131,203,152,218,176, 27, 59,146,201, 76, 42,209, 94,180,116, 97, 4,107, -112,206,209,206, 27,146, 18, 2, 91,156, 36, 67, 43,133,196,114,177,196, 56,207,238,208, 49, 95, 46,248,222,199, 63,148,245,155, -115, 52,179, 25,214, 59,116,153,162,205, 22, 11, 50, 10, 91,215,204,151, 75,140,117, 50,129, 50, 22,101,205,227,228,231, 56,122, - 54, 90,244, 70, 89, 46,253,218,148, 32, 5, 37,187, 87,140, 88,184,114,206,180,203, 22,235, 52,245,106,129,210, 74,162, 90,117, -203, 56, 5,170,166, 69, 31,182, 69,168,154, 36,158, 86,101, 14,125,135,243,158, 48,142,144, 96,234, 58,148,151,148,178,110,183, -149,116,194, 28,177, 57, 10, 51, 62, 7,186,253, 30, 87, 87,212, 85, 43,145,199, 57, 48, 77, 35,174,170, 24,246, 19, 67, 10,140, - 83, 32, 34, 10,239, 84,186,245, 92, 86, 67, 49,199, 15,164,153,229, 39, 92, 8,117, 86,188,148,100,240,148,247,182,172, 30, 82, - 9,108,138,136,179,101,236, 35, 83, 63,210,117, 35,247,155, 61,183, 15, 15, 92,223,222,243,236,197, 37,215,151, 43, 46,174, 47, -168, 47,246,180,243, 57, 85, 35, 98, 91,172, 71, 57, 95, 4,162, 50,226, 78,133,105,161,236, 81,125, 46,161, 58,214,251,146,208, -184, 3,221, 17,247, 3, 99, 31,152,198, 73, 58,242, 41, 48,133,200, 20, 99, 17, 1, 23, 63,190,178,100,149, 31,191, 23,241, 40, -226,145,245, 84, 74,162,153, 48,102, 56, 9,233,156,235,112,206,130, 45,177,205, 89, 65, 45,231,141, 49, 21, 74,167,147,242,253, -215,113, 95,206,249, 50,246, 67,133,250, 67, 51,251,191, 74,145,255,205,160, 25,190,211,245,124, 32,146,229,113, 20,255, 87,236, -212,211, 73, 80, 39,185,218, 49, 8, 48, 33, 77, 3, 99,127,192, 16, 49,106, 18,181,224,184, 37, 29,238,112, 83, 15,221, 45,235, -111,127,204,183,191,252, 51,118,219, 3,218, 26, 62,121,246,130,223,249,225,239, 49,159,205,113,206,114,183, 94,243, 95,253,215, -127, 68,211, 52, 12,211,196,172,109,105,170,138, 48,101,124,213,162, 24,185,184,184, 96, 49,175,112, 78,227,148,225,118,191,197, -251,134, 89,219, 18, 99,100,187,217,178, 27,247,132,130,190, 60, 65,151, 16,118,240,124, 54, 67,105,205, 20, 2,187,253,142,218, - 90, 42,239,249,244,211, 79,185,187,187, 21,107,206,225,128,117,174,228, 47,123,148, 82,120,175,202, 5, 34, 82, 85, 53,117,213, -224,172,147,131,161,128, 43, 84,204, 76, 83, 44,187,229, 72,206, 81, 44,106,200,232, 71, 62, 55,147, 85,162, 86,129,224, 53, 6, - 47,122,245,156,138, 86,193,150,245, 70, 81, 47, 40, 78,126, 76, 93, 82,251, 78,188,255, 66, 99, 50, 58, 51,169,130, 70,204, 98, -109, 50, 64,156, 70,250,253,142,110,183,229, 80, 73,172,161,202,160,194, 68, 26,123,180,247,143, 99,248,163,234, 83, 61,218,155, -228,166,124,236,226,143,209, 47,103,158,250, 16, 24,251,129,126,183,163, 91,223,177,223,175, 57,236,183,196, 48,225,170,138,110, -190,101, 54, 95,137, 46,194,121,121,200,142,163,243, 36, 2, 30,217,241, 61,122,220, 31,227, 22,203,231, 29, 99, 22,181,136,206, -148,113,104,237,138, 6, 64, 14,237, 99,209, 62,234, 29, 84,217,221, 39,108, 89, 29, 28,197,113,250,164,228, 63, 42,243,181, 42, -112,137, 99,168, 67, 9,110, 48,216,211,207,133, 64,117,182,242, 0,217, 9, 31,255,191,126, 58,253, 18,222, 64,194,199, 76, 24, - 39,124, 59,167, 94, 92, 80, 47, 55,204, 46,174,233,247, 15, 60,188,252,130,106,190, 96,202,137,152, 51,149, 53,196,156, 80, 33, -163,163, 68,237,142, 25,130,214, 12, 57, 82, 23, 22,124, 34,147,140,194,215,178,115,174,173, 99, 72, 9,235, 61,179,217,140,219, -119,239,138, 47,187,102,179, 61, 72,246, 64,140,184,178,106,153, 98,194, 88, 77,234, 37, 12,164,118, 22,167, 19,222, 56, 82,234, - 69, 69, 63, 4,172, 86, 24, 21,241, 70, 46,206,179,214,178,221,141, 44, 87, 45, 74,105,198, 24,100,181, 48,129,171, 12,174,129, -111,223,236, 81, 30,148,201, 84, 11, 75,202,137, 97, 26,169,231, 53,166, 18,223,183,169,229,194, 63,155,175, 80, 58,179, 90, 45, -217,111,118, 24,109,112,206, 83, 85, 86, 70,244, 90,243,189, 31,254,128,229,229, 5,237,124,142,169, 60, 85,211,144,148,116, 90, -199,100, 75,101, 45,139,229, 10, 87, 85,242, 12, 42,141,241, 94, 94,167,227,235, 76, 9,143, 58, 53, 70, 25, 76,146, 34,103,117, - 9, 25,145,245, 80,214,229,125, 98, 21,179,213,156,186,245,152, 73, 51,155,205, 24,198,128,169,106,124, 61, 81,213, 53,117,221, - 8,190,183,116,193,198, 26,246,221,158,213,108, 94,116, 42,242,254, 20,207,180,144,239, 18, 25,111, 29,179,218, 51,245, 29,214, -104,166,126,100, 50,242,121, 10, 73, 34,115,222, 97,130,136,217,250, 50,122, 30,163,116,235, 9,117,182, 22,146,201,105, 38, 63, -153,120,157, 46, 49,200, 26, 69, 25,125,138, 48, 62,229,146,171, 68,210, 71,129,104, 46, 23,148,210, 8,149,174,121, 76, 19,251, - 49,176, 62,116,220,173,119,188,187,219,240,252,230,146,103,207,246, 92, 93,207,185,184, 90, 49, 95, 46,168,102, 45,182,105, 49, -117,131,242, 21,232, 90,158, 13,201,147, 46,150, 65,193,199,106,235, 5,212,229,157, 16, 44,171, 3,218,108, 9,113,195,225, 48, - 49, 76, 19,195, 48,150, 92,247,137,113, 12,146,246,150,213,169,225, 57,159, 36, 30, 57, 29,199, 99, 68,165,200, 88, 70,245,126, -176, 28,186, 30,107,141,136,103, 99, 34,141,145, 24, 34,174, 10,120, 31,138,112,206, 60,230,170,124,168,198,170, 71,245,172,253, -181,163,247,239,252,248, 79,207, 99,255,110,199,253,222,239,153, 63,200,166,121, 26,165,250, 87,250,115,143,249,223,138, 20,228, -112,158,207,103,252,236,167,191,228, 7,223,255, 30, 38, 91,194,112, 96,115,127,207,230,221, 29,111, 95,222,242,245, 95,252, 5, -253,253, 23, 92,175, 50,217,205,200,126,198, 71,159,124,130,177, 17,235, 34,219,237, 3,255,229,223,255, 7, 56,235, 88, 88, 79, -206, 9,103, 52, 70, 3,206, 72, 81,207,134,135,135, 7, 46, 47, 62, 33,198,145,113,236, 24,134, 3,206, 85, 76, 33,208, 52, 70, -196,105,227, 88,132,108, 79,181, 11, 70,105,218,166,197,121,207,187,183,111,217,172,215, 92, 45,151, 92,124,250, 41,135,195, 1, - 95,213, 60,127,246,156,174,219, 19, 82,194, 58, 79, 34,211, 31, 14, 92,172,174,216,237,247,228,156,105,218,153, 36, 45, 21,126, -127,221, 52,244,195,116, 42, 72, 49, 4,134,113, 96, 24,122,134, 97, 60, 66,199,176,198, 48,169, 32,156,105, 21, 10,228,192, 96, -136, 56,140,236,166,140, 59, 33, 98,143, 88,225, 99, 54,128,120,145, 77, 33, 49,165,242, 53,106, 33, 76,101, 9, 71, 8, 81, 14, - 25,171,181, 88,127,186,142,205,253, 61, 90,101,161, 61,245, 61,227,108,142,173, 91,185, 45, 91,161, 39, 1,232, 2,182,200,199, -253,125,201, 59,214, 74,147,244,145, 17, 47,212, 58,178, 40,255,227, 56, 49,116, 61,113,136,152,168,113, 8, 24, 67,197, 76, 26, - 34,131,146,221,153, 49,229,101, 72, 65,108,129,211,200, 52,141, 66, 67,203,143,190,246, 35, 58,249, 4,148, 72,114,136, 25,235, -177,190,193,213, 51,124, 51,195,249, 26,223,120,148,175, 30, 47,168, 37,154, 88,149, 32, 28,175,207,118,249,103, 5,253, 24, 9, -167,207,248,206, 89,113,134,139,148,177,255,169, 32,156, 68, 86, 71,187,121,146,235, 77,161,145,157,162,140,243,177,235, 79,146, - 47,159, 21, 97, 18,112, 81,213, 52, 84, 77,203, 98,117,197,176, 95,211,239, 55, 40,231,233,198,137,218, 72,240, 79,119,232,145, -235,132, 92, 66,181, 86,140, 49,158,173, 97, 20, 83, 12,132, 50, 53, 48, 73,172, 54,117, 93, 99,171,186, 64, 59,100, 20,217,212, - 13, 47, 95,127, 69,221,214,132, 40,192,144, 97,154,112, 78, 51, 77,147,140,141,199, 17, 3,180,117,203, 56, 76, 24, 37, 66,178, - 48, 5, 86,173,197,164, 32, 5,171,220,241,134, 41,242,252,197, 13,111,111,223,162,180,225,176,239, 73,104, 46,111, 4,167,106, - 28,162, 24,111, 18,217,142,132, 96,168, 47,230,120,231,128,140,247,226, 23,174,154, 86, 80,196, 26,246,219, 61,139,197, 66, 16, -156, 65,160, 53,151,179,150,118,185,164, 93,173,184,184,186,196, 21, 5,123,214,134,166,174, 69,255,129,162, 93, 44,104,102,237, - 35, 76, 89,105, 25, 89,159,194, 56,244,233, 53, 69, 41,129, 3, 21, 13, 70, 46, 17,196, 39,177,153,147, 46, 61,171, 82, 0,147, -198,183, 21,179, 69,139, 11,150,166,109,200,106, 96,202, 89,198,253,109, 75,181,175,233,199, 94, 58,251, 36,235,143, 97, 28, 36, -188, 36,101,140,243, 36, 14, 5,241,155,137,125,135,177,150,202, 90,156,150,156, 8, 63,159,163,196,155, 74,223,119,242, 99,215, - 49, 12, 3,227, 20, 25,166,137,160, 52, 83, 12,162,159, 73,114,249,212,249,209,186,246, 29,227,231,241, 61,201, 9,101,142, 57, -106, 85,143,186, 22, 45,193, 77, 58, 7,130,202, 16,229, 50,127, 12, 67, 73,249, 88,212,193,230, 76,223, 71,134,112, 96,187, 31, -121, 88,247,220,190,219,240,209,213,156,235,103, 23, 92, 95, 95,176,184, 90,210,172,150,248,249, 28, 63,155, 97,188, 18,142,124, -137, 87, 70, 25,193,207,218, 4,118, 0,103,168,173,196, 49, 87,174,146,248, 87, 93,236,193, 1,246, 12,210,177, 15, 35,195, 24, - 24, 67, 58, 57,144,142,123,110,253,132, 3, 33, 95,183, 49,226,252, 73,112,242,173, 79,163,184,164,140, 22,209,109, 24, 35, 99, - 63, 82, 53, 53, 85, 35, 24,108,227, 29, 88,119, 34,112,254,166, 70,219,190,239,249,126, 42, 58,251,176, 7,247,145,141,157, 63, -188, 96, 87,156, 14, 27,242,119,119,232,167, 59,219,185, 67,173,136,126, 84, 81, 63,234,227, 45, 78,149, 65,239,169, 88,139, 61, -226,137,197,238,252, 55,202, 74,252, 32, 90,161,173, 67, 37, 69,232, 3, 49, 79,220,190,123,205,127,250, 95,252, 23,188,125,251, - 47, 97,115,102, 58,244, 28, 54, 59,190,250,226, 27,110,223,221,130,134, 31,254,224,115,254,229,213, 51,116,179, 98, 72,150,251, - 77,207,221,118,207, 31,253,195, 63, 65,161,248,104,117,129,241,142, 24, 38,246, 93, 87,176,151, 51, 30, 30,238,240,181,227,122, -182, 96,223, 5, 22,141,167,219,239, 80, 73,211, 79,154,251, 77,143,173, 86,216,170, 70,119,182,236, 99, 31,133, 33,167,215,160, -124,135,174,175,175, 25,199,145,166,109, 88,111, 54,229,128,147, 76,233, 69,187,160,239,123,134, 49,240,118,183, 69,145, 73,106, - 71, 91,213, 34, 0, 60,116,220, 3, 55, 23, 75, 46, 46, 46, 81,198, 48,132, 3,125, 63, 50, 13, 19,251,205,158,109,183,103,215, -239, 25,199,137,126, 72, 68, 28, 33,102, 12,153,103,115,141, 63,162, 30,181, 65, 41,139,201,148, 61,185, 45,152,209,116, 38, 82, -204,103, 40,214,116,210, 18,228,116,156, 8,164, 71,143,120, 25, 7,198,148,153, 66, 70,143, 8,205,143,200, 52, 14, 18,202, 49, -155, 81, 85, 13,198, 10,110,241, 56, 71,214,194,143, 58,185, 37, 36,112,200, 98,172, 71, 57,125, 74,249, 75,177, 8,244, 98,102, - 12, 73, 46, 46, 99, 98, 10,145, 49,106, 66,178, 48,100, 14,227, 30,181, 57,148,149, 69, 40, 22,149,145, 24, 38,194,208, 51, 77, - 35,161, 16,217,148,214, 82,184,157,195,215, 13,222,215, 88,235,208,166, 66, 59,143,211, 22,173, 43,178,171, 49,245,140,170,157, - 11, 72,164,246,103,129, 72,103,142,142, 82, 4, 31, 73,119,103,126,123, 85,196,134,250, 28, 93,171,206, 98, 23, 31,157, 12,223, - 9,113,201,197,154,247,157,199, 54,191, 55, 9,147,139,137,177,150,228, 16,229,109,101,112,125,131, 54,137,235,203, 21,239, 94, -191, 36,197, 36,227,240, 33, 34,218,202,132, 50,114,137, 74, 26, 82,200, 56, 5,214, 36,161,190, 77, 34, 94,115, 90,131, 19,161, - 25, 26,150,173, 8, 58,135, 41,176, 90,174,216,236,118, 56,171, 24,251, 61,171, 69, 11, 41, 49, 14, 9, 99, 5, 61,171,181, 38, - 78,129,229,108,134, 51,154,135,125, 71, 93,121,166, 41, 81,251, 50, 33, 82, 90,224, 49,149, 38,231,196,103,159, 95, 48,165, 1, -109,225, 97,115,160, 27, 21,151,215, 23,236,199, 3, 67,140,248,185, 67, 57, 77, 61,243, 12, 83,160,157,173,240, 77, 69,138, 1, -107, 13, 41, 76, 66, 98,116,142,172, 50,227, 20,184,188,190, 34, 3, 85, 85, 83, 85, 53,202,104,218,102,198,197,213, 21,237,114, - 33, 99, 91,107,201, 90,163,173, 16,203, 22,139, 5,181,175,201,136, 67,196,121, 47,212, 67,165, 72, 73, 52, 14, 42, 27,217,167, - 31, 29, 23, 74,203,120, 37,107,114, 18,129,150, 46,171,165, 35, 80,200,228, 36,197, 93,203,175, 85,214, 48, 95,173, 8,219,158, -171,155, 21,211,235,183,212, 81, 49,141,138,122,190, 64, 63,220,163, 67,196,104,136,113, 34, 17, 73, 68,148, 81,244, 7,193,218, -122, 95,139,226, 59,139, 88,118,134, 37,103, 77,229, 61,157,222,201, 68,134,204,118, 63, 96,172,167,114, 30, 82, 34,133, 76,194, - 16,181,101,204,137,196, 35, 8,229,152, 13,206, 19,123,245,177,190, 28, 39, 81, 39, 4, 84, 17,206, 30,155,130,199,180, 71, 82, - 38,100,205,168, 34, 86, 37, 70, 18,228,120, 42, 66, 18, 22, 35,147,174, 64, 22,173,208, 20,232,167, 29,219, 93,207,250, 97,205, -229,221,134,155,103, 91,174,111, 86, 92, 92, 45,139, 32,119, 65,189,236,113, 77,131,170, 42, 84, 85, 9,142, 87, 91, 20,146,218, -166,140, 33,153, 10,109, 42,162,237,197, 86,235, 53,182, 82, 24,175,209, 42, 16,167,137, 97, 63,209,199,200,148, 50,125, 12,101, - 2, 81,206, 43, 45, 66,204,227, 74, 82,104,112, 5,204,100, 68, 16,125,252,190,196, 50, 69,213, 58, 20, 59, 95,192,245, 61,126, -239,240,181, 36,165,154, 83, 4,186, 32,114,209,246, 76, 75, 84, 84, 7,239,143,223,127,243,136, 61, 63,201, 62,127,162, 14,250, - 13,200, 88,222, 75,131,122, 28,189,168,247,236, 71,249, 24, 91,123,178,243, 60, 46, 12,211,249,223,130,247, 51, 37, 5, 30, 82, - 66,105, 78, 94,199,140, 49,142, 41,137,224,234,225,238, 22,215, 40,246, 63,251,130, 47,127,254, 21, 94,107,102,149,167,114,142, -105,234,249,248,251,159,210,247,151,252,206, 15,127,196,205, 71, 31,179,235, 3,127,242,147, 47,249,230,213,175,248,111,254,244, - 39,164,168,184, 92, 45,200,198,138, 47,157,204,172,170, 33,101,246,135,142,136,166,106,150, 52,179, 21,149,179, 92, 94, 92, 48, -142,153,168, 3, 93,114, 28,214,123, 62,251,221, 21,127,254,139, 95,208, 13, 29,104, 87,114,230,243, 73,224, 37, 55, 57,195,126, -187,163,109, 91,110,174,175,113, 86, 19,134,145,171,203, 75,188,177,164, 24, 89,239,118, 52,179,150,119,247,107,190,126,249, 82, - 50,147,187, 81,196,103, 70, 60,189, 99,129, 37,212,117,131, 82,138,170,169,241,117,203, 55, 95,126,205,161,235,232,135,129,190, -239, 9, 99, 32, 4,141,242, 53,109,227, 89,182,150, 54,239,177, 89, 22, 2,199,194,115,178,219,144, 30, 69,111,167, 14, 86,161, - 84,122, 50, 37,137, 49, 49, 77, 81,108,111, 65,120,242, 33,196,194, 28, 59,138, 77, 18,132, 72, 30, 36,202,177, 31, 38,170,250, - 64,181,217,157, 18, 2,181, 54, 98,147, 43,205,172, 68,126, 58, 73,164,115,146,107,108,156,112,223,115, 73, 65, 18, 12,165, 22, - 1, 79, 70, 86, 14, 73,186,251,132, 33, 25, 91,222,111, 73, 18,238, 66, 18,168,198, 52, 49, 77, 3,227,208, 51,246, 61, 97, 26, - 5,109,153,133, 93,110, 93,198, 85,138, 88, 80,148, 24,135,181, 53,174,110,241, 77,131,159, 45,168,102,115,252,124,142,107,103, -216,186,194, 86, 78,104, 91,165, 59,123,100,206,171,211,101,229,187, 89, 9,199, 60,231,223,198,108,250,248,223,213,111,157,165, -240, 20,247,172,109,233,244,141, 35,233,136,217,193,230,238, 29,235,183,111, 88,181,154,202, 43, 54,219, 32,193, 23, 57, 32,185, - 86, 89,198,141, 41, 83, 89,168,140, 34,134, 64,142, 48,107,164, 51,116,149,197, 84,114,196,212,222,241,250,245,107, 89, 23,105, -195, 97,187,151,244,196, 49, 96, 84, 36,198, 64, 12,137,102, 86,147, 74, 68,159, 34,211,120, 75,136, 17,107, 69,132, 57,141, 35, -243,202, 18,250,137,166, 49,120,109,176, 86, 46,113,207,158,173,120,243,238, 13,219,125,207, 56,101,180,174, 1,195,219,183, 29, - 87, 47, 42,146,137,248,198,147,181,163,153,205,105,155, 57,253, 56, 98,140,116,100,166,110, 37,109,203,200, 52,102,113,121, 37, -120, 86,239,176, 5,176,210, 52,173,160,154,173, 37,102,240,133,239,237,189,199,215,197,123,110, 45, 9,129,159, 24, 35,232,207, - 92, 86, 55,170,112, 26, 82, 86,160, 37, 96, 73, 29, 93, 30, 50,202, 2,101, 48,254, 72,252, 75,232,156,138,231, 59, 31,125,154, -242, 60, 24, 67, 61,159, 17,209, 44, 46, 22,172, 55,107,212,152, 9,221,128,241, 21,205,124,197, 20, 18,134,196,152, 70,114,204, - 39,146,224, 20, 3,187,221,158,203,213,101,209,248,104,172,241,140, 65,166, 44,214, 88, 97,186, 3,201, 56,121,248,178,156,206, -182, 76,136,178,210,100,163, 37,191, 92,235,147, 64,244,253,243,255, 88, 42,206, 27, 71,117,102,177, 61, 50,204,181, 86, 56, 99, - 48,165,240,101, 50, 54, 41,180, 14, 76, 83, 20,138,212,227, 21,129,233, 92,184,202,145,120,169, 68,172, 22, 34,195, 52,176,233, - 71, 30,246, 29,183,235, 13,207, 30, 86, 60,187,190,224,234,234,192,178, 27,104, 23,115,220,188,193, 52,179,178,115,175,201,202, -150,137,154, 67,169, 18, 44, 85,206, 24, 83, 25, 76,101,241,109, 69, 93, 75,247,158,163, 92,220,186,253, 72, 74, 19,100, 45, 83, - 44, 99, 48, 90, 97,205,113,146, 41,144, 31,171, 13, 86,139,125,216,187, 18, 12,227,164,240,103, 10, 62, 54, 66, 26,132, 7, 50, - 14, 61,182,151,215,194,121, 65,126, 59, 95,225, 42,217,249,203,104,222,114, 30,252, 97,127,123, 63,249,121, 81,207, 39,207,207, -249,158,238,183, 87,172, 75,154, 90, 42,108,142, 84, 96, 27, 89, 29,243,214, 31,143,174,124,102, 25,206, 69, 72,161,143, 23,137, -247, 83,195,212,113,187, 42, 59, 78,111, 29,218,195, 98, 57,231,221, 14,222,188,188,163,106, 87,116,251, 29,155,251, 59,172,201, -124,250,233, 11, 62,253,252, 99,254,218, 31,252, 30,207, 47,111,120,254,252, 35,190,248,250, 27,190,252,250, 27,254,248, 31,253, - 19,254,232, 31,255, 5,206,205,184,122,126,205,205,213, 5,222, 42, 82,204,204,154, 57, 77, 85, 67,204,194,233,245, 53, 90,103, -198,110,135,110, 22,236, 15,123, 46, 63,250,132,215, 95,189,225,143,255,201,207,153, 45, 86, 44,191,254,150,207, 63,255,132,255, -199,255,231,255,205,126, 28, 74,198,121, 1, 77, 40, 17,186, 12, 67,207,253,254, 64,237, 60, 87,151,151,204,234, 25,139,186,197, -150,110,111, 24, 70,134, 24,248,230,203, 47, 24,167,192,122,187,165, 31, 60, 15,235,123, 62,125,241, 17,151,171,229, 73,164,145, -147,168,237, 93,211,144, 80,204,151, 11,126,240,187, 63,226,213, 55, 47, 9,111,223, 97,171,186,236,201, 29, 19,134,105,236,201, -169, 39,196,158, 41, 74, 24, 3, 49, 22, 49,207,211,139,213, 49, 3, 24,192, 20, 69,250,113, 95,156,144,221, 80,136, 71,234,146, - 20,246, 35,113, 78,149, 46, 53, 36,152, 98, 96, 8,153,205,126, 40,153,236, 50,130,211,199,215,250, 24, 45,104,205, 9,173,217, -214, 13,243,118, 70,211, 54, 84, 77, 83,148,211,134, 99,107,155,179, 18,239,188,156,124,114,171, 77, 71,251,144,124, 94, 78, 17, - 98, 36,197, 64, 86, 26,131, 38,161,203,126, 47,145, 77, 20, 75, 92, 42, 16,141, 36,175,123,158, 18,202, 70,180, 75, 18, 22,133, - 70, 59,135,173, 27,124,219, 82,181, 45,190,110,177, 85,141,245, 14,231,205, 73, 64,120,234,176, 79,169, 76,234, 47, 41,188,255, -188,249,180,143,107, 5,101,132, 45,174, 66,192, 58,248,249, 79,255, 28,198,145,103, 23, 13,251,221, 1,180, 92,167, 77, 86,167, -110, 42, 20, 54,134,181,130,213,204, 33,137, 77,236,116, 0, 57, 98, 76, 52, 77, 75,215, 13,140, 83, 96,117,177, 36,198,162, 89, - 32,227,156, 35,165, 36,152,216,110,143,209,150, 48, 13,104,148,232, 75,128,113, 28,168,139, 71, 93,229, 68,206, 26,231, 4, 69, -106, 43, 67,206,145,155,235, 5, 67, 63, 50, 14,145, 20, 50,235, 53,124,244,201,156, 47,126,249,142,122,102, 57, 28, 38,108,171, - 24,119, 7,230,171, 37, 77,229, 25,131,132,158, 92, 92, 92,144, 82,164,242, 94,236,120, 33, 80,249,178, 98,243, 14, 99, 28,117, - 41,216,206, 57,148,210,226, 93, 47,185, 3,199,124,133,170,174,203,191,151, 5,133,150,213, 81, 58,166, 23,157,177, 55,142, 78, -136,227, 78,247,216,218, 37,162, 68, 3,235,199,177,117,202,229, 70, 43, 54,134,211, 5, 65,103,104,218, 25,221, 16,152, 45,151, -180,243, 57,170,151, 2,120,216,237,229,217,232, 58,226, 52, 8,204,103, 26,113, 78,188,219, 26, 67,136, 9,231,235,178,166,177, - 24,227,136,217, 8,191, 95,137,144, 51,134,204,106,113, 73,183, 89, 51, 37, 48, 49,209,214,254,177, 41,211,250, 20, 26,244,235, - 38,190,231,221,250,241,178,250,168,233,207,104, 35,201,104,198,104,121, 47, 89, 93,180, 57, 18,149,173, 77, 89, 81,105,117, 2, -139,101, 2, 58,138, 32,237,172, 28, 65, 22,161,102,138,114, 63,234, 67,164,155, 2,251,174,103,183, 59,176, 94,239,121,182, 57, -112,125,232,185,184, 88,178, 92, 45,152, 45, 70,114,219, 98,218, 17,124, 37, 99,120,229,100,205, 81,244, 49, 89, 75,103, 92,107, -143,178, 53,198,206,176,190,198,121, 75, 53, 51, 84,111,225,118,157, 24,198, 12,148,117,164,149,203,161,181, 22,109,164,107,247, - 90,227, 74, 28,113, 85, 57,156, 51,184, 18, 9,109, 77, 73, 72, 45,223,195,116, 20, 31, 78,145, 73, 79, 40, 59, 98,237,128,243, - 61,149,247, 56,239,241,149,116,239, 56,115,154, 6,217,223,182,160,127,183, 83, 56,138,209,206,148,200,252,186,204,202,243,223, -163,120,119,143,222,220,179,157, 75,254,144, 95, 78,229, 83,118,243, 81, 20,165,201,167, 17,255,249, 67,162,149, 18,251, 13,165, -139, 50,150,102,233,113,233,192,243,213, 31,240,227, 31,255, 5, 95,252,236,151,180, 77, 37,209,128,206,114,183, 57, 80,109,122, -214, 93, 70,177,231,239,253,131,255,152,175, 95,189,225,175,255,237,127,147,159,255,234, 91, 72,153,103,207,158,243,209,243,103, - 16, 69, 84,166, 17,114,221, 56, 69,188,245, 52,237,156,136,194,234, 76,235, 20,179,198,151,212,181, 5,147,219,241,243,175,191, -229,147, 79, 52,247,155, 29,207,167,204,183, 47, 95,151,125,218,163,127, 57,103, 24,198,129,251,117,192,105,203, 20, 38,241,194, -214, 13, 6, 24,199,145,168, 53,223,188,122,137,114,134, 77,183,231,208,143, 44, 22, 75, 41, 80, 41,145,141, 38, 42, 24, 66, 96, -225,101,159, 94, 57, 47, 95,171,214,108,183, 91,170,186, 97,117,125, 77,159,196,115, 58,141, 35, 33, 27, 98,144, 67,214,234, 72, - 42,120, 90, 78, 42,239,163, 85, 90,124,163, 71, 91, 21,231, 22,150, 34,190,202,197,151, 46, 10,242, 2, 84, 43,220,227,148,206, -112, 67, 42,158,198,192, 74,105, 33,162,157,198,117,143,183,121, 99,164, 51,175, 43, 25, 99, 55,181,193, 26, 87, 68, 75,141, 36, - 91, 85, 30,172,125, 36,186,149, 78,125, 76,144,148, 38,102, 41,216,249,104, 67,201, 98,233,202, 41,144,226,132, 14, 19,152,137, -172, 29, 89, 25,166,148, 81, 5, 88, 67, 86,104, 83,246,132,198,130,245,167,124,247, 92,196, 78,169,248,222, 93, 85,137,150,161, -146, 28,108,235, 75,215, 97,212,147,247,255, 83,150,237,211, 9,250,191,248,128, 25,121, 14,117, 73, 54, 75,121,228,205,155,111, -216,220,191,101, 53,179,168, 2, 31,194,136, 16, 83, 23,223, 67,206,130, 8, 54,186,164,178,105,195,148, 35,109,107,209, 26,234, -202, 23, 59, 95,102,185, 88,242,197,175,190, 98,190, 88, 96,172,101,191,223, 10,175, 58, 38,230, 51, 79, 12, 29, 65,105,225, 29, -164, 84, 86, 57,138,186,169,152,134, 94,162, 63,135,137, 56, 77,180,181, 37,199,136,247,162,201, 72, 10,156, 86, 60,191,185,225, -205,187,215,196,168,216,238, 50, 55,207, 46,216, 29,166,211, 8, 56, 37,216,237, 35,186,206,164,237, 22,227, 28,179,197,138,249, -108, 37, 66,192,170, 46,209,149,153,166, 17,108,108,211,204,228, 32, 46, 7,168,181, 30,173,181,116, 73, 70, 99,180, 48,190,125, -121,221, 85,113,105,196,148,176,214,160, 74,140,103,228, 49,209, 48,147, 37,171,254,184,111, 61,254,247,148, 78,186,136,168,197, -235,159,145,177,180, 62, 77, 98,202, 88, 27,133,210,101, 93,105, 52,198, 91,150, 23, 75,154, 89,131,113,226,162, 24,250, 1,109, - 69,141,127,216, 39, 2, 82,228,156,213,210,232, 27,139,115, 53,253, 48,225, 92,197, 48, 70,230,243,101,201, 45, 87,120,111,113, -190,166, 15,137,166, 94,114,216,236, 8, 41, 11,159, 2, 45,107,173, 41, 23,125, 0,167, 60,143,239, 22,116,197,147, 80,223,227, -186,238,116, 14,156, 69,126, 27,117, 42,238,206, 22,247, 72, 44,123,118,173, 65, 77,197, 58, 38,162,180, 40,248, 83,146, 74,101, -154,251, 24,189,157,148,240, 19,166, 8,105,200, 76, 97,160, 31, 34,219,253,196,110, 63,177,217,239,121,118,181,226,249,213, 5, -113,181,160, 93,205,241,171, 57,106,214,160,171, 22,237,206,196,132, 50,202,194,104,137,125, 85,214, 11,177,206, 41,234,218,176, - 88,213, 92, 94,206,121,253,250,142,187,251, 3,135, 94, 80,186,198,185,194,119,183, 39, 22,188,215, 74,194, 95, 42, 79,221, 84, -212,149, 76, 29,101, 58, 36, 76,121, 82, 62,229,215,167,152,144,254, 35, 19, 99, 96, 28, 3,186, 31,232, 75,167, 95,215, 21,222, -123,112,246, 4,173,177,223, 69, 96,158,117, 19,234,124,236,158,158,198,105,170,116, 26,131,156, 18, 51,142,197, 61,231, 39,133, -252, 40,136,200, 80,108, 47,138,104, 10,240,191,252,114, 99, 52, 57,155,178,191,148,177, 94,176,146, 15,171,138,234,249,168, 6, -214,103, 5,253,120, 46, 30,129, 39, 70, 37, 18, 22, 95, 45,105,170,138, 79, 62,186, 97,186,172, 88, 53,134,155,171, 37,127,247, -239,254,103,220,222,221,163,181,101, 12,150, 55,247, 29,191,122,219,241,159,255, 87, 63,102,102, 52, 47, 62,190,230,111,253, 79, -254, 13,126,242,211, 95,242,240,176, 97,214,180, 92, 45, 23,120, 45, 73, 76, 70,105,250,126, 36, 12,145,166,105, 48,141,101,152, - 70, 22,139, 21,211,112, 16, 81,144,147,206,224,255,249, 31,253,199,252,206,223,252,183,249,215,254,181,191,205,127,245,247,254, - 62,191,243,233,231,252,141,127,229, 15, 33,100, 76, 22,162, 89, 42, 55,241, 99,125,143, 49, 67, 73,240,121,249,230, 45,222, 88, - 42,231, 8, 33,176,222,108, 88, 94, 92, 50,164,128,237,123, 98,215,211,245, 61,214, 24,230,109,195, 20, 2,253, 56, 50,107, 26, - 9,109, 81,138,118, 46, 97, 46,125, 8,244,125,199,254,208,227, 92, 5, 40,140, 17,240, 74, 12,137,148, 3,228, 72, 24,247, 12, -155,123,116,232, 78,150, 20, 9,111, 17,159,105,140,169, 20,239,116,218,137,105,253, 56,246,149,231, 44,159, 68, 19,234,124, 87, -140, 18,177,157,210,101,212,116,116,131,229, 39,214,173,163, 69,204, 20,241, 80,204,226,179,150,113,175,116,223,170,116, 68,222, -123, 81, 22,123, 71, 66,162, 24,115,210, 68, 25,253,200,222, 15, 69,196, 74,254,178,182,167, 72,197, 99, 81, 79, 49,226, 66,100, - 28, 7,209, 59, 40, 77, 86,197,246, 18,166,211,197, 75, 44, 40, 14, 99, 93, 1,134,192, 52, 77,146, 24, 86,213,212,227, 36, 34, -172,226,205, 55,101, 21,112,220, 37,158,180, 38,164, 15,203, 71,127,203,130,254, 62, 26,249, 47,115,166,124,104,138,246,212,169, -146, 36,176, 39, 4, 14,155,123,246,155, 59, 94,125,251, 53, 23,171, 5,253,237, 22,239, 61,241, 48, 65, 78,130, 98,141,153,108, - 32,134,128,245, 18, 91, 25, 67,128, 12,214,105,170,202,151,181, 5,120, 95,159,118,247,198, 74, 40, 70,136, 9,107, 28,135,126, -196, 59, 77, 23, 68, 96, 7,210,213, 76,253, 68, 51,111,164, 3,204, 50,233, 81, 37,150,213,212, 86, 46,150, 73,196,141,198,105, - 9, 91, 9, 3,195,152,233,250,196, 24, 29,207, 23, 51,190,252,241,183,204,151,150,160, 96,156, 18, 81,103, 24, 0, 19,121,119, -119, 71, 72,153, 16, 34,243,249,130,144, 20,214, 86, 52, 85, 35,116, 47, 99,112, 70,203, 46,211,138,128, 78, 41,133,171, 60,206, -122,172, 19, 17,167, 41, 93, 86,202, 2,136, 49,214,161,141, 40,153,209,134,120, 54,225, 60, 22, 50, 73, 21,147, 6, 89,198,116, -185,100,110, 39,116, 73, 8,203,101,237,149,117,126,212, 31, 29, 9,138,229,121, 32, 79, 24, 35,153,240,104,205,114, 53,103,183, -239, 81,122,193,208,247, 60,172, 31, 48,222,162, 6, 25,209,134,225, 64,202,142,113,156,112,174,102, 10, 17,107, 45, 99,202,120, - 91,203,106, 42, 36,154,118,134,178,136, 16,119,236,113,190, 38, 99,137, 89, 19,147, 38,161, 8, 57,113, 24, 70,185,216,158, 39, - 4, 62, 9,238, 82, 69, 84, 90, 46,197, 8,116, 42, 69,177, 84,230,156,158, 92,100, 85,209,146,156,156, 31, 90,227, 84, 70, 23, -113,108, 76,154,152, 20, 46,105, 82, 82,114,126, 28,127,143, 19,163, 66,115, 50,134,150, 95, 55, 68,161,191,197, 24, 25,166,142, -174,143,172,119, 27,182, 15, 59,246,119, 91,186,231, 23,172,246, 75,102,253,146,106, 53,199,207, 35,182,206, 66,166,115, 78, 60, -238, 69, 52,172, 16,135, 79,109, 52,182,210, 84,141,167, 93,180, 92, 92, 92,114,115,125,205,235, 55,107,238,238, 55,108,247, 59, -166, 16, 1, 45,239,159,178, 78,244,101,244,222,212,158, 89, 91, 75,226, 94,209,221, 24, 43,235,150, 24,196,249, 49, 13, 35,227, - 16,152,198,145,169, 20,120,225, 69,100,162,134, 73, 43,134,174,147,201,144,145,162,110,140, 8, 89,127,253,216,252,204,151,203, - 19,241,205, 35, 20,225, 28,231,122,174,246,123, 28, 55,126,216, 50,103, 98, 38,152, 72,138,194, 75, 15, 70, 17,140,194, 25, 57, - 92,114,130,144,116, 65,143,230,167,163,171,247, 72,114,231,187, 72,173, 53,153,154,217,108,197,124,182,228,250,114,193,226, 69, -131, 9, 3,159, 60, 91, 49,141, 59,126,252,227,159, 72,108,159,157,241, 15,255,241,207, 25,186,200,197,213, 51,190,247,217, 53, - 23,151, 23,220,109,246,252,221,255,236,191,100,222, 84, 92, 46,151,248, 52, 96,146,198, 16, 25,135,129,202,213,146, 78, 22, 2, - 83, 12,248,156,216,239,215,212,117,197,252, 98, 37,221,131,175,248,179, 63,251,199,116,120,254,230,191,254,111,242,159,254,255, -254,191,252,249,159,253, 41,255,187,255,245,191,143,138, 96,148, 41, 33, 18,234, 4, 47, 80,101,164,149, 65, 44, 34,105,228,219, - 87,175,184, 88,173,136,177,216, 70,194,196,221,250,129,113, 28, 49, 86,130, 6,130,209, 52,149,231,112,232,136, 33, 72,156,162, -179,108,246,123,222,222,222,146,141,225,242,230, 25, 97,220,209,143, 35,118,233,169,155,134,221, 86,128, 52, 99,140, 37,223, 92, -209,237,119, 28,214,107,244,217, 37,238, 20,133,124,150,176, 20,211, 25,230,247,113,186,248,104,227, 56,170, 61, 75,206,239,227, -251, 68,118,122,185,172, 80,100, 13,119, 76,113, 43,175,117,105,102,163,202,152,242,123,135,148, 9, 83, 98, 42,159,163,148,140, -155, 76, 9, 97,176, 85, 37, 15,122,185,213,234,178,219, 18, 7,181,193,106,143,113, 94,240,145,104, 66,152,164,168, 7, 75,140, - 9, 29,166, 83,167,164,138,197,197, 90,203, 56,141,196, 56,149, 21,207, 99, 72, 3, 64,138,161, 92,118,228, 98,112,204,147,215, - 74, 9,119,218, 40,162,126, 76, 54, 60,250,237, 69,235,251, 47,182, 37,255,117,235,177,156,147,136,150,138,253,115, 58,236,249, -241,159,252, 9,222, 91,236,229,146,212,223,210,119,129, 48, 69,154, 99,215, 88, 82,161,142,151,116,163, 76, 65,166, 74,236,173, - 49,146,178,134, 50, 92, 92, 8,170,181,242, 53, 9, 77, 55,244,116, 99, 96, 53,175,177, 90,113,216,247,180,141,227,205,250, 32, -140,243, 8,222, 90,185, 60, 31, 58,234,198,209,239, 7,180, 50, 88, 45,171, 55,109,149,100, 95,123,131,107, 44,237,188,230,245, -219, 59,172,175,120,251,245,129,143, 62,187,224,103,191,122,197,197, 71,158, 41, 70,250, 16, 81, 14,180, 21,175,246, 24, 19, 13, -134,183,239,222,137,190,164, 63,176, 92, 46,153, 42,137, 53,246,197, 57,131, 50, 2,153,138, 25,107,149,236, 85,141,125, 20, 51, -150, 92,107,153,226,232,242,255,165,144,107,109, 10,187, 63, 63,198, 4,228,140, 53, 6, 91,132,110, 41, 70, 65,132, 30, 19,184, -120,108, 80,142,246, 92, 74, 7,127,196, 14,107, 10, 8, 72, 41,114, 12,164, 28,112,222, 50, 29, 14,204,151, 45, 57, 37,106,231, -232,119, 45, 15,109,205,195, 93,135,179,101,156,159,164, 97, 72, 49, 98,181, 37,134, 72,200, 9,231, 13, 83,136,180,182, 98, 24, - 14, 24,111, 73,121,164,170, 42, 76, 47, 20, 65,249,147, 13,169, 40,249,181, 22,193,222, 20,199, 39,146,205, 39, 57, 28,229,125, -127,180, 90,230,130, 58, 62,143, 61, 20,171,215,177,185, 59,179,130,161,229, 25,215,242, 61,176,134,242,236, 37,140, 73,104, 45, - 63,198, 36, 19,140, 99, 17,231, 60,150,225,220,222, 90, 4,186, 99, 84,244, 33,209, 13, 18,106,181,126,216,114,191,221,242,236, - 97,197,205,238,154,229, 85,207,124, 53,209, 44, 6,170,249, 12,221,212, 40, 87,161,109,133,210, 14,237, 12,201,120,146, 81, 37, -210,181,197, 86, 51,170, 89,207,108,117,193,234,102,199,250,126,195,221,221, 61, 15,235, 45,251, 67, 79, 78,178, 30, 84, 74,236, -188, 78,131,209,242, 30,179,206,200,170,170,146,117,142, 42, 94,246,106,154, 24,251,129,225,208, 51, 12, 26, 61,140,228, 49, 22, -128, 88, 36,132, 2,131,210,234,244,163,214, 50,246,183,231, 33, 21, 71,187,206,241,195, 88,131, 61,125, 28,227, 26,159,114,217, -229,245,210,143,105, 49,167, 23,245,233,216,254, 59, 56, 59,185, 23,130, 74, 24,149, 37,152,163,124, 40, 43,157,186, 73,250, 20, -112,112,252,189,245,251, 25,178,156,199,105, 66, 80,153,202,181, 84,245, 12,239, 61, 57, 77, 44,103, 53, 85, 54,140,253,196,223, -254, 27,127,139,223,249,254, 15, 48,206,243,231, 63,253,130,215,183,107,148,157, 49,191,184,161, 27,122,254,225, 63,254,115,238, -238,238, 24,186,129,203,229,140,153,215,212,106,194, 41, 39,144,138, 44, 48, 25,107,133,181,238,156,197,121,137,131,108,231, 45, -182,110,169, 42,195,253,183, 95, 19,187,142,175,254,226,207,120, 88, 63,128, 10,220, 62,220, 50,165, 9,156,193,214, 21,169,123, -244, 40, 63,170,223,143,135,165,188, 65, 23, 23, 43, 80,154,135,187, 59, 86, 23, 43, 54,219,173, 48,170,157, 99,225,107,134,110, -196, 26, 77, 93,213,144, 18,109,211,160,179,236,150,199, 20,137,100,246,135, 3,117,215, 19,166, 9,163, 45,219,205, 22,101, 29, - 99, 16, 92,231, 24, 69,104,146, 82, 98,236, 6,172, 49,197,242,148, 31,135, 48, 69,241,152, 83, 62,243, 95,158, 49,154,203, 98, -228,216,181, 31, 49,184, 90,149,189, 82, 41,238, 24, 73,102,202, 89,114,218, 99, 82, 66,189,147, 28, 48,193,166,150,189,123, 25, -108,151,101,153, 62,147, 75,234, 71,250, 20,103,157,129, 6, 93,224, 23,199, 9, 82,206,177,224, 90, 13, 42, 37,140,230, 9,160, - 38,151, 56,217, 99,230,179, 42, 7,180,247, 98,221, 19, 34,151, 46, 92,116,241,232,166, 50,141,144,124, 38, 69, 14,147,220,170, -199,137, 48,142,140,227,200,197, 52, 49, 91, 46, 72,185, 70, 41,137,197, 77,233,132,249,126,242,158,253,239,239,159, 92, 70,211, -194, 41,216, 31,118,220,189,122,205,237,203, 87,252,222,239,253, 46,191,216,191, 37, 25,205,254, 48,224,178,194,101,141, 46,223, -205, 88,112,187, 57,201, 78,125, 74,129,198, 91, 98, 12,248,170,149, 76,109, 35,196,192,237,182, 35, 3,135,195, 1,165, 36, 28, - 99,183, 59,176,156, 55, 12,253, 22, 84,195, 24, 34, 77, 85, 51, 78, 19, 55,171, 11, 14,219, 53,139,197,140,135,245, 22,231, 45, -251, 93, 47, 34, 54, 13,222, 26, 1, 8, 53, 22, 84, 98, 8, 19, 89,107,222,222,109,185,126, 49,103,219,237, 88, 92, 26,116, 5, -177,216, 24, 51, 50,170, 78, 41,158,198,152,206,106, 14,221,150,204, 68,140, 83,233, 42, 19,179,166, 37,198, 10,211, 46, 81, 37, - 58, 85, 91, 35, 88,229, 41, 20,123,165,125,236, 76,203,243, 17, 74,252,172,214, 26,101,159, 90,116,116,105, 70,244,153, 80, 82, - 29,173,136, 39,103,200,177, 50,154, 19,144,234, 56,185, 58,157,167, 89,124,206,228, 76, 24,123,210, 52,146, 67,160,239,247, 24, -157,208, 4, 81,198, 19,153,207, 26, 54,235, 7,198,105, 40,156, 4,233, 86,167,105,160, 93, 52, 60,236,239,217,108,215, 2,173, -169,171,178,179,215, 5,166,213,115,177,156,179,217,247, 84,117, 37,207,158,182,197, 50,154, 49, 89,152,255,233, 3,238,166,167, -245, 65,125,192,214,150, 31,201, 74,101,250,150,146,144,227,162,206,104, 93, 22,105,250,248,245,235,210,197,203, 25, 98,148,172, - 62, 68,127, 19,197,162,122,106, 64,206,116, 34,133, 49,155, 75,144, 20, 90, 23,189, 81, 36, 78,138, 33,140,236,199,137,221, 52, -177,237, 7,118,135,137,231,155,129,171,171,158,229,213,129,116,177,196,204, 27,204,108,134,173,103,226,116,177, 85, 97, 80,120, -148,246,100, 93,227, 76,139,170,122, 76,219, 80,207, 27,150,203,150,203,203, 5,235,245,150,205,122,199,102,189,165,239, 6,153, -194,158,133, 67,228, 20,202,164, 33,139,150,160,170,132,252, 8,228, 24,100, 95,238, 29,182,115,152,174,199,116, 3,251, 44, 99, -249, 97, 28, 9,233,236,251,158, 31,191,183, 54,149, 93,166,214,210, 85, 89,103,139,186,216,138, 15,219, 60,138, 22,142,137,105, -143, 83,239, 71, 8,199, 7,183,132, 79, 68,144,249, 73, 24,134, 42, 94,218,227,176,196,156, 57,210, 68,239, 84, 68, 17,197,143, -120, 20,229,233,147, 10,251, 3,160, 27, 37, 97, 46,109, 59, 43,177,163, 20,162, 90,199,139,229,140,219,183,239, 56,140,137,159, -253,252, 75,146, 49,252,249, 95,252,148,205,250, 22,101, 59,190,120,249,138,135,205, 65,118, 33,229,239, 53,246, 3,238, 82,163, -147, 60,244,227, 40, 30,238,156,160,169, 23, 50,234,112,114,248, 59, 47,170,222,132,101,121,253, 17,221, 48,162, 81,124,118,189, -228,205, 97, 3, 90,114,211,223,222,223,129, 49,184,186, 18,188,107, 8, 79, 86, 23, 90, 89,249,126, 22,181,116, 66,130, 44, 46, -174, 46, 25,199,145, 67, 39,169,105,149,246, 18,210, 48, 14, 52,243, 57,222,121,172,214, 52, 85, 77,140, 81, 66, 94,234,154,126, - 24,104,218, 57,175, 94,189,146, 96,139,146, 41,174, 98,241,195,106,133, 81, 26,157,164,227,218,231, 40, 9, 65,165, 76,171,227, - 43, 84,198,240, 74,231,114,219, 78,143,100,181, 83, 0,143, 62,113,176,101, 44, 47,239, 31,171,229, 61, 36, 33, 5,242,208,167, - 44,132, 40, 21, 51, 42,137,117, 39,196,146,229,173, 4, 18,121,124,175,201,133, 67,166, 3, 83,121, 67, 31,134, 30,187,183, 36, - 18,227, 52,226,187,170,196,134,138,149, 13,101,137,170,228, 44, 43, 75, 50, 25, 27, 19,218, 78, 5,199,153,201, 49, 16,130,216, -214, 68, 92, 19, 11,223,192,160, 11,140,198, 89,203, 56,106, 70, 53, 50,230,241,228, 67,205, 41, 18, 85,148, 41,132, 17, 97,222, - 52,142,244, 93, 71,223, 29,152,134,142, 24,158, 51,203,151,162,160,118, 34,194,226, 40, 6, 60, 30,108,127,101,188,210, 63,139, -139,192,211,231, 71,107,197,110,123, 32, 12, 35, 95,253,252,151,124,239,211,207, 88,249,204,159,253,215, 19, 49,149,247, 65,202, - 56,107, 48,186,192, 63, 98, 70,233,132,247,150,156, 35, 86,131,243, 48, 77,229, 61, 92,194,122,166, 16,232, 7,121,189,178,134, -113,236, 81, 90, 19, 66,143,175, 26,134, 78,209, 13, 3,222,138,176,213, 42,205, 52,141, 88,103, 36,132, 70, 69,200,150, 20, 50, -117, 43, 88, 82, 84, 46,182, 43, 71, 86,145, 97, 28, 81,206, 10,244,102,102, 57,236, 96,182,108,217,142, 61,190,105, 37, 81,204, - 57, 82,209,196,116,253,158,152, 2, 99, 25,225,135, 24,216, 29, 54, 24,109,177,247, 2, 64, 26,250, 17,176, 44, 22, 11, 66, 12, -152,104, 33, 71,172,119, 39, 18,156,236,255, 11,183,160, 96,125,143, 54,213,105, 12,197,247,110, 74, 30,186, 58, 77,172,114,206, -144,164,248,230,194, 76, 79,169,116,237,198, 64,193,140, 30, 93, 16,143,168,226,210,185,199, 40,174,141,174, 99, 60, 28,132,219, -191,219,145, 67,164,239,186,146,114, 54, 48, 77, 93, 33,194,237, 32, 4,226, 20,132,213,239, 38, 50,178, 74, 27,167,137, 74,105, -172, 57, 83,146, 43, 77,138,129,126,191, 21,142,186,209,162, 45,209, 22,165, 50, 49, 41,250, 41,208,245,195,169, 27,230,201,101, - 69,125, 39,117, 51,243,148, 89,126, 50, 97, 41, 93, 58,120, 8, 49,161, 85, 44,208, 36, 32, 42,225, 78, 41,133, 86, 70,214, 45, - 38,203,143, 58, 75,131,169,181,224,150, 79, 48, 27,117, 98, 53, 64, 58, 61, 98, 34,194, 46, 5, 62, 64, 84,134,160,100, 26,152, -213, 72,140, 91,166, 62, 50,236, 39,186,253,129,195, 97,203,197,208, 81,119,115,170,161,195,207, 70, 76, 45, 28, 10, 92, 35,147, - 94,227,208,120,208, 65,124,236,206, 66,229,100, 87, 62,159, 49, 91,205, 89,110,246,108,239, 55,108, 55, 59, 14,187, 3,227, 36, -194,227,170, 22,209,111,229,236,201,145,112,116, 75,104,173,192, 30, 93, 24, 71, 99, 68, 70,197,196, 52, 26, 6, 45,186,141, 97, -152,232,167, 73,166,131,165, 88,166,156,176,225,168,110, 70,194, 19,136, 17,109, 52, 58,137,204, 48,199, 92,118,164, 17,210, 49, -223, 85,127, 32,122,245, 67,148,155,115, 43,122,122,114, 38,165,146,160, 21,131,120, 50, 69, 8,112,228, 91,115, 26,151,156,223, -212,100,231,156,222,243,204,231,247, 50,165, 53,132, 64, 54, 61,235,135,129,126, 7,119, 38,240,174,185, 67,235,196,127,242,159, -255,125,254,155,127,244, 51,246,218,252,255,153,251,211,104, 93,211,244,190, 11,251,221,211, 51,188,195,222,251, 76, 53,117,117, - 85, 87,207,221, 86,183, 37, 89, 45,227,150, 49, 32, 12, 49, 96, 28,219, 64, 0,199, 96, 45, 49,153,149,176,178, 18, 2,193,100, - 49,100, 97, 12,100,241, 37, 31, 2, 49, 24, 72,156,196, 96, 67, 28, 2, 14, 88,198,150,108, 89,150, 37,203, 18,178,213,221,170, -174,174,170,238, 26, 78,157,121, 15,239,244, 12,247,148, 15,215,253,188,239,187,207,169,106,203,178,147,160, 94,123,213,169,210, - 57,251,236,253,238,231,189,175,251,186,174,255,255,247,231,244,180,165, 86, 53,235,205,200,249,110,164, 82, 6, 71,160, 49,153, -108, 53, 85,227,132,104,228, 28, 40,139,115,134, 24,183,128, 98,183,217,114,235,246, 11,144, 13, 49, 41,124, 31,113, 14,140, 94, -176, 60,125,137, 7, 79, 46, 49,214,113, 99,214, 50, 59, 59,229,157,247, 31, 19,208,220,189,127,159,197, 98, 73,221,131,186,243, - 28,247, 30,124, 80,138,137, 42,183,222,132,209,150,152, 5, 78,147, 67, 98,179,222,178, 88, 44, 4, 32,131,194, 26,135,209,226, -117,191,121,227, 6,179,166,161,157,181,248, 97, 96, 12,158,133,158, 75,218,154,113,244,187,129,116, 2, 67,161, 30,213,237,140, -172, 20,149,173,233,198, 13, 65,203,158, 78,251,145,208,111, 65,121,116,173,208,217,237,117, 11, 19,187,121, 74, 9, 75,105,186, - 93,171,103,110,232,186, 8, 22,167, 98, 97,237, 33, 83, 88,105,189,223,151,145,166,145,112, 46, 97, 5,106,175,183,200,165,160, -147,101, 92,234,115,166,243, 30,227, 29,166,247,104, 59, 8, 79,188, 20,210, 89, 87,203,229, 74,155,130,162, 5,148, 35,105, 41, -236, 89, 89,178, 25,177, 78, 24,239,106,178,228,164, 44,135,106, 10,101, 15, 16, 15, 42,255, 9,205,169, 20, 86, 24,157, 40, 45, - 69, 42,132, 32,224,136, 20, 37, 24, 39, 78, 94, 81,225,169,199,113, 36, 13, 35,113, 24,241, 62,144,111,221,166,158, 67,110,107, -185,220, 20,114,159, 62, 28, 67,135, 95, 29,101,199,230,239,106,107, 51,191,106, 24,212,193, 2, 42,111,225,232, 71,114, 31,217, - 62,185,194, 15, 3,159,249,226,231,249,206,183,190,129,173, 23,220, 58,185,195,246,222, 22, 69, 68, 91,209, 56,132, 44,241,168, - 49, 39,180, 1,223, 71, 42, 35,233, 46,203,249,140, 20, 36,158,181,109, 91,174,118, 27,162, 49,140, 62, 82,215, 14, 91, 89, 46, - 87, 87,180, 78, 16,198, 17, 24, 66,198, 36,197,233, 98, 6, 49, 18,194,200,172,169,184,186,184, 20,175, 47, 22,157,203, 68, 39, - 39,106, 99,112,214, 16,253,136,115,154, 74, 25, 30, 94,118,204, 78, 78,121,178, 90, 83,207,107,214,125, 32,185, 37,168,134,182, -170,177,149, 34,134,129,144, 6,102,149, 33, 36, 17,222,165,113, 44,207,117,160,239,197,246,165,163,102, 62, 95,146,213,165,140, -235,125,195, 60, 37, 78, 78, 78,246, 83,158, 9,138,164, 39,210, 90, 10,226, 85, 79, 22, 16, 69,126,142,144,114, 60,202,202, 53, - 68,163, 81, 57,200,202, 35,176, 15, 45, 82,170,116,110, 73,147,113,229, 34,157, 4,202,162, 21,196, 72, 14,129, 52,140,248, 93, - 71,191,222,176, 94,173, 24,250,158, 97,219,209,119,221,222,111,142,210,116,187, 13, 93,183, 22,141,204,238,146, 28, 18,190,243, -232,164, 72,117,198,135, 32,220, 5,229,104,173,149, 75,234,216, 81, 59, 75,162, 33,143, 25,103, 2,198, 52,132,208,163,140, 37, - 37, 97,127, 96,106,188,210,140, 64, 34, 21, 10,229, 65,228,122,208,216,148,153,217,241,148, 65, 77, 18,149,137,161, 41,157,127, -142, 81, 34,184,179, 20,115,241,140,103, 12, 7, 33,180, 20,116,153,214, 24,163, 48, 73, 23,240, 84, 66, 37, 85,154,255,137,119, - 82,198,250,234, 72, 29,207, 20,150, 36,207,110,206, 10, 21,100,237,219,107,184,234, 3, 81,239,232,136,108,195, 72,231, 19, 55, -122,207,162, 31,136,203, 1,183,156, 67, 28, 48,205, 9,166,106,201, 38,161, 76,133,209,142,108, 44, 90, 87, 36, 83,161,109,141, -171, 71,104, 91,204, 98, 78,115, 50,103,113,181,102,183, 94,211,109,122,134, 97,192, 40,141, 51, 96, 85, 70,229, 72,140, 30,227, - 21, 42,121, 74,204, 93,153,110, 39,225,226, 88, 77,101, 5,136, 51,106, 75,175, 52, 57, 38,226, 24,240, 94,166,136,211,153,100, - 83,140,130,159, 75,145,148, 53, 73,101,201, 74, 46,249,189, 49,150, 17,163,201,251, 93,206, 20,176, 33,183,200,103,209,127,228, -131,184, 67, 29,255,179, 8,238,114, 86, 34,104,202,226,103,142, 89, 10,198, 36,194, 74, 37, 5,107, 63,254,205,233, 41, 82,205, -135,239,233,101, 18,166,121,255,157,183,121,238,185, 23,121,251,205,183,104,219,154, 27,103, 75, 82, 28,113,181, 99,237, 45,237, -141, 23,120,239,254,125,154, 27, 45,175,124,252,121,118,223,121,143,211,106, 70,171, 28, 51,147,217, 94, 61,224,198,217, 66,124, -238,125,143,154, 47,196, 59, 91,198,142,243,197, 12,165,102,172,186, 1, 27, 18, 75, 55,163,169, 42,162,247,156, 63,126, 64,248, -212,199,153,181,210,233, 69,159,121,233,227,207,211,184,175,177,243,137,247,223,123,151,231,239, 60,199,221,247, 54,188,246,202, - 39,248,224,222, 7, 79, 5,128, 83, 70,181,137,186,170, 25,131, 23, 29, 77,206,204, 22,115,241,100, 43,197,232,125, 65,128, 30, -108, 19,135, 91,191,116, 16,214, 84,116,125,207,102,187, 67, 91, 39, 20,186, 66,162, 67,107,218,118,198,213,118,139,206, 2, 1, -201,190,199, 25,131, 54, 14,147,236, 51, 72, 66,233, 82, 39,169,215,179, 73, 68, 83,193,126,118,175,166,158, 77,211,251, 46,137, - 60, 42,139,125, 69,161, 69, 32,149,133,175,220,247, 67, 1,224, 8,196, 35, 39, 97,100,231,148,168,170, 40,129, 37,106,154,255, - 72,214,122, 42, 7, 14, 89,139, 7, 91,200, 31,251, 55,206, 65,220,147, 63, 20,145,140,146,221,153, 50, 2, 23,177,133,153, 62, -125,196, 16,228,235,224, 48,102,140, 41,115,126, 46,250,135, 33, 68,188, 15, 44,111,222,100, 22,151,212,109,131,173, 76,153,140, - 29,239,217,217, 99, 51, 57, 10,186,248, 40, 27,218,223,200, 78, 93, 29,161, 30,148,130,190,239,209,198,240,240,209, 67, 62,241, -233, 79,177, 56, 91,210,125, 51,242,249, 47,125,137,111, 93, 93,136,154, 91,131,181, 10,124,177, 12,149, 85,139, 41, 89,217, 37, - 90,140,182, 54, 12, 62,114,118,118,163,240,247, 19,151,151,151, 2, 99,201,114,232,196,148,208, 70, 68,115, 57, 39, 66,128,182, -109,176,198,176,235, 59, 26,231,216,108,182, 37,231, 72, 51, 12,129,186,182,101, 29, 34, 90,150,229,162,165,169, 52, 99, 63,226, - 3,132,206, 50,132,196,122,157, 88, 93,118, 36,103,112,243,138,217,141, 68, 50, 35,163, 50, 68,103,112,246,148, 25,134, 60, 4, -146,246,140,118,131, 15, 35, 57,121,200, 3,253,208,179,235, 47,241,113, 3,219,138,174, 91,115,118,114,134, 74,145,202, 25,154, -242,156,167, 24,201,149, 59, 74,210, 43,202,101, 2,218, 76, 2,198, 84, 44,229,133,203,161, 82,193,164,232, 67,150, 64, 40,221, -166, 86, 24, 50, 57,143,232, 16,246,127, 62,251, 64, 8,158,177,239,217,173, 55, 92, 62,121, 66,223, 73, 48,145, 31,228,249,243, -195,192, 56,140,194, 25,215,226,202, 24, 6,191,119, 54, 52, 77,203,229,147, 43,134,222,147, 82,166,109, 43,185, 0,164, 36,214, -192, 44,177,169,193, 15, 52, 85, 45,103, 75,240,140, 67,194,107, 67,221, 46, 68,143,144, 34, 9, 83, 38,146,210,189,203,232,187, -128,146, 50, 31,234,128,202, 71,162,217, 41, 79, 93,149, 21,173,222,183,134,185, 96,165,101,250, 21, 77,201, 66, 40,118, 89, 83, -190,175, 84,154,190,152, 51, 62,101,172,145, 6, 33, 41,185,172,230, 50,173,205,228,107, 19,228,107,171,144,242, 94, 53, 74,220, - 0,109,229,104,107, 75, 93, 89,140,202, 4,239,217,238,192, 26, 37, 5, 55,140,248,224,105,162,120,199,171,121,196,181, 3,166, -154,131,157, 29,146,224,156, 69,155, 6,109, 20,206,214, 40, 87, 99,171,134,166,106,153,183,115,198,147, 51,118,235, 13,219,245, - 21, 99, 63,200, 42, 51, 5,114,144,201,103, 72,145, 84,108,183, 19,177,114,250,200, 33, 30,213,213, 50, 5, 45,171, 27,225,146, -200, 10,113, 12, 1, 27, 66, 56,208,121,162, 96, 29,245,148,162,147, 19,217, 24,185,145, 60,115, 40,171,107, 80,154,227, 52,158, - 41,141, 43,171,201,198,112, 56,242,212,193,164, 91,108, 80, 69, 32, 85,212,213,178, 5, 73,123,245,116,206, 71, 9, 92,249,186, -245,231,122, 64,128,252,189, 42,101,116,202, 60,124,255,109,198,221, 21, 23,231, 3,231,235, 83,214,187,129,135, 79, 30,243,202, -203,175, 50,191,113,135,240,224, 17,209, 84, 60,188,184, 98, 28, 3, 87,187, 43, 86, 17, 94,125,254, 14,159,250,212,167,200,253, -134,156, 18, 29, 17,173, 36, 5, 77, 59,205,108,177,196,103,197,232, 3,205,108,193, 15,254,134, 31,226,175,254,226,207, 19,250, - 14,123,162,120,252,240, 46,223,126,107,198, 98, 57, 67, 43,197,114,113,147,229,172,230,246,217,130, 15,206, 87,172, 46, 47,120, -229,197,143,241,228, 94,205,231, 62,245, 57,126,246, 47,253, 12, 62,199,107,111, 0,107,237,222, 69,208,247, 3,198,136,192, 40, -165, 68,215,117,123, 79,187, 41, 69,172,235,118,178,111, 84,138,182,169, 37, 31, 61, 39, 22,203, 5, 90, 27, 70, 63,210, 86, 53, -198, 42,118, 93,143,139, 9,140,165,105, 90,182,221,192,197,227,199,168,126,141, 13, 91, 81,210,170,201,114,115,189, 83, 63,140, -207,242, 95, 83, 89,125,204, 47,200,249,195,237, 46, 31, 57, 26, 46,130, 18, 38,116,100,158, 60,171,153, 97, 28,203,127, 19,233, -124,140, 30,239, 71,234,170, 41, 42,101,189, 39,223, 97, 28,202,214, 40,163, 48,217, 94,219,177, 77, 49,167,178, 99,157,166, 69, -135,224,137,235,225, 67, 74,178,192,181,193, 26,177,111, 25, 45,194,151,137,100, 21, 67, 1,130, 40, 13, 68,124,200,108, 55, 43, - 17, 90,133, 32,251,246, 16,153,159,156,208,206,103, 88,103,201, 69, 84, 38, 40, 88,246, 29,207,161,112,171,191,105,254,245,143, -122,221, 99, 74, 24,231,216,108,174, 88,158,156,242,220,157,155,124,235,205,111,242,125,191,225,135,120,235, 47,253, 52,239, 46, -150,146, 42,165, 21,149, 53, 36,175, 74,119, 6,149, 51,178, 66, 83,147,114, 57,227,172,136, 33, 99, 17,122,142, 33, 81,149,220, -118,237, 28,171,243, 75,180,209,133, 35,160, 81, 72,204,233,201,114,201, 56,138,111, 92, 70,139, 3, 57,102, 94,186,125,139,119, -190,243,128,179,179,166, 16, 10, 51,139, 89,131, 51,134, 24, 51,166, 50,188,247,104,164, 62,185,201,119,238,174,232, 3, 98, 41, - 82,129,100, 71,244,163, 43,230,203,138,179, 89,195,237,147, 83,116,157,208,173,195, 44,102,178, 62,240, 21,253,110,199,176,219, -225,140, 66, 41,143,143, 61, 62, 70,208, 21, 42, 71, 84,150,188,121,107,229,103,110,157, 36,198,153, 24, 8,193, 96,138,253, 76, - 28, 33, 81, 82, 11,141,217,235, 66, 52, 19,232, 40, 73,144, 78, 40, 46,160, 40, 90,134, 34, 11, 67, 77, 28,246, 20, 9, 33,208, -117, 29, 87,231, 23,140,195,192,102,179, 17, 64, 79,121, 86,131, 23,254,188,247, 30, 82, 22, 87,130, 17,178,157, 42,120,224,121, - 92,176, 89,119, 52,237, 2,165, 59,114, 30,233,251,192,110,215,179, 88,156, 16,162,136, 69, 49,236,191, 46, 87,183, 84, 90,149, - 12, 13, 41, 44,144,169,107, 71, 24, 61,214,206,246,142,157, 73,251, 99,148,218,235, 69, 14,239,153,124,141,242, 57,157,225,154, - 76,228,200, 57,117,141,127,168,142,168,233, 7,155,155,181,146,163, 96, 16,187,219,100, 19, 53, 70, 4,147,222,138, 61,242, 80, - 31,166,166,243,184,158,171,107,107, 66,163,197, 69,229,140,166,173, 29,181,179, 52,149,149,180, 72,163,168, 10, 52,105,232, 7, - 20, 18, 12, 22, 66, 34,135, 4,193,163,252,128,154, 5, 84, 29,192,138,152, 78,105,139, 50,226,134, 80, 49,201,116, 67, 87,100, - 83,227, 92,131,171, 7, 92,237,168,103, 53,253,118,139,239,122,252, 56, 8,205,114,136, 36,239,139,158, 66,250,216, 16,165, 33, -136, 65,126,222, 99,193,201,250,224,203,180,240,104,178, 88,244, 65,164,132, 29, 71, 79,178, 18, 6, 31,149, 42,209,145,121, 63, - 26,215,230,104, 31,250,116, 71, 69,161,120, 77, 41, 86, 71, 7, 98,154,240,112,165,160,155, 73, 1,188,239,244,229,207,198, 82, -204, 67,146, 78,112, 42,244,211,184, 38,163,228, 7, 6,215, 85,216, 83, 71,127,244, 65,206, 24, 18,175,189,242,113,238,189,255, - 62, 90, 65, 59, 95,240,232,114,203,123,143, 46,232,253,200, 87, 95,121,149, 7,247, 30, 17,253,192,251,239,189,207,237, 87, 62, -206,105, 99, 88,156,156,113,117,217,241,193,131, 7,188,112,243,148,218, 53, 92, 60,122,200,174, 15,204,151,183, 69, 45, 62,236, -112,179, 25, 79,158,172, 81,174,230,203, 95,250, 94,254,222,223,241, 59,112,109,205,159,251,127,255, 55, 44,230, 13,109,227,176, - 86,241,203,223,252,101,200,138,139,171, 13, 95,190,115,155,239,255,210, 23,184,247,103,127,138,251,247,222,227,147, 47,191, 76, -223,109,121,229, 99, 47,211,214, 45,190,219, 92,123, 24, 67, 8,130, 3,116,142, 48,140,104,164,155,234,250,158,166, 0, 48,114, -241,243, 42,173, 25,123, 57, 0,102, 77,195,124, 62, 99,209,206,152,207,231,197, 38,225,168,171,134,171,203, 43,218,249,130,148, - 18, 87, 87, 43,140,171,208, 85,141, 82,154,126,183, 97,105, 35, 42, 15,178,159, 82,106, 95, 92,158,233, 92,143,146,194,212, 71, - 4, 12, 60,109,111,249,149,194,137, 38,232,144, 58, 42,236,122, 82,210,151,203,222, 24, 34, 57, 13, 28, 9,237,201, 41, 51,250, - 40,202,228,242, 38,118,117,141,171, 90,180,220, 95,246,187,108, 17, 99, 74,145, 17,107, 84,225,225,167,184,255,117,218,199,140, - 78, 23,201,131,197, 38, 43,161,218, 9, 46,215, 16,140,140,145,189,242,114,211,206,251, 57, 1, 49,120,250,237,166, 36,162, 5, -194, 56,226,251,145,116,243, 22,205,108,134,171, 5, 19, 89,130,168, 72,154, 61,171, 93, 63, 69, 77,252,168,117, 83,254, 21,250, -224,158,241, 15, 31, 18, 24,138, 98, 59,241,177, 87, 62,206,197,213, 57,183, 95,126,153,151,158,187,205,246,254, 61,116,211,160, -140,162, 42,133,105, 44, 41, 83, 40,185,124,134, 24, 8, 17,172,149,174,199, 40, 25,237,102, 31,246,249,239,117, 83,145,179, 97, -179,219, 48,250, 76,211,218,125,225, 87,100, 78,151, 11,198, 97,160,114,142,232, 61,221,110, 71, 12,137,121,219,208,119, 29,214, - 22, 84,106, 9,126, 49,186, 36,150,145, 57,191,236,105, 23,115,206,215, 29, 67, 84,116,131, 6,229,208, 74,220, 8, 97, 13,151, - 87, 35,231,116,188,239,174, 88,158, 56, 94,120,113,201,173,219,167, 44,150, 53,237,172,162,118,150,177,106, 36,205, 49, 12,132, -180, 35,132,132,173, 18,195,216,179,221, 24,140,178, 92, 93, 94, 10,101,172, 80, 37,109, 85,244, 47, 24, 57, 96,181,248,235,149, - 53,104,107,139, 46, 36,239,133, 79, 41,136, 7, 57,165, 36,216,229,156,100, 85,152, 2, 67, 63,224,125, 96, 24, 61, 49,142,236, -118, 59, 54,155, 13,219,237, 22,107, 12, 93, 63, 16, 99, 20, 69,122,161, 70, 98, 12, 41, 70,154,162,255,208,102,178,122,214,212, - 33, 98,237,192,110, 39,233, 98,237,108,206,118,213, 49,244,137,113, 28,101, 89, 20,188,164,193,197, 68, 74, 26,109,170, 98,109, - 77,248, 97,192,206,103,248,173, 7,165,104,154,138,203,174, 67, 23, 90,158,113,178,198, 50,185,164,178, 77, 15,113,126, 54, 0, -204, 42,179,135,237,100,100,213,146,139, 14, 33,229,201,234, 76, 1,176,104,170,202,210,212, 53, 77, 83,224, 44,206, 97, 10,116, - 39,164,132, 15, 14,239, 3,222, 59,134,177, 34,148,194,151,138, 75,107, 42,232,154,252,204,212,112, 47, 90,212,114,193,176, 70, - 81, 59, 75,101,181,252,179, 4,241, 24,103,169,140, 66, 35, 23,201, 97, 55,200, 4,123,140,164,209,193, 40,235, 53,211,142,232, -118,142,174,103, 40, 87,161,140, 32,103,117, 57, 99, 20, 14,180, 35,153, 10,101, 42,180,213,216,166,193,213, 21,195,118,203,176, -221,208,111, 55,140,125,199, 24, 10,165, 49, 31, 26, 5,239, 99, 33,114,122,198, 32,151, 61, 31, 34, 41,133,114,177, 46, 86, 75, -235,138, 42, 62, 96, 55,187,129,202,197,162, 44, 45, 62,196, 36, 22, 34,179,231, 85, 31,146,160,246,131,148, 73,205,172, 14,119, - 46, 74, 65,158,236, 72, 19,112, 72,163,240, 83,199,190, 79,239, 41,160,146,152, 8,101, 95,155,202, 3,191,223, 37,230,105, 92, -163,143,198, 56,135,169,192,211,193, 51,114,160, 39,208,138, 80,184,196,157, 79,140, 25,182,131,116,120,173, 51, 52,202,115,115, - 49,227,201,213,134,245,197, 5,121,115,197,237,231,231,140,122,100, 48,240,222,195,199,252,192, 23, 63,203,230,242,138,180, 29, -216,110,183,196, 33, 96,103, 53,155,109, 79,192, 50,107, 23,252,149,175,189,206, 31,249, 99,255, 15,198,110,205,170,228,149,159, -181, 75,148,171,120,120,126,137, 87,154,245, 56,242,242,203, 47,226,117,228,199,255,226,207,240,248,241, 67,154,166, 34,134,192, -217,201,146,219,183,110,178,122,127,115,109,132, 29, 66,216,187, 13,118,193, 83,213,117,121, 45,229,117, 24,135,129,211,211, 83, -134,113,100,177, 88,144,203,239,175,235, 10, 80,184,170,162,109, 91,108, 85,209,117, 35,202,136, 56,236,254,131,135, 84,117,131, -143,145,101, 12,152,232,104,234, 25,159,120,229, 85,118,143,191, 77,223, 13,130, 43,204,250, 25, 33,226,181, 55,234,135, 20,150, -195, 4,230,122, 30,192,135, 5, 15, 28,192, 67, 79, 9,191,166, 27,126, 65,111, 22,170,133, 60,103, 25, 50, 81, 4,117, 41,226, -163, 24,124,180,117,152, 74, 2, 53, 36,170, 83, 14,200, 97,244, 84, 77,162,170, 51, 85, 35,151, 20,109,100, 4,138,142, 76,233, - 2, 41,230, 82,152,194, 83,211,136, 67,240, 10,234, 58, 58, 73,105,133, 81,134,140, 59,128, 49,140,129,113, 32,132, 80,118,180, - 17, 18,104, 60, 67, 17,242,196,113, 20,139, 74,215,115,114,118,147,217,169, 80,241,140, 85,178,163,213,148, 16, 29, 57,229,254, -102,194,104, 62,242, 66,165, 68,181, 61,155,207, 49, 74,211,198, 5, 47,222,186,133,201,137,122,121,138,173,103,130,200, 85,129, - 76, 64, 25, 69,142, 16, 83,164,117, 53,163, 79, 69,196,168, 88, 46, 90,250, 93,135, 54,173, 40,204,125, 79,189, 88,160,163, 98, -179,237,233,134,161,196,134, 38, 42, 87,179, 89,239,120,238,185, 83,249, 92,237,140,205,122, 77,244, 3,126,240,168,156, 89, 46, -231, 60,184,119,193, 98,225,136,113,196, 40,249, 59,180,213,248,172, 24, 66,226,201, 78,177,184, 85,113,247,242,130,199, 3,164, -100,138,211, 2, 48, 10,155, 96, 54,175,233,115,160, 27, 71, 62, 56, 31,120,112, 57,112,115,113,197,171, 31,191,205,243, 47, 45, -152,213, 53,109,219, 50,111, 90, 97, 57,116,142,148,123, 32, 8,118, 52,202, 57,181,235, 71,218, 49, 80,141,129, 42, 8,185,173, - 74,178, 26, 83, 25, 81,100, 27,185,236,105, 37, 43,150, 20, 66, 9, 22, 26, 33, 70, 84, 70, 52, 23, 49,145,195,128,239,118,140, -187, 29,155,205,150,152, 20,221, 48,178,235,183,164,156,217,108, 55,197, 26, 39, 19,149,202, 85, 50,178,213,236, 39, 83, 10,104, -155,102,127,193, 55,214, 97,171, 10, 23, 18, 77,179,100, 28, 19,209,139, 46,105,187,218,144, 83, 68,169,196,110,183, 41,133, 61, -144,194,136,171,102,120, 63,208,119,134,249, 13, 97,176, 27,165,177, 74, 49,118,163, 4,137, 88, 71, 72, 25, 55,125,143, 90, 81, - 25, 83,206,244, 74, 86, 98,153,103,139,168,158, 44,106,215, 93, 23, 83,200,209, 4,211,177,165,216, 86,149,163,169, 28,117, 35, -226, 82,231,220, 62, 68, 41,101,161, 83,134, 16, 8,161,198,123, 95,104,149,225,232,189, 82, 68,199,124, 88, 80,104,113, 33,152, -146, 92,167,197, 70,237,140, 22, 20,171, 21,241,179,182,194, 41, 80,164,253, 52,111,216,201,179,217,239, 52,155,121, 71, 51,219, -209, 44,123,234,197,128,157,141,152,186,198, 52,243, 50, 29, 44, 58, 34,163, 65, 87, 50, 53, 52,146, 81,161,156,248,223, 77, 93, -151,203,145,188, 38,227, 70,116, 17, 49,166, 18,136, 37, 26,178, 24,164,192, 75,172,173,232,142,234,202, 97, 10, 24, 73,206, 45, -113, 16,248,224,177, 93,239, 9, 49,203,139,103, 77,233,152, 97, 12,162, 46,212,123, 53,225,145, 47,249, 41, 64,128,153,210,166, -142,216,211, 89,229, 67,170, 85,241,237,170,233, 22, 87,140,206, 49,149, 47, 52,243, 20, 97, 78,237,129, 54,234, 41, 70,252,228, -254,184, 94,216,143,246,190, 36,108,213,242,206,131,115, 62,247,197, 47,115,190,218,112,255,173,111,227,180,162,173, 29,119,223, -123,135,212,117,156,204, 42, 46,214, 34,152,104, 12,204, 93,166, 87, 35, 91,163,120,112,126,197,119, 30, 8,156,162,106,106,186, -190,103, 36,208,106, 67, 42,236,234, 71,143, 46, 88,158, 25,222,120,227, 13,186,237, 21,125, 30,137, 74, 17,149,227,114, 61,240, -151,254,251, 95,162,207,153,139,110,195,213,213, 21,203,197,140,215, 62,241, 42,127,245,245, 55,121,231,189,239,144, 8,124,235, -205,215,121,233,197, 23,120,251,253,119,143,246,214, 1,133,166,239,101,220,174,141, 97,219,237,168,156, 67, 43, 69,223,247, 84, - 85,197,110,183, 35,165,204,213,229, 37,149, 53,212,117,197,108, 54,167,105,106, 78, 78, 78, 48,198,208,117,131,160,103,199, 17, -148, 97, 54,159,177,217,118,244,195,200,106,181,226,228, 70, 77, 91,207, 48, 54,177,250, 96,135, 86, 30,178,133,108,174,121, 73, -255,122,181,217, 31,218,221, 63, 83,224,167, 28,105,174, 9,195,246,172, 41, 37, 35, 62,193,197,234,125,122,153, 86, 25,149, 53, -218, 72,154,214,124,177,100, 57,159, 49,107, 27,156,209,196, 24,217,172,214,172, 54,107,250,174, 35, 36,217,177, 87, 37,128, 70, -167, 72, 54,177, 8,205,212,254,160, 56, 94, 49, 60, 77,195, 82, 74, 95,219, 13, 30, 46, 96,166,184, 20, 44,198, 4,241,224,171, -161,216,223, 34,137, 68, 80, 1,157, 35,236, 34, 97, 28, 24,250,158,110,183,165,219,172,153,111,207, 56, 61, 59,165,157,207,168, -219, 6, 99, 13,198, 77,192, 5,132,100,199,117,222,195,225, 61,150,127,213, 59,245,167,255,251, 4,241,233, 54, 91,110,221,188, -141,182, 21,228, 68,213, 46,113,237, 28,227, 12,182,132,140, 72,135,149, 14,140,122,216, 99, 99, 23,115,203,250,114, 32, 4,143, - 82,134,190,239, 89,156,157, 22,206,248, 6, 99,173, 8,130,208,236,250, 1,231, 52, 77, 93,115,126,113, 78,104, 42,172, 54,116, -163, 71,145, 89, 46,230,248, 49,160,181, 28,170, 66, 23, 84, 84, 77, 77,239, 7,124,231,121,188,246,216, 27,103,252,133,187,151, -220,235, 34,171,172,132,120, 26,163,136, 63,179,198,144,185,169, 96,225, 42, 22,205, 9,243, 49,178,222,238,120,120,229,185,216, -220,227,249,135, 53,175,126,236, 54,207,221, 88,176,152, 85,204,102, 18, 36,228,188, 39,229,129, 16, 70,178,178,140, 65, 49, 6, -193,142, 58, 31,168,134, 64, 85, 75,154,150, 50, 70,108,164, 5, 88, 52,177, 24, 38,187,111, 74, 81,232,119, 49,144, 67, 32,251, - 72, 24, 70,182, 87, 79,216, 94,158, 19,253,200,102,215, 49,248, 68, 55,120,172,149, 56, 90, 99,180, 8,131,181,132,200,212,109, - 75, 83,213,212,174,218, 95,250, 67, 8, 7,241, 41,138,224, 35, 33,122, 34,144,179,166,105,107,170,166, 98,113, 58,231,228,100, -134, 31,101,197,102,157,161, 31, 6, 65,244, 26, 65,238,170,156,202,165, 62, 73, 33, 85, 74, 70,254, 41,225, 92,141, 54, 61, 33, -137, 21,181,114,150,249,188,193, 90, 77, 72,146,131, 42,104,234,178, 6,213,122, 31,195,172,245,209,104, 93, 79, 53,129,107, 53, - 99,154,226, 26, 35, 8,224,170, 60,147, 19,141, 77, 31, 17,248,166,142,212, 71,225, 39,200,222,185, 92,200,211,179,210,171,235, -235,128,163,230,161, 76,144, 11,129,118,207,253, 87,147,238,164,172,145,209, 34, 12,246, 49, 18,251,145,203,117, 66, 61,217,210, -182, 43,230, 39, 43, 22,167, 43,102,103,103, 52,243, 5,110,214, 99,155, 25,184,154,236, 92, 65,206, 90,193, 1,151, 58,169,141, - 52, 33, 88,135,182, 22,235, 92,153,156,110,217,110,182,116,187, 30, 79,148,117, 28,154,172,178, 92, 62,178,193, 78, 4,194, 61, - 51, 36,151,233,160, 52,193, 62, 6,236, 16, 2, 33,101,116,217,209, 8,132, 94,239, 5, 69,234,200, 63, 61,249,209,247, 62,118, - 35, 2, 45,231, 28, 22,185,225,216, 50, 6,210, 19,120,164, 36,239,168, 44, 42,103,193,222,197, 34, 24, 41,164,184,162,132,159, -168, 76,135,224,150,162,155, 47,121,191, 19,156, 32, 31,204,211,207,236,213, 33,211,249,196,233,237, 23,121,225,213, 79,241,246, -207,252, 37,238, 63,122,136, 85,240,210,139,119,232,186,158,133,179,164,148,104,219,134,186,157,195,184, 35, 12, 3, 47,221,113, -248,149,229,254,189,129,183,238, 62,228,185,214,112,121,177, 97,126,170,185,245,252,199, 25,208,212,205,130,246,198, 41,118,237, -121,254,133,151,120,252,232, 46,183,110, 46,248,218,195, 15, 24,251, 30,157,224,114,183, 70, 59,203,206, 7, 94, 57, 59,229,201, -229, 5,159,250,220,103,248,251,127,219,111,227,191,255,198,191,203,215,190,241, 75,124,249, 11, 95,224, 79,253,233, 31, 99,126, -178,124,106,148, 42,123,164,148, 19,253,208, 23, 24,139,136,131,200,121, 31,255, 23, 67, 64, 27,195,106,181,226,198,233, 41,166, -236,215, 66,136, 88, 99,168,235,166, 8,238,114,225,118,103,188,247, 52,133, 3,223, 15, 3,249,106,197,201, 92,225, 82,207, 56, -238,112,185, 20,187,172,158,125, 35,252, 13, 64, 79, 62,108, 68,124,184,196, 29, 11, 34,121, 6,161,154,167, 8, 82,166, 76,233, - 76,109, 29,139,197,130,229,201, 41,103, 55,206, 56, 93, 46,153,183, 53,206,202, 27,127, 49, 95, 96,159, 56,206,207, 47, 24,251, -238,224,212,208, 10,147,235, 67, 34, 26,250,200,130,115, 93,224,119,224, 53, 8, 23,251,217,169, 69, 42, 19, 44,133,214, 9,101, -229,115, 89,109,241,163, 20,246,152, 34, 62, 6, 84,200, 36,173,196, 97, 16,252,190,176,183,155, 53,219,245,154,211,179, 51, 22, -167, 39,212,109, 75,213,212, 88,107, 73, 86,161, 83,190,150,238,246, 97, 20,229, 95, 77,167,174,174,137, 27, 37, 5, 47,199,196, -124,185, 40,174, 85, 41, 80,139,229, 9,166,170, 8, 41,210, 90, 1, 29,150,101, 27,214, 41,114,244, 98, 27, 13,153,202,166,178, -119,135,177, 11,228,236,169,172,176,223, 67, 8, 12, 99,160, 89, 84,164,164, 36,252, 68, 41,218, 90, 19,188,231,228,100,201, 48, -140,244,155, 29,126,204, 44,231, 21, 77, 83,177, 89,175, 49, 70, 98, 94,189, 15,220, 60,155, 19,162, 39,164, 76, 23, 32,154,138, - 15,158,236,120,119, 21, 88, 97,240,206, 50,120, 47,135,116, 86,228,168, 65, 37,158,172, 70,170, 60,114, 98, 20,103,198,114,107, -209,176,136,129,237,102,224,254,131,129,110,117,143,221, 75,115, 94,254,216, 41,179,121, 35,171,155,217, 9, 89,201, 10, 50,122, - 47,164, 56, 91, 19,162,208,233,134, 49, 80, 13, 94,208,192,101,215,168,116, 33,207, 21,212,106, 74,161,184, 58,196,205,147, 83, - 32, 71, 79,240,158,177,219,209,109, 54,108,215, 43,252,208,177, 27, 3,253, 24, 65, 59,172, 54,212, 78, 72,118, 40, 67, 91, 34, - 92,171,186,150,177,110, 33,225,197,152,232,250, 81,114,238, 17,243,198, 56,200,215, 42, 69, 68, 4,125, 74, 75,103, 58,155, 53, - 60,206,147, 37, 76,147,114,194,143,158,186,149,201,161,177, 51, 66, 12,251,120,222,169, 33,243,227, 72, 61, 63, 67,171,109,201, - 85, 72,104, 43, 77,130,209,169,156, 81, 98,241, 99, 15, 10, 99, 31, 98,100, 38, 18,168, 81, 7,135,140, 86,135,231,250, 40,134, -213, 20,199,140, 51,186,184, 85, 74, 61,209, 26, 93, 46,224, 49, 40,188,201,184,160,240, 90,147,146, 41,187,127,181, 7, 64, 77, -240,158,252,244,138,118, 15, 85,219,231, 61,146,137,135, 24,220,114, 73, 53, 71,113,201,148,169, 69,204, 90,242, 42,198,196,208, -119,108,214, 91, 86,151, 87,204, 79,102,156,172, 87,156,220,184,201,252,228,132,122,177,192,182, 51,116, 51, 71, 85, 50, 49, 82, - 90,139,162,223,105,148,145,181,118, 46,171, 69, 7,204,180, 22, 48,150,214, 36,165,201,221, 64,240,146,136,232, 16,118,192, 52, -122, 80,218, 92, 59,143, 82, 78,251,117,108,136, 17, 43, 86,170,194,244, 78, 1,163, 20, 33, 78,254,116,181,127,177,153, 68,111, -197, 2,101,237, 97, 60,152, 83, 6,123,216,139, 84,214,236, 81,139,198,136,152, 38,149,157,101,192,163,178, 18,149, 95, 78,251, -176,123, 10,241, 40, 77, 35, 78,117,224, 34, 79, 22,137, 92,198,241, 83, 17,152, 20,216,249,168, 72, 40,173,121,249,149, 87, 89, -117,153, 59, 55,111,241,157,183,223,166,210,154,155,103, 11, 78,230, 45, 58,103,162,181,180, 85,203, 39,158, 59, 97,110,192,135, -154,104, 18,201,104,148,142,104,149,120,178, 94,241,220,173, 79, 48,170,115, 78,195,200,102,125,201,226,249,143,177,238, 54, 60, -184,123,151,136,230,225,253,183,120,242,248, 33, 74, 69, 82, 28, 81,203, 5, 99, 31, 8,131, 40, 83,157,155, 49,155,223,224,107, -223,186, 32,180, 3,191,230, 43,127, 59, 63,250,123, 53,127,246,199,255, 20,143, 46, 55,252,208, 87,127, 35,111,188,241, 58, 39, - 77, 75, 55, 12,242,115, 80, 50,218,228,120,191,140, 8,104,140, 54, 83, 43, 76,219,182,242, 3,142,162, 2,143,222,179,219,110, - 37, 89, 41, 38,170,170, 69,105, 45,104,205,130,102, 77, 19,103, 93, 27, 30, 93,174,121,169, 94,178,126,252, 0,227, 47, 33,121, - 34, 90,226, 93, 39, 95,161,202,207, 80,255,247, 55, 68, 33,248,203,255, 84,249,153, 77,137, 0,123,198, 66,222,107, 36,116,193, - 73, 50,133, 91,112, 0,237, 76,159,227,136, 77,124,164,177,201, 36, 21, 5,207, 88,222,108,117,221,112,114,178,228,230,205,155, -220,188,117,147,211,147,211,253,168, 78, 17,105,230,115,176,154,144, 50, 23, 23, 87,120,239, 81,218,148, 55,141,197,153, 4,166, - 20, 75,173, 65, 89,116, 6,163,227,225, 98,165,167,105, 84,137,200, 60, 58, 24,166,142, 94, 14, 49, 17,167,144, 82, 25,249, 26, - 84, 93, 19,140, 65,133, 32,254,224, 40, 23,103,149, 19, 49,143,232,152, 72, 41, 48,248,145,190,219,177, 93,175, 56, 89,223, 96, -113,114,202,124,185,164,105,103,184,198, 21,236, 35, 37,240,226, 0,227, 56,214,183, 28,116,117,106, 15,243,120,122,202,242,140, -144,113,122,170,178,218,175,206,180, 41,207,150, 42, 62,112, 20, 85,219, 82, 55, 14,109, 34,206, 24, 66, 14, 36,149, 4, 32,211, -192,160, 35,138,150,148,118,204, 27, 69, 74, 3, 90,105,124, 31, 80,133,246, 22,124,207,208, 7,152, 80,170, 49, 17,119, 3,179, -179, 37,105, 12,212,117,205,182,219,145, 48,172, 59,207,162,133,166, 81,108,118,107,162, 86,248,100, 25,187,145, 23,111,182,100, - 21,217, 38,207,118, 23, 24,187,154,116,186,228,175, 62,250,128,157, 50, 36,101, 25,125, 46, 0, 35,241,120, 7,162,224,108,147, - 70,101,195, 85,138,168, 69,195,106, 24, 56, 67,113, 54, 59,161, 31,118,156,119,129,225,238,134, 68,226, 99,119,102,204,150, 51, -236, 92, 81,185,150,170,174,160,106, 75,254,132,102,244, 1, 55,120, 6, 55,208, 86,174, 0,137,202,202, 42,235,242,156, 9,164, - 75, 30,165, 68, 86,137,196,193,169,145,188, 64,138, 66,148, 20, 67,159, 52, 41,155, 61,119,190,109,103,216,166, 69,219,138, 69, -187,160, 54, 14,109, 20,195,232, 89,143, 43,134,173, 39,238, 32,134,200,214,175, 9,106, 68,133,140,209, 21,219,177,103, 86,207, -168, 75, 76,234, 48,116, 36,239, 25,131,228,168,251, 49,145, 91, 45,151,227, 90,118,232,153,130,138, 54, 10,107, 91, 84, 10, 24, -109,136, 49, 97,210,200,216,107,154, 51, 11, 5, 7,236,138,182,100, 54,107,168,117,222,231, 61, 29, 50, 33,166, 73,173,218, 71, - 50,235,169,193, 43,150, 87,233,216,167,115, 96, 58,229,228,204,217, 95,170,201,232, 28,209, 73,166,115,135, 96, 41,185,196,104, - 45,142, 64, 56, 38,147, 23,118, 74,217,169, 79, 69,111, 58,211,242, 4,204,201,106,175,166, 87, 40, 82,217,160,161, 20,217, 8, - 13,210, 29, 93, 60, 2, 98, 43, 83, 17, 48, 35,145,204, 48, 4, 86,187,200,197,118, 96,185,241,220,218, 68,110,220,242, 44,207, -122, 73,128,155,247,152,102, 64,213, 51,178,157,161,116, 45,211, 28,196,201,161,141,134, 90, 2,118, 48, 21,202,181,152,118,129, - 91,108, 25,250,142,177, 31,165,176, 39, 17, 98, 82, 44,191,135, 11, 72,129,246, 76, 49,215,249, 40,122,245,120,108, 62,117,134, - 57,202,156, 94,171, 99,213,224, 20,161, 46, 89,191, 89,171, 3,198,245, 72,153,174,148,168, 49,109, 73,221,145,131,104,234,184, -133,229,173,114, 46, 89,184, 19,204, 38,239,133, 98, 2, 54, 17, 48, 1, 89, 0, 41, 82,255,211,135, 28,174, 7, 36, 96, 46,254, -226,151, 62,246, 50, 95,123,253, 45,182,155, 21, 97,232, 89, 46,102, 60,255,252,115,178,251, 81, 80, 53, 45,139, 89,203,114,214, - 18,186, 53, 94, 69,118,157,103,209,182,156, 45, 90,102,149,103,237, 35, 23,157,167,215, 53,151, 81,177,125,114,129, 25, 34,155, -221,142,245,110,135, 54,134,147,147, 5, 99,236, 80, 57, 9, 82,246,236,148, 11,127, 69,138,129,147,211, 27,204,231, 75,252,144, -248,230,183,222,230,235,223,122,135,183,238, 62,224, 31,250,159,254, 46,126,207,239,249,199,248, 47,254,179, 63,194, 95,248,137, - 63,197,247,127,249,215,161, 93,195, 55, 94,255,101, 86,155,181,144,143, 14,219, 7,241,115,154, 18,107, 88,194, 12, 8, 1,148, - 98,187,221, 80, 91,139,247, 35, 77, 93,149,220,231, 26,107,221,254,245,152,118,114,125,223,147,209,140,163, 8, 46, 98, 82,120, -239,121,225,198,146,135,239,189, 95, 70, 77,154,156,197, 90, 51, 5, 35,236,237, 86,211,115,241, 17,241, 62, 31,218,137, 31, 95, - 4,246,184,198, 67,142, 77,254,176, 63,159,159, 30, 49,231, 67,214, 64,150, 8,211,202, 57,150,203, 5,183,110,223,226,214,237, -219, 18, 20,226, 36,123, 93,229, 64, 61,246,146, 47, 80,128, 50, 93, 55, 20,165,124,192,165,233, 64, 40, 76,102,109,200,218,138, -127, 87,167,103,216,213,170,136, 6,143, 93, 0,215,148,253,147, 34, 57,165,107,186,136,105,100, 40, 35, 82,179, 23,224, 9,104, - 35,226,125,143,207, 81,130, 38,118, 27,118,155, 53,179,229,146,197,242,132,147,211, 51,102,203, 19,154,217, 28, 87, 89,140, 21, -156,164,177,178,115, 60,222,249,127,104,110,146,250,149, 44, 73,142,131, 54,212,145,241, 96,207,241,147, 14,197, 90,102,179,134, - 60,136, 29,106,175, 30,182,153, 33, 38,114,200,104,101, 56, 89, 24, 70, 31, 72, 89,179,235, 19,139, 90,227,195, 64,163, 28, 41, - 5,156,149,216, 96,157,179,232, 90, 42,135, 79, 50, 61, 50,218,240,228,209, 10,109,160,105, 28,227, 40, 29,110,215, 5,148,173, -193, 36,170,182,101,183,221,176, 38, 50,218, 10,218,138,111,127,240, 16,143, 92, 46,198,144,168, 49, 40,149, 24, 21, 4, 45,126, -115, 21,193,230,204, 92,139,175,250,211,191,238,123,121,255,157,119,184,247,214,187, 68,155,104,201,120, 5,187, 81,241,222,251, - 59,140, 31,185,121,219,211, 38, 69,110, 37, 82,213, 90,183,119,163,132, 16, 25,134, 17,103, 45, 67,235, 69, 0, 25, 19, 46, 79, - 26, 16,233,144,149, 78,232, 92, 4,126,229,208, 77, 49,146, 66, 20,198,187, 22, 65,155,117, 13,224,208, 78, 49, 63,169,168, 93, -195,169,157, 17, 43, 67,111, 96,213,111,232, 55, 91, 46,159, 92,176, 90,173,232, 66, 15,212,216,188, 64,105, 67, 84, 61,218, 4, -226, 24,105, 76, 77,183, 91,113,165, 53,205,108,198, 98,113,194, 24, 2,219, 97, 96,232, 3,193, 11,120, 69,246,175, 81,224, 56, - 89,206,235, 24, 2,202,137, 69, 45, 5,143,115,146,145, 96, 84,161, 7,106, 37, 57,222,229,105,177,214,130, 3,171,210,222,159, - 30,179,218,139,156,211,209, 26, 77,115,189, 59,159,108,169,162,150, 87, 71,116,200,184, 95,171,198,114,113,182, 9, 82,113,179, - 40, 83,166,117, 70, 48,194, 57,150, 80,168,152, 80,113, 66, 77, 79,168,109,217, 63, 79,157,251,164,217,202,165, 94,229,105,186, -144,179,104, 7,204, 65, 59,147,141,172,139, 53,130,242, 86, 5,148,149,146, 34,229,178, 90, 49,134,164, 12, 67,140,116,222, 51, -248, 53,195, 32, 32,164, 97, 56,225,116,244,180,227, 64, 53,247,216,214,163,235,128,114, 51,180,107, 5, 55,173, 53,218,213, 36, - 99,200, 70,166, 64,214,141,152,122,129,155,117,132,177, 39,140, 30, 63,122,162, 47, 19,110,226,225,236,217,159, 71,165,185,152, -158,179,252, 17,209,171,251,131, 43,179, 15, 82,121, 90, 69,168,181, 42,129, 21,215,247,220, 41,149, 31,238,180, 35, 85, 28,141, - 87, 36,221, 76,165, 52, 1, 19,247,168,193,116,244, 98, 79, 36,185,201,103,120,252,131,201, 41, 31, 21,119,174,137, 35,166,180, -179,148, 18,247,239,221,163,105, 22, 52,117,197, 11,207, 63,135, 41,171, 5,149, 51, 85, 85,115,114,178,192,170,140,223, 73, 39, -101,180, 56, 0,110, 46,231,220, 92,244,208, 43, 30, 93,156,147,236,140, 43, 31,153,205, 91,114,132, 85,239,247,211,132,172,149, - 76,171,147, 98, 59,140,220,187,255, 8,223, 13,188,242,242, 43,204, 79,207,176,166,162,117, 13,177,223, 17,147,231,155,127,229, -231,248,143, 47, 30,243,233,207,127,142,223,245,187,127, 23,191,241,111,253, 13,252,203,255,210,255,134, 47,127,225,211,124,241, -203,223,195,207,253,220,207,241,205, 55,222,160,235,251,210,217, 38,148,145, 55,129,143,145,148,227,254,114, 53,120, 79, 63,244, - 88, 51, 35,248, 17,133,162,105, 26,102,243, 57, 73, 73,208,136, 42,158,237,132,198, 71, 97, 72,247,195, 64, 46,225, 36, 67,183, - 35, 47, 43,194,216, 9,176,225, 87,185,175,253,213,236,117,243,190,170, 31, 9, 31,243, 95,123,182, 60, 37,183,181,179, 25,139, -147, 19,150, 55,111, 80,207, 90,180,171,229,176,200, 17, 59, 86,228,156,241,253, 64, 28, 70,174, 46, 87,248, 84,102, 11, 73,198, -226,186,140,177,116, 73,119,155,118,127,199,197,153, 3,180,247,187,106, 4,142,187,247,227, 66, 43, 54, 56,137,180,220, 23,245, -201, 78, 7,228, 28, 72, 62, 49, 70, 79,240, 61,187,221,154,245,213, 37,235,171, 11, 78, 78,110,176, 56, 57, 99,182, 88,148,136, -217,154,228,100, 55,167,203,190, 93,235,167, 51, 22,242,209,175,211,119,121, 5,255, 26,145,175,197,174, 84,185, 10, 31,252,126, -106, 55, 36,136, 30,156, 53, 16, 35,173,181,108,122,143,211,137,121, 91, 49,164,145, 33,106,176,146,215, 93,149, 78, 93,108,111, - 25, 31, 19,149, 51, 44,230, 51, 82,140,180,173,208, 15,119,219,142,190, 31,184,117, 86,239,215, 23, 40, 73,179, 90,239, 6,110, - 61,127,194,147,245, 14,188, 34,181,115, 46, 66,226, 98,117,197, 16, 19,119,102,138, 71, 93,166, 82,153, 23, 80,156,213,115,222, -246, 91, 46,117, 70,231, 26,157, 60, 21,129, 19, 21, 24, 52,252,244, 95,248, 25, 82,202, 60,103, 52, 39,181, 98,211,121, 26,103, - 33,100,198, 49,241,240,145, 39,171, 29, 39,165,161, 80,204,246,190,102,107,229,184,140, 49, 50,122, 89, 41,140, 62, 18, 82,150, -236, 70, 99,209,206,237,121, 9, 74, 91, 1,106,133, 8,190,120,141,147, 76, 19,180,113,212,205,140,197, 9, 66,122, 43,195, 49, -173, 45,235,208,179,186,127,193,253,187,239,115,241,232, 17,195, 48,146,219, 22,123,227, 6,243,122,193,188,189, 65,174, 79, 36, -112, 36,142, 48,118, 50,178,183,150,238,201, 3, 54,126,203,102,220,242,228,241, 21,214,212,232,236, 72, 3,248,161,120,157, 19, -248,209,179,108, 91,252,174, 39, 37, 7, 74,149, 56, 89, 71, 12,158,153,209,164,224,101, 95,157, 68,244,105,149,134, 36, 35, 94, - 89,233, 29,240,181,153,169, 75, 62,226,149, 76,194, 52,109,175, 37, 2,230,156,247, 22, 62,209,204,168,131, 94,170, 20,226, 24, - 19, 33, 39,188,162,164,221,129,201, 69,225, 95,138,170,193,144,178,196, 39,167,156, 24, 66,192,143,177,184,169, 38, 71, 75,177, - 75,239, 93, 93,229,215, 19,119, 62,139, 53,179,114,150, 38, 59, 26,101, 81, 41,151,136, 97, 83,104,129, 19,233,178,184,234,203, -223,143,182,226,166, 65,166,130,219,126, 68, 93,110, 37, 79, 35, 68, 78,188,167, 29, 3,205, 24,168,102, 1,219, 72, 70,132,113, - 53,202, 58,201, 22,208,166,216,225, 28, 90, 7,156,245,216,102, 70, 10, 35, 49, 68,252, 56,136, 78,194,143, 18, 62,149,226,181, -115, 40, 37, 41,248,228,131,115,199, 62, 21,194,120,237,237, 46, 69,247,250, 49,176,247, 17, 38, 80, 33,161, 84, 68, 27,201,230, - 85, 33,236,199, 21,250, 40,131,125,130,212,164, 36,220,244, 24, 34, 62,200, 27, 99,244,161, 28,164,229, 34,176, 39,255,112, 77, -141,156,179,122, 74,237,206,209,110,253,240, 85,159,221,184,197,207,255,252, 47,160,141,230,254,195, 15,152,205,106,218,166, 46, -201,110, 98,223, 73,133, 3,157,115, 44,168,214,200,108,230, 80,118,198, 48, 70, 94,184,117,202,227,111, 63, 68,155,154, 77, 31, -113,243, 51,230, 55,158, 35,165, 72, 55, 6,250,221, 21,214,104,182,235,149,216, 84,202, 8,233,209,249, 99, 94,121,238, 37,110, -223, 60,163,153, 47,177,182,161,173, 90,154,153, 37,197,192,122,181, 99,251,228, 17, 63,251, 19,119,185,255,222,183,249,125,255, -250,191,204,191,245,111,253,126,254,217,127,250,159,228,214,173, 91,252, 61,191,229,183,240,155,126,211,111,226,199,127,252,199, -121,243,205, 55,247, 74,200, 49,196,235, 86, 49, 5, 87,155, 21, 85,137,243,155, 53, 45,198, 57,225, 4, 27, 91, 4,131, 25, 99, - 69,212,215,143,158,156,161,235,123,114, 86, 2,120,208,134, 28, 61, 15, 31,188, 43,196,168, 41, 16,225,187, 22,132,191,177,189, -250,245, 68, 49,117,212,169, 31,235, 40,212,119,217, 11,151, 34,155, 51,218, 24,234, 89, 67,179,156,227,218, 86, 66, 23,148, 65, -101,129,130, 80,138,122,246, 1,167, 12,157, 31,229, 98, 84,172, 84, 94,121, 40, 81,171,101,109,118, 36,136,203, 79, 77, 23, 14, -194,191,227,103,242,248, 57,124, 90,104,167,202,254, 95, 46, 14, 98,137,218,191, 9,247,191,239,112, 0,166, 16,137,190,199,119, - 35,221,106,195,250,201, 21,179,197,130,249,201,137, 76,125, 78, 79,139, 13, 78,114,218,173,227, 40,179,185,176,116,212, 36,110, -213, 60,171,253,253,149, 43, 29,149,130,152,161,110,103, 92, 93, 93,225,172, 67,105,143, 70, 44, 84, 85,173, 9, 62,208,182,142, -203,208,211,154,204,114, 86,243,120,227, 89,247,137,100, 0,167, 80, 90,144,190, 26, 75, 24, 70, 92, 93,179, 88, 44, 8,222, 83, -233, 74, 56, 16, 93,207,229,213,150,229,204, 48,111, 27,182,235, 45,203,121,205,229, 85, 15, 70,225,172, 69,101,195,218, 39,220, -252,132,135,187,129,123,235, 14,231, 52, 55,158,107,184,217, 52,188,247,238, 37,131, 79,204, 73,188, 52, 38,186, 12,107,149, 73, - 42, 16,108, 38, 69, 56, 33, 81,107,135, 31, 51,157, 50,204,106,197,103, 62,253, 2,231,151,151,188,255,254, 90,136,117,217,176, -233, 35,230,201,136,182, 91, 42,163, 49,229,113,109,148,172, 12,141, 58, 8, 44, 67, 82,132,172, 73,130,252, 2, 91,161, 93, 37, -137, 92, 58, 73,222,183, 18, 55, 81, 28, 61,201,199,178,221, 40,192,148, 8,218, 56,134, 81, 44,169,227,224,185,188,186,228,253, -251,239,242,240,209, 67, 84,138, 52,202, 49,111, 78, 89,204,159,103, 55, 58,250,177,198, 53, 75,186, 92, 51,238, 50,173,170,201, -235,192, 75, 47, 62,135,214,153, 56,247, 52,106,137,242,107,226,213, 57,221,122,141, 74,154, 52,102, 86, 87, 91, 66,144,177,125, - 28, 3,237, 89, 67, 30,227,158,205,157,179,160,128,115, 12, 40,149, 48,101, 7,110,140,197,106, 43,228, 52, 13,202, 30, 24,234, - 50, 17,151, 14, 59, 78,163,224, 82, 40,100,125,165,203,132,167,236,177,245,225,253, 65,209, 27, 8,184,167, 4,149,164, 36,110, -148, 16,133,146, 86,186,120,227,172,228,108, 56,183,167, 84,230,172, 8, 81, 52, 29,253,152,216,237, 70,186, 97,144,100,179, 16, - 36,252,164,124,222,169, 67, 79, 81,138,125, 46,161, 68, 6, 69,219, 52, 44,102, 50, 14,175,178, 43,121,232, 69, 35,102,109, 97, - 42, 36,116, 10,160, 98, 1, 91,153,194,194,144, 52, 62,107, 12,202, 72, 8,217,118, 27,136,113,197, 56,142, 44,251,129,249, 48, - 72,215, 62,235,209, 51,143,173, 91,140,107,196,223,174, 43,178,178, 96,181, 76,192, 77,144,169,172,243,178,122, 16,152, 12,209, -143,164, 48, 8,133, 49, 6, 41,238, 69, 47,161, 52,168,164, 32,137, 51,197, 30,119,230,199,163,246,143,220,199,229,137,252, 19, - 80, 37, 86,114,242,180,135, 32,201, 63,206, 89,162,181, 4, 31,177, 78,132, 23,178,183, 63, 40, 21,253, 24, 15,242,125,142,247, -226,234, 90,222,250, 94,233,151,143, 40, 96,234,169,168,215,163, 3,172,235, 6,222,124,235,109, 82, 78, 60,122,244,128, 91,183, -207, 4, 84, 80,254,172,210,162,214, 84,198,162,178,194, 84, 51,130,170, 88, 13,154,176, 81, 52, 77, 77, 82,137,155, 39,115,238, - 95,108,152,235, 26,223,175,185,122,108,216,245, 35, 57,244,168,148, 8,253, 8, 68, 14, 36,250,140,211,154, 69,237, 80,113,160, -223, 38,124,184, 98,104,102,216,249,140,170,157,115,187,158,177,189,188,164, 34, 48, 94, 62,226,143,254,161, 63,200, 63,251,191, -248,231,248,145, 31,249, 17,254,195,255,240, 63,224, 63,255,207,255,115,190,252,165, 47,241,187,254,209,223,197,227, 71,143,248, -201,159,252, 73,190,241,198, 27,244,125, 15, 74, 4, 42,192,222,199, 62,159, 47, 72, 41, 51,134,136,241, 65,246,206,214, 81, 87, - 45,193, 11,215, 89,107,232,118, 61,125, 8,152,170,193, 26, 71, 72, 35,206, 24, 20, 35,195,176, 66,169, 80,212,158,166,220,214, -210, 65,113,174,142, 46, 82, 71,201, 94, 31,230, 67, 63,216, 73,174, 63, 43,211, 14, 56, 95,139,104, 60,248,181, 14,201,123,135, - 34,249,116,180,232, 52, 6,223,199,152, 66, 73,113,146,248, 75,237,138,141,132, 44,135,175, 15,212,139,158, 56,140, 0, 84,190, -103,244,137, 49,100,250, 81, 18,239,134,126,160,202,194,101,215,197,130, 50,125,191,215, 32, 52, 71,251,170, 61, 50, 55,198,253, -200,235, 35,173,127, 41, 99,157,222,243,193,167,116,183,253,231, 79,186, 76,167, 18, 49,196,253, 63,253,232, 25,187,142,245,234, -130,234, 73,195,226,228,140,197,217, 77, 41,238,203, 19,102,139, 57,174,113, 84,149,236, 90,173,211,104, 43,168, 81,101, 52, 89, -165, 67, 23,116,228, 92, 57, 22,219,165,148,159, 18,222,237, 61, 70,251, 29,103, 76, 71,121, 13,197, 50, 67, 22,170,155, 15, 1, -104, 72, 33, 83,181, 26,171, 13, 49, 25, 66,206, 12, 62,113,179,109,232,199, 43,102,243,134,174,135, 28, 21,203,153,116, 32, 57, - 68, 84,237,128,204,110,187, 67,161, 56, 93,182,108,183, 27, 50,154,222,203,148,207,123, 56,187, 49,231,242,209,154,230,206, 41, -111,172, 59,222, 63,223,241,210,201, 28,157, 71,110,220, 60,195,205,231,220,190,239,249, 78, 90,115, 47, 69,110,229,145, 87,219, - 26,223,117,244,217, 19, 48,204,149,226, 76,195, 16,162, 48, 6,178,231,181,215, 94,225,147,159,125,133, 87,195, 72, 91,125,155, -247,222,126, 76,165,106, 82, 28,232,134,200,176, 25,217, 85,235,162,136, 54, 88, 83, 9, 34,181,232, 15,148,113,132,108, 64, 59, -208, 21,198,181,216,170,193,184, 10, 91, 57,140,137,228, 33,136, 16,177,144, 46,115, 20, 1, 81, 78,153, 48,122,134,110, 96,189, -217,176, 90,173, 88,173,175,120,242,232, 49,247,238,221, 37,196, 30,229, 12, 89, 85,108, 83,205,147,171,204,213,147,199,188,115, -190,225,114, 59,176, 13,145, 45,137,117,231,105,173,225,249,217,156,155,139,150,197,188,225, 51,159,124,133,231, 78, 91, 22,218, - 50,179, 75, 66,216, 49,140, 59,186,174,151, 20,199, 40,232,111,171, 12,109, 85,211,179,195, 85, 21, 33, 21, 75,103, 18,244,111, -244, 35,186, 88,230,166,240,166, 76, 70, 89,249, 25,251,148,241, 26, 97,241, 39,137, 81, 22, 48, 78,249,125,170,172, 81, 11, 98, - 72, 29,233, 84, 4, 42, 35, 35,111,117, 52, 93,157,124,216, 99, 8, 37,143, 65,114,211,181,145,149, 91,211,212, 52, 89, 83, 99, -200,133, 7,143,130, 68,148,236,244,172,217, 13,137,221,110,160, 31, 6,250, 16, 8, 83, 65,223,219,190,138,149,186,236,217,157, -145, 73,102,229,236, 53,162,103, 85, 85,184,166, 46, 48,164,140,114, 9,180,223, 35,204,125,204,104,155,209, 81, 86,201,186, 92, - 58,140, 53, 40, 45,169,193,221,118, 20, 70,197, 48,226,135,129,166,239,169, 66,160,106, 6,108, 61, 67, 59,143,170,102,100, 91, -147, 85, 89,241, 24, 39, 23,243,108, 73, 41,162,117, 36,235,145,108, 44, 42,200,170, 48,143, 61,113, 28,136, 57, 20,225,121, 32, - 7,225, 56, 20,161,220,245, 78,253,248,160,253,107, 89, 97, 38, 5,102, 8, 1,239, 61, 85,101,241, 94, 24,233,163,181,184,146, -161,124, 8, 34, 18,123, 74,138,169, 92, 2, 34, 33,197, 50,238, 83,135,126,237, 41, 98,220,164,198, 86,170,196, 16, 78,234,229, -233,215, 71, 92,162,110, 24, 75,214,117,162,170, 28,109,219,162,114,198,106, 73, 29, 83, 70,203, 15, 58, 43,208, 53,217,106, 76, -115,155,155, 55,111,179,139,145, 55, 63,248,128,139,203, 75,249,124,202,210,184,134,231,207,110,179, 75, 22, 63, 6,102, 39, 39, -108,214,163, 28, 78, 71,175, 71,107, 53, 39,117,197,139,183, 79,217,245, 27, 54,195,200,166,243,116,157,199,163,184,113,227, 22, -183,111,156,113,231,198, 25, 90, 53, 52,181,227,234,193, 3,254,211,255,228, 63,225, 71,127,228, 71,248, 47,255,248, 31,167,239, -122,222,250,214,155,188,247,206,187,124,254,243,159,231, 71,127,244, 71,121,253,245, 55,248,147, 63,246, 99,124,251,157,239,112, -180,145, 38,197,200,106,181, 66,151,177, 96,101, 29,221,208, 11,155, 60, 69,118,187, 29, 85, 85,203,110, 41,139, 53,206, 90,135, -143,114, 33,170,172,197,230,129, 20,123,108, 46, 86,182,130,101,253, 27, 29,191,127, 24, 67,224,233, 2,125,205,249,157,143,255, -169,190, 75, 19,153, 15, 11,249,148, 80, 41,147,163, 92, 16,166, 0, 9,165, 53,202, 85,232,166,197,206, 22, 84,222,131,214, 84, -190, 21, 86,188,143,116,131,103,179, 27,232,123,143,239, 18, 49,120, 76, 93,149,219,255,244, 20,166,189,240, 39, 39,245,140, 64, -238,250, 56,253, 89, 92,242,244, 21, 79,120,225,125,104,210,228, 95, 85,194, 26,139, 65,216,243, 70,203, 24,214, 16, 11,137, 45, -224, 7,216,110,215,172,214, 87, 52,231, 79, 88,158,156,113,114,122,131,211,179, 51,218,147, 37,139,197, 66, 2, 55, 42,131,118, - 66, 54,211,133,143, 45,127, 95,122,230,162,117, 72, 80, 84, 71, 26,152,195, 26, 75, 23,173, 93, 74,224,251,145,126, 16,232,137, - 37, 99,172,145, 53,134, 14,196,172,240, 94,172,102,179, 89,133, 31,165, 35,210, 40, 17, 82,229,120,184,140,165,204,205,179,133, -168,229,179,168,135,155,155, 53,171,213,154,161, 79,220,186,189, 20,203,155,145, 96,164,109, 63,224, 19, 44, 79, 22,172,183, 91, -102,139, 57, 79,186,192, 59, 79,214,212,214,178,219,246,156, 46, 27,118, 99,224,172, 85,124,230,249,231,120,231,189, 13, 23, 38, -243,110, 74,188, 28, 2,175, 25, 67,149, 44,137,138,160, 51,219, 60,114, 63,121, 46,115,228,244,198,156,239,253,254,239,225,108, -233, 72,227,192,175,253, 82,205,246,201, 95,102,117, 53,150,187,152, 98,236, 37, 87, 32,132,145, 24, 71, 82,240,164, 88,145,167, -214, 93, 75, 10, 29,198,161, 77,133,182, 21,166, 48, 19, 92, 93,163,141, 23, 57,233, 96,241,122, 26,224,107,177,136,141,158, 56, -140,116,219, 45, 87,151,151, 92, 92, 92,240,248,241, 67, 86,151,231, 98,199,139, 53,219, 46,115,239,188,231,114, 28,185,223, 95, -242, 15,254, 51,191,151, 63,250,135,254, 35,186, 16, 81, 65,168,159, 89,193, 42, 6,214,187, 13,183, 98,135,122, 48,242,203,111, -190,195,243, 39, 51, 94,125,225, 22, 47,223,156,115, 82,213,228,228, 57,127,114, 65,223,201,243,168,178,198, 25, 57,159,115, 74, - 50,102,182, 72,115,160, 53, 57, 13, 4,223,163,103, 11, 81,149,187,226,129,119,142, 49, 37,162, 82,172,251,129, 33, 71, 9, 98, -205, 2,133,153, 40,103,249,154, 79,253,144,214,104, 38, 94,126, 89, 33, 26,163, 75, 14,131,224,200,199,224,241, 62,210, 23, 23, -143, 15, 18,108,101,140,166,105,148, 20, 54,155, 36,222, 28, 45,244, 60, 20,218,102,148, 13, 68, 60, 62,101,186, 49,176,238, 6, - 58, 47,228,181,156, 15,141,225, 36,232,155,118,255,141,181,180, 77,216, 83, 35,235,186, 97, 54,107,152,207, 91,234, 89,139,173, - 44, 33,101,172,143,194, 32, 16,244, 35, 49, 33,252,130, 50,194,183,197,154,102,157,161,178, 10, 91, 98,137, 99,200,108, 55, 35, -227,152,104,135, 72, 51, 38,102,243,145,122, 54, 98,155, 1, 21, 70,116,189, 64,185, 90, 10,122, 89, 71,100,244, 62,216, 76, 68, -232,186, 36, 62, 76, 81,216,153, 28,124, 33,205,245,228, 16,101, 2, 19, 2,230,214,114,246,175, 31,118,229, 92,203, 42,207, 74, -237,111,238,146,135,171,246, 64,144, 3,225,109, 26,149,199,253, 8, 69, 4, 74,197, 48, 31, 11, 49,174,252,133, 33,148, 75, 64, - 16,224,199, 30, 13,155,143,243,220, 14,249,184,123,112, 96,137,221, 99,207, 23, 47, 29,144,210,251, 28, 89, 83,178,138, 49,114, -187,115,206,238, 25,185,166, 16,202, 82,201, 58,142,202,160,116, 67, 51,187, 65,204, 53, 15,207,183,220,125,116,129, 87, 21,203, - 27, 47,130, 59, 1,179,224,244,236,121,154,246,132,171,237, 14, 91, 57,214,235,115,172,133, 56,121, 65,203,193,120,214, 84,204, - 13,204,156,102,117,117,206,229,250,146,243,203, 11,250,110, 75,238,119,248,237,138,251, 15,222, 39, 19, 89,158,158,178, 88,158, -114,235,230,115, 60,122,124,206,157, 23,238,176, 92, 44,249,249,191,252,151, 81, 74, 81,213, 53,247,238,223,227,245,111,190,206, -103, 63,253, 25,126,219,111,253,251,185,115,251, 54,231, 79,158,176, 94,175,247,215,152, 73,109,150, 82,162,170,228, 86, 57,107, - 91,172,177,184,202, 73,178,145,147,241,145, 46,224,136,126, 28,247, 66, 13,194, 6,252, 5, 86, 5, 84,158, 84,153, 9,133, 40, - 98,213, 33,142,239,153,145,244, 49, 39,224, 90,228,226, 81, 75,255, 97, 86,177, 67,225, 87,197, 99, 89,118, 91,199,140,232,163, - 63,167,143, 50,206, 81, 96, 20,204,234,134, 91,103,103,220,186,117,139,118, 62, 71, 91, 39, 74, 82,142, 98, 97, 11,177, 80, 84, -166, 66,138,170,234, 26, 87,201,135,209,134, 28,101, 31, 55,198, 40,163,249,148,158, 25,177,167,116, 88, 5, 77, 29,250,212,209, -164,167,149,240,240,148,215, 93,145,149,190,254,253, 79,136, 95,107, 49,206, 96,156,198, 90,208, 58,210,180,154,147,147, 10,133, - 4,243,132,152,196,254, 52, 14,116,219, 53,221,118, 67,183, 89,211,119, 91,250,126, 32,120,177, 71,165, 16,137, 49, 31,222,115, -123,144,211,177,214,133,167, 46, 36,211,247,199,181,223,171, 82, 38, 36,136, 81, 49,172, 47,249,169,255,230,143,179,189,255, 62, -202, 7, 66,200,248,148,152, 47,140,236, 37,149,101,232, 3,183, 78, 27, 44, 9,101, 29, 23, 23, 61,139,121,141, 82,162,240,175, -234, 10,163, 27,186, 62, 16,131, 47,120,223,136,211,134,190, 31, 57, 57, 89,176,235, 6,148,242, 40,163, 72, 89,179,222,142,184, -170,194, 56, 45,158,107,219,240,173,199, 43, 60, 48, 87, 6,171, 20,231, 67,143,173, 45,117,202,156,157,148, 53, 83,159,232,124, -192,231, 76, 54,134, 78,193,144, 35,171, 20,184,159, 19, 79, 72,184,218,242,119,125,245,251,248,129,207,127, 22, 21, 18, 70,107, - 28, 25, 66,224,205,187,143, 48, 90, 81, 27, 88, 84, 10, 87,101,154,214, 81, 85,117, 17,181, 57,156,171,229,223,171, 6, 91,207, -153, 47,150,204, 78,150,204, 79,150,212,243,150,122,214, 96,234, 10, 76, 73, 30,143, 1,252, 8,222, 75, 39, 21, 2,190, 27, 24, -182, 27,214,107,249,216,172, 87,108,174, 46, 25,187, 13, 67, 31,120,180,169,249,250,253,129,175,175, 18,119,189,225, 73, 82,188, -243,232,156, 71, 23, 23,164,156,113, 25,110,161, 88,238, 89, 11,137,207, 63,127,198,103,150,115,218, 16, 25,188,231,151, 31, 92, -240,164, 27, 72,202, 48,115, 13,219,135, 87,116, 93,194, 90,205,172, 53, 60,127,251, 38,179,102,198,118,187,195,213, 21,218, 56, -124,212, 44, 22, 75,226,216, 97,194,142,198, 89,214,157,199,204, 78,105,150, 39,248,152,232,252, 72,172, 42,122, 96,136,194,237, - 15, 73, 70,224,195, 24, 25,188, 32,146, 67,148,238, 61,164, 44,103,254, 52,254, 46,105,108, 62,202, 10,214,135,136,247,242, 53, -247, 62,178, 27, 60, 93,239,217, 13,129,110,240, 12, 99,113,142, 40,141, 49, 66,217,108,154,134,186,174,169, 42, 87, 86, 67,154, -152,193,199,204, 88, 58,253,193, 71,250, 16, 9, 49,239,189,220,185,100,193,103, 14,148, 74,103,141,136,166,231, 45,167,203,150, -147, 69,203, 98, 62,219,235, 88, 92, 93,236,129,147,198, 44, 22,180,116,136,101,162,144,174,137, 99,173, 81,184, 2,204,169, 92, -133,214,150,156, 53, 33, 36,161,224, 13,125, 1, 17,133, 50, 1,140,101,242, 25,143, 98,201,203,244,185,156, 29,135, 96,217,130, -207, 45,138,180, 73,252, 27,199, 81,162,159,251,129,161, 31,158, 18,202,229,103,188,249, 18, 41, 56,117, 86,249, 89,252,244, 36, -121,203,229, 69,141, 73,198, 38,222, 39,140, 14, 50,146, 40, 28,228,227, 12,235, 84,240,132,185, 32, 6,213,116,248, 21,170, 16, -133,198,163,212,193, 5, 53,165,134,113,124,224,151,170,170,143, 9, 96,165,163, 19,203,196,129, 99,175,180,248,188, 99, 86, 52, -205, 9, 89,183,188,241,214,187, 92, 60,185,162,105, 90, 94,253,244, 23,152, 47,207,168,155, 5, 15, 31,159,243,232,254, 3,134, - 48,178,122,252, 24,159, 70,206,110,157,178,219, 40, 6, 63,200, 69, 68, 29, 46, 33,163, 15,172,125,230,219, 31,220,165, 27, 2, - 67,206,248, 44,183,254, 6,152, 23,114,210, 7,119,223,101,215,109,249, 53, 95,252, 94, 62,255,185, 95, 67, 55,246,252,223,254, -207,255, 9, 63,250, 79,252,147,252, 71,127,232, 15,129,214,108,135, 30, 3, 92, 93, 92,240,147,127,246,207,242, 11, 63,255,243, -252,186,239,251,117,252,115,191,247,127,206, 95,252,217,159,229, 79,255,217, 63,195,213,234,138, 12,146,233,157, 97,187,221,114, -178, 88, 22,124,162, 7, 52,195,216,147, 21, 56,215, 18, 17,225,157,120, 90, 19,181, 81,196,209, 23, 75,147,154, 20, 20,251,199, -125, 18, 56,230, 15,149, 82,169, 15,129, 57,124, 8,128,244, 67,186,216,227,124,229,253, 15,247,195,219,253,189,226,120,162, 67, -229, 41, 14,162, 92, 4,130,247,248,113,192,120, 41, 0,134,170, 64,106, 74, 96, 74, 93,161,212, 66,114,138, 71, 47,111,128,144, -168,125,192,185, 10,103, 52,171,245,154,180,237,100,202,209,203,104,213, 88,119, 8, 90, 57, 42,234, 19,198,248,248, 35,166,124, -173, 88, 62,221,169, 79,185,238,234,233,203,143,210, 96, 42,172,138, 24, 34,235, 97,195,147, 71,247,248,228, 39, 95,193,213, 30, -255,248, 10,163, 90,177,100,197, 68,138,153,174,219, 48,244, 91,186,221,138,250,234,130,171,203, 83, 78, 79,207, 88, 44,207,152, - 45,230, 52,179,133,240, 9,106, 89, 73, 76,128, 18,173,203,100,107,186, 96,233,227, 11, 23,251,213,155, 42,110,150,168, 12, 41, - 4,186,205, 6, 83,108,111, 83, 87,162, 13,140, 49, 74, 54,119,153, 48,204, 26, 67, 40,135,146, 86,242,223,107,101,112, 78,112, -159, 87,125,192, 42,197,144, 18,166, 22, 10, 88,215,111,105, 42, 91,176,168,129,186,118,116,125,130, 44,129, 39,182,105,184,247, -100,195,233, 89,195, 7, 23,107,250,152,152, 25,168, 83, 68, 59, 73,186,235,214, 43,162,134,106,105,249,225, 47,126, 10,211,156, -113,190,217,241,228,242,130,135,231,231, 60, 90,173, 9,253,192,166,247,116, 49, 51, 51,138,223,244,189, 95,224,135,191,252, 61, - 56,239, 75,164,111, 2,149,185,115,235,148,121, 45,137,124,117, 5,174,209,100,147, 14, 36, 48,227, 4, 50,100, 43,172,173,209, - 86,198,241,202, 58,180,173, 80,211,135, 41, 69,192, 54,228, 28, 80, 69,235, 66,229, 72,157, 34, 42, 8, 57, 16,252, 64, 24, 7, -188, 31, 25,199,145,222,123,118, 30,222,189,204,252,194,197,150,203, 1, 78,116,195,205,106,206,187,253,138, 55,191,243,237, 66, - 65,180, 52, 57,240,105,167,153,187,138,183, 6,207,121,204,124,241,213, 87,249,245,175,188,192,155,223,120,139,175,191,251, 62, -189,202,124,176, 89,115, 53,142,216,143,127,140,113, 43,150, 59, 99, 53, 57, 65,211, 72,192,142,177,166,140,151,165, 17, 8,193, - 51,175, 29,201, 79, 19,190, 34,104, 78,197,206,156,181, 76, 50,162,184, 6,136,226,148, 26, 99, 96, 44, 1, 71,114,113, 53,251, -216, 84,165, 64, 79, 28,146, 20,247,186,157,137, 82, 42, 19, 60,133,143, 25, 31,202,135,207,210,169, 23,145, 71,140,144,145,194, -238,170,154,170,174,105, 42,121,191, 91, 23, 72, 72,247,236,189,103, 24, 2,253,232,233,203,170, 55,149,166,161,120,217,138,195, -202,236,171,215, 52, 77,216,227,101, 53, 5, 18, 83, 26, 70, 37,175,131,210, 2, 55,154,104, 53,186,156, 75,169,228, 80,168,156, - 10,136, 73,154, 15,201, 10, 80,228,108, 25, 75, 40,204, 56, 14,244,187,158,221,118,199,124,177,163, 93,118,212,203, 1, 59,155, -163,219, 30,237, 26,172,109,208,186, 65, 41, 73,252,147,245,157,229, 8,205, 86, 38, 36, 73, 46, 7,209,147, 67, 32, 12, 25, 63, -246,216,107,138,228, 9,205, 57, 37,193,112, 72, 72, 83,135,150,237,240,235,163,163,107, 58,208, 99, 46,210,255,148,136, 58, 19, -146,220,134,149,214,215,212,213,249,248, 48,207,249, 32,160,152,178,211, 17, 16,129, 82, 74,210,161,142, 58,157,103,186,159,167, - 72, 91, 83,225, 80,121,130, 32,136,178, 79,105, 67, 72, 10, 91, 47, 9,121,198, 27,111,188, 75, 86,142, 87, 62,253, 25,154,182, -165,170,150, 84, 85,139,115, 53, 31,127,105, 9,163,103,123,249, 16,191,217, 18,135, 29, 79, 30,110,241, 97, 32,230,242, 80,228, - 32,223, 91, 78,244, 49, 19,157,229,162,243, 40, 45,183,215,124, 92,136, 70,207,172,109,100, 36, 51,238,120,243,141, 95,226,165, -231,111,243,240,241, 3,214,155, 43,134,205,154, 79,188,252, 50, 15,214, 43,208, 2,229, 8, 93,199,253,113,160, 94,205,120,244, -224, 17, 47,191,244, 10, 95,253,234, 87,249,202, 15,124,133, 63,252, 71,254, 48,175,191,241, 58, 33, 10, 63,123, 12, 61,182,178, -248,232, 89,111,214,220,188,117,131,221, 48,160,208, 52,213, 9, 73, 67,239,123,124, 18, 55,186, 99, 32,141, 91,114, 50,196, 18, - 3,170,212, 88, 34, 23,244,179,254,244,167,138,146, 46,151,129,201,177,112, 8,236,249,104, 66,202,222,195, 58,125,254,130,215, -156,208,209,138, 99,191,187, 56, 21, 72,169,168,218, 51, 58,235,189,142, 35, 70, 9,253, 24,250, 14,211, 88, 17, 85,161,176,100, -180, 17,173,131, 53,134, 88, 53,162, 54,173,229, 64,209,222, 99,130, 71, 87, 50, 42, 51,174,188, 81,175, 54,236,186,145, 97,240, - 24, 27,229, 80, 50, 83,166,189, 92,136,210,244, 74,168, 67,154,156, 81, 92,179,152, 9, 4,227,128, 45,222,251,102,143, 52, 4, -178,159,212, 40, 85, 67, 30,169, 43,131, 55, 1,223, 93,240,230,235, 87,188,252,241, 87, 88, 93, 60,224,115,159,253, 50,247, 30, - 92, 16,180, 34,165,226,149, 79,129,190, 91, 49,250, 45, 99,119, 69,191,185, 98,179,184, 96,190, 56, 97,177, 60,101, 54, 95, 82, - 53, 53, 85, 93,225,170,170, 92,170,245, 30, 6, 34, 48,137, 50, 49, 48,122,191,227,220, 99,105,147, 34,102, 77, 10, 35,227,250, -138, 26,141, 31, 34,214,148,239, 41, 3,186,194,170, 14, 31, 2,149,115,204, 27, 77,231, 7,146,182,120, 15,182,245, 36,163, 48, -166, 34, 38,143, 1,210,216, 81, 25, 45, 99,213, 8,207,159,205,232,183, 29,235,117,199,236,164,225,106,227,153, 55, 53,187, 93, -207,217,233,140,135, 87, 27,176,134,213,168, 88,245,145, 86, 89, 76, 14, 56,147,168,108,230,246,178,162,157, 55,100, 50,151,151, - 87, 12,195,136, 86,134, 27,103, 55,121,229,229,155, 44,190,240, 9, 89,113,216,138,221, 40,170, 99,103, 13, 55,110,156,160,195, -192, 48,246,132, 97,192,239, 86,164,193, 19,134,158, 59,179,154,126, 24,153, 47, 42, 82,147, 48,243, 57,186, 94,162,170, 57,186, -154,161,221, 12,227, 90,140,173,247, 93,163,169, 27, 92, 59,195,212, 13,166,170,197,239,175, 53, 73, 75,124, 40,214,128, 21, 8, -142, 53,137,172, 35,209, 68,114,246,132,236,137, 41, 16,115,164,247,137,123, 87,138,208,222,194, 95, 94,225,116,228, 21,171,185, - 21, 71,182, 4,206, 85, 70,101, 43, 17,181, 6,190,244, 66,141,223,141,220,237, 61,184,138,143,127,254,115,124,254,139,175,176, - 60, 89, 82,181, 21,124,243, 77, 76, 24,121, 18, 34, 95,123,239, 62, 47, 36, 69,171,117, 1,192,128,115,150, 20, 7,241,158,163, -113,182, 66, 69,177,176, 85, 70, 51,168,140,178,146, 67, 97,181,150,247,128,207, 56, 83, 17,202,232, 59,145, 40, 33,105,132,172, -132, 70,154, 68,173,110,132,120,179, 79,145,212, 66,150, 41,247,248, 40,225, 32,251,251,255,116,150, 76,174, 39, 85,246,223, 98, -115,211, 81,186,253, 24, 68,244,152, 83, 46,182, 84, 83,194,149,116, 17,193, 69,250,190,161,107,122,250,190,162, 31, 71,129,211, -228,116, 32,205,165,124,116,202,232, 35,109,150,124,109,102,234,142,167,247, 75, 86, 40, 25,122,179, 47, 38,229,103, 76,153, 76, -234, 12,166, 56, 60,140,202,101,244, 78, 17, 27,154, 67, 72, 5,138, 97,180,140,253,200, 56,238, 24,186,145,121, 55,208, 14, 3, -179, 69,135, 93, 46,112, 77, 11, 85,131,113, 51,148,105, 80,182, 45,194, 61, 77,102, 74,161, 44, 95, 95,206,216, 28,104, 72, 98, -193,211,154, 72,252,112, 75,219,135,169,225,127,101, 9, 91,215,255,236, 52,226,139, 49,238,199,168, 7,112, 70,186, 54,178,205, -199,221,217, 83,197,250, 24, 75,171,180,136, 36, 62,204, 98,164,148,226,186,182,250,184,123, 20,242,144,117, 51, 80, 53, 95,255, -198, 55,185,113,251, 5, 78,206,206, 24,125,135,177,146, 66,101,148, 0, 91, 98, 8,116,221,192,163,199, 23, 68, 47, 35, 77,223, -239, 4,249, 88,210,136,212,209,247,228,163,120,110,173, 53,248, 16,143, 10,161, 92, 66,116, 85,179, 60, 59,227,222,253,251,244, - 62, 98,171,154,191,248, 51, 63,197,107,175,189,198,233, 98,201, 95,249,133, 95,224,203,223,243, 61,252,177, 63,241, 39,104,150, - 51, 76, 86, 56, 5,129,132,138,226,229,125,255,131,119,249,115,127,126,224, 31,255, 61,191,135,223,246, 91,127, 43, 15,254,227, -123, 60, 58,127, 66,202,138,170,105,104,218,134,172, 21,202,106, 86,155, 13,109, 83,177, 9, 91,188,135,213, 48,210,231,136, 49, -142,106, 81, 17,135, 14, 21, 37,208, 65,105,158, 82,164,171,191,161, 93,250, 71, 17,229,246, 1, 41, 42, 93, 19, 55, 62, 29, 41, -154, 39, 81,156, 58,190, 84,168, 18,166,162,246, 36,173,174,235, 24,118, 61, 85, 93,161,141, 69, 43, 91, 46,162,230, 80,116,109, - 85,110,225,114, 24,164, 42,144, 99, 32, 56, 97, 39, 75,183, 85, 58,172,203, 13,113,219,225,199,158, 16, 52,174,114,184,130, 5, -182,214,124,168, 32,112, 90, 65, 73,142,123,218, 91, 76, 38, 81,227, 52, 66,211,250,105, 95,121,134, 60, 98,109,102, 62,171,113, -156,241,240,131,154,215,191,249, 58,119,110,191,128, 70, 17,195,200,237, 27,103, 60,120,178,146, 21, 69,202,135,227, 40,102, 24, - 3, 97,179,165,143, 25,229,131,192,110,198,158,208,180,196,186, 38, 86, 21,177,154,212,194,250, 48, 49,155, 58, 40,107, 37,133, - 81,151,253,228,228, 55, 78, 25, 98,100,123,249,132,182,174, 36, 34, 83,137,231,218, 90,241,247,199,161,112,186,107, 43,182, 78, - 47, 80,154, 62,100, 78,202, 14, 86, 44,172, 34,136, 21,118, 75,162, 31, 60,139,121, 67, 74,176, 90,141, 84,141, 33,102,161,216, - 13,222,115,122,182,148,157,186, 79, 44,206,230, 60,188,218, 96,116,194,184, 76,101, 21,149,211,204,103, 21,205,172,198, 22,118, -246,172,169,209, 74,120,216, 90, 5,188,223,242,157,239,124,128, 86,154, 27, 55,158,163,157, 45,113,206, 74, 96,240,118, 43, 43, - 56,165,200,253,192,110,189, 99,187, 94,115,113,126, 69,221, 84,196,148,153,159,157, 81,181, 48,107, 90,154,102, 65,213,204,113, - 85, 75,221,204, 48,238,128,246,116,174,194, 89, 43,211, 29,109, 48,133, 40, 7,186,156,101, 86,246,238,218, 8,184,164,178,164, - 81, 94,235,168,197,159,156,180, 56,135,238,190,191,227,228,206, 77,190,252,185,207,241,232,207,253, 21,190,125,177,198,231,142, - 89,180,124, 81,201, 4,229, 97, 26, 57,211,153, 31,122,174,225, 99, 39, 13,247, 98,194, 40,207, 11, 39, 11,190,231,115,159,227, -214, 11, 55,228, 50,145, 21, 87,231,107, 62,222, 86,168,155,167,252,228, 79,254, 28,155, 82,143, 78, 77, 13, 57,209,214, 53,155, -245,138, 24, 19, 86,233, 98,235,117,196,232,177,109,131, 87, 82,208,135, 16, 80,101,237, 20,115, 42, 16, 22,209, 77, 73, 7,158, - 8, 58, 18, 84,216, 83,221,180, 86,123,210,232,241,185,175,167, 58,158,147,240, 56, 68,117, 38,236,146,132,128,120,202, 46, 61, -196,201,154, 38, 89, 10, 90, 27,234,202,209,212,142, 93, 39,127,191,179, 14, 83,201,197,161,170, 44, 77, 83, 51,155,181,116,187, -129,174,239,233,124,197, 48, 6, 98,242, 37, 25,238,163, 49, 14,234,218,180, 87,237, 39, 8, 7, 17,175,218,211, 1,117,249,189, - 70, 75, 82,156, 66,239,195,104,244, 17,233, 84,190,238, 3, 76,199, 26, 75,182, 9,157, 36, 93,178,239, 7, 98,138, 12,193, 51, -142, 35,141,247, 84,237, 64,213,206,112, 85,196,212, 1, 83,133, 34,158,115,251,149,115, 54, 70, 56,116, 85, 35,121,236, 74, 99, -141,163,170, 5, 90,100,127,165, 7,181,250,235,228, 83,170,167,196, 57,147,194,126,234,100,166,162,190,231, 22,151,142,140, 15, - 73,255,122,166,208,239,147,188,212, 51,216,209,125,118,251,212, 81,237,203,187, 34, 82, 81,213,167,124,235,173,247, 56, 57,187, -201,237, 59,119,184,184,186, 32,165,129,110,183,162,109, 87,116,221, 64,202,176,221,238,120,244,240, 62,219,113, 93,136,120, 94, -242,144,243,100, 1,153,244, 4,153,211, 91, 55, 25,134,192,110,183,185, 6,143,145,188,115, 67, 78, 10,165, 29, 63,240,235,191, -202,127,251, 39,255, 27, 98,240,248,156,184, 92, 95,242,240,225,125, 62,243,169, 79,243, 51,127,225, 47,240, 3, 95,253, 42, 57, - 5,186,110, 39,152, 72, 99,101, 4,150, 35,187,161, 67,231,158,102, 85,243,198, 27,223,228,215,126,207,151,184,113,227, 6, 15, - 47,158, 20, 24,136,147,155,169,151, 55,214,242,228, 6,195, 24,209,121,144,236, 99,229,100, 84,150, 51,217,143,140,113,141, 13, -131, 92, 56,179,222, 51, 9,210, 94, 59,241,215,250,217,170,143, 76,100, 83,223,165, 83,207,101,210, 35, 14,135, 35, 18,205, 84, -188,149, 58, 26, 92, 79,147, 25,181, 39,206, 37, 68,208,211,117, 29,219,245,150,249,108, 67,229, 36,207, 88, 77, 55,217, 56,141, -200, 74, 38, 65,137, 73, 85, 6,148,115,226, 37, 50,166,140, 77, 29, 88,139,178, 21,166,106, 48,151,107,182,155, 13,195, 40,106, -224, 80, 72,126,198,216,189,122,253,195,146,233,142, 71,240,215, 96, 52,249,224, 40,209, 71,157,177, 82, 17,157, 71, 84, 78, 60, -124,240,152,243,135,239, 50,159,205,185, 56,191,228,221,239,188,207,114,126,194,147, 71,143, 88, 44,111, 48,171, 52,109,101,138, - 54,197, 72, 40, 71, 4, 77,194, 17,112,105,192, 38,133,246, 10,250, 0,121, 32,135,154, 48, 24,176,134,100,116, 25,135,138, 66, - 94, 23,246,129,178, 14,237, 44,217, 88, 1,124, 40,133, 46, 99,209, 24, 35,161, 91,145, 67, 39,200, 76,113,238, 96,156,221, 11, -228, 0, 9,163,209, 16,163, 38, 2, 49,129,115, 21, 49,130, 81, 81,214,119, 38, 99,172, 76, 1,170, 74, 83,213,150,213,106, 3, - 6,170,218,240,248,178,103,177,168,241, 99,100, 76,129,203,117, 79, 59,171,184,218,236,136, 41, 81,183, 80, 55,138,182,173,169, -235,154,186,109,104,219,185, 96,127,141,166,118,186, 88,157, 52,179,166, 41, 28,131,219,204,219,153, 0,139, 52,144,131, 16, 46, -203,186,202, 25,195,242,244, 6,103, 39, 39,108,183,107,118,187, 55, 80,186,231, 51,159,127, 21,211, 26, 76,149,153, 85,194, 90, -111,103, 51,234,186,162,106, 26,225,224, 87, 21,182,170,208, 78,180, 17,206,186,107,108,242, 28, 68,136,171,162,100, 92, 16,211, -126,138,165,180, 80, 7,141,107,112,117,196,185,142,171,203, 29,119,110,206,249,216,171, 47, 80,187,138,215, 94,126,158,175,159, -175,121,168,224, 5,157,248,204,178,229,227, 55, 20, 15,227,192,153,213,124,236,108,193,227,171,158,183,214, 61,151, 17,126,232, -123, 63,205,243, 47,191, 72,158, 57,236,201,138,249,233,156,231,111,158,240,201,207,127,150, 71,227,150,244,189,175,241,141, 95, -122,135, 97, 72, 12,195,200,141,153,100,215,163, 4, 40,131,150, 9,138,115,150,202, 90,130, 31, 49,198, 48,198, 40,231, 23,154, -224,227, 30,225,230,102, 13,181,209, 88,141,132,212, 16,240,153,253,251, 99, 18,132,238, 27, 49,117,160,130,198, 40, 69,219,143, - 94, 72,164,197, 90,118, 72,234,204,101,223, 46, 65, 75,114, 81,150, 41,226,174,239,169, 58, 71,189,171,228, 57,168, 66,185, 56, - 20,177,112, 85, 49,111, 27,134, 69,203, 48, 14,244, 62,208, 15, 35, 62, 68,194,148, 56,169,174,175,151,249, 8,144,214,177,174, - 71, 61,245,239,186, 60,119,214,136,106, 62,234, 84, 72,121, 92,179,237, 30,195,170, 50, 2, 96, 51, 90,163, 42,135, 77, 19,226, - 43, 49,142,158,120,181,198,247, 35,205,172, 39,206, 7, 98, 59, 98,155, 30,215, 54,216,170, 1,215,144,212, 20, 20,147,203,196, -192,162,105, 69,255,100, 44, 38, 70,112,245,161,168,255,138,162, 49,159,242, 26,127,183,223,159,203, 14,254,195, 14,192,235,234, -250,167,161, 24,207, 90,232, 82, 41,248,242, 2, 77,118, 9,253, 84,225, 47,249,208,199, 95, 65, 78, 40,109,247, 98, 33, 87,181, -188,249,246, 93,234,118,206,233,141,155,124,231,157,111,115,121,245,132, 97,216, 0,137,126,220,162,181,116,130, 62,120, 82, 78, - 82, 88,147,160, 9, 73, 7,229,118, 46,232, 83, 99, 52, 97, 28, 75,100,109,217,169, 20,161,159, 41,169,116, 70,107,126,224, 7, -126,144, 87, 95,251, 36,159,251,194, 23,121,235,205, 55, 88,111,183, 44,103, 51, 30, 62,122,196, 75,207,189,128,206, 10,167, 20, - 42, 6,114, 84,248,236, 81, 70, 44, 36, 49, 12,212,174,162,114,162,112,127,231,157,119,248,205, 63,252,119,178, 92,156,162,148, -161,174,106,102,243, 57, 49,103,106,231, 88,175, 55,188,190,122,157,229, 98,201,203, 47,190,132,188,237, 34, 74, 55,204,155,134, - 56,108, 24,243, 10,173, 7, 41,124,198,236,211,200,166, 29,107,230, 89,229,250,254,178,165, 14,124,244,167,119,230, 41, 31, 16, -191,170, 0,116,166,117,138,222,191,118,233, 96, 71,204, 5, 71,155, 63,132,118,166,158,218,221,167, 76,214, 98,225,232,251,142, -237,102,205,110,214,208, 56,139,177,210,137, 70,165, 72, 38,162,157, 43, 96, 11,246, 97, 48, 76,221,104, 22, 95,105,178, 30,140, - 69, 57,139,118, 21,174,174,169,235,134, 77, 83,177, 90,239,232,198,190, 4, 14, 69,192,238,223,148,236, 37, 38, 7, 96, 78,158, - 48,198, 73,147,172,150, 3, 43, 31, 36, 57,178, 67,151, 91,253,148, 61,110,117,192,170,200,249,234,146,135, 15, 30,114,178,104, -185,115,235, 57, 30,221,127,200,167, 62,253, 25,186,174, 35,250,142, 48,142, 56,215,208,206,230, 92, 93,174,168,171, 26, 35,222, - 40,172, 9, 84, 70, 81, 41,141, 83, 26,167, 21, 78,101, 44, 17,147, 53, 38,105,241,239, 7, 85, 40,129,153,172,197,246,151,141, - 28, 6,114,241, 41,246,165, 24, 64, 21,107,218,250, 2,167,161,114,154,156, 12, 33,141, 88,163, 24,199, 40, 99,249, 16,153,181, -114, 97, 8, 49, 19, 10, 62,120,244, 9,131, 65, 89, 65, 79,207, 22, 45,231,143, 55,180,109, 77, 24, 53,187, 93,143,202, 9,107, -145,172, 2, 39,196, 61, 87, 25,158, 92,110, 81,214,224,115,166,247,129,186,209, 52,115, 77,187,176, 52,237,140,186,153, 81, 55, - 45, 85,177,143, 25,165,105,141, 20,145,202,153,114,208, 58,172,211,210,201,153,105, 76,170,208,197,193,111, 84,233,172,157,197, - 42, 71, 93, 87,124,229, 7,127,144,205,166,103,219, 7,198,236, 81, 46, 83,169, 10,103, 28,117, 83,227, 42,139,173,202, 74,198, -217,253,179, 98, 43,153, 18, 89, 87, 73, 39, 86,108,107,199,161, 32,211, 51,104,108,137, 70,181,150,202,213, 52, 85,198,169, 13, -149,178,188,252,220,130, 42, 27, 24, 3,159,253,204,231,184,253,254, 67,206, 47, 55,188,173, 96,232, 59,206, 86,240,241,179, 22, - 98,224,189,187, 87, 60, 12,142,183, 54,112,122,235,140,223,254, 63,250,123, 56,107, 90, 82,191, 35,108, 7, 46, 46, 47,248,254, -175,254, 58, 30, 93, 60,228,252,209,123,188,242,220, 41,246,213, 19, 46, 30, 94,114, 50,215,220,190,125, 34,107,213,172,168,235, -154,164, 13, 41, 21,228,106,148, 64, 24,171, 37, 55, 34,100, 81, 92, 7,239, 25, 83, 68,207, 23, 96,101,114,101,148,156,183,222, -100,192, 95, 75,101,123,186, 8, 78,117, 35, 22,110,253,232,139,224,180,120,212, 67, 44, 2,207, 76, 73,238, 60, 80,229, 20,136, -248,109,144, 34,221, 15, 3,253, 48,210,212, 94, 46, 91,229,194, 45,110,167,154,197,208,210,117, 3,179,126,160,235,164, 91, 15, - 33, 18, 38,140,114,206,215, 51, 16,242, 71, 64,152,166,142, 61, 63,157, 7, 49,229,185,235,167, 18,232, 14,152,219,227,198,116, - 95, 91, 21, 88,163, 36, 7,162,156, 71,185,164,192,133, 24, 24,118, 3,177, 15, 12,219, 30,219,108,112,109,203,108,185,160,110, - 27, 92,179,192, 84, 75,112, 86, 26, 18,177, 15,144,208, 66,190, 51, 34,252,117,182,198,254,245,118,224,127,189, 99,248,143, 10, -150,216,195,195, 38, 37,125, 74,152,146,231, 62, 5, 89, 28,119, 70, 83, 97, 63,220,254,242, 81, 58,209,225,243,234,124, 64, 94, -230, 50, 33,208,218,162,148,101,179,235,233,135,129,147,155, 55,120,231,221,111,115,126,249,152,245,234,130, 20,199,242, 14, 52, -226, 13, 84, 25,171, 68,152,145,130, 88, 62,152,116,147, 5,204,161,202,141,100, 62,107, 48,192, 56,116, 52,102,130, 44, 40,180, - 21,145,197,201, 98,193,231, 62,253, 5,190,244,107,126, 13, 70, 91, 22,203, 83,154,217,130,121,219,208,109,214,140, 97, 36,101, -120,241,197, 23, 24,250,142,121, 83,211, 21, 15,101,244, 65,184,196, 41,161, 80,197, 49, 16,121,248,248, 49, 49,102, 78, 79,206, -112,214, 21,165,165,208,184, 82, 74, 52,117, 77,223,143,108, 54, 3,111,127,231,219,220,188,117, 11,237, 22, 56,151,113, 68,110, - 54,145, 97,183, 66, 89,121,109, 76,114, 18,154, 80,134,187, 74, 95, 15,204,249,176,184, 78,117,116, 43,157,138,123,140,177,140, -162, 15,254,244,156,210,126, 77,113, 12,153,157,210,209, 14,111,168, 41, 32, 37,149,173,187, 46,111,166,130, 60,206,236,179,199, - 83,134,126,232,216,172, 87,204,103, 53, 77,109,112,141,197, 58,139, 51, 10, 93,213,229, 38, 43,204,239,131,111,118, 18, 88, 32, -212, 47, 99,177,198,162,173, 41,113,153,133, 27,158,130, 92, 78, 58, 69, 55, 72, 90, 30, 49, 72, 60,106,209,151, 40,253,244, 5, - 84,224, 26, 89, 75, 58, 86, 46, 5,125,202,116,214,133, 16,163,205, 36,124, 81, 24, 45,118,186,166,114,212,149,132,106,220,185, -117,155,211,147, 27, 92,156,159,163,173, 97,187, 93,113,243,230, 77, 82,130,247,222,123,155, 55,223,250, 14,159,255,252, 23,121, -238,246,141,146,133, 14,218, 36,148,142, 64, 32,165, 81,246,154, 41,203, 88, 61,201,215,172,179,218,239, 0,115,146,144, 20,144, - 41,208, 36,108, 72, 41,161,189,240,200, 67, 6,223,109,216, 92, 93, 17,252, 88, 86,136,197, 83,159, 4,190, 97,108, 66, 91,240, -126, 64, 41,133, 79,105,143, 45,202, 41,161,181,232, 22,182, 91, 79,213, 86,236,134,145, 49, 26, 66, 12, 84, 90, 81, 87,150,205, - 46,208,214, 14,235, 42, 46, 87, 29, 99,210,212,181,101,219,143, 88, 7,205, 76,211,206, 44,205,172,102,177,152, 51, 95,156,226, - 92, 67,221,136,203, 67, 43, 69,163,237, 62,101,210,150,115,195, 88,133, 53, 22,156,112,200,141, 18, 47,189, 81, 10,103,220, 53, -110, 5, 36,188,247, 56, 87, 51,143,138, 49, 71,146, 10,104, 28, 70,203,133, 81, 27, 74,138,158, 41,197, 89,242,178,181,158,242, - 45,196,186,151,148, 66,169, 36, 40, 88,201,168,221,239,141, 81, 6,231, 26,140,245,180,179, 25, 49, 87,108,103, 61,159,249,212, -103,121,231,219,239, 48,236, 70,162, 95,179,188,233,248,251,126,224,215,240,231,254,234,155, 92,237, 6, 54, 97,228,172,203, 60, -222,121,186, 24, 88,145,121,232, 61,205,173, 27,252, 67,191,251, 31,230,229, 79,190,202,229,230,130,205,163, 7,248, 39,151,124, -226,181,215, 88,173,207,233,245,200,139, 31,187,133,233, 7,134,214,146,230,138,166, 86,156,158, 44, 36,112, 40, 4, 76,211,224, -163,220, 66,156,209, 88,171,232,183, 61,167, 51, 67,239, 7, 50, 10, 31, 18, 58, 4,250,232,153,181, 53,217,137,203, 72,208, 22, - 25,165,227,245,206, 86,233,107,103,181,209,215,151,161, 49,231, 98,129, 19, 22,190, 0, 98, 74,223,154,229,124,141, 49, 29,116, - 44, 18,164, 78, 55,142, 84,189,101,215,245, 52, 77, 77, 93, 85,212,141,100,148, 87, 90, 99,173,161,170, 44,109, 83, 51,111,107, -118,125,195,110,215,179,235, 71, 6, 45,107, 4,166, 36,208,103,114,141,243, 51, 66,221,195, 92, 50,239,167,147, 90,107, 65,160, -107,233,212,157,209, 36,157,138,246,171,224, 95,175, 77, 40,244, 94, 52, 36,123,249,178,134, 48,166,196, 45,107,114, 42,204,150, -126, 96, 28, 71, 54,221,142,152, 51,182,114, 44,150, 39,204,151, 75, 22, 39, 3, 85, 59, 8,104,171,170, 80,206, 21, 10,157,164, - 2,166,164,193, 68,204,211, 68,185,255, 95,253,223, 51,252,240, 35,174,184, 74, 34,190,208,229,150,118, 28,241, 58,165, 0, 77, -126,228,169, 91, 86, 90, 31,254, 59, 50, 98, 44,180,203, 98,157, 18,209,195,249,249, 99, 94,120,241, 69,238, 61,184,203,122,189, - 98,189,122, 66, 78, 30,171,229, 5, 55, 40,218,214,113,186,108, 81, 68,134,193,211, 13,129,222, 7,124, 46,214,187, 36, 10,223, -202, 90, 42, 87, 49,115, 53, 49,140,156, 84, 6,231, 42,102,141,100, 51,159,158,156,178,152, 47,104,155, 57,167, 39,183,137, 93, - 7,109,139, 31, 34, 15, 31,157,243,218, 39, 94,197,184, 74, 56,236, 10,174, 86, 87,204, 78,103,156,158,158,176,123,252, 4,109, - 20,149,105,184,125,231, 69,190,247,251,190,151, 47,125,239,151,121,254,197,231,249, 3,255,230, 31,224,209,147, 11,158, 92,174, - 56,187,113,139,182,105,168,171, 70, 64, 39,202, 80, 87, 21, 39,243, 37, 77, 21, 72,202,161,212,200,227,243, 71,132,116,201,243, -207,189,202,220, 69,134,126,131,138, 29, 3, 90,240,184, 25, 76, 78,232,164,176, 86,139, 32,173,236, 6,159, 30,175,239,247,226, -215,146,190,244, 97,154,146,211, 53, 72,203,241,255,239,169,205,185,188,175, 38,177, 73, 17,195,149,164, 67,140,150, 0,147,227, -221,149, 53, 37,239,216, 26,154,218,162,141, 40,246,201,137, 28, 61,132, 17, 98,133,194,149,124,130, 92, 60,217,105, 31,237, 58, - 41, 69, 4,244,160, 80, 88, 12,224, 98, 36,249, 81, 62,191,209, 56, 43,135,132,241, 70, 20,166,193,139, 94, 65, 85,242,198, 85, -250,218,229,102, 58, 36,142, 95, 27, 77, 42, 22,193,105,199, 92, 14, 57, 35, 66,193,113, 28,249,133,159,255,203,196,208, 51,142, - 91,186,237,154, 87, 62,246,113, 94,251,196, 43,124,229,249, 23,184,247,232, 33,207,221, 57,195, 25,205,249,147, 11,186,221, 6, -109, 62, 41,226, 42, 20,179,118, 46, 20,176, 50, 10,214,166, 70,235, 10,109, 26,193,230, 26,185, 68, 24, 35, 2, 41,179,207,174, -158, 70,241,101, 57,149, 37, 42, 54,231,145,224,199,210,213, 8, 15,156, 28, 73, 41, 22, 37, 47,248, 24, 25, 70,168, 43, 83,116, - 70,162,138, 15, 9,134, 20,152, 16,232,214,200,229,199,185,138,148,122, 92, 85,211,141,158,237, 16,112, 86,225,156, 35, 71,121, -109, 78,150, 51, 30, 93,238,232,199, 36,211, 40, 31, 25, 99, 98, 54, 83, 84,141,166,110,106,234,102, 78, 59, 91,202, 71, 59,195, - 25, 75, 91, 57, 92, 81, 89,239, 15,212,169, 11, 55,154,202, 85,152,218,145,166, 67, 88, 43, 84,146,139,214,180, 23,205,104,180, - 73,164, 84, 19,131, 0,116, 60,153, 72, 40,193, 68,250, 40, 29, 75,126,142,122,242, 87,107,189,231, 14,176,183, 92,234, 50,121, - 74,144, 60, 57,142, 98,229, 75,130,128, 53, 54,211, 46, 23, 4, 53,224, 77,226,196,103, 46, 86, 27,218,179, 27, 84,179, 37,186, -153,209, 52,150,197,252,148,239,249,244, 23, 96,177, 96, 55,118,180,218,146,214, 35,187,221,150, 39,171, 43,124, 14,124,254, 11, - 95,224,213,215, 62, 69,248,224, 17,102,220,112,203,106,252,205, 91,220,127,240, 1,111,189,253, 58,167,167, 13,183,206, 22,184, -208,240,120, 97,105,182,138,202, 40,156, 85,132,224,233,187,129,198,181,164, 84,138, 48,137,232, 3,221,110,199,141,197,146, 92, -192, 76, 99,140,204,148,240, 61,148,179,232,202,161, 48,144,138,155, 70,235,103,173,173, 71, 69,173,220,163, 9, 71,231,194,100, -107, 75, 69,157, 46, 19, 49,181, 15,139, 10, 19,146,172, 48, 74, 98, 18, 75, 88,215, 15,212,157,163,105,133, 20, 58,142, 13, 85, -109, 69, 68,166, 53,149,181, 52, 77, 69, 59,171,153, 13, 13,109, 87, 83,117, 61,118,218,173,167, 15,223,170,239, 3, 97,142, 24, -151,199,117,137,167,210, 73,101,252, 46, 14,143,105,196,110,203,180, 80,240,208, 26, 99,142,181, 96,229,243, 42, 35,219, 91,107, - 36,175,162, 4, 41,169, 97,196, 43, 45,136,217,174,103,179,221,226,125,192, 85,151,156,158,156,114,227,198, 25,203,179, 5,179, -147, 37,110,222, 98,218,185,176,228, 77, 45, 83, 68, 37, 97, 85, 90,243,255,159,162,254,145,221,251, 20,153,119,148,188, 54,189, -144,251,206,111, 18, 52,148,127, 79,229,215,135, 91, 81,186, 22, 90, 37,162, 75,205,122,181, 33,147,185,127,255,125,174,174, 46, -233,135, 30, 69,196,232,204,107,175,188,204,162,118, 44, 92, 98, 86, 91,140,242,228, 52, 98,173,165, 31, 34,151,171, 29,143,214, -129,221, 8,221, 48,136,234,213, 88, 22,243, 37,103,167,103,244,235, 43, 82,127,197,124,222,178,152,183, 56,103, 75,177,117,204, -155,138,198, 25,182,235, 21,239,223,191,207, 55,190,241,117, 98, 76,220,187,255,128,197,172, 97, 28, 61, 79, 46,206,105,172,227, -133,148,249, 13, 95,249, 65,222,122,239, 93,148,114,228,164,121,245, 19,159,230,185, 59,207,115,126,126,201,143,254, 19, 63,202, -127,250, 71,254, 40,111,127,235,109, 30,159, 95, 96,172,101,236, 7,140, 50, 4,109, 24,135,158,202, 58,134,126,128,172, 8, 57, - 80,213,138,209,143,140, 62, 96, 76,102,232, 55,140,118,141,211, 17,159,148,236,140, 35, 88, 35,249,205, 41,179, 31, 43,105,125, - 61, 17,236, 56, 99, 60,127,200,244, 70,156, 0,170,176,190, 15,209,133,123, 86,128,145, 55,157,240,155, 37,163, 88,216,244,135, - 49,246, 68,157,178,198, 96,141,197,148, 95, 27,107, 69,237,233, 28,198, 40,121,227,206, 27, 92,109, 49, 78, 75, 1, 39,146,147, - 39, 69,131, 46,201, 87,162,152, 23, 53, 45,169,136,194,212, 94,110, 49, 5,130, 31,138,159,158, 66, 83, 36,132, 67, 46,123, 50, -242, 79, 65, 72,186,217,218,162, 72, 61, 88,238,166,225, 85, 58,178,175, 41,149, 81,229, 13,191,191,176,104, 69,223,109, 33,195, -249,249, 99, 86,151,151,156, 44, 91,206,150, 39,188,246,202,203,220,185,117,155,219,183, 36,125,238,197, 87, 95,102,183,185,160, -223,109,200, 68,174, 86, 23,124,230, 51, 95, 32,171,138,152, 13,103, 55,110, 98, 10, 85,207,185,170, 8,183, 42,212,228,131, 47, -135,207,113,215, 68,161, 86,233,146,213,153, 99, 32,135, 1,210, 32, 22,211,164,136, 33,137, 7,215,203,206,210,148, 75,115,206, -148,174,171, 76,120,140, 4, 52,165, 4, 33, 40, 84, 25, 73,198,148,153, 53, 34,190, 26, 7,168,235,134,221,144,216, 14,123,121, - 44,198, 88,250, 78, 32, 50, 93,215,209, 15,146, 71,159,178,198, 71, 47,185, 40, 78, 97, 43, 69,221,214,212,245,140,166,153,203, -248,189,110,105,156,229,100,214,224,172, 18,183,131,214, 24, 45,207,140, 53, 22,109, 28,149,173, 68,145,110,101,117,162,247, 5, - 93, 28,203,114, 82, 91,148, 10,133, 63, 96, 9,209,136, 46,198, 66, 40,150,209, 92,198,194,233,232,162,106,173, 43,246, 71, 91, - 46,166, 69, 65,109,109, 97, 71,116,101,250, 52,173,179, 36,201,205,184,154,218, 90,122,165,177, 68,102,217,240,218, 23,191,192, -139,253,192,118,136, 34,137,200,154,198,107,178, 79,216,126,199,205,220,147,163,167,111, 18, 62, 4,190,255,139,175,176,108, 52, -138,200,246,253,183,169,171, 22, 69,199,197,176,225,151,223,125,128, 38,240,226,237, 59, 52, 54,114,115, 62,199, 25, 69,125,218, -162, 30, 67,211,214, 88,103, 73, 65,186,107,231, 42,217,184,104,181,183, 26,215,117, 37, 5, 92,233,194,177,151, 92,247,140, 32, - 98,181, 53,226, 66, 1, 81,177,255, 53,152, 20,135,198,128,235,225, 42,197, 41, 21,227,148,186,153,247,212,200,235,206,170, 92, -246,238,145,113,244, 34,130,235,106,118, 77,197,108,104,104,218, 74, 4,104,133, 87,226,156, 52, 55,109,211,208, 54, 53, 77, 45, - 83, 34,239,195,209,122,246,169,101,113, 33,225, 29,114, 40,174, 3,172,213, 81, 36,179,181, 70, 50,223, 43,187, 15, 21,155,116, - 4,166, 92,164,247,228,188,146,170, 54, 21,117,140, 37,107, 37,151,240, 18, 40, 85,122, 13,201,250, 24, 61, 73, 27,124,200, 92, - 93,109, 8, 99,224,234,124,195,250,226,138, 91,183,231,156, 61,119,139,217,233, 41,205,114,196, 52, 1,219, 44,208,166, 69,153, -170,172,164,121, 58,165,237, 87, 63,130,255,149,124,142, 99,162,216,180,167,216,243, 66, 56,146, 58,151,241,200, 49, 48, 67,107, -202,205, 71,210,218,142, 11,253, 30,150,147,179, 64, 44,148, 17,152,138, 18,187, 82, 38,243,232,201, 57,209, 52,124,240,232, 33, -138, 76, 55,116, 24,163,185,177, 88,240,249, 87, 94, 32,109, 47,168,180, 38,122, 79,244, 3, 90,129, 69, 17,187,158,211,182, 18, - 12, 38,150,213,214, 50, 4,133,171,231,204,231, 55,112,170, 2, 59,146, 93,199,220, 89, 22, 37, 15,123,244,145, 24, 61,235,221, - 21,231,239,221,227,173,119,222, 97,179,235, 36,139, 88,107,188,223,114,126,177,193,105,205,174,239,120,225,149,231, 24,199,196, -237, 27,207,241,179, 63,247, 87,137, 74,211,143,158,209, 43,140,117, 52,243,154, 20, 34,175,189,242, 10,175,127,253,107,244,221, - 37,219,237, 21, 99,244,228, 97,139, 15, 61,182, 50, 84,161, 70,107, 67,240,137,206,123, 26,111, 25, 58,143, 54, 21, 70,121, 78, - 22,142,188, 11,132,156, 81, 41,224,180, 8, 54, 98,210,164,164, 9,217,160,209, 88, 60,166,108, 33,173, 50, 71, 17,138,101, 23, -148, 36, 35, 92,248,207, 19, 98, 88, 29,252,105,207, 20,116, 25, 83, 90,119, 84,100,138,181, 77, 21,184,144,202, 98,149,155, 70, - 88,178, 39,151, 14, 93, 86, 49,169,252,119, 35, 86,170,214, 81, 59,133, 49, 89, 70,158, 57, 32,155,221, 0,121,148, 3, 39, 38, -178,138,228,236,100,100,202,244,247,150,131, 56,101,200,158,156, 71,185, 20,228, 64,244, 3,126,236,240, 99,199,208,247,164, 16, -202,243, 29,129,136,205,142, 56,141, 93,143,244, 5, 7,191,247, 1,144, 52, 17,177,236,164, 91, 48,134,245, 16, 57,191,186,226, -241,189,187,188,252,226, 29,158,187,115,131,229,188, 1,163,152,205,231,232,198,210,143, 61, 97, 37,136,201, 97, 55,160,115,230, -147,159,124,149,215, 62,249, 50,143,206, 47,216,110,123,198,113,197,124,121,139,211, 27,207, 81, 53, 75,146,118,104,237,112,102, -154,116,148,110, 82,107,146, 58,252,251,148,126, 24,189, 39,244, 29, 33,193, 56,140, 12, 93,102,236, 21,195, 38,146, 7,207,250, -106,160,203,154,216, 52,232,113,164, 46,122,130, 74,101,134,228,101,175, 8, 12,222, 66, 26,176,170,196, 39,103,209,177, 84,149, -129,236, 81, 38,177, 13,154,171, 62,211, 26, 69, 26, 51,163,246,100,101,169,231, 11, 30,221,127, 68, 80, 25,101, 53, 99,113, 14, -212, 45,184, 10, 92,101,112, 77, 75, 51, 91, 82, 53, 51,154,118,198,172,109,152, 55, 21,179,218, 81, 25,141,211, 34, 66,114, 70, -112,185,146,125,238,112,174, 65,215, 53,218,200,197,196,150, 96, 17, 17,246,137, 2,192,104, 93, 50,211, 3,218, 86,178,203, 69, - 73, 2,101, 17,101,198,152,101,100, 60,122,240, 94,222, 7, 10,172, 51,228, 41, 82, 21,201,200, 78, 42,203,165, 42,183,224, 3, -217, 40, 84, 85,145,250,154, 24,125, 81,202,195, 34, 87,168, 52, 98,212, 64,229, 28,117,223, 50,143,153,109,239, 25,123, 41, 94, -169, 82,228, 20,139, 83,196,176,208, 6, 67, 98,245,248, 93,137,121, 30, 71,250, 49, 96, 92, 69,221, 88,150,203, 37, 95,248,244, - 11,172,206,159,112,243,100,193,217,141, 57,198,102,114,244, 44,103, 53,149, 86,204,234,150,156,132, 91,239,154,150, 24, 19,206, - 58,241,162, 71,104,107, 37, 62,244, 16, 25,146, 42, 60,142,192,102,232,169, 79,150,178,210,152, 4, 3,249, 0, 65, 17,145,168, -192, 84,148, 50,215,104,133, 83,105,156, 60,221, 41,167,107,133, 52, 33, 29,127,222, 39,133, 30, 64, 84,185, 96,194, 85, 81,200, -135,160, 24,250,145,110, 55,210, 53,158,174, 31,105,187,145,218, 88,180,147,231, 27, 99,113,117, 69, 85, 85, 82,220, 43, 75, 99, - 53, 99, 97, 62,236,215,167,229,111,159,130,105,246, 62,172, 61,201,244,192, 43,157,110,237,202, 24, 84,114, 24,151,177, 85,162, - 82,135,230,115, 18, 7,114,180,127, 87, 79, 93,170,149, 41, 26,166,146,226, 40, 47, 74, 36, 37,133, 9, 19, 72,205,145, 48,140, -201,176,218,245,156,239,214, 60, 94,119, 92,173, 55, 60,191,245,220,186,221,115,114,107,160, 61,147, 73,144,105,230, 40, 59, 67, - 23, 34,221,255, 48, 58,245,239,134, 6,125,138,185, 61,165, 82, 77, 47, 98, 62,234,210, 85,241, 6, 78,233,100,114,118,101, 18, -145,221,118, 75,207, 64,223,247, 24,205,129, 50,167,165, 88,121,223,161,230, 45, 26, 77, 83, 47,216,172, 86,108, 87,107,116, 76, - 37,101, 9,180,181,124,236,249, 23,232, 67,166, 15,153, 97,220,178,221, 94,200, 27,220, 86,172,134,200,234,209, 57,117,211, 16, -178, 97, 12, 29, 49,105,162,171, 56,185,253, 49,230, 65,144,126,231, 79,206, 25, 71,121,184,149,131,144, 34,167, 55,111,162,208, -220,122,254, 5,158, 92, 94, 17,180, 38,228, 76,179, 90,209,143, 35,219, 97,199,251,119, 63, 96,190,156,147,115,164,219,109, 89, -175,174,246, 98,172,205,118, 83, 10,164, 97, 67, 39, 30, 89,227,168,116,133,107,150,156, 44, 22,180,181,197,233, 68,214,146, 75, -174, 68,122, 42, 88, 80, 68,169, 43,171,139, 34, 50,116, 14,171, 52,149, 45,133, 73, 43, 81,205, 22,127,231,113,166,219, 97,218, - 34, 60,244, 41, 32,229, 48,174, 42, 33, 9,230, 48,198,154,200,114, 19, 53, 73, 33,129, 25, 19,111, 91, 84,218, 18,225,171, 11, - 68,101,186, 17, 59,231,168,107, 71, 93, 25,156,201,104, 37, 59,229, 28, 71, 82, 80,101, 9,159, 72,201, 98, 82, 32,235,128,210, - 82,237,178, 18,191,187, 42, 54,133, 28, 11, 12, 36,140,114,136, 22, 48, 82,156,246,161, 69,253, 46, 20,177, 26, 87,201,164,198, - 26,183,143, 88,213, 31,182, 75,211, 6,109, 68,157,107,172,120,117,179, 2, 55,155, 81,183, 21,183, 23,160,179, 28,184, 77,237, - 64,137, 64, 40,167,196,118,181, 18,145,102,244, 60,122,248, 8,173, 53, 47,189,244, 49,140,115,228,156, 25,135,158,126, 12,172, -118, 35,187, 49,243,202, 39,207, 56,189,121,179,236,237,237,100,191,144,231,163,160, 57, 39,192, 76, 70,130, 45,146, 46, 93,101, - 72,120, 53, 50,166,145, 77,128,128, 4,182,156,111,183, 12, 42,211, 23, 5,178,173,172,136,124,148, 0,166,180,149, 28, 2,111, - 13, 49, 6,180,169,100,197,145, 76,185, 92, 73,150,194,106, 20, 78,121,164,140,173, 99, 34,140,137, 59, 47,220,226,226,242,138, -174,207,216,214, 16, 60,248, 62,148,247,147,162,174, 43,234,166,161,170,154, 61,112,164,174,107,234,186,194, 57,209,146,180,181, -163,118, 22,103, 53,149, 45,225, 57,214,146,181, 36,161,233, 66,131, 51,198, 10,170, 84,233,114,136,203, 37, 45,134, 64,142,146, - 93,129, 50, 56, 50, 1,241, 91, 39, 25,106, 48,140, 1,162, 72,146, 66, 89,171,200,204, 65, 86, 19, 83, 84, 53, 41,203, 68, 70, - 70, 26, 16,133, 11,160,140,198,182, 51, 50, 3, 41, 5,180,177,184,198,178,180, 13,174,246,244,189,103, 28, 51, 67, 8,204,198, - 72,223,143,210,145, 14, 35,195,232, 73, 41,160,114, 68,169, 68,213,180,204,231, 51,116, 6, 87,213,220,168, 28,218, 10,105,211, -213, 21, 41,120, 62,246,226,115,228, 20, 88,156, 46,168,103, 21,201,247,156,158,157, 82, 57,203,172,109,200, 40,134, 97,160,105, - 22, 37, 37, 83, 84,238,214, 88,250,161,163,117,114,137, 23,225,190, 4,178,100,107,168,107, 89,233,228,105,242, 80,214, 90, 28, -157,209, 31,222,220,229, 3, 41,244, 67,194,146,114,249, 76,211, 28, 60,229,103,243, 38, 38,114,166, 15,114,225,233,251,158,110, - 87,209,205, 26,186, 82,188,181, 82, 40, 43, 22, 55, 99, 37, 27,161,174, 43,170,202,137,120,210, 74,168, 83,142,169,172, 86,190, -139, 10,254, 40, 69,242,218, 68,175, 76,105,246,105,115,165, 6,237, 53, 96, 5,243,170,143,118,230,250,232,252,146,207, 83, 10, -123, 65,228,230, 56,146,172,101,212,254,218,232, 63,166,140, 79,208,143, 35,235,174, 99,236, 58, 54, 93,207,102,183,229,118,223, -113, 54,142, 44,110, 6,234,152,176, 46,160,173,104, 64,254, 7, 81,212,127, 37,163,249, 61,111,190,136, 58, 76,177, 15,237,247, - 28,211, 3,165,147,132,141,170, 84, 68, 65, 9,101,165,224,239, 54, 91,201, 2, 46, 89,218, 85, 85,211,117, 59, 18, 2, 78,240, - 36,178, 78,212,206,114,227,230, 41,151, 79,206, 89,156, 44,229, 1,219, 68,182,193,176, 94,247,108,198,145,168,160,243, 3,163, - 31, 64, 25,252, 40, 9, 71,117,229, 48, 57, 97,171,138,246,228, 6, 39,139, 83,170,230,132,186,110,112,214,210,182, 13,203,197, -156,232, 61,143, 31, 63,230, 47,254,212, 79,240,224,225, 99,206, 47,174,208,202,112,251,121,207,173, 59,119,176,179,150,175,189, -254, 58,227,112,151,222,123,208,137,223,253,143,253, 30,134,126,203,118,187, 37, 19,217,174,215, 88,165, 72, 62,162,179,162,219, -245,108,155,142,202,213,164, 44,249,200,195,213,138,198, 90,114, 24,153,153,204, 73,165, 48,166, 69,229, 40, 74,211,164, 9,211, -248, 43, 5,116, 74,232, 4,198,106, 42,163,105, 42, 75, 93, 89,172,214,194,242,215,250, 67,166, 52,135, 93,123,230, 72,247,160, - 14,214,150,233,159,122, 42,234,229, 54,127,192,194, 22,142,179, 82,101,124,170,142,148,166,101,148,181,223,191, 43,140,205, 88, - 19, 81,121, 36, 6, 69, 24, 69, 81, 78,142,152, 56,162,188, 67, 87,101, 20,173, 45, 90, 23,210,215,116, 41, 41,250, 11, 82, 57, - 82, 98, 64,165, 80, 48,154,115, 78, 78,192,186,150, 49, 36,130,210, 88,231,132,214,102, 93, 1,211,148,241,217,209,247,167,180, -222,123, 93,165, 43, 54,101,215,101, 80, 70, 99, 84,102,220, 93, 50,174, 31,179,108, 64, 87,167, 5, 37,234,233,187,157,116,143, - 74,118,175,171,213,134,205,118, 71,219,182,108,119, 59,121,238, 77, 67, 51,215,184,106,198,233,169,161, 27, 60, 24, 9, 66,249, -218,215,127,145, 31,248,245,191,129, 91,119,238, 16,117, 77,196, 20, 27, 77, 89,159,232, 3,236, 67,229,194,137, 54, 65,126, 14, - 30,168, 34,201,121,146,115,244, 67, 71,174, 44, 23,221,134,203,245,154,205,174,163, 78,153,214, 56,146,207, 12, 99,198, 85, 74, -246,230, 90,137,191, 56, 37,170, 36,249,215,209,251,178, 11, 85, 12, 62,224, 3, 92,109, 6,124, 86, 12, 62, 98,181,120,157,189, - 31,233,123, 79, 86, 20,124,180, 76,223,140, 46,239,165,186,162,174, 90,234,170,166,174,106,172,149, 75,148,177, 22, 87, 85, 52, -101,188,106,173,162,170, 14,122, 11,235, 28, 49, 43,108,249,249,107, 93,149,169,202, 36,190,205, 88,103, 81, 36,194, 48, 8,231, -126,148,176,142,172, 20, 86, 75,183, 26,179, 98, 12,158,108, 44,218, 71,250,212, 65, 89, 27, 77,171,217,156, 82,233,163, 65, 69, - 89,255, 40,171,132, 70,151, 68,252,153,181, 69, 25, 77,180,137,228, 35,174,140,233,173,211,180, 85,194,182,145,161, 15, 88, 31, -240,163,199,182, 21, 49, 38,154, 81,200,104,193, 75, 74, 87, 46,204,242,138, 76, 10, 1,103, 20,206, 8,106, 24,149,176,206,161, -245, 12,147, 51,139, 69, 75,179,172,105,230, 13,126,183,225,236,185,219,180,179,133,172, 13,148, 46,147, 20, 71, 55,120,193, 76, - 91,139,209,153, 77,183,229,230,233, 29,214,155, 29, 89, 85, 50,214,213, 14, 83, 59,170,166,150, 75, 49,135,130, 23,203,100, 37, - 29,133, 27,125, 55, 75,235, 36,162, 61,176,216,143,226,136,243,209, 57,146,243,145,144, 58,239,185, 49, 57, 75,240, 75, 55,140, -184, 93, 71,179,169,169, 92, 69, 85,201, 4,193,166,188,143, 11,183, 90, 38,122,117, 85,209,212, 21,245,232,241, 33, 10,196, 50, -167,239, 46,250, 58, 10, 94,158,152, 20,123,225,246, 52,170,209,170, 92,178,211,126, 10,118,152,206, 73, 76,172, 62, 26,199,171, - 73, 48, 56, 97,235,202, 27, 50,146, 74,164,114,249,125, 28, 98,204, 69,152, 42, 56,221,115, 31,217,244, 3,155, 93,199,213,122, -203,115,219,129, 91, 59,207,217, 45,143,173,101,253,102,173,197,170,143,184, 85,253, 74,198,238,127,163, 74,248, 95,201,231,121, -198, 62,167,228,134, 24, 50,165, 0,201,173, 59, 21,153,191,182,229, 33, 80, 73,110,204, 42,145, 74, 38,116, 12, 30,103, 43,230, -179,154,197, 98, 73, 93,183, 60,188,247, 30, 99, 8,152,170,146, 23,163,228, 56, 47,230,115,108, 81, 81,239,250,158,110,179, 99, - 23, 51, 99, 10, 92,108, 59,118,163, 39,107,176, 85,121,147,212,150,128,220,234, 99, 55,162, 76,160, 25,192,174, 59,124,184,135, - 81, 18,160, 80,215, 78,216,194, 77,195, 11,207, 63,207,139, 47,190,200,213,195,247,121,120,255, 33, 55,111,220,228,226,201, 57, - 95,248,204,231,248,228, 23, 62,199,106,189,230,203,223,243,125,184,170,226,141,111,125,147,247,222,127,143,221,118, 77,109, 21, - 63,246, 99, 63,198,111,254,225,191,131,213,250,138, 15, 62,184, 71, 68,222,240,227, 56, 22,213,127, 70, 23,241, 73,179,152, 51, -175, 26, 94,189,179, 96, 97, 6, 76,106, 8, 73,209, 5,200,218,177,235, 37,155, 93,231,136,201, 1,155, 51, 22,139,213,153,202, - 40,106,107,168,157, 40,140,181,226, 8,204,112,132, 60,221,147, 2,143,222, 10,215,108, 32,165,224,105,246,255,156,222,192,106, - 10,232, 41,251, 78,173,165,216,236, 71, 98, 89, 18,150,166,217, 64, 78,138, 20, 34, 62, 71,100,209, 29,138,165, 80, 50,231, 77, -172,208, 49,200,135,149, 72, 76,180,151,184, 89,145,139,151, 46, 86,214, 64, 18,195, 40, 93,135,181,150,106, 54,227, 76,215, 52, -179,196,152, 50, 65, 75, 78,182,115, 50,194, 55, 69, 57,175,141, 46,248, 80,189,127, 77,180,146, 95, 75, 87,168,100, 21, 84,196, - 84, 99,191,102, 8, 35,126,216,144, 66,207,233,201, 2,239, 51, 90, 91, 90, 53,103, 28,122,156,177,108, 55, 27,238,189,255, 62, -239,222,253,128,249,124,206,141,155,183,169,154,150, 97, 76,140, 99,160,178, 53, 84,144,178, 38, 43, 67,191, 27,184,220, 94,240, -223,253,169, 63,193,255,248,119,254, 14,176, 51,218,229, 25, 40,197,118,179,161,110, 26, 41, 98,211,129,153,100,237, 97,115, 41, - 80,106, 71, 54, 14, 85,215,232, 81, 70,151,175,191,241, 77,126,246, 47,253, 28,233,226, 1,126, 16,241,234,102, 24, 49, 88,114, - 18, 34, 89,206, 1, 50,146,175,173, 52,227,224, 49, 74, 49, 14, 17,165, 42, 70, 31,112,149,146,212,179, 32, 54,186,136, 92, 24, -235, 90,113,117,185, 38, 43, 85,232,139,150,193,135, 50, 81,200, 7,107, 90,233, 62, 52,101,101, 16, 35, 57,201, 1,235, 42,135, -173,107,234,198, 81, 87, 86, 10,156, 86, 88, 39,222,235,172, 4,149,171,141, 37,163,100,231,238,196,230, 38,158,229,136, 86, 72, - 94,117,140,165,139,135,188,247,156,139, 77, 80,153,204, 56,110, 14, 48,169,201,168, 88,158, 31, 93,242,182,147, 47,201,141,218, -145,181,140,140,179, 86, 66,149,203,242, 61, 40, 39,186, 14,114, 89,215,100,112, 46, 19,213,128,169,106,124,237,169,114, 34,196, - 76, 21, 18,141,143,178, 11, 30, 61, 41, 30, 82,199, 84,138, 56,131, 88, 3,157,136,243, 92, 83, 50, 14,156,163,153, 85,216, 70, - 46, 14,138,200,205, 59,119,168, 27,241,247,199, 32, 5,116,244, 94,162, 69, 67, 36,198, 17,101, 43, 82, 12, 24,235,200,218,145, -162, 97,140, 34,234, 82, 85,133,169, 43,178, 18,106,168, 78, 83,140,105, 46, 40,214,201, 79,254,209,235,216, 41,110,152,163,252, -136,107,140,145,163, 95, 31,232,147, 71, 73,129, 64, 44, 43,181, 97,244,116,131,103,219, 13,212,117, 71,237,164, 32,214,245, 81, -247,172,132, 42, 89, 85,242,222,157,154, 18,173,194, 52, 99,120,166,212,237, 53,239, 71,194, 57,181,103,199, 78,126,123, 43, 81, -187,198, 98, 74,147,169,148,190,238,114, 57, 26,189, 43, 93, 38, 54,147, 43, 75,233,130,252,133,156, 3, 38,219, 2, 47, 50,215, -240,205,162,217, 41,151, 33,192, 39,133, 79,145,188,238, 24, 70, 79, 63, 4,250,110,100,220,141,204, 22, 21,117,237, 74, 92,172, - 57, 40,156, 83, 74, 7, 5, 96,230, 25,184, 11, 71,226,181,143, 34,186,253,245, 20,239,107,136,218, 15,161,201,125, 20,124, 6, -101,202, 62, 70,110,204,170,220,224,180,158,252,208, 34,134,146,215, 87, 30,162,166, 22, 78,112,221,212,180,117,131, 43,183,162, -249, 98, 65, 55, 12, 60,119,118,147, 87,110,157,162,181, 4,222,247,222,211,220, 94,112,239,209, 35,190,253,224,156,251,143,183, -172,119,158,144, 20, 85, 51,167,106,151, 84,117, 35,246,245,228,233,251, 53, 62,139, 45,143, 36, 1, 29, 99,191,165,235, 54, 50, -218, 3, 76, 25,139,174,102, 51,134, 97,224,237,111,183, 44, 42, 71,142,112,254,232,156,237,213,150,205,213,150, 87, 94,123,141, - 79,191,242, 9,158, 59,187,201,162,169,184,125,231, 57,190,240,185,207,115,235,206,109,126,234,167,126,146, 63,243,167,255, 36, -255,253, 95,249, 37, 86,171, 13,191,243,183,255, 78,222,125,239,125,126,252,207,254, 57,174,174, 86,104,165, 8,227, 40, 5, 56, -238,200, 24,172,110,153,217,204, 11,167, 53,117,142,228,164,217,230,134, 39, 15, 87,188,252,242, 11,152,213, 21,249,210, 11, 45, - 42,169, 34, 78,211, 56,173,169,140,161,178, 7, 15,176,158, 0, 26,215, 68, 49, 71, 55,108,125, 61, 46, 87,113, 72, 21,201,197, -146,144, 75,241,223,235, 41,178,222,123,210, 35, 71,251,169,146, 85,109,178, 41,152,128,120, 68,123, 74,152, 56,177,215, 41,189, -146, 8, 39, 93, 86, 18,115,156,132,188,166,146, 70,233, 36, 9, 91, 57,147,116, 33,218,229, 41,253, 72,237, 81,174,202,214,184, - 22,148, 83,184,100, 72,198, 18,109,181, 79,185,147,125, 88, 9, 91,208,135,128, 33,173,244, 83,182,158, 82,228,139,117,172,223, -109,121,252,240, 3,102,198,243,226,157, 91,124,251,141,111,176,156,181,180, 77, 3, 40,194, 32, 65, 59,179, 90,172,137, 55,111, -220,228,241,197, 5,222, 7,182,219,142,217,201, 13,154,186,225,226,241, 19, 54,155,173, 36, 51,161,233,124,226,241,229,138,102, -177, 96,136,129, 95,252,249,191, 68, 63, 6,126,240,171, 63,196,197,147, 39,188,249,230, 91,216,202,242,183,253,240,223,201,216, -117,100, 37,113,195, 86,105,146, 10,228,216,243,224,193,123,196,113,160, 54,154,110,125,201,195, 7,247,184,127,239, 46, 23,143, -159, 48,222,127,196,205, 74,172,122,221,144,113, 90, 70,130,147,211,196, 89, 67, 24,189,136,169,178,224,117,167,117,138, 53,142, - 20, 36, 95, 32,102, 69,214,154, 49, 6, 57,236,172,101, 12, 3,161,184, 8, 70, 95, 4, 71, 74,149,245, 24, 37,195,219,202, 52, - 33, 79,133, 51, 18,131,136,243,246,143,208,196,100,119,150,122,138,208, 84, 98, 59,155,152,222, 5,135,112,205,163, 44,143,141, - 46,133, 85, 34, 54,197,251, 91,158,213,164,192, 32,223, 67,241,114,203, 74, 38,202,229, 38, 70,121,191,147, 75,128,141, 71,233, - 44, 54, 66,165, 37, 65, 48, 37, 48, 6,165, 44,218, 53,132,161, 35,147, 48,202,202,215, 31,163, 52, 18, 51, 77, 12, 1, 21, 53, - 54,103,178,178, 84, 49, 49,250, 72,240,161,176, 48, 98,129,182, 36,226, 56,136, 5, 77, 35,133, 91, 67, 51,107,168,106, 41, 94, -174,182,168, 74,149,166,198,178, 88, 46, 81, 74, 83, 85, 21, 93, 24,246, 22, 84, 91,214, 92, 41, 10,105,177,170, 28,131,143,162, -187,176,142, 24, 16, 33, 46,128,115, 18,135,170, 20,185,160, 91, 67, 8,251,143,105, 61,122,157,228,249,209,132,151,235,199,252, -161,152,231,107,139, 61, 14,136,214, 9, 89, 86,212,243,195, 24,216,245, 3,205,174, 47, 46, 8, 17,116,106, 99,196, 34, 87,132, -174, 50,253, 43,250, 28,107,240,209,160,178, 92, 14, 39, 72, 90,126,202,137,197,177, 9,247, 40,109, 78,208,136, 22,157, 45, 58, -218, 61,100,106,178,169, 82,168,111,170, 8,228,152, 72,146,250, 16,203,178, 95, 95,148, 45, 78, 84,169,196, 72,235, 35,133,253, - 52,217,148, 14, 94,165, 44,151,129,156, 25, 66, 18, 46,192,197,154, 20, 51,126, 8,156,156,136, 96,208, 8, 7,193, 94, 47,234, - 71,192,151, 15,235,150,175,199,103,126, 52,156,230, 56,192,229,111, 70, 55,127,252,156, 92, 83, 94,239,181, 13, 83, 12,103, 65, - 64,106, 35, 7,123,137,110,173,156,140,144, 69, 88, 99,176,218, 97,148,101,183,235,121,114,177,226,135,190,242, 27,185, 61,111, -232,250,129,119,223,191,199, 55,190,245, 30,239, 61,186,224,193,229,154,157,151,192,128,170,110,121,233,227, 31, 71,161, 25,135, -145,208, 15, 12, 93, 7,217,227,140, 28,108, 22,141, 50, 10,173, 2, 93,191,147, 32,123, 50,131, 15,251, 31,238,110,119, 1,218, -176, 90, 95,112,101, 29,173,210,220,123,242,152,147,118, 46, 29, 67, 85,241,217,213,154, 87, 95,254, 56, 79,238,125,192,110,117, -197,242,228, 38,171,203, 43,254,145,255,201, 63,202,151,191,231, 75,252,193, 63,248,239,241,237,119,222,229,143,252,103,255, 25, -223,255,253, 95,225,159,254,167,254, 25,254,252,159,255, 73,190,246,181,175, 51,134, 94, 50,211, 53, 40, 55, 99,219,237,120,241, -197,207, 48,111, 27, 92, 86, 12, 25,198,161,229,237, 7,239,243,213,191,253,135,233,190,246, 11, 52, 78, 17,209,164,104,247,118, - 54,138,226, 55,151,241,218,132, 74,206,121,194,189, 22, 1, 76, 9,209,217, 43, 72,211,225, 86, 62, 41, 67,133, 43,160, 14,214, - 32,165,143,160, 13,135,110, 29,196, 99, 29,211,196,139,201, 68,157, 15,225, 40,123,152, 75, 1, 92, 25, 8, 49,224,227, 64, 21, - 50,117,200,184, 26, 76,149,112, 21, 84, 85,177, 56,218,114,107,206,134,140,116,235,162, 6, 55,147,100,110,159,125,160,209, 84, - 56,148,146,104,205, 84, 24,214,202, 88, 74, 74, 69,193,170,170, 61,193,112,159,104,151,143,126, 93,124,245, 42, 70,206,239,127, -135, 71,239,125,139, 59,103,115, 22, 55,150, 52,117,195,208,245, 92, 93,174,184,188, 90,179,221,118,168,156, 57, 89,206, 89, 46, -102,220,121,225, 5, 78,111,221,228,253, 15,238,243,232,241, 37,171,171, 21,183,110,220, 32, 7,143,142, 35, 58, 5, 1, 79,164, - 68,232,119, 60, 92, 93,241,242, 39, 94,225,193,221,247,217,172, 87,252,220,184, 37,198,200,147, 39,231, 60,124,244,144,153,150, -117,205,110, 24, 73,170,230,133, 23, 95,162,105, 91,174,206, 47,121,252,232,161, 48,243,201,248,110, 75,240, 61,202,100,250, 97, -160,181,142,202, 26,198, 20,217,165, 72,149,101, 91,238,163,172,185, 84, 22, 43, 98,206,106, 31,173,233,163, 39, 68,141, 65, 17, - 83, 64,103, 87,252,199, 18,218, 81,213, 21,227, 24, 72, 89,188,237,104, 75,223, 7,241, 62,167, 36, 17,172,198,148, 9,103, 57, -212,224, 40, 89, 78,124,189,131,247, 52,177, 46, 99, 91, 41,252, 41,150, 40, 81, 35,250, 12,125,244, 60,202, 26, 93, 16,164,130, -245,206, 68,193, 15,138,197, 40, 79, 79,217,254,182, 64,206,146,224, 23, 66, 40,146, 42,176,101,255,172, 85,145,176, 41,113, 75, -136,158, 65,131,146, 61, 59, 90, 17,162,228, 16,232,202,129,178, 37, 80, 37,137,245, 54,137,159, 61,133,128, 42,218, 17,179, 79, -212, 83, 88,101, 48, 37, 36, 37, 86,134,232,125,233,206, 51,169,210, 80,176,189, 85, 83, 73,228,103, 91,225, 42,115, 32,215, 89, -209,204, 24, 52, 51, 87,201,133, 54,202,217,238,156,219, 7, 93, 89,103, 25,131,103,232,123,218,217, 92, 46, 76, 24,198, 16,193, - 86,132,156,112,214,146, 20,140, 81, 84, 5, 42,136,183,223,143, 30,239,143,139,250,245,110, 83, 29,219, 96,167,243,225,175,231, -184,127,170,113,204, 89,228,170, 99, 76, 48,122, 92, 55, 80, 91,131,179, 2, 94,202, 57,203, 68, 77,137, 24, 82,112,222,165, 81, -209,147,237,241,218, 59,254,163, 39,196,211, 58, 96,143,142, 45, 5,219, 84, 82,103,242, 81,134,201,113,160,152, 50, 7,187,238, -196,179,184, 70,155, 59, 96,237, 50,250,154,221,245,186, 62, 71,239,129, 87, 70,155,253, 37, 73, 23, 80, 88,200,138,109,239,201, - 23, 87,140,227, 64, 93, 87,162, 65,146, 23, 64, 93, 19,163, 61, 45,102,248,176,174,252,195,254,253,184,224,127,120,134,246,223, - 28,143,251,211, 75,130, 92,200,109,211, 27, 82, 44, 40,114,149, 79, 90,210,217, 42, 43,105, 73,163, 31, 25,148,230,198,217, 45, -140,171,240,222,243,157,247,222,231,191,250,147,127,134,215, 94,125,129, 15, 62,184,207,189,251, 23, 92,109, 6, 66, 82,120, 52, - 41, 91, 78,110,220,230,133, 23, 63, 70,138,158,110,125, 69, 26,118, 60,119,182,224,149,207,190,200,114,217, 50, 95,204,196,235, - 27, 37,187,125,183,235,216,238,182, 44, 78,150,248,148,121,247,253, 15,120,235, 59,239,179,237,250, 61,235, 58, 43,195, 54, 68, -242,172, 37,249,145, 52, 40,174,186, 45,205,233, 41,219,190,227,239,254, 45,127, 55, 31,188,253, 6,119,223,251,128, 71,151,151, - 12, 99,228,207,252,233,159,224,183,252,189,127, 15,255,194,191,248,251,248,183,255,157,223,207,106,187,225, 39,127,234,207,243, -237,239,188,195, 63,244, 15,254,131,252,173,191,241, 55,242, 95,255,215,255, 37,119,239,190,203, 48,116, 40, 51, 67, 69,232, 2, - 60,186, 92,115,182,108, 89,123,197,207,191,254, 30,203, 59,175,210, 46,206,196,159,173, 34, 74,101, 70,101,136,200,206, 45,150, -219,124,136, 1, 19, 21, 65,139,151, 63,151,157,220,225, 25, 72,207,132,182, 80,216,255,135,203, 96,190,198, 84, 46, 57,134,135, -212,182, 41, 4, 48, 79,221,127, 56, 2, 2, 31, 84,176,199,183,105, 93,232, 92,117, 93,211, 54,129, 89,155,136, 81, 83,103, 75, -133, 19,222,182,170, 48, 90,242,174,181,171,228,112, 53, 71,118,146,189,232, 79, 20,207, 89, 75,128,131, 20,251, 98, 19, 49,210, -153, 83,198,104, 73, 29, 82,236, 14, 72, 98,245,108,111, 34, 39, 11,143,238,189, 71,149,119,220,123,251, 27,220, 79,129,223,252, -155,255, 46,124,204,188,255,198,155,212, 77,203,174,144,178,172,181,216, 33, 80,213,137,166,117,104,231,120,225,197,151, 88,239, - 70, 98,244,144, 2, 58,121,108,142,132, 41,178, 49, 8,200,229,124,179,225,209,189,251,156,222,188,193,227,135, 15,184,124,244, -128,170,174, 81,192,246,242,130,159,250,137, 31,167, 46, 98,179,213,102, 71,238, 55,188,250,234,171,248,237, 57,111,252,210,207, - 81, 91,205,173,179, 19, 82,202,124,251,238, 61,238, 62,184,199,195,139, 21,207,147, 73,141,101,200,176,141,129, 62, 38,218,146, -220, 5,224,135, 32, 93,127,140,120,149, 73, 74, 19, 66,201,145, 63,112, 55,112, 6,118, 33, 80, 23,161, 99,191,235,100,111,157, -196, 37,225, 51,152,114, 67,119, 90, 81, 85,166, 64,167,142,139,114,249, 59,125, 33,132,133, 88,198,209, 73, 98,116, 17, 59,157, -113,134, 28, 19, 33,121,220,145, 29,143, 44,121,239, 49, 75,146, 88, 82,145, 52,137,102,141, 41,145,181,105,111,171,242,251, 81, -191,221,239, 58,141,177, 34,200,211,197,169, 81,126,173, 74, 80,142,114, 26, 76,222,143,109, 15,211,197, 50,221,113,149,124,173, - 5,145, 58, 17,215,178, 31,101,162,100, 28, 57,136,243, 39,149,105, 80,178,134, 96, 32,232,140, 85,145, 28,188,124, 46,228, 18, - 81,183, 13, 85, 83, 97, 42, 67,214,133,207,160, 21,211, 0, 44, 75, 5,192,104, 75,223, 15,164,148,104,219, 22,239,165,232,165, -224, 81, 10,134,221,192,114,126, 34, 58,146,148,240, 73,163,156,198,199, 32, 23,187, 24, 8,101, 31,157,125, 96, 28, 70,198, 97, - 44,185,243,161,236,212,205,181, 6,144,163,105, 94,254,144, 44, 8,173, 37,113, 79,231, 41, 22, 91, 95, 27,183, 63, 19, 28,118, -141, 76,151, 24,134,192,214, 14,114, 33, 42,180,202,186,174, 69,232, 87,242,198, 39,114,157, 86,106, 31,193, 45,164, 56,245, 93, -106, 76,222,135,176,236,199,235,186,136, 80,141,189, 86,227,174,223, 66, 14,163,245,195,173,230, 89, 72,139,220, 25,115,193, 24, - 23,240,213,181,194,126,200,107, 48,214, 96, 1,147, 4,144, 54, 33,106,173, 51,232,202,146,181,161, 31,101, 13,150,201,216,186, -114,135,104,238,227,130, 94,110,184,233,104, 7, 18, 11, 10, 53, 23, 8, 11, 71,121,219, 40,245, 76,178,215,241,247,163, 10,139, - 93,237,243, 98,143,198, 30,197,210,150, 21, 79,135,122,126, 36,131, 92,125,200,139, 41, 63, 3,189, 7, 24,164,156, 5,250,144, -165, 75,108,172,193, 39,133, 81,150,147,229, 41, 85, 91,113,118,227, 20, 63, 26, 30, 92,172, 56,191,188,194, 89, 75, 86,153, 16, - 69,237,174, 82,197,199, 95,254, 4,203,121,195,184,187,130, 48,240,153, 23,111,241,137,151, 62,199,199, 63,246, 60,143,238,127, -192,147, 39, 79,184,119,254,136,243,203, 21, 87,235, 29, 40, 75, 24, 7,172,206,124,236,197,231,121,233,227,175,242,210,115,119, -104,170,138,229,233, 13,238,222,127,200, 59,239,221,101,181,217, 17,149,162, 31, 50,139,166,102,187, 93,241,137,151, 94,230,147, -175,126,156,247,223,121,135, 95,252,133, 95,228,135,255,142,223,204, 39, 63,253,121,126,246,103,126,138,203,203, 13,231, 31,220, -229,143,255,177, 63,206, 63,242, 35,255, 56,255,218,255,238,223,230, 95,249,125,255, 2,187,221,134,247,222,123,135,127,255, 15, -254,251,252,250,175,252, 32,255,252, 63,255, 47,241, 99,127,242,199,248,229, 55,126,153,111,126,243, 45, 84, 54,220,123,231, 46, -172, 46,168,102, 13,239, 62, 94, 81, 47,159,227, 43, 95,249, 44,111,188,254,117,130,239,167, 0,194, 18,151,150,100,142,158,216, -131, 34,116,144, 7,198, 24,117,200, 62,191,166, 82, 45,251,244,114, 25, 56,206, 28, 63,236,204, 11,170,180, 20,111, 81,195,170, -242, 49,189,137, 14, 69, 86,232, 75, 7,204,103, 86, 7,230,191,100, 33, 91,154, 70,192, 42,117,210,100, 44, 74, 87, 24, 83,227, -234, 6, 87,181,104, 87,163, 92, 13,174, 42, 36,166, 90, 66, 92,140, 69,219,114, 75, 46,163,251,125,194, 92,121,142, 20,182, 28, -198,121,207,160,103, 74,168, 83,135,160,169, 61, 72,167,188,103,140,202,144, 4, 56,242,238,183,191,141,238,206,121,225,102,203, - 11,183,207,248,198, 55,190,201,189, 15,238,177,186,184,228, 91,111,125,155,219,207,189, 72, 68, 81,215,141, 48,170,163,167,239, -119, 52,245,162,168,105,229, 48,218,118, 61,221,110, 71,165, 19, 70, 69, 44, 69,157,159, 50,195, 32,161, 54,235,213,154,118, 54, - 99,232,122,118,126,196,123, 79, 8,145,245,102,205,108, 54,227,206,157, 59,248,186,226,242,201, 57,239, 40,232,214,151,108, 55, -107,174,158, 60,228,198,141, 19,110,222,248, 56,174,174, 89, 15, 3,223,122,251,109,134, 97, 36, 87,154,117,231,217, 40,197, 42, -101, 28,226,156,144, 49,108,137, 69,214, 9, 67,198, 23,207,242,224,161, 31, 18, 78, 37, 17,170, 41, 77,109, 21,102,200,152, 44, - 49,158, 99,200, 36,157,137,217,208,197,184,143,183,157, 84,198, 19,148, 67,198,168,121,191, 35,165,116,220,130, 36,150,206,127, - 28, 70, 12, 80, 57,139,114,142, 17, 47, 33, 48,198,146, 40,177,206, 26,114, 10,196, 80,230,240,197,151,157,147,136,218, 38, 37, -178,116,251,153, 20, 18,193, 75, 81,207, 33,144, 66, 32,199, 67,226,164, 8, 26, 37,196, 69, 89, 43,126,120,103,161,150, 73,221, - 20, 80,111, 93, 75, 10,126, 2,102,148, 34, 26,166,210, 39, 29,117, 46, 99,221, 44,151, 19, 85, 14,122,148,162,178,197, 71, 30, -189, 20,127, 43,196,196,233,156, 52,214, 82,183, 45,218, 57,112,138,100, 74,135,169, 21, 36, 15, 99, 79, 26, 71,198,174,195, 76, - 19, 56, 37,175,161,177,194,136, 8, 94,180, 70, 35, 80,217,134, 49,102,198,177, 71, 89, 75, 8, 81,114, 17,156,149, 49, 59, 74, -194, 93,124,241,140,143, 35,195, 24, 36, 15, 64,179, 23,187, 29, 9,198,247,240,182, 61, 74, 57,171, 61,169,109, 31,144,178, 47, -178, 82, 23,210,113, 29,226,217,105, 94,206,194,142,240,163,162,211,194, 79,208, 74,162,109,235, 16,177,133,212, 54,173, 47, 82, - 76, 71,217, 32, 83,202,228,148,177,126,172,122, 63, 26,243, 31, 97, 95, 49, 90, 66, 85,172, 21,180,178, 50, 69,208,150, 15,106, -121, 37,171,225,163,132,172,167,102, 1,121,175,238,167,104,143,242,132,205,156,240,211, 28,162,197,173,214, 56, 99,168,140, 61, -180, 55, 74, 97,157,197, 90, 9,156,170,139, 64,212, 32,221,124,202, 9, 91, 87,118,143,136,204, 89, 61,181, 63, 47,251,132,105, - 89,159, 19, 49,196,114,208, 7, 98, 25, 33,164,124,204,121, 87, 71,204,176,227,162,126, 56,252,164,176,155,253,218,254, 56, 93, -141, 15,217,167,231,167, 43,249,135,117,254,234,200,138,160, 14,170, 69, 48,133, 40,151,133,130, 53, 42,206,206,110,113,251,214, - 29,218,185,163, 31, 94,229,253,123,239,179,219,238,112,201, 99,114,121, 33,109,230,198,157, 23, 88,220,184, 77, 55, 38,116,222, -241,133,215, 94,224, 75,159,251, 52,227,230,146,111,191,245, 22, 63,254,245, 95,100,181,222,162,141, 37,145,184,220, 14, 60, 90, -143,104,103,137, 62,112,115, 86, 19,222,189,199,119,222,127,196,249,106,139,210,112,235,198, 41, 57,195, 23, 63,253, 42, 87,151, - 43, 30,156, 95,241,100,189,193, 84,134, 79,124,226, 69,126,211, 15,253, 16,163,207,252,210, 55,190, 78,192,242,223,254,196, 79, -243,213,191,229,215,242, 59,255,129,223,193, 31,251,191,255, 95,249,224,254, 99,170,118,198,159,248,127,253,183,252,147,255,212, -143,242,191,254,231,127, 31,255,251,127,247, 15, 48,250, 45,253, 85,199,127,247,227,127,134,183,190,115,151,255,213,255,242, 95, -228, 51,159,255,181,252,244, 79,252,105, 30,191,243, 54,231,239,125, 64, 88,159,209,222,186, 77,123,114,135,182, 50, 60,122,247, -117, 78,218, 36,129, 12, 49,227, 35,132, 36,147,141,132,240,188,149, 79, 48, 89,152,244, 20,206,195, 33,163,248,153,124,241,130, -121, 76, 71, 8,216,242,198,165,236,158,229,141,165,247,221,203,222,147, 90, 18,220,246,194,187, 28, 65,165,253,159, 73, 69,220, - 54,125,158, 54, 75, 80, 72, 72,185, 16,165, 42, 73,101,115,226, 83,214,206,161, 92,133,114, 66, 92, 83, 86, 86, 11, 74, 59,180, -177, 40, 43,243,211,148,101,231,169,212,180, 54, 82,251,175,109,218,245, 75,230, 77, 57,172,138,127, 53, 23, 36,176, 36,199,141, - 37, 56, 38,179,126,252,144, 86,121, 82,240, 60,126,235,107,196,245, 35,238,124,254,179,124,242, 19,159,228,221, 15,158,240,250, - 55,191,133,246, 29, 23, 87,107,134, 44,232,208,155, 55, 12,179,198,201,222, 56, 12,140,131,101,182, 88,226,180,102, 49,155,241, -248,193, 67, 54,171, 43, 78,230, 53,149,211,248, 33,161,115, 34,120,207,118,183, 35,219,154,113, 24,120,244,224, 17,119,239,222, - 37,133,145,211,179, 83, 22,139, 5,198, 40,174, 86, 87, 60,120, 16,153,207, 37, 52,102, 49, 95,112,229,206,247, 23,250,211,211, -155,108,186,129,171,123,247,185,247,193, 61, 54,151, 87, 56, 35,135,240,106, 8,108,172, 97,173,160, 81, 80,165,196,152,160,213, -154,193, 71,234, 70,227,140,162,239,165, 67,206, 25,252,152,137, 85,162, 41,249,226,139,153,231,106, 8, 24,163, 8, 57,227,209, -100, 29,241,209, 50, 36,193, 52, 43,163,174, 93, 20,149,150,203,214,190,225,136, 7, 11,149,144,193, 52,222, 39, 58, 58,129,252, -228,102,191, 10, 42, 97,158, 40, 28,198, 30, 8,148, 33,142, 24,103,229,194, 25, 35, 89,137, 29, 47,169,140,182, 78,254, 30,159, - 8, 99,196,143, 98,129,138, 33,144,252,136,202,177, 60,175, 10,109, 42,249,176, 21,198,214, 96,107,116, 93,201, 51,229,148,132, - 6,121,128, 81,148,214,169, 76, 86,202, 74, 64,133,120,180, 74,148,192, 39,116, 36,251,176, 7, 23, 77,228, 65,152, 38, 72,138, - 62, 69,234,217,172,252, 25,133,113, 53,186,170, 68,252, 89, 41,148, 77,228,108,228,232,235,131, 40,242,135,129,237,213,138,218, - 54, 82,140,116,102, 12, 18,218, 98,180,193,102, 67, 76, 1, 91, 59,161,218, 70,131, 31, 3,201, 56, 98, 62, 52, 97,193,123, 66, - 66,112,213, 33,209,123,207, 48,122, 6, 47, 29,188, 41, 86, 98,246,105,102, 89,176,202,121,154, 4,151,157,243, 94,229, 61, 69, - 47,235, 82,248, 15, 11,182, 61,164,102,191,214, 59,106, 30,143,234, 64, 8,145, 97,244,123, 48, 89,204,153,161,138,184,114, 73, - 10, 69, 84, 23, 98,220, 99,169,247, 21, 42, 23,218,100, 62,164, 64,102,117, 32,158,230,107,236, 83, 25,171,103, 37,107,185,125, -148,120,190,158,100,122, 56, 51,142,226,151,143,167,217,164,242, 61, 31,160, 85, 73,101,146,202, 34,170, 60, 10,144,153, 58,114, -103, 77, 25, 20, 30,224, 55,117,229,168, 43, 71, 85,137,128, 89, 21,187,111, 74, 9,235,172,221,147,176,184,118,235, 80,135,208, -141,163, 66, 31, 66, 40, 35, 89, 83,198,179,105,175,126, 60, 22, 24,236,173, 74,215, 34,113,202,155, 86, 29,190,169,167, 67, 94, -126,181,169,112,215,235,123, 62,112,195,201,251, 12,248, 12,232,218, 49, 95, 44,202,109,199,136,247, 90,105,116, 78,244,227,134, -190,207, 96, 22,124,254,139,127, 11,243, 69,203,221, 15,222,230, 83,159,120,142,143,191,252,121,238,190,243, 46,223,120,253,155, -188,255,157,183, 56,127,114,193,217,141, 37,102,214,114,113,126,197,173,147, 22,103,165, 24,249, 32,123,180,237, 48,210,214,150, -109, 63, 48,196, 64,242,208, 63,124, 66,202,112,247,209, 57, 31,123,233, 5,190,242,149,175,240,206,187,239,242,238, 59,239,112, -255,241, 5, 63,253,243,127,153, 7, 23,151,156,175, 59,176, 21, 47,119, 91,214,171,115,116, 50,252,125,191,227,119,243,127,249, -195,255, 39, 30, 61,124, 27, 99, 45,255,207, 63,246, 95,240,219,255,129,223,206,147,203, 39,252,123,255,254,255,161,196,102, 6, -190,249,198, 55,248, 87,255,181,255, 45,255,198,239,255, 3,188,242,226,239,226, 79,252,177, 63,202,176,190,228,254,189, 15, 56, - 83,138,187,111,191,197,103, 63,253, 42, 58,246,244,219,142, 56,110,241, 99, 34, 68,161,104, 9, 89, 53, 18, 16,187,210, 48,193, - 87,212, 20,176, 80,198,175,249,200,131,122,116, 17, 76, 37,103,125,122,142, 20,234,232, 89,143,251, 8,195,169, 53,218,191,153, - 39, 62,249, 53, 3,124,161,197, 77,221,214,193,151, 69, 42,185,246,198, 72, 12,102, 93,215,212, 37,126,177,106, 26,234,186,198, - 85, 98,243, 80, 86,188,229,170, 0,140,148, 78,211,167, 17, 81, 16,177, 28, 24,229,162,161, 10, 44,166, 76, 13,210,244,126,200, -215,239,224,186,172, 17, 12, 17,162,116, 68,111,252,226,207,240,252,188,226,249,219,183,248,220,171, 47,242,205,191,114,151, 95, -254,218, 95,229,236,206,139,132,126,199,235,111,191,201, 75,207,221,226,228,236,148, 49, 36, 54,155,181, 60,139,102, 73,240,138, -104, 29,163,247,204, 81, 84,206,176,152, 53,228, 48,208,109,215,204,108, 36,102, 65, 24,143, 17,214,235, 21,219,245,138,122,190, - 68, 43,197,110,183,101,189, 94, 3,137,186,109,153,207, 21,179,197,130,140,162,170,107,230, 51, 1,184,156,156,158,144,149,102, -183,219, 8, 47, 65,107,250, 97,100,181, 94,163, 20,188,252,177,151,185,124,255, 62,179,232,121,252,228,146, 93, 8,140, 17, 42, -205,190, 67,143, 49,147,124,134,214,144, 20,100,163,165, 11, 53, 10, 31, 50,149,171, 32,139,224,109, 62,111,137, 23,107,146,201, -248,156,132,236,135, 60, 79, 49, 20,214, 63, 7, 42,223,158, 38, 89,122, 42, 97, 7,132,253, 28, 39, 5,217,171,107,113,177, 98, -143, 89, 21,216,253,161,157,139, 58, 95,246,253,210, 31, 7,239,139, 13, 43,239,145,210, 86,110, 48,114, 62,165, 36,123,108, 63, - 50, 12, 3, 33,248,195,249, 22, 39,190, 68, 81,230, 91,183, 39,248, 41,235, 80,206, 8,210, 43,151,120,155,161,180,175, 49,239, -139, 53, 49, 19,125,220,219,162, 38, 70, 67, 46,236,115,229, 71,121,178,140, 17,166,132, 22,155,103,170, 43, 90, 43,232, 86,241, -191, 27,148,115,162,166,159, 28, 24, 90,163,188,116,252,132, 72, 30, 70,178,143,172, 47,215,130,230, 45,100,197,113,236,101,103, - 75,198,217,138,193, 15,178,206,170, 43,238, 63,186, 39, 56, 88, 36,149,210, 56,209, 84, 8,136, 71,240,174,163,143, 12,165,168, -123,127,136, 71,229, 40, 65,243, 88,103,114, 13, 43,173,132, 90,137,150,122, 99,203,205,114,130,206,100,100, 42, 28, 75,243, 16, -139,221,109,234, 98, 39,124,172, 42,122,157,148, 50,227,232, 11, 88, 62, 81, 85, 65, 10, 97,105, 86,199, 16, 24, 75,168,203,177, - 86,108,175, 17,123,134,247,206,179,150,221, 2,221, 58, 38,198,125, 88, 66,229, 71, 69, 87,239,215, 71,251, 73,198, 81,173, 59, -254,159,150,191,203, 28, 81,233,172,145, 21,160,181,186, 68,218, 90, 41,232,206, 74, 81, 55, 70, 8,140, 5,201,109, 37,103,120, -130,134, 28,122,235,167, 85,188,211,136, 53, 70, 67,138, 18, 73,233, 75, 65,151, 66,159,246,187,236,105, 15,118, 80,208,231,195, -245, 71, 29, 5,174,252,127,197, 34, 87,172, 74,228,253,140,120,175,198,173, 28, 89,213, 68,149,209, 70,179,221,174,209, 10,156, -214,244,187,142,182,210, 44, 78,102,124,242,211,223,135,113, 51, 30,221,191,203,223,246, 27,126,128,231,111,183,252,197,159,253, - 57, 30, 60,120, 76,101,160,235,119, 84,141, 40,130,183,187,142, 93, 31,104, 77,199,114, 57,199,173, 6, 98,148,120,203,152,224, -201,213, 22,175, 20, 67, 57, 19,116, 58,224,118,222,189,255,136,199, 23, 43, 42,173,185,121,227, 12, 87,215,188,254,198, 91,244, - 49, 98,218, 22, 21, 53, 15, 31,220,163,223, 4,254,212, 79,252, 52,187,224,249,135,127,247,143,240,211, 63,249,227,188,243,230, -123,220,197,240, 19, 63,241,231,248,189,191,247,127,198,232,119,252, 7,127,240,255,184, 31,233,221,123,240, 30,255,202,191,254, -175,242,239,252, 27,191,159,175,254, 29, 63,204,127,247, 95,253, 87,220,185,243, 2,221,106,205, 15,126,241, 11,204,102,134, 52, -110,233,194,134,152, 70, 82, 18,238,117,156,214,127,229, 22, 26,163,108,136,212,196, 77,159,158,147,242,179, 84,124,152, 75,226, -152, 20, 56,133,178, 28, 44,105, 50,190, 62, 8,213,246,123,116,241, 8, 28, 88,210,185,132, 67, 24, 25,195,235,107, 98, 17,133, -115,226, 81,157,118,197, 85,101, 5, 52, 81,201,131, 47,192,151,242,166, 75,185,140, 54,165, 64, 68, 47,178, 39, 83, 73, 66, 27, -202, 2,150,164, 4,227,200, 68,154,154,110,240,165,203,216, 43, 51, 73,104, 50,201, 15, 12,219, 43,172,239, 80, 42,114,249,224, - 33, 15,223,250, 6, 55, 95,121,129,109,220,210,141,129,216,111,121,251,157,247,248,190,211, 91,204,106,203,110,179,230,188,114, -184,197, 9, 89, 69,250,190,231,234,242,130, 74,103, 76, 14, 56,187,164,138,145, 24, 37,208,103,222, 84, 56,157,217, 94, 93,210, -154,196,234,234,146,110, 76,140, 49,243,238,221,251,120, 12,237,124, 78,219, 52,116,151, 59,110,223,190,205,124, 33, 92,248,237, -110, 71, 85, 85,156,156,158,177, 88,204, 9, 33,210,204,230,135,206, 53, 36,140,117,251,176,160, 27,183,110,113,235,185,231,121, -180, 56, 71, 15, 3,219,199,143, 25,140,226,241,227, 43, 60,169, 36,177,201,138, 37, 23, 84,168,236, 89, 51, 73, 73,230,118,202, -146,212,150,146,194,232, 92,120,220, 6,159,215, 36, 50,157, 31,139,224, 80,151, 16,160, 61, 70, 30,163, 53,174,146,152, 90, 82, -198, 76, 36, 67,178,116,202,169,124,228, 76,223,245,144, 18,166, 50,140,218,160,181, 47, 63, 95,201,180,119, 70,239, 19, 8,115, - 54,168,168, 75,206,125,185,108,202, 76, 94,186,196,164, 24,250,158, 16,179, 4,218,120, 47, 35,119,239,137,126, 36,134,233, 98, - 32, 89, 1,146,124,105, 37, 95,221, 88,137,241, 53, 14,140, 4,200, 40, 51, 69,252, 78,139,237, 88, 96, 79, 17,178,222,163, 87, - 21,162,211,152,138,150,214, 78, 6,195,229, 34, 48, 77, 63,149, 86,184,170,194,100, 89, 41,152,178, 78, 18,152,146, 76, 84,115, - 10,232,193,147, 67,134,232, 81, 33, 16,255, 63,180,253,217,147,101, 87,118,230,137,253,246,112,198, 59,249, 28, 30, 51, 2, 9, - 36,144, 3,115, 6,147,243, 88, 85,100,145, 44, 14,213, 53, 88, 85,203,164,146,117, 61,182, 76, 50,153,254, 0,246,131, 30,101, -146,245,131, 76,166,150,153, 36,211,216,234, 50,171, 42,235, 26,154, 85,236, 34,153,153,100, 50,153,137, 4, 18, 51, 16, 0, 34, - 16,163,207,126,231,123,166,189,183, 30,246, 62,247, 94,143, 8, 36,201, 86, 9, 48, 55,120, 4, 60, 60,220,253,158,115,214, 94, -107,125,223,239, 43, 74,108,213, 48, 62, 31, 7,159,181, 96, 49,155, 7,104,146, 8, 92, 0, 79,213,139,226,152,218, 25,156,242, - 16,175,166, 41,177,196,200, 88,209, 24, 95,196,141, 49,126,229, 81,215, 20,101, 77, 89,249,172, 0, 16, 68, 90, 61,181, 30, 93, - 38, 49, 98,195, 40,219,121, 62,185,246, 32,160,118,101, 42,150, 1, 92, 97,133,103,140,135,175, 24,223,125,218,165,197,109,173, -151,176,118, 57,219, 55,198, 80,215,254, 9, 83, 55,214,187,127,194,178,175,105,140,231, 37,212, 13,198,154,213,243,107,173,152, -187, 53, 52,249,147,135,144, 37, 71, 67,138, 39,132,128,226,169,102,244,201,229,240,179,180,101,206, 61,225,232, 18, 23, 67,178, -124, 71,206,114,167,174,131, 75, 71, 71,146, 36,142,137,219,162, 30,107,226, 72, 7, 70,134,215,166, 88,107, 3, 32, 44,112,137, -215, 79, 38, 79,170,240, 90,113,147,181, 46,228, 69, 27, 31,228, 16,148,161,198, 88, 76,227,179,164,253,219,202,110,244,228, 1, - 72, 60,113,124,123,246, 55,238, 62, 85,100,247,227,172,111,254,251, 8,187,144, 86,129, 29,112,164, 82,107,112, 62, 14, 52, 78, - 34,148,140,232,228, 41,139,197, 28,165, 98, 16, 25,183,158,255, 12,105, 46, 40,203, 51,126,253,111,125,147,217,249, 9,223,254, -247,223, 99,182,152, 96, 22, 83, 68,150,161,133, 65, 7,149,105, 81,248, 76,114,157,104,170,198, 95,100, 89, 22, 81, 86,126,143, - 86, 89, 71, 45,188,232,197, 45, 25, 76, 46, 92,227,134,170,153,163,112,204,138, 5,159,255,220,203, 60,127,235,121, 62,248,224, - 67,206,207,199, 94, 21,171, 34, 38,147, 51,238, 61,254,136,239,255, 80, 51,153,205,120,229, 27,191, 72, 57,254,215, 28,156, 62, -228,221,183, 51, 58, 29,197,243,183,158,163,223,239, 51, 28,158,135,241,160,230,224,224, 49,255,135,255,234,191,226,127,245, 63, -255, 95, 48, 58, 27,241,189, 63,249, 35, 18, 21,113,244,201, 61, 58, 29,205,214,165, 46,150, 10, 43, 93, 24, 97,179,220, 7, 53, - 97,183, 40,132, 69,216, 85,103,106,157, 93,187,160, 87,188,246,165, 34, 93,248, 40, 64,127, 48,144, 23, 2,121,214,116, 51,126, -220, 45, 85,208, 64,132,155,194,173, 20,166,237, 56,190,253,179, 74,234,181,223,247,187,125, 21, 8, 98, 82, 43,111, 61, 87, 97, - 76, 31,188, 34,206,134,194,216, 42, 85,195, 3,101, 60, 62,231,232,224, 17, 74, 74,186,189, 14,151,111, 61,231, 81,139, 34, 6, -153,248,245, 67,232, 80,252,181,161,137,178, 20,129,242, 63, 11,107,113,182,166,174, 23, 60,252,248, 99,206, 31,223,227,250,238, -128, 84, 43, 30,124,240, 62, 7, 31,223,102, 96,103,140,147, 24,135,226,228,228,156, 71,143, 14,232,124,240, 62, 66, 56,226, 36, - 97, 56,158,178,219,219, 8, 57,227,150,170,158, 51, 60,247,254, 99, 37,125, 56, 68, 89,204,201,179,140, 60,141,217,217,220,228, -240,224, 17,216,138,249, 98, 65,103,176, 77, 57, 43, 56, 61, 59, 99,119,255, 10, 73,146, 16,167, 25,231,195, 49,189, 16, 0,145, -101, 25,163,209,136,197, 98,225,147, 0,175, 92,165,170, 60, 3,123, 62,159,179,189,189,197,254,254, 62,247,238,223,227,202,149, -171, 44, 22,115,164,194,163, 55,211,148, 36, 75, 57, 19,150,141, 75, 59,236, 40,197,244,193, 49, 38, 64, 64,140,241,211,175,198, - 16,128, 62, 14,219, 24,159,197, 32,253,255, 47,203, 38,100,141,107,210, 88, 16, 73,144, 74, 80,154, 21,224,200, 88, 23,246,203, -225,160,164, 60, 72,166,141,246, 80, 82,160, 5,248,144, 73,207,156,104,240,193, 41, 18,129, 17,146, 70, 10,106, 97,144,162, 34, -144, 69,124,183, 45, 9, 22,159, 8,156, 69, 42, 31,241, 42,148, 71,231,214,117,237,109,166, 65,235, 81,215,181,143,144,109,124, - 66, 98, 93, 86,152,166,161, 41,107,172,115,193, 71,220,230, 98,251,206, 95, 71,177,199,115, 42,239,148,240,221,183,195,136, 38, -120,149,181, 47,186,117, 19,106,187, 47,248,182,197, 43, 7, 95,179,223,131,107,144, 33,183,188, 49,190, 33,177, 97,100,219, 54, - 86, 38,160, 74,149,143,224,116,194,219,242,104,157, 75,117,131,171, 26,132, 53,184,166,194, 25,139, 41, 13,139,233,130, 56,138, - 40,202, 10, 99, 26, 86, 2,233,128, 78,109, 28,105, 22,161,226,136,218, 54,104,161, 88, 20, 11,154,180,231,161, 92,225, 57, 95, -214,134,170,241, 59,244, 42, 8, 22,141, 9,216,238, 16,204,180,116,126,180, 55,187,244, 54,223,214, 17,227, 59, 79, 17, 82,225, - 2,113, 82,171, 48, 8, 89,227,188,215,134,186, 33, 76, 85, 46, 6,129,121,241,164, 13, 28,121,187,124, 43,171, 26, 33, 26, 31, -145, 27,198,106,141,241,217,236,237,116,198,173,249,228,219,189,253,133,181, 55,159,214,177,203,149, 10, 94,170,139,182, 59,177, - 22, 55,254, 12,187,246,143,167,165,174,144,186, 79,199,214,134,132,192, 48,134, 79, 34,159, 27,159, 36,109, 97,247,220, 5,161, -252, 51,216, 90,131, 38, 72,254,151,123,234, 16,204,161,130, 81,191, 61, 45,136, 53,219,146,167, 8,153,229,232,189, 49,205, 18, -171,233, 95,100,127,202,106,140, 13,191,239,213,158,118,201,212,181, 23,208,162,127, 85,184,205, 95,165,147,111,156, 68,171,246, -103,189, 28, 23, 96,133,240,157,131,138,200,179,156,110, 55,231,227,143,238,242,224,193, 29,207, 76,126,249, 39, 56, 61,155, 51, -216,232, 81, 86,167,124,227, 43, 47,112,248,240, 61,222,248,193,155, 12,143,167,164,169, 67, 42, 75,148,167, 36,221, 46, 69, 99, -121,116, 52,162,177,150,110, 63,103,180,168,153, 22, 37, 72,207,175,182, 97, 80,168,180,246, 41, 77,202, 43,132,215,167, 60,173, -205,198, 2,206, 52,188,249,246,123,124,230,230, 13,254,206,175,253,109,110,191,247, 1,227,209,132,163,209,156,210, 22,140,199, -143, 57, 58,233,147, 38,125,110,236, 95,227,103,126,233,151,249,227, 63,250, 99, 30,220,125,159, 63,251,246,127,199,253, 71,159, - 96,108,179,138,209,116, 22,225, 42,222,120,235, 13,254, 55,255,229,127,201,255,250,191,248, 47, 56, 61, 62,225,224,195,247,112, -179, 33, 7,143, 14,125, 98,212, 32,193, 42,135,105, 73, 72,237,202,226,194,177,107, 5,152,145,226,217, 39,213,229, 69, 40,130, -158, 92, 60, 89,212,131,215,179,181,181,137,150,176, 36, 87,163,119,199, 90, 81, 95, 33,100,219,160,132, 86,135, 97,157, 91, 37, - 37,105,129,210,120,209,155,106,199,252,190, 40, 27, 83,135, 61,125,131,108, 26,132,112,156,157, 30,240,198,107, 63,160, 46,231, -236,110,111,241,167,239,191,199,111,254,222,239,209,219,189, 68, 62,216, 3, 81, 99,132, 98, 60, 58, 99,115,163, 71,234, 12, 56, -133,152,207, 65, 72,234,217, 2,217, 52,200, 88,161, 92, 77,206,130,121, 61,165, 60, 93,160,147, 4, 51, 29, 83, 76, 39, 76, 38, - 51, 54, 58, 57,231,231, 35,110,127,116,151,247, 63,254,132, 90, 68,108,110,109,147,230, 25,103,227, 5,101, 93,123, 46,187,105, -192, 90,138,197,130, 97, 40, 74, 90, 57,104, 74,154,126,159, 88, 69, 92,190,188,207,100, 50, 38,237,118,216,187,118,147,254,198, - 46,227,241,132,135, 71, 39,108,109,111,163,226, 24,135, 32,201,114,226,204, 11, 5,187,253, 62, 55,111,221,194, 58,199,240,124, -200,222,254, 62,198, 24, 30, 62,124, 72,127, 99, 64,148,248, 56, 83, 7,204, 22, 5, 73,146, 82,214, 11,178, 44, 99,120, 52,164, -172, 74, 26, 28,249,160,207,213, 56,227,232,116,140, 89, 84,126,252,238,189,138, 32,125, 66,155, 13, 1, 32,206,212, 8,225,131, -129,140,245,129, 41, 58,142,137, 26, 71, 55,209, 56,211, 80, 57,208, 65, 0,232, 39,170,110,137,236,245,226,103,175,215, 81,194, -250,192, 22, 17,160, 68, 56,156,109,112, 13, 56, 29, 33, 92,236,139,183,113, 52,194,132,161,160, 11,188,138, 16, 16,238, 86,177, -153,203,107,214,250, 76,121, 0,219, 24, 31,196, 22,132,115, 77,221,248,213, 70,240,195,155,160,228, 23,107,170, 94, 29, 14, 42, -173,245, 83,170,216, 23, 89,169,188, 51, 68,218,176, 63, 23, 72,169,151,221,157, 23,163,152,149,166, 74, 71, 33, 60,104, 37, 15, -183,206,171,215, 81, 62,202,117,217,216,132, 6, 80, 69,145,135,212, 90, 31, 22,132, 18, 8,235, 35, 94,133, 53,184,218,224, 26, -131, 48, 13,212, 53,174,174,153, 79,103,148, 69, 77,154,118,169,235, 41, 90,235,101,186,162, 16,146,249,162,242, 43,172, 56,163, - 52,150,198, 89,104,252, 10,211, 24,139, 85,202,143,220, 27, 31, 40, 83, 85, 13, 85,109,168,106,191,171, 94,214, 14,215,106,166, -196, 19,210, 40,187, 28, 76,203,144, 43, 31, 73, 65, 18, 43, 47,244,138,181, 71,175,134,113,185, 9,226,220,170,110,168, 27,111, - 11,108, 3,101, 86, 63, 39, 15,191,105,107, 79, 21,220, 16, 38, 20,240,186, 17, 75,225,235,122,209,111, 51,219,185, 96,187, 19, -171,142,189,157,146,184,167,157, 86,171, 16, 40,249,148,246,107, 77,105,247,233, 97,101, 79, 64,118, 62, 85,250,189, 86,224,165, - 20, 62,131, 67,249,104,225, 40,140,220,147,128,192,141, 34,237, 67,150,194,115,181,105, 28, 58, 44,145,150, 5, 91,138,213, 28, -191, 45,232, 81,164,151,136,188, 86,165,106,173,183, 61,248,174, 92, 99, 77,176, 63, 93, 40,234,254,253,166,246,176,127, 19, 62, -198, 88,187, 84, 65,183,177,117,207, 26, 99,252,101, 59,247,167,138, 62,130,235, 55,111,113,116,120,128, 45,231,173, 20, 15,132, -242,131, 84,161, 72,163,132,221,237, 29,170,170,228,244,244,152,205,173, 13, 54, 55,119, 57, 59,159,177,189,191,139, 53,115, 94, -184,113,131,135, 31,125,196, 39, 31,125,196,124, 54,161,180,134,142,142,208,145, 64, 38, 49,105,119,147,135,159, 60,228,124,110, - 80, 81, 68, 83, 72,182,250,187,100, 91, 30, 75,105,165,164, 42, 27, 78,143,143,105,202, 18, 37,189, 93, 70, 9, 25,198, 72, 79, -104, 34,133, 31, 97, 90, 26, 62,186,119, 15,245,167,127,202,111,255,198,223,230,193,189,123,228, 7,143,185,125,231, 99,170,217, -156,195, 71,143,201,147, 1,239,124,240, 1, 63,241, 15,127,151,175,124,109,198,244,143,254,144, 89, 63,227,240,145,163,116, 14, -164,194, 8,175, 48,149, 52,140,199,231,124,239,213, 87,249,103,255,242,223,240,155,255,201,239,241,127,254,223,253,111,145, 38, -163,107, 44, 90,117,144, 42,162, 17,181,231,148, 35, 80,194,231,201,183,118,152,101,180, 40,235,133,220, 46, 69,143, 23, 47,123, -185, 28,141,175,198, 72,226, 2, 19,125, 37,156,243,201, 26, 34,116,126,182,245,136,175, 91,222,194, 97, 66, 5,175, 38, 82,249, -108, 45,103,145, 90,160,180, 39, 8,250,208, 23, 21,114,175,229,114, 42,208,122,154,125, 55, 82,130,173,121,243,213,239,113,122, -244,144, 44,150,188,123,255, 54,119, 63,190,203,255,254,206,199,252,214,223,253, 93, 26,145,241,252,103,191,192,108,182, 32,141, - 5, 91,157,203, 8,215, 96, 10, 11, 33,125,171, 25,142,153,156, 28,211,233,230,228, 27, 61, 54, 82, 56,154, 13,185,127,239,144, -203,151,246,105,202,146, 56, 73,169,209,232,180, 75, 81,157, 81, 89,137,145, 41,231,227, 25,221, 94, 31,169, 34,116, 2,101, 93, -211,205, 50,143, 90, 45, 42,239, 26, 48, 6,161, 21,146,138,122, 30, 49,155,140,201,146,148, 44,239,113,227,249, 23,184,116,245, - 42, 42, 74, 16, 66,179,119, 89, 16,165, 57, 31,222,185, 67,237,160,108, 28,157,222, 0, 21,107,106,227,175, 77,161, 52,166,170, -208,177, 15, 43,153, 47, 22, 1,121,155,160,148, 98, 60,153, 16,197, 49,221,110,215,243,192,243, 12,133, 34,205, 82,159,208, 22, -107,191,227,243,243, 23,172, 82,158,234, 70,155,121,237,227, 88,189,146,208,162, 21, 52, 70, 34,133,101, 81,213,228, 54, 70, 68, - 26,109, 27,122,113,204,188, 50, 30,109,236,132, 23,161,181, 57,213, 65, 9, 29,197, 18,169, 67,254,180, 2, 37,195,216,221,121, -136,143,112,254,184,236, 5, 88,126,199,221,212, 6, 45,188,168,168,181,229, 90, 43,124,214,119, 56, 52, 56,219, 96,156,193, 10, -136,162,216,143,195,219,221,189,243,123, 89,225, 31,110,222,123, 28,212,245,214, 9, 47,190, 12, 32, 16,144, 88, 39,177, 78,172, -165,180,121, 93,134, 23, 97,122, 70,134,176,198, 67,149,214, 59, 86,103, 2,156,198, 44,137,117, 75,112, 82,187,219,149,224,180, -135, 45,201,112,168,109,145,166, 46, 76, 25,150,162,176,166,246,154, 3, 33, 16, 77, 3,193, 86, 22,122,182, 48, 61,105, 24, 14, - 71, 32,189, 75,164,170, 74, 63,209, 10,139, 48,165, 52,117, 61, 35,203, 58, 68,113,202,162,110,168,173, 35, 86,210, 23, 19,169, -189,128, 48, 28,245,151,123,238,246,249,111,237, 42,145,113,109, 76,125,113,109,219,102,103,182, 83, 14, 65, 26, 71,228,105, 68, -146,104,210, 36, 34,142,147, 48, 62,118,222, 5, 98,253, 36,160,106, 68,208,112,153,165,144,187,213, 93, 24,107,105, 26,191,211, - 87, 85, 67, 89, 86,148,149, 95,173,173,186,114,150, 90,177,101, 87, 46, 68, 16,253,138,165,107,237,130, 24,175,157,166,182,113, -224,238,217,190,234,103, 53,156,159,214,149, 95,252,204,226, 83,145,232,171,103,238, 90, 97,199,175,163, 86,141, 76, 72,138, 11, - 49,209,235,248, 89, 41, 37,250, 89, 99,238,117, 56,191, 87,223,233,101,112,197,186,189,173, 9,227, 15, 47,148,243, 39,219,102, - 57,126, 55,171,110,190,177,193, 87,106,131, 88,193, 81, 47,199, 33,246,130,255,248,175,218,169,127, 90,215,126,243,185, 91,252, -230,111,252, 38,255,183,255,203,255,137,166, 44,194,139,232, 59, 7, 29,199,108,109,110,177,181,217,231,241,163,251,104,173, 73, - 59, 29, 70,179, 41, 27,219, 27,204,202, 49, 95,251,252,231,249,209,159,127,135,106,116, 70, 34, 18,138,185,101, 99, 43,161,168, - 43,180,141, 40,167, 53, 39, 15, 62, 65,165, 29,190,242,147, 95, 98,239,210, 21,210, 56, 97, 49,155,178,119,105,151,131,163, 35, -246,175, 94, 99, 54, 91,176,217,237, 18, 73,193,163,131,135,124,255,213, 31,112,255,193,125,228,154,104,143,112,177, 11, 90, 84, - 41,148,214,242,222, 39, 31,115,233,141,215,248,189,223,249, 29,254,240,223,255,183,244,143, 51,142,143,166, 76, 71, 99,234,102, -202,241,217, 1,255,225, 79,254,130,223,250, 91,191,200,189,219,111,145,198,146,249,124,204,237,187,159,160,162, 8, 83,251,159, -113, 36, 29,105,156, 80, 84, 37,255,175,255,230,255,205,223,254,181, 95,229,249,151, 95,230,248,195,247,176,165, 33, 75,251, 12, - 54,251, 28, 14,143,194, 88,221,211,178,252, 8,201,174,217, 4,237, 42, 90,114,205,206, 32, 46, 28,184, 60, 40,102,229,202, 16, -203,240,157, 11,111,107,176, 66,255,119, 40,255,144, 22, 43, 91,155,148, 43, 23,133, 20,114,217,169,123, 5,112, 0,157,132, 20, - 55, 29, 70,119, 82,251,189,163, 12, 92,230,213,186,200,171,166, 93, 93, 83, 21, 99,238,125,252, 1,245, 98,196,105,181, 96,123, -115,147,126, 39,227,124, 54,230,232,224,128, 89, 97,121,235,205,119,232,245,122,124,225,165,231,233,171,133,247,139,167, 57,170, -147,227,170, 26,187, 24, 50, 63, 63,164, 28, 57, 98,246,113, 70,208,207, 35,152,121,229,122,154, 36,116,187, 3,102, 69,195,104, - 86, 32,116,204,231,190,240,101, 68,103,155,114, 49,163,177,126, 55,175,227,132,233,116, 70, 55,203,136,162,136,121, 51, 9,164, - 44, 95, 48,181,141, 81,141, 70, 58, 88,204, 11,242,218, 34,116,194,104,178,160, 59,136, 49,117, 65, 93,215,108,110,109,115,173, -110,184,247,232, 0, 91,215, 72,173,169,235,134,170, 90,208,235,246,208, 42, 90,174,203,146,216,115, 25,196,218,207,180, 40, 12, -251,151, 46, 81, 85, 37, 77, 93,161,179,140,114, 81,248,149,133,240, 15, 89,140,197,214, 13, 56, 71,109,131,160,208,249, 93,165, - 86, 80,215,134, 72,203, 0, 99,241, 86, 28, 83, 53,212,149,193, 56, 71, 81, 85,164, 73, 70, 39,142, 40,171, 2, 99, 3,102,213, -132,204, 60,173, 72,117,176, 82,134, 21,137, 23, 64, 25, 26, 83,161,173, 70,248,106,226,119,139,218, 95, 51, 46,248,143, 91,165, -180, 9,197,188,237,152,140, 49,168,160, 29, 48, 97, 74,214,178,186,235,218,250, 17,174,113,136, 56, 10, 93,156, 15,242, 89,185, - 31, 28, 66, 74, 34,229, 49,163, 44, 83,198,252, 62, 61, 10, 98, 57, 41,181,215,134,132,192, 32, 63,212,212,172,188,194,126, 4, -109,155, 64,210,112,254,239,182,181, 69,199,169,255,121, 90,127,176, 80, 90, 5, 32, 14, 40,169,112, 77,179,252, 51, 75, 85,181, - 49, 62,254, 86, 11, 92, 85,249,137, 73,221,128, 49, 97,245, 96,150,197,221, 26, 24,141, 39, 68, 73, 26,126, 38, 13,113,148, 32, -149,183,168,249,209,190, 36,142, 83,172,105,147,233, 26,186,218,211, 0,163, 56,241,159,223,137,181,206,213, 11, 97,109, 75,127, -187, 0, 77, 17,203, 67,253,133,157,117,248,147, 82, 18,162,169, 99,242, 44, 33,203,124,254,121,146,100, 1,223,139,183,161, 53, - 13, 85, 99,150,142, 28, 47,112, 19,203,195,143,175, 59, 13,101, 85, 83, 85, 53, 81, 89,133,209,127, 21, 14, 1,126,165,216, 22, - 97, 41, 86,212, 55,159,232, 24,166,128,210,173,237,201,185,104,196, 14, 7, 2,177, 62,248,119, 79, 51, 8, 62,141,209,242,236, -145,251, 90,212,235, 51, 26,188,103, 54,238, 98,181, 18, 87, 33, 84,107, 21,143,189,242,238,183,111,234,197, 27,251,191,191, 84, -191, 35,150,169, 90,109,244,165, 8,106, 63, 17,102,251, 4,117,158, 84,254,230, 90, 26,225, 67,150,114, 20,112,124,145,246,135, -129, 72,249,211, 68, 20,233,160,220,243,121,216, 74,137,208,129,249,139,192, 61,195, 72,224,184,120,130,114, 63, 38,131,189,253, -128,209,120,206,239,252,222,223,227,235, 63,243, 11,188,117,251, 14,147,194, 7, 33,108, 12,186,244,183, 46,147,100, 93,186, 81, -205,163,123, 31,208,217,216,160,150, 25, 73, 62,160, 88,204,248,249,175,125,145,183,127,248, 67, 62,124,239,109, 16, 11,154,166, -228,124, 92,115,105,175,203,209,180,225,100, 14, 58,217,226,107,175,252, 44, 95,252,242, 79, 48, 62, 63,225,243, 55,175,179,213, -233,241,221, 87,223, 96,127,208,197,206,198, 92,218,187,140,138, 58,124,251, 15,255, 61,167,119,222, 35,142, 99,126,242,155, 63, -197,175,254,226, 47, 51,155, 76, 56, 63, 63,247,157,105,235,141,181, 43, 3, 94, 24,133,112,116,112,140,214, 49,127,231,239,255, - 19,190,247,173, 63,102,116,126, 72, 19, 41,242,126,143, 65, 22,161,108,205,241,120,198, 47,253,202,111,112,114,231, 14,227,195, - 71,212,182,228,124, 62,195, 53, 13,145,133,218, 9,154,122,142,165, 96, 54,159, 48, 45, 13,255,228,127,252, 63,225, 79,254,240, - 63, 96,202,194, 3, 89,146, 46, 70, 41, 74, 59,199, 81, 34,157, 2, 19,121,155, 5,107, 41, 74,206,122, 11, 87,155,121,220,222, - 41,173, 17, 85,138,181,145,150, 88,203, 31,110,201,112,161, 32, 47,187,120, 21, 14, 9,210,219,108, 2, 39, 29,161,150,251,243, -118,124,175,117,224,173, 75, 63,218,215, 64,162, 35,242, 36, 33,203,210, 16,236,225,255, 27,167,169,223,115,234,224, 49,247,203, - 55,207, 88,168,231,124,240,230,247, 57,120,112,155, 98, 62,199,168, 28,213,217,101, 82,103,152,120,192,239,254,227,255, 17, 63, -255,235,127,147, 47,126,249,101,164,171, 40,206,206,153,142,103,168,188, 79,146,118, 16,206,139,149,100,164, 56, 63, 63, 33,149, - 17,105,150,144,119, 58, 24, 33, 73,187, 93,242,188,235,149,202, 85,133,177,142,206,246, 14,215,110,222, 32, 78, 61,244, 37,235, -246, 49, 72,154,186,194,212, 6,103,252,195,123, 81,148,104,173, 48,117,233,163, 68,173, 79,149,139,211, 14, 27, 59, 59,204,202, -138,225,120, 76,150,165,108,244,123,104, 42,164,169, 41,102, 99, 58, 89, 70, 81,248,191,175,177,142, 72,107,138,249, 28, 37, 4, - 81,164, 89,204,166, 28, 60,122, 72, 55,203,232,230, 25,199, 71,135,108, 12,122, 12,135,167, 76, 70,231,148,197,140,243,179, 19, -238,223,187, 11,117, 77,170, 35,102,211, 49,199, 39,199,204,139, 2,219,120, 97,212,241,233, 41,166, 49, 36, 56, 50, 41, 73,148, - 68, 73,136,148,239,154,173, 84, 52,141,135,199,184, 80, 28,147, 84,209,233,102,228,169,102, 81, 46,120, 60, 90,208,168, 20,156, - 65,135,177,113,146,106, 58, 93,208,177, 69, 69, 14, 33, 29, 66,106,210, 52, 35, 10,168, 87, 21,210,177,252,184, 81,181, 40,110, -127,233, 41, 47,102,212, 65,115,161,148, 10, 41,132,126, 93,132, 37, 56,147,253,231, 17,200, 64,158,243, 65, 40,173,210,165,170, -189,181,179, 50,126,141,215, 56,135, 84, 17, 73,156,147,102, 93,116,228, 11,156,140, 37,105, 39, 35,235,244,233,244, 55, 72, 58, - 61, 68,154, 67,148,225, 84,140, 17, 26,233, 36,194, 53,184,166,192,214, 37,210,250,152, 95, 97, 42,176,198,119,183,206,173, 89, -172,196,202,246,107,220, 82,192,135,245,153,245, 66,133,152, 96,239, 45,241, 22, 62, 99,188, 53,206,248,130,238,156,133,218, 34, -109,133, 48, 53,212, 80, 77, 45, 31,223,254,196,127,127,243, 17, 85, 89, 34, 84, 66,156,118,104,170,154,162, 88, 32,227,136,164, -219, 67,233,148,209,100,204,168,156,208,143,123,148,165,197,108,110,160, 6, 61,234,166, 93,185, 26,154,208,165, 91,235,188,134, - 66,136, 0,129,138, 72,211,200,167, 58,182,221,186, 23,141, 96,141,165, 54, 13, 2, 72, 35, 77,150, 70,228,105, 76,150, 39,100, -121, 74,158,251,112,158, 86,232,170, 35, 29,196,175, 17, 89, 18,135,251, 59, 33,203,114,178, 44, 35,205, 82, 63,130,142, 60, 12, - 72,133,233,156, 49, 22,131,103, 33, 88,227,213,238, 34, 60,155,180,246, 73,147,145, 2,173,180,175, 75, 74,145,165, 62,143,163, -147,166,164, 73, 68,154, 68, 68,177,207, 64,208,145,246, 97, 43,170,253,111,155,176, 38, 62,149,115,255,227,114, 76,156,107,252, -129, 72,172, 42, 93,171,253, 49,117, 69, 85,150,148, 69, 73,177,168, 88, 44, 74, 15, 8, 2,159,236, 23,154,107,173,125,173,245, - 1, 82,114, 53, 61,119,126,114,174, 94,188,113,233,247,133, 92,169,143, 87, 99,211,213, 40,179,149,215,139,181,253,233,250,239, - 47,201, 55, 74,173,172, 98,122, 61, 53,201, 91, 62,148, 86,104,165,194,168, 84,133, 67,129, 8,106,231, 21,130,246,201,241,132, -120,194,130, 32,158,241,195,107,223,175,108, 69,167,223,227,231,126,241,151,248,155,191,254, 91,108,239, 94, 97, 94, 24, 4, 49, - 81,148,177,183, 61,224,193,221,219, 72, 41,200,250, 27, 8,229, 47,140, 47,125,238, 37, 62,124,247, 61, 62,188,253, 26,147,209, - 28, 91, 73,174, 95,191, 66, 69,205,209,121, 1, 58,231, 27,223,248, 6, 95,255,242,215,185,119,255, 1, 63,251,115, 63,195,225, -227, 7, 20,227, 17,111,189,245, 54,181, 20,100,177,160,215,201,249,214,159,125,143,195,211, 51,132,157,243,210,243,151,232,110, -108,114,231,147,123,252,232,245,215,248,233,159,250, 41,126,230,167,127,150,199,135, 7, 76,103, 51,223, 9,133, 37,155, 91,218, -253,188, 23,244,228,248,132,221,189,203,252,204, 79,189,194,127,255,237,111, 83, 24, 71, 47,213,244,100,195,120, 52, 70,103,125, -190,246,245,175,179,152,142, 25, 15,207, 0,193,116, 58, 99, 94, 84,126,151, 36,101,200,123,118, 88, 43,120,124,120,198,223,254, - 91,127, 27, 44, 60,184,255, 9,105,150,250,196,163, 98, 78,164,125,174,184,112,107,105,107,159, 18,129,251,151,120, 15,214,130, - 94,196,133,172,241,245, 87,115, 69,156,146,107, 57,236, 33, 0, 37, 16,186,164, 88, 93,127,109,103, 41,133, 23, 57,197, 81, 68, -150,249, 98,158,101, 62,177, 43, 73, 19,127, 35,198, 17, 66,201, 11, 98, 62, 28, 40, 26, 78, 79, 30,115,255,147,187, 20,149,161, -180,154,173, 75, 55,184,113,235,121,126,229,111,252, 50,157, 44, 65, 54, 5, 81,164,232, 38, 9,166, 44,120,247,237,119,160,105, -200,149, 68, 98, 64, 89,146,204,255,191,243,195, 99,162, 56,245,133,218, 9,242,222, 6, 89,183,199,230,214, 54,189,193, 22,183, - 62,251, 18,187,151,246, 73,178, 14, 82,199, 28, 29,159,144,102, 25, 89,150, 6,175,105,138,115,126, 28,236,130,224, 80, 10, 15, -210,136,162, 8,227, 32, 78, 50, 46, 95,187, 70,146,230, 28, 30, 30, 97,112,108,239,108,145,199,138,166, 42,177,198, 80,150, 21, -113,156, 50, 43, 10,111,177, 18, 80,149, 37, 85, 85,145, 36, 49,139,197,130,241,112,136,115,142, 56,138, 56, 27,158, 48,155, 77, -121,252,248, 49, 90, 41,238,222,185,131, 49,150,241,120,204,108, 58,165, 42, 61,117,108, 94, 86, 44, 22, 5,101, 85, 49, 26,142, - 56, 25,142,217,218,218,240,108,253,170, 33, 81, 18,141, 67, 75, 15, 2, 42,235, 26,108,120,221,130,151, 60,207, 19, 54,183, 6, - 24,107,144,113,194, 39, 71, 35,162, 36,193,212, 13, 42,100,100, 39,137, 38,235, 8,164,183,134,248,108,116,173,124, 70, 67,232, -144,149, 82,171,168, 91, 21, 48,173, 1, 37,235,218, 67,226, 69,184,159, 47,144, 79, 16,204,214, 33, 98,214,249, 21,161,181,126, - 37, 88,214, 13,101,227,213,221, 77,109,151, 58,129,180,211, 69,197, 41, 34, 8,211,148,146,232, 40, 70, 39, 25,105,183, 75,156, -117, 16, 81, 12, 90,226, 84, 43,205,181, 8, 91,131,173,176, 77,133,116, 94, 55, 99,234,210,171,212,133, 12, 83,245,182,176, 7, -212,108, 8, 75, 89, 2,187,172,161, 93,145,186,214, 82,212,238,172,156, 9, 30,248,112, 8,176,190, 64, 8, 26,255,126,229, 56, -122,124,204, 39,119,238, 18, 73,201,240,228,136, 52,203,105,172, 63, 72,107, 41,153, 76, 38, 36,121,135, 56,237, 97, 12,204, 22, - 51, 10, 83,209,139, 50,138,202, 16, 95,218, 67,230,121,192, 69,187, 37,120,202, 6, 22,133, 13, 93,107,164, 36, 73, 28, 70,233, -145,127,198, 47,239,239,118,178,107,188, 56,208,127, 92, 18, 58,245,213, 91,154,132, 67, 91,176, 8,182,107,162, 36, 77, 72,210, -148, 52, 75, 73,243,140, 44,247, 7,248, 52,246, 69, 95, 7,170,159, 23,209,182, 5,221,219,241, 90,241,158, 82,138, 40,208, 0, -227,240,185, 35, 29, 17, 69,138, 60, 77,232,118, 50, 58,121, 66,150,196,164, 73,132,142,124,188,179, 10, 69,189, 21, 38,250, 6, - 87,173,124,234, 63,142,144,246, 84, 81,183,254,117, 92, 71,157,187,139, 69,189,174, 42,202,162,162, 40, 42,138,181,162,238,163, -113,253,179,111,117,160, 13, 13,177,107,197,193,254, 57,173, 94,184,182,251,251, 75,165,113,107,245, 8,210,253, 54,254,114, 89, -212,197,197, 7,246,210,119,248, 4,132,222,255, 0, 37, 74,251, 28,105,213, 22,114, 37,195,175, 87,111, 44, 79,212, 92,200,209, -125, 42, 28,227, 9, 47,225,179, 10,186, 31,103, 87,156,158,159,115,120,124, 74,221, 56,238,221,123,196,124, 90, 49, 28, 21,116, - 51,205,233,227,187,140,199, 35, 58, 27,155,160,124, 97,184,178,179,201,124,120,194, 15,127,240, 3,112, 53,189, 52, 34, 77, 98, - 10, 99, 57,153,150,100,219, 87,248,230, 79,190,194,103,159,191,193,243,207,221,228,165,207,190,192,159,126,231,219,236, 95,218, -195, 84, 53, 73,146,243,133,175,254, 20,145, 72, 72,226, 1,151,174,188, 64,111,176,141,171, 75,104, 10,106, 99, 57, 31,142,216, -191,180,207,199, 31,127,204,241,241, 49,191,253,219,191, 67,175,223,227,227, 59, 31,211, 88,179,220,167, 5, 61, 34, 82, 10, 22, -139, 5, 39,135, 71,124,233, 43, 95,165,183,181,207, 59,239,189, 15,179,115,114, 51, 39,201,114, 84, 62,224,224,240,144,175,190, -242, 13,190,255,253, 31,160,106,203,228,244,156,162,174, 88, 40,135,212, 18, 83, 55,193, 1,172,168,138,134,209,120,206, 63,249, -167,255,132, 63,248,131, 63,160,223,239,210,235,246, 57, 59, 57,164,155,197, 56,219,248,241,162,112, 63,246, 50,253,113, 98, 69, -177, 70,126,146,114, 45,193, 77,172, 70,119,203,221,155, 16, 1,216, 34,151, 34,205, 22,186,208,142,238,219,232,213,229,190, 92, -248, 27, 43,142,180, 63,185,231, 41,121,230, 79,249, 73,154, 16,167, 73,216, 37,171,176,235, 91,141, 13,149,116, 28, 30, 62,194, - 33, 56, 25, 78,216,190,116,157,221, 75,215,184,126,227, 50,219,253,156, 94, 18, 65, 49, 67,150, 37,182,174, 88, 44, 22,148,101, - 73,174, 20,253, 65, 15,157, 70, 1,180,231,136, 84, 76, 44, 99, 58,155, 91,232, 44,167,172, 13,243,162, 34,235, 13,136,243, 46, -155,123,187,136,200,195, 60, 44,254,161, 48,159, 23, 60,124,248,144, 72, 41, 54,250,125,162,216,103,173,139,176, 11, 94,207, 94, - 78,210, 60,164, 4, 42,242, 78,151,173,173, 45,102,179, 25, 39,167, 39,244,122, 29,118, 6, 93,191,155,181,150,170,174,112, 72, -234,198,231,177, 11,188, 37,104, 49,159, 19, 71, 17, 77,237,247,142,121, 39,167,170, 74,134,163, 51, 38,147, 49, 85, 85,178, 49, -216,164, 88,148, 84, 85, 77,183,211,163,147,231, 88,107, 24, 79,103, 12,135, 99,142,143, 79,152,205, 22, 12,199, 99,170,144,162, -214, 20, 21,177, 80, 68, 64,228, 28,105,164,208, 90, 82,213, 6,107,124, 50,150,195, 11,112,227, 68,209,237,119, 49,214, 18,231, - 93,142,207,167, 88, 33,169,170, 42,228, 50,224, 5, 83, 29,223,113,131, 37,138,252,161, 45,138,162, 85,194, 86, 20, 7,239,241, - 90,164,111, 75, 27,108,201,131,142,229, 68,199,219, 17, 87,174,225,213, 53, 38, 47,228, 91,180,206,168,170, 49, 52, 22,154,218, - 82, 22,126,164, 75,221,120, 56, 75,146,121, 45,129, 16, 33,116, 37,236,135, 35, 77,154,250,172,119, 17,198,238, 43,232,141, 5, - 87,226,108,137,169,106,164, 19,208, 24,108, 93,161,176, 56,211, 44,133,125,237, 14,223,153,128, 78,198,119,153,206,218, 48, 0, - 11,227,247,150, 95, 47, 86,227, 95, 97, 45, 52, 77, 88,118, 7,124, 50, 65, 27, 80, 89, 62,120,231, 54,167,199, 39, 72, 28,211, -209,144, 36,201,145, 58,161, 44,107,210, 36,101, 60,157,209,221,216, 33,202, 58, 44, 22, 37,211,233, 24, 29, 71, 40, 43,104,156, -160,115,245, 50, 36,217,154,112,108,165,133,106,227, 86,101,176,179, 37,177,239,114, 99,173,131,250, 92,132,159,190,183, 64, 55, -141, 7,235, 68,218, 23,255, 52, 77, 73,146,136, 36,245, 69, 62, 78,162,144,128, 40,131,179,192,119,236, 81, 28, 17, 39, 49,113, -146,144,100, 9,113, 18, 19, 37,113,184, 70,252,225, 68,134, 44, 9, 23,248,255, 38,116,233, 88,143,147, 86,202, 43,199,147, 88, -147,198,145,255,251,226,136, 52,246, 25,243,157, 44,166,147,197,164,177,127,182,168, 16,225,171,180, 90, 22,117, 95,204,219,247, -255,135, 20,245,149, 72,252,217, 69,189,166, 46, 75,202,178,164, 92,148, 20, 69, 69, 85,251, 68, 57, 17,154, 25, 63,225,190,216, - 72,175,174,109,255,186,168, 91, 87,182,127,127,153,170, 69, 32, 1, 5, 20,162,210,109,158,181,122,202,146,244,172,194,122,161, -139, 15,182,156,213, 23,208,190,133,209,187, 10,169, 58,172,162, 60, 87, 22, 3,214, 66, 59, 86,185,218,171,157,199,167,119,234, - 10,199,116, 60,229,209,253, 7,188,249,163, 55,120,252,240, 1,179,201, 24, 41, 44,195,195,123, 44, 38, 39,168, 36, 33, 31,108, - 16, 39, 9,105,164, 72,133,225,181,239,127,151,211,179, 83, 82,221, 33,142, 52,121, 79,115,112, 58,167,191,243, 28, 47,125,233, -203,236,239,109, 82, 78, 70,124,247,219,223,226,198,245,107, 68, 73,194,254,254, 21,223, 85,197,146,141,157, 45,166,227, 17, 73, -154,176,177,181, 73, 89,142, 73,226,154,110, 23,148,138,105,140,227,229,207,126,150,247,222,123,151,155, 55,111,242,207,255,197, - 63,231, 87,126,245, 87,249,249,159,255,121, 94,127,227,117,202,208, 93, 95, 40,126,192,116, 60, 98,255,242,117,126,253,119,254, - 62,175,189,250, 67, 6,162, 64, 21, 19,146, 94,151,162,209,196,113,202,206,149,171,228,157, 62, 31,191,245, 14, 81,211, 48,169, -230,204,108,237,237, 92, 97, 97, 47,144,222, 87, 44, 53,191,253,247,254, 62, 31,126,252, 49,143, 31, 62, 32, 75, 19,142, 30, 63, -102,208,237,120,186,154,240, 99,246,214,230,127,225,109,213, 63, 92,184,150,197,234,157,101, 18,145, 20, 23,199,241,207,178, 35, -182, 60,229, 85,247,190,178, 79,174,135, 27,172, 58,117,181,188, 30,226, 72,147,165, 9,157, 48,186, 75,179,140, 36,203,136,211, -108, 57,126,111, 45,115,171, 3, 3,140, 70, 99,238,221,127,128, 78, 50, 94,252,236,231,249,252, 23,191,200,243,183,174, 97,171, - 25, 71, 15,238,241,209,187,239, 99,138,130,254, 96, 16, 66, 56, 36,169,138,125, 71,211,235, 17, 15, 6, 24,231,147,250, 36,177, - 15,248,136, 82,162, 36,165,104,188, 66, 88,199, 9, 40,205,108, 54,103, 60,154,224, 28, 76,166,115,170,186,226,225,253, 7, 84, -197,130,141,126,143, 56,214,228,121,238,247,185, 97, 71, 73, 24, 89,198,105, 78,214,233,145, 36, 41,221,110,151,205,141, 13, 6, -131, 62,117, 85,242,232,225,125,182, 7, 61,242,196, 71,101, 54,193,131, 43,116, 68, 81,122, 8,199, 98,177, 96, 58,157, 4,143, -250,192,143,237,226, 56, 28,216,253,107,145,231, 29,250,253, 62, 91,155,219,100, 89,135,141,141, 77,122,221,142,143,108,157, 45, - 24,143, 39, 12,207,199, 88, 7,113, 28,211,235,245, 40, 27,203,100, 58,195, 52, 13,137,144,100, 18,175,221, 72, 53, 69, 97,150, -121,229, 77, 99,209, 65,100,183,189,189,141,147,146,188,215,103, 52,157, 49,154, 45, 2, 43,220, 5,188, 43, 68,169, 69,105, 95, -192, 34,173,194, 40, 54, 9, 9, 91,138, 56,100,169,123,108,174,244,157, 96, 8,231, 96, 25,225,203,242, 57,229,159, 43,173, 23, - 90, 46,133,125, 34, 28, 4,156, 16, 33,229,205,187,116,106,227,130,186,219, 80, 87, 13, 85, 81,210, 76,167,222, 13,162, 53, 70, -128, 49, 53,166, 88, 32,170,210,219,197, 92, 19,214,135, 22,233,227,144, 16,174, 66, 52, 21,152, 5,216,106,105, 43, 83, 8,104, -106, 76, 49, 67,186,102,185,106, 19,107,148, 66,130,162,189, 13,129, 18,161,179,195,217,176, 47, 95,123,230, 89, 3, 77,248, 60, -198, 4, 44,173,245, 69,199,203,195, 89, 76, 22,188,243,198, 59,184,166,161, 42, 22,212,101, 9, 50, 34, 78,186, 30, 30, 83, 86, -212, 64, 54,216,166, 81,158,166, 55, 25,141,208,105,140,173,106,172,142,200,175, 92,198, 69,113,144,193,174,197, 95,135, 78,221, -133,239, 65,171, 80,212, 99, 95,104,229,154,237,181,237,210,155,218,107, 1,148, 86,164, 65,189, 29,199,138, 40,214, 75, 50,218, - 82, 88, 27,132,137, 42,242,153, 29, 58,142,137,211,152, 56, 73,151, 99,241,168, 93,203,169,112, 29, 56, 86, 26,175,160,235,242, -135,101, 47,246, 78,151,163,252,132, 60,245, 93,121,146, 68,228, 89, 66, 39,243, 59,254, 52,120,191,117,164, 2,135, 64,135,103, -137,199,195,250, 49,188, 94, 75,169,116,127,253,162,238,214,133,242, 14,231, 76,128, 29,213, 52,107,157,122, 89, 84, 84,149,183, - 83,182,130, 97,191,202, 86, 79, 21,245,246, 75,176,214,162,110,238,239,252,254, 58,238,115,217, 45,173, 11, 31,150,241,146, 79, -119,233,159,214,201,121, 27, 10, 97, 68, 22,186, 47,229,191,176, 85,160,252, 42,204, 99,169, 10,119,235,194, 43,177, 20,198, 40, -185, 58, 88, 60,203, 78,208, 2,102,148,147, 40, 39,188,159,181,156,179,152,143, 24, 15, 15,152,142,143,160,153,161,132,160,179, -185, 77,167,191, 65,164, 37,123,155, 61,222,248,225,171,220,189,115,111,153, 40,182,181,179,205,241,249,156,205,221,171,124,230, -179,159,229, 39,190,242, 85,142, 30, 61, 98,122,126,202,243,207, 93,195, 15,157, 34,146, 44,231,252,228,144, 36, 86, 92,187,122, -147,241,104,202, 55,190,254,147, 44,230, 51, 46, 95,218, 33,209,130,106, 81,208,239,111,114,126,126,206,221,143,239,176,187,189, -195,171, 63,124,149,237,173, 29,190,243,157,239,240,220,173, 91,252,167,255,248, 31,243,173,111,127,107,249,160, 91, 23,148,251, - 7,152,102,111,255, 58, 95,251,218,215,120,245,219,255,158,190, 54,116, 6,219,100,157, 13,186,189, 62,181,140,121,229,149,159, -226, 47,254,228, 91,164,210, 80, 53, 5,231,139,249, 50,154,178, 29,113, 11,225, 40,203,146,159,248,234, 43,188,248,194,103, 56, -120,244,216,119,163,139, 5, 77,109,200,242,140,198,121,196,200, 50,146,116, 93,223,176,100,252,187, 21,226, 82,172,148,151,235, -170,142,245,189,250, 18,244,193,186,183, 93, 46, 31,176,171,110, 94,172, 16,146, 97, 13,212,142,221, 85,200, 49,111, 11,123,162, - 35,178, 44,241,167,236, 78, 70,150,231, 36,105, 70,148, 36,168,120,173, 83, 95,191,222,148, 34,138, 99,254,228, 91,223,230,210, -222, 37, 34, 29,113,245,242,101,250,189,140, 56, 82,188,255,206,187,220,255,228, 19,170,198,248,252,232, 44, 99,176,181,131, 84, - 17,198, 88,202,162, 32, 74, 98,162, 44, 7, 17, 33,163,212,143,112, 43, 47, 62, 75,179,140,186,170, 73, 18, 95, 60,135,103,231, - 60,248,228, 46, 69, 89,146, 36, 9,213,162,224,225,131, 7,140,135, 67,250,189, 14,121,154,144,103, 25, 74, 71,204, 23,139,160, - 0, 86, 40, 29,209,235,247, 67, 68, 35,244,178,156, 60,139,201,146,136,253, 75, 59, 36,177,230,232,209,131,240,144, 74,168,235, - 50, 40,209, 37,141,113, 68,113,204,124, 54,243,130, 55, 4,253,141, 1,113, 28, 99,172, 35, 73, 18,186,189, 14,214, 90,118,119, -119,233,100, 61,156,131,237,237,109,226, 56, 97, 81, 44, 56, 58, 58, 66, 8, 73,183,215,103, 52,158,176,179,179,203,230,214, 22, -227,233,148,209,116,202,172,242,128,165, 76, 8,122, 90,161,165, 33, 73, 53,101,225, 53, 85, 72, 15, 96,177,214,162,148,162,219, -237,178,181,179, 71,131,160,172,106,142, 78,206,168,172, 63,184, 74,231, 72, 35, 80,137,243, 60,107,173, 67,113, 72,136, 90,110, -124,232,210, 85,184, 46,252, 36, 39, 36,110,173,117, 42, 82,170,167, 98, 61,219, 17,229,186,112,217, 6, 50,166,181, 94,184, 91, - 91, 71,227, 4,149,177, 84,149,161,170, 74,234,162,160, 28,158, 33,108,237,149, 37,166,198, 20, 83,154,233, 8, 59, 31, 99,203, - 25,213, 98,140,173, 10,168, 23,136,186, 68, 52,115,100, 61, 67,154, 5,110, 49, 69,152, 5,182, 44, 16,141,247,229,139,178,192, -206, 71,168,118,108,238,188, 15,157,229,155, 23, 3,182, 42,124,137,143,125,109,109,122,166, 42, 49,198, 79, 75,132,245, 97, 62, -194, 26,191,171,111, 5,184,109,225,168, 26, 30,223, 63,228,227,247, 63, 66, 43,197,108, 50, 34,138, 19,156,136, 64,197, 40,173, -189,128, 46,239,162,187, 3,140,136, 80,194, 49, 60, 62,246,184,216,170,193, 70, 49,189,171,215,145, 58,241,135,140, 64,118,116, -203, 84, 79,135,177, 30, 60,211, 22,245, 36,246,105,152, 75,252,119, 16, 91, 54,141,161,110,106,156,243, 62,245, 56,210,196,145, - 47,182, 81,164, 66,129,110,159, 9, 50, 76, 45,125, 68,175,239,152,253,142, 61,138, 99, 84, 20,249,183, 54,150,116, 45, 17,206, -219,220, 90, 87,150, 93,138,215,226,200, 79, 95,243, 36, 38,203, 82,127,239,165, 94,147,147,103,137,223,239,167,254, 80,226, 11, -186, 66, 69, 26, 21,133,206, 60,132, 64, 41, 21,249,176,167,101,252,248,143,159, 92, 94, 92, 91,250,215,213, 94,208,130,133,223, - 51, 30, 69, 92,151,158, 98, 88,134,241,123, 85,213, 30,137, 28, 58,117,221,174,176, 3, 93, 78,181, 83,138, 53,251,158,186,113, -105,243,247,215, 49,177,235,233, 57,237, 13, 36,214, 44, 74,207,242,150, 63,235,215,114,173,135, 91,239,190,132, 92,197,201,201, -117,204, 94,171,166, 12,223,123, 27, 26,175,195,254, 76,135,206, 94,133,189, 70,155,233,126,209,234,230, 3,189,221,146,253,220, - 32,168, 81,210,248, 55, 33,112, 50, 98,251,242, 85,226, 36, 97,163,147, 97, 22, 83,126,244,250,155, 12,103, 37,137, 84,164,157, -136,105,209, 16,119,118,185,118,243, 26, 55,110,238,209,137, 82,230,211,146, 27, 55,174, 97, 77, 65,167,211,225,203, 95,254, 6, -223,127,245, 53,158,191,117,141,217,248,140,233,112, 76, 20, 41, 78,207, 14,169,138, 49,139,241, 41,199, 7, 15, 57, 59, 61,195, - 56,120,225,133,231,249,240,131,219, 76,199, 83,158,127,254, 51, 60, 58,120,196,214,214, 54,223,253,179,239,210, 31,244,249,167, -255,244,159,242,111,254,237,191,189,192, 12, 22,194,115,205, 23,147, 49, 27,253, 30,191,242,203,127,139,247,222,126,155,163, 71, - 15, 89, 20, 53,215, 66, 12,236,162,210,124,225, 11, 95, 38,209,142,215,127,240, 29, 98,233, 83,148,138,198,132,194, 32,189,248, - 8,239, 68,144, 58,227,239,253,221,191,207, 91,111,189,205,221,123,119, 89, 20, 37,101,109,217,191,188, 79, 85,207, 16,152,101, -167,254,228,107,188,138, 84,117, 79,228, 4,184,117, 64, 48,235,209, 76, 79, 97,250,215,186,240,118,252,190, 60,157, 47,187,115, -121, 65,175,177, 18,203,249,235,166,221,169,231,185,199,194,166,121, 78, 20,128, 41, 42, 14,108,247,118,180, 47, 61,198, 84,235, - 8, 99, 28,111,189,241, 38,177, 86, 28, 63,126,200, 70, 39,101, 99,115,147, 69, 89,115,237,198,115,124,246, 11, 95,196, 42,197, -131,131, 67, 54,119,246,216,189,245, 60, 66, 43, 38,103,167,212,243, 25,174,170,136,148,246,193, 45,210,143, 8,133,116,184,198, - 35, 76,243, 94,151, 98, 60,242,106,251,249,140, 59, 31,221,166, 92, 44,112,214, 49, 24,244,105,170,138, 98, 49, 71,224,188, 2, - 56,205, 16, 65, 40, 23,197, 9, 85,109,145, 90,147,100, 57,101, 85,129, 49,228,113, 68,162, 4, 90, 88, 98, 45, 25,244, 58,108, - 13,250, 52, 85, 73,177,152,224,172,207,150, 46,203,198, 63,208,156, 39, 26, 42,165,136,130, 23, 58,142, 19,140,177,116, 58, 29, -250,131,190, 87,220,207, 11, 54, 55,183, 24, 13,135,108,108, 12,136, 34,205,120, 52,102, 60,153,160,148,166,211,233,146,166, 25, -157, 78, 23,169, 52,227,233,140,143,238, 61,100, 97,173,127, 93,140, 99, 43,142,144,206,144,247, 18,154,178, 13,102,241, 28,119, -161, 4,117, 99, 25, 12,250, 12,182,183,153,149, 37,157, 78,206,131,135,143, 89,212,222, 50, 22, 9,200, 34,136, 50,252,131, 84, - 41, 15,215,136, 98, 34, 29,163,132,242,221,246,242,128,167, 66,130, 85,155,110, 21,112,169,225,112,184,124,254,180,186,140,181, -148, 54,169,218,130,196,210, 19,221, 24,255,117, 52,214,127,173, 69, 89, 82,151, 37,182,170, 40, 71,199, 84,179, 49, 90, 88,108, - 49,135,249, 20, 22, 35,170,233, 41,245,252,156,122, 54,166,158, 14,169,167, 67, 40, 38,152,217, 16, 51, 59,135,217, 16, 89, 22, - 80,206,125, 16,139,245,172,119, 55, 27, 35,202,105, 56, 40,176, 20,201,186, 54, 28, 62, 80, 15,125,106, 89,216,175, 59,231, 61, -231,206, 93,232,230,165,107,255,124,232,210, 91, 47,184,240, 36, 62, 83, 53,188,251,230,187, 12,207, 70,104, 33,153,140,206,201, -242, 14, 78,198, 76, 22, 5,113,146,113, 54, 26,209,219,222,163,209, 41,149, 16, 68, 56,134,199, 71,100,121,238,239,155,188, 67, -247,234, 21,164,140,124, 67,167, 88, 78,214,150,108,118, 99,151,154,135,150,112,166,213,202,154,218, 42,213,107,211, 44,147,220, -124,147, 39, 66,129,146, 75, 64,144,135,251,176,188,103, 91, 82,159,210, 17, 90,199,129,222,231,113,207, 75,193,218,218,170,174, - 37,154, 26,107,177, 1,132,214,194,178,226,200, 31, 56,178, 52,165,155,167,116, 50, 63,229,203,178,148, 78,150,146,165,254,208, -236,245, 0,114, 25, 35, 44,149,242, 1, 80, 58, 36, 59,182, 5,190, 69,226,138,191,250,248,125,117,164, 12,177,172, 97, 53, 65, - 16,184,217,186,166,174, 42,170,178,166, 88, 84, 20, 69, 73, 89, 53, 30, 29, 44,101, 16,159, 43,191,114,208,107,207, 68, 33, 67, - 36, 70, 0,115, 93,223,243, 69,221,133,249,149, 92, 18,115,188,175,113, 57,142, 23, 23,243,103,127,156,104,106,105,222,183, 43, -179,125,187, 11,107, 67,228, 87,187, 25,183,196,202,182,116, 32, 23, 50, 99,151, 55,241,218,168,161, 45, 4,237, 88,118,125,236, -239,132,192, 8,175, 44, 68,174,198,114, 33,245, 24,231, 4,121,111,147,237, 75,251,212,117,197,222, 70,151, 55,127,248, 67, 62, -188,251, 8, 25, 69,236,110,164, 84, 6, 92,220,227,133,151, 95,230,249, 91,183, 40, 38, 83,180, 45,217,221,187,204,209,201, 25, - 73, 2,211,233,140,143, 62,126,192,249,249,132, 63,250,195,127,203,241,225,125, 62,254,224,125,238,220,189,205, 98, 49, 98, 49, - 63,229,241,253,143,176,117,197,213,171, 55,249,224,246, 7,188,253,214,155,252,210, 47,254, 34, 47,191,244, 18, 63,120,245, 85, -190,244,165, 47,115, 54, 28, 50, 24,108,240,253,239,127,143, 27, 55,110,242,171,191,242, 43,124,231, 79,191,179, 20,252,120, 73, -175, 70,217,154,205,110,134, 33,225,235, 95,255, 41,190,247,167,223,225,244,124, 72,172, 5, 82,198, 52, 54,101,182,104,248,165, - 95,254, 89,126,248,253, 63, 65, 22, 51, 54,163,132,227,217,140, 10,159,253,141,240, 73, 90,206, 90, 70,195, 57,191,247,219,191, -203,100, 58,103, 60, 29,241,201,253,123,212,141,227,234,149, 43,212,213, 4,225,234,224, 59, 22,203,228,162,139,169,108,159, 94, -212, 47,184, 63,214, 36,143, 75,181,168,115,203, 7,176,191,174,214, 59,115,133, 82,173,194, 83, 95,120,205,245,154,173, 82, 74, -239,166, 72,211,132,124,109,252, 30,167, 57, 58, 73,208, 81,228, 41,115, 34,236,224,165, 68,104,205,193,193, 33,111,191,245, 22, -229,124, 78, 93,204,185,178,189,129,107, 10,238, 63, 62, 68,198, 41,151,111,222, 96,235,242,101, 18,191, 51,225,218,245,231,194, -168,207, 49, 57, 58, 96,114,240, 24, 89, 21,244,123, 25, 81, 18, 97,154,154,114, 62,197, 54, 53,227,225,144,217,104, 68, 51,159, - 51, 61, 31,178, 24,143, 16,214, 48, 58, 59,101, 60, 30,163,180,242,105, 98, 74, 81, 85, 21, 85, 93,161,173, 65, 56, 88, 20, 37, -141,131, 52,237, 80, 86, 53,211,217,156, 36, 77, 61,172,168,169,137,133, 35,194, 17, 71,210,219,229,109, 67,172, 20, 89, 28,113, -124,116,192,249,249, 41,198,194,124, 81, 99,172, 66, 69, 49, 85, 93,163,180,199,123, 70, 81, 68,150,119,232,116,187, 72,169,216, -220,220,198, 57, 56, 63, 59,103,103,123,155,162, 40, 40, 43,111,255, 44,203, 10, 29, 69,116, 58, 93,178, 44,167, 40, 42,102,139, - 5,157, 78,151,178,174,249,240,222, 61,230,198, 32,165, 32,119,130,190, 20,164, 49,196,153, 66, 6,132,180,197,135, 84, 32, 60, -150, 53, 75, 82, 84, 20, 83, 90,203,214,230,128,143, 63,185,207,180,244,161, 48, 49,142, 60, 2,149, 9,146,196,243,251,211, 56, - 70, 43, 77,164,163,165,224, 74,173, 95, 3,226,162,206,167, 69, 14, 59,215,142,225, 87,249,213, 66,180, 88,226,149, 40,211,186, -181,103,143,115,212,214, 35,119, 27, 99,105,170,102,217, 53,217,197,144,249,248, 12,170, 26, 55,159, 66, 49, 69,212,115,104,166, -216,114, 78, 61, 27, 83, 77, 70, 44,134,103, 44,198,103,152,249, 8,170, 9,178,156, 33,234, 26,105, 27, 95,160, 45, 80,150,212, -147,115,100, 51, 7, 97, 86, 15,245,160, 60,147,109,174,128, 9,153, 4, 1, 84, 19,150,196,161,171, 55,190,168,135,113,189, 11, -191,246,133,194,174,162, 63,173, 97, 58,154,242,250, 15, 94, 71, 90,137,109, 74,176, 6, 21, 39,136, 40,245, 83,137,186,198, 10, - 72,250, 3, 42, 17, 97,181, 34,114,134,249,249,144,238,160,199, 98, 81, 16,245,251,228,123,123, 40, 21,163, 36,203,149, 71, 59, - 93,107, 1, 48,214,177, 92,137,197, 97, 52, 44,214, 92, 97,214,249,241,187,143,122, 13,135,128, 48, 74,246, 90, 43,207,182,247, -128,169,150, 87,161,150, 49,167, 74, 69,161, 75,142, 67, 65, 15,224, 31,177,246, 58,175,241,227, 61,217,180, 9, 99,120,239,223, -137,148, 38,137, 34,242, 52,165,219,201,232,118, 82,242, 60, 35,207, 51,178, 52, 38, 77, 19,146,184,237,130,213,138,241,174,159, - 81,212,165,190, 56,105,254, 49, 69,253,169, 46,222,121, 7,208,122, 78,201,178, 83,111,218,162, 94,122,207,125, 89, 81, 86,158, - 95,209,174,156,116, 40,232,190,176,175,138,122, 43, 46, 6,124, 81,151, 50, 92, 88,237,200, 83,182,226,182,213,248,221,231,189, - 94,244,234,185, 79, 25, 51, 56,231,150,209,167,173, 92,197, 4,127,167,107,163,231,240, 96, 7,191, 3,241,197,188,245,187, 59, -103,150,169, 52,235,187,120, 25,140,246,178, 69,147,182,251, 89,185,194,253, 8, 37, 46, 32,251,220,133,112, 1,205,165,253,203, - 36, 89, 68,191,147, 81, 77,103,252,232,213,215, 40,171, 26,173,225,198,141, 61, 78, 71, 53,159,255,210,215,217,186,180,207,245, -155, 55, 73, 84,132,194, 48, 31,141,217,236,119,185,115,231, 35, 14,142, 78,184,125,251, 35, 78,143,143,185,122,105,159,205,254, - 22,157,238, 38,131,141, 77,182,119,247, 72,226, 1,113,212, 3,161,120,227,205,215,217,220, 24,240,252,115,183,120,248,224, 33, -183,111,127,196, 55, 94,121,133,211,225,136, 56,203,216,222,221,225,147,187,119,249,254, 95,124,159,127,248, 15,254, 1,145,142, -184,253,254, 7, 75, 42,155,115,142, 75,253, 62,163,225, 25,189,193, 46, 63,247,171,191, 74, 61,124,192,163,219,183,121,116, 50, - 69, 39, 93,116,166,168, 22,134,151, 95,250, 9,250, 91, 25,175,189,250,109,154,211, 17, 70, 41,102, 38,208,226, 2,114, 82, 34, -169,172,230,235,175,252, 44, 55,175, 93,226,240,225, 3,176, 53,179,249,194, 83,198,164,243, 2,191,101, 82,218, 90,198,222,242, -125,119, 49,123,207,137, 11, 50,185,139, 28,126,247, 12, 52,255, 10,181, 40,132, 88, 34,101, 91, 20,162, 63,133,250, 81, 83,123, -242,215, 82,250, 83,122,200, 30, 78, 90,161, 92, 59,122,239,100, 68,105, 28, 44,103,209, 74,204, 18,198,238, 14,248,195,127,253, -175,120,231,213,191, 96, 35,247, 22,150,211,243, 49,163, 73,193,151, 94,121,133,237, 75,151, 24,108,237,120, 65,150,210,164, 74, - 32,235, 10,105, 26,100,146,145,167, 25,179,241,144,225,232,156, 78,175, 79,214, 31, 96,235,134,233,233, 25,195,227, 83, 14, 15, - 15, 41,230, 11, 22,211, 9,139,217,140,211,243, 49,198, 89, 6,155, 27,212, 54, 98, 56, 45,136,147,132,205,205, 62, 66, 10,108, -237,104, 76,141,138, 98,102,101, 67,213, 52, 68,169, 47,198,199,199, 39,244, 58, 61, 76, 83, 98,194,200,210,119, 54,146, 44,139, -137,181, 66, 88,255,103, 59,131,109,250,155,187,108,239, 92,162,191,177,201,172,172,252, 24, 91, 72,102,211, 25,117, 93, 51, 28, -142,232,111,108, 32,117, 4, 82, 17,199, 62, 48, 6, 1,113, 18,211,201, 50,154,186, 70, 72, 65,154,231, 30,178, 34, 60, 71,218, -154,134,166, 44,176,245,130, 60, 77,249,248,254, 67,198,139,130, 72, 75, 98,235, 72, 5,244, 18, 79, 6,115,206, 11,245, 12, 80, -150,150,110, 55,103, 50,169,232,100, 41, 73,150, 81,184,134,172,215,231,236,209, 9,179, 69,197,185,115,200, 72,208,111, 36, 89, - 87, 17,167, 26,169,172, 87,191, 71, 49, 90,249,177,187, 12,118, 89, 25, 70,233, 74, 5, 47,116,216,244,202, 16,102,226,156, 93, -237, 57, 67, 17,151,235,215,102,152, 16,185, 0, 62,114, 2, 12, 80, 91, 23,146, 5, 3, 2, 59,228, 89, 84,139, 25,102, 54,198, -140, 78, 89,156, 13,185,123,239,152, 15, 31,156,114,190, 48,228,105, 70, 7, 11,213, 28,204, 2,211, 20, 56,103,189,141, 80, 72, -132, 83, 68, 82,163, 29,136,178,196,204, 38,212,243, 49, 74,121, 63,190, 8, 22, 79,107,252,193,110,125, 65,224,150,124,123, 19, -246,234, 30,158,131, 51, 97,138, 23, 22, 99, 33,170,149,176,115,245,164,111,131, 51,130,187,183,239,113,239,227, 7,228, 73, 76, - 93, 46, 80, 74, 80, 56,141, 83, 49, 58,138, 25,143,198,116,187, 3, 92,148, 81, 37, 41, 40,141,157,207,169,230, 19,122,189,140, -241,162,160,187,123,137,108,115,211,179, 36, 34,137,212,173,234, 59, 68,215, 58,223, 17,251, 96, 28,252,189, 27,169, 37,174,121, -105,129, 13,161, 58, 77,227,217, 36, 34,112, 41,252, 14, 93, 6, 87,212,106, 58,231,215,180,122,213, 41,183,157,185,246, 10,116, - 31,123, 42,151,228, 53, 31, 28,214, 98, 95,253, 62,189, 9,147,129,198, 52, 56,227, 9,148,113, 20,121,183, 76,238, 39,124, 89, -158,145,102, 73,216,213, 71,232, 40,124, 13,218,139, 30,165,146,126, 4,175, 52, 74,135,228, 71,173, 61, 65, 80,168,139,220,142, - 31,163,243,186, 56, 81,182, 23, 28, 63,109, 22,133,109, 90,161,156, 47,228, 69, 81, 82, 44, 10,170,170,193, 26,191,126,209,203, - 78,189,117,152,249, 67,136,159, 74,177,212,202,168,231, 46,111,254,190, 23,182,173,198,226,237, 7, 47,149,234, 50, 88,207, 66, -234, 90,123, 81,217, 39, 54,174, 43, 51,125, 24,165,175,189,176,214,173,129, 34, 92,232,204,141, 91,178,131, 91, 52,160, 23, 55, -120,228,163, 90,190,208,161,160,175,157,190,151, 49,174, 98,181,159,127, 18,116,178, 92, 2,136, 22, 81,170,201,243, 14, 74,193, -165,221,109,110,191,251, 62, 7, 15, 15, 73, 34, 65,156,104, 74, 11,187,151,111,112,237,198, 45,190,246,141,111,112,239,206, 71, - 84,229,140,157,173, 29,142, 30, 61,228,141, 31,254,144,243,225, 24,235, 4,183,158,123,158,253,221, 75,212, 69,195,100,178, 64, - 39, 49, 22, 67,183, 63, 64,168, 20,235, 34,166,179, 17, 58,169,153, 79,167,220,189,115,143,126,167,203,215,191,254, 13, 62,252, -232, 35,190,246,141,175,115,247,222, 39,244,123, 93,234,186,164,219,233,240,230,155,111,241,159,255,231,255, 51,254,226, 47,254, -130,241,100, 18, 38, 22, 2,217, 52, 88,103,232,246,123, 92,187,117,147, 95,250,230,151,248,240, 7,223,101, 56, 42,136, 58, 61, - 68,226,104, 74, 1, 46,229,107, 63,253, 53,110,191,247, 42,229,241, 1,141,132, 81,213, 96, 90,245,119,136, 6, 52, 40, 54,119, - 47,243, 27,127,235,215,248,232,237,183, 72,133,163,105, 26, 14, 14, 30,115,253,242, 46,213, 98,238,163, 0,195, 65,201,173, 69, - 68, 58,177,150,204,182, 60,137,187, 11,239,179, 62,197, 89, 67, 39,138, 16, 33,233, 4,225,128,214,170,189,195,141,172,214,108, -144,202,171, 90, 35,189, 58, 61,183,145,135, 74,120,128, 69,154,133,162,222,233,144,230, 9, 81, 26,163,147,196,135,107, 72,143, -237, 20,178, 29,221, 10, 30,126,248, 30, 15,222,127,139, 23,111, 92,102, 54, 29,243,234,107,111,240,187,191,247,247, 65, 74, 78, - 78,143,145,192,160,215,243, 55,184,146, 52, 77, 73,221, 84, 72, 29, 19,119,187,196,145,166,168, 74,132,148,116,123, 61,198,167, -103, 76,206,206, 40,138,146, 69, 89,145,229, 25, 91, 27, 3,102,243, 5,247, 14,142,169,157,163,211,239,113, 62, 42, 57, 31, 23, -116,122, 57, 27,219,125,242, 36, 65, 32,153,204, 39, 24, 39, 49, 66, 51,153,207,168, 77, 77, 81, 20, 84,139,134, 52, 73,176,214, - 7, 80,216,208,133,197,218, 39,182,101,177, 70,184, 26, 43, 52,113, 54, 64, 70, 41, 8,136,210,148,107,207,221,162,155,119,152, -142,198,116,187, 29,143,161,117,144,164, 9,123,151, 46,249,174,201, 26, 58,221, 14,131,126, 63,100,183, 39, 68,113,132,177, 13, - 78,192,249,112, 24,242,197, 3,154,181, 46,104,138, 25,121,146,208, 56,120,116,120,136, 49,142, 8, 72,129,126,170,145, 52,196, - 73,228,169,117,133, 15,162, 73,210,136,170,108,136,195,132,165,209, 48, 45, 11,236,164,100, 58, 91,112,232, 60, 14,117,208, 40, -242, 92,144,100,138, 40,150,203,215, 90, 5, 47,113, 59,169,107, 17,196,178, 29,181, 47,187, 58,233, 39, 30,139, 5,139, 98, 65, -146,196, 75, 26,161, 8, 83, 34, 25, 82,182, 68,112,220, 56, 41,176, 2, 26, 39, 48, 78,248,195, 72, 59, 45, 52,214,239,215,235, - 6,202, 57,197,217, 33,143,238, 30,240,241,157, 17,143,143, 38,124,124,239,152,131, 79, 14,216,205, 5,219,221, 8,105,203,160, - 72,151,116,147,140,110,148, 96,206, 39,124,244,198, 7, 20,143, 31,225, 70,231,212,227, 83,242, 44, 90,101, 2,173,217,136, 91, -176,249, 50, 85, 82,128,179, 62,149, 14,227,247,239,174,221,183,135, 67,139,112, 65, 84,103, 67, 32,202, 82, 32,104, 48,149,228, -213, 63,255, 17, 77, 81,162, 37,212, 85,129,210,154, 90,166,160, 98,140,105, 40,230, 37,105,167,135,204,187, 20, 1,113,107,167, - 19, 76,179, 32, 73, 53,227,178,100,243,202, 53,226, 78,207,239,175,117, 91, 96, 69, 56,144,176, 68,134, 91,107, 16,176, 44, 52, -237,215,232,130, 82,223, 25,150,207,118,107,219,245, 8,203, 46, 61,214,171, 14, 84,173, 61, 11, 68, 59,141, 81, 10,161,253, 91, -203, 76, 89,214,129,117,103, 84, 88,101,216,160, 38,111, 66, 40,146,181, 54,216, 96,189, 91,161,157,238, 37,185,183,201,249,130, - 30,173, 33,209, 87,201,108, 42,140,223,219,162,238,227,155,163, 21,250,247,175, 80,204,159,197,144, 95, 6, 98, 57,183,204,134, - 55, 77,229,133,114,101,237,189,234, 69, 73, 89,122,157,149,144,129, 7, 19,233, 37,243,101, 53, 85, 8,220,134, 96,235, 83,159, -185,186,253,251, 90,203, 37, 8,102,101, 63,107, 79, 79, 43,139,145, 90, 75,221, 90,239,203,150, 81,167, 23, 60,229,173, 79,148, - 11,227, 90, 90,191, 99,248,102, 90,174,239, 58,133,206,217,128,171, 21,225, 64, 33,212,218,180, 64, 92,164,154,181,130,172,144, -100, 36, 3,133, 76, 10, 15,153,104, 71, 51, 2,129,179, 48,155, 77, 25, 12,250,196, 74,242,193, 91,111,115,118,122, 78,150,101, -136, 56,102, 97, 53,183,110,221,226,133,207, 60,199,199,239,191, 67, 44, 29, 85, 49,231,240,240,144, 60,207, 25,141, 38, 88, 39, -217,217,218, 35,214, 41, 82, 37,140,102, 5,139,178, 90,250, 7,141,243, 60,239,166,174,144, 88,234,170, 34,203, 58,100,105,198, -209,225, 17,247,238,125,194, 23,190,240, 57,166,211, 17,159,255,220, 75, 60,184,119,151,217,116, 66,150,166, 60, 62, 56,164, 40, - 74,126,235,183,127,135, 63,250,163, 63,242,230,152,128,131,140,156, 35,205, 35,166,243, 5,191,241,119,254, 30,119,222,121,139, -163, 15, 63,160,168,230, 24,153,161,162,140,209, 98,202,207,254,226,207,243,248,238,135,184,217, 33, 70,214,156,205, 42,138,144, - 61, 45,133,162,211, 25,144,244,122,168, 40,227,119,127,235,215,249,228,189,219,148,163, 49,211,179, 51, 98, 5,123,187, 3,102, -179,145, 47,234,107, 57,245,235,239, 95,152,206, 60, 49,130,247,137,104,254, 48,247,100,124, 33,237, 88,214, 31,177,214, 40, 84, -171, 61,105,155,241, 44,130,181, 82,173,237,217, 91,225,158,192,119, 5,105, 26,147,119,114,242,110, 70,146,182,170,216, 36, 4, -108, 40, 15, 10, 9, 55,168,169, 11,126,240,167,223, 98,118,122, 72,130,229,181, 31,126,159,157,157, 77,182, 55,250, 28, 63,186, -207,124,116,142,105,106,242, 78, 78,119,208, 67,164, 49, 42,143,137,179,132, 98,116,142, 43,102, 72, 83, 33,157,161,156,207, 72, -164, 36,209,145,183,222,196, 41,105,183,199,165,203,123,196, 81, 68,156, 36,228,189, 1, 58,142,216,219,221,229,228,116,200,193, -225, 49, 82, 75,250,189, 14, 74,250,100,186,209,116, 76, 81, 89,146,180,195,124,177, 96, 94, 44,200,210,156,162,168,151, 2,196, - 80,247,136,148, 36,139, 37,253, 44, 33, 75,180, 79,198, 82, 49, 22, 65,183,155,163,112,152,198,160,117, 76, 39,239, 17, 71, 49, -231,195,115,226, 52,101,255,242, 62,206, 26, 14, 30, 63, 36,146, 18, 29,172, 71,105, 28, 99,155, 26,165, 37, 89, 26, 83, 21, 5, - 69, 81, 82, 87, 53, 82, 8,172, 49, 36, 90,161, 4, 84,139, 5,145,132, 65,175,195,209,217, 57,163, 89, 1,214,145, 0,131, 84, -163, 48, 8, 41,169,140,163, 40,125,148,171,142, 36, 77, 99,137,148, 6, 12, 58,211, 12,199, 19, 34, 20,163,233,148,145,115, 24, - 43,232, 58, 73,172, 13,113,226,149,189, 58,210, 8,180,239,214,218,135, 87,187, 31, 95,138, 47,229,242,173,237,208, 35,229, 31, -206,173,240, 82, 0, 66, 9,175, 96,142,244,178, 48,160,100, 64,156, 58,154,144,147,109,240,113,187,126,113,236, 39,136, 69, 99, -104,154,138,122, 54,101, 49,156, 33, 42, 75,102, 5, 3, 1, 29,105, 41,167, 99,118, 7,154, 88,251,164,199, 60, 74, 81,214,241, -254,107,175,243,253,255,238, 79,121,252,254, 7,136,242,140, 68,195,214,238, 22, 81, 30,131, 48,136, 40,196,180,134,245,144, 11, -138,214,214,169,226,237,109, 54,140,224,195,174,125,137,240,246,186,129, 22,238,227,183, 28,225,231, 33,253, 10, 98,120, 58,225, -237, 55,223, 37,209, 17,206, 53,190,176, 57,129,149, 9, 8,201,108, 50, 37, 78, 51, 92, 20,163,122,125, 22, 18,180,214,204, 79, -143, 73,252,183,207,162, 54,108, 94,190,138,206, 59,136,128, 9,143,180, 23,144,181,207, 98, 27,216,240,174, 45,212,161, 9, 91, - 30, 60,194,171, 96, 77,136, 82, 53,198, 43,185, 91, 6,124, 0,144, 69, 97, 63,172,117, 43,126,148, 79,237,205,125, 3,160,195, -234, 85, 5, 42,167,255,119,197,229, 95,241,219,109,219, 36,134,166,177, 85,232,199, 73, 68,154,121,182, 69, 22,216, 22, 58, 14, -205,132,148, 75,110,125, 59, 61, 20,218,231,160, 72,237, 17,224, 66, 71, 94, 99,240, 68, 81,255,180,226,254, 36,249, 84,132,125, -186,187,144, 47, 29,214, 5, 77, 80,191,151, 94, 36,231,133,114, 13,198,186,112,192,144,203, 98,174, 46, 20,244,213, 52,218, 90, -139,122,249,230,165,223,143, 34,189,156,215,199, 45, 83, 86,235,229, 56, 34, 90,210,223,164,103, 49,183,197, 84,178, 82,196,203, -117,184, 88,187,203, 90, 21,122, 25, 78,103,173, 74, 81,182, 76,222, 0, 79,112,107, 97, 47, 23, 31,248,114,121, 17,173,212,239, -110,229, 93,127,226, 7, 6, 23,109, 81,203,194,190,132,234, 40,190,242,165, 47,241,232,222, 93, 62,124,247, 61,234,218,146,117, -115,230, 70,112,235,165,159, 96,123,107,147, 68, 54,136,106,198,240,228,132,155, 55,110, 80,213, 21,143,143, 14,137,147,148,237, -205, 29, 92, 35, 40, 22, 13, 22,197,120, 81, 48, 28, 79,160,170,169,235, 18,173, 36,184,134,217,108, 66,177, 40, 89,204, 11, 16, -146, 40,138,232, 15,122, 56,219,240,224,193, 39, 92,190,180,203,143, 94,253, 62,223,248,250, 87, 24, 14,207,185,117,235,121, 6, -131, 77, 30, 31, 28,243,202, 79,126,147,131,195, 35, 30, 31, 29, 81,153, 6, 37, 28,159,217,219, 36, 78,165, 31,239,111,222,224, -197, 27, 87, 57,254,209, 31,209,152,134,243, 34,166,196,161, 83,197,222,254, 13,110, 93,189,202,251,111,126,139,147,179, 99,226, - 60, 97,178,176, 24,171,137,116, 15,169, 82,162, 36, 3,169,249,197,159,251, 37,170,201,148,225,163,199,236, 12,186,116, 18,197, -206,238,128,179,225,233, 18,102,240,151, 49, 12,125, 99, 46, 86,169, 71,150, 11,216,154,101, 6,146, 99, 41,132,108, 53, 19,237, - 30,244,169,152,223,245,155, 20, 31,180,225, 90, 22,119, 24, 77,106, 37, 72,210,152,188,147,145,229, 25,113,154,160,147,196, 71, - 82,234,208,165,175, 89,217,100,164,216,232,230,124,231, 15,255, 29,183, 63,120,135,155, 55,111,176,185, 57, 32,142, 34,202,217, -152,186,156, 83, 85, 37, 8, 65,191,223, 35,235,118,253, 13,227, 12,162, 41, 24,158, 28, 98,155,146,106,177,224,236,248,152,106, - 62,103,115, 99,131,188,191, 65,190,185, 77,127,123,123, 9,201, 72,178,140,172, 59, 64, 72, 69,191,223, 39,207,251,124,120,247, - 46, 82, 74,246,246,246,232,230, 93, 4,142,243,225,136, 69, 81,163,163, 4,231,240,190,219, 36, 97, 56, 28, 35,133,247,201, 90, -219,160, 4,116,178,132, 60,213,116,178,152, 68, 71, 84,198, 49, 43,107,170,198,146, 37, 17, 18,131,214, 26,235, 32,138, 19,250, - 27, 27,116,186, 29,138,178, 96, 58, 29, 35,156,227,236,244, 4, 83,215, 8, 33,200,211,132, 94, 55,247, 95,199,249, 41,155, 27, - 27, 68,145,166, 40,138,224,113, 95, 32,112,228,177, 87, 9,151,243, 41,166,152,225,170, 5,165,181,220,125,116, 12, 50, 66, 56, - 75,166,156,207,249,142, 99, 12,154, 69,229,161, 46, 82, 75,172, 53, 20, 69,133,176,150, 56, 85,204,203, 2,140, 99, 58, 47,169, -164,100, 81, 91, 98, 33, 73,164, 37,138, 64, 69,146, 56,142, 81, 42, 70, 74, 15, 33,105,131,191,218,110,125,201, 55, 8, 15,248, -246, 89, 34,148, 87, 81, 35, 86,224, 34,161,229,178,195,179, 66, 6,140,171, 14,224, 20,137,145, 26, 39, 21, 86,250, 28, 56, 41, -117, 64,199,224, 99,120,157,195, 53, 53,182,170,112, 85, 73, 42, 29, 91, 61,201,238,142, 98,239,114, 78,172, 45, 66, 58,148,214, -222, 58, 40, 28,218, 25,158,123,110,147, 91,159,221,103,247,250, 62,251,183,174,147,108,111, 80, 71, 18,153,103,184,214, 34, 37, -228,178, 32,250, 41,168, 13, 66, 67,127,141, 59,227,149,240,206,239, 6,194,226,203, 55, 69, 24, 23, 50,204, 91,181,184,196, 73, - 73, 99, 5,175,191,250, 38,147,243, 9, 73,228, 95,159,186,105,112, 40,162,204,147,225,202,162, 36,206,114, 84,191, 79,147, 36, -148, 66, 34,129,217,233, 49, 91,131, 46,243, 98, 78, 35, 53,219, 87,174, 35, 18,207,125, 88, 31,251,182,124, 17,236, 42,128,197, - 5,117,188, 84,242,105,214,185,101,137, 4,111,179, 33,148, 36,144, 71, 67,168, 75,164,137,244, 42,175, 92, 41,189, 26,247,135, -220, 7,161, 86, 20,202,245,167,139, 92,198,153,134, 6,100, 45,185,205, 7,142, 25,159,107,161,189,152, 47, 77,227,192,182, 88, -217,227, 86,122,173,213, 20,152, 86, 79,166, 61,255,222, 55, 11,218,199,227, 94,240,169,115,129,115,223,186, 86, 28, 79,200,140, -214,106,214,170,216,135, 78,221, 54, 75,161,156, 39,202,249, 55, 47,148,115, 23, 68,195,190, 9, 18, 23,242,224,173,245, 34,232, -186,105,208, 75, 97, 3,171, 0, 14,173, 20, 81, 75,240,106,205,238,237,220, 62, 68, 30, 34,220, 26, 72,100,157, 8,214, 10, 85, -196, 26, 40,236,201, 96, 22,175,195, 82, 66, 16, 57, 9, 17,222, 38,230, 20,194, 69, 40,185,130,241,183,129, 12,106,121,177, 8, -148,208, 75,206,179,114, 62,219,217,134,120, 62,107, 89, 42, 51,157, 3, 39, 47, 66,253,187,189, 46,105,146,112,118,114,130, 20, -142, 36,129, 36,207,153, 23, 48, 24,108,161, 20,228,169,192,204, 27,174, 93,190, 4,198, 50,159, 78,185,114,245, 50,174,182, 28, - 62, 60,161,152,214, 40,157, 18,117, 34,116,236,125,209,253, 78, 66, 89,205,113, 86, 48,155, 78,177,182, 97, 49,171,112, 70, 96, -148,247,241, 74, 9,189, 65,143,186,140,248,209,107,175,241, 19, 95,120,137, 65, 39,229,236,244,140,126,127,147, 31,124,255, 7, - 72,157,241,255,249,175,255, 27,254,209, 63,250, 79,249,225,235,175, 45,113,151,105, 28,163,112,124,248,222, 59,136,238,183,248, - 95,254, 79,255, 1, 87,174,239,113,124,251, 1,167, 39, 39,104, 91,115,229,185,125,190,251,103,223,227, 63,251, 71,127,151,180, -191, 73,164, 31,177,153,116,120,116,214, 80,155, 8, 33,187,204, 22,150, 40, 79, 24, 13,167,188,251,254, 7, 60,119,245, 10, 31, -189,158,208, 85,138, 60,106,232,101, 25,113, 20, 83,215,139, 53,177,155,120, 2,137,124, 49,115,120, 29, 12, 36,240,118, 27, 43, - 37, 70, 58,148, 20, 88,105,113,202,243,186,149,112, 40, 28,181,108,252,222,118, 13, 17,226,111, 88, 15,226,105,132, 64, 75, 31, -149, 41,165,244,129, 21,202, 63, 56, 44,142,166,241, 5,163,189, 1,101,235,138, 8, 15, 76,199,170, 91,179,225,100,220,223,218, - 99,231,242,117, 50, 95, 61, 56, 62, 27,178,123,233, 26, 89,183,195,108, 58, 97, 50, 28,114,247,131, 15,136,133,228,101, 11,121, -175,131,173, 75,180,114,100, 89,130,107, 28,121,183, 79, 99, 14, 24, 77,103,148,101, 77,156,192,124, 54, 39,235, 15,188,194,218, - 89, 84, 20,145,197, 17,103,195, 49,179,217,130,141,237, 13,118,247,118,152, 76,231, 76,166, 5, 27,131, 1,121,183,195,238,222, - 30,167,103, 31, 83, 45, 74,159, 57,158,119,168, 66, 68,103, 85, 87,164, 73, 12, 14,170,170, 66,144, 33,132,194, 24, 71, 81, 53, -140, 43,195,112, 50,227,210,222, 30, 77,211, 16,139, 54, 33,203, 80,150,115,186,145, 98,103,103, 3, 33, 29,103,103, 25,143, 30, - 29,112,109,127,223, 39,166,229, 29,159, 67, 46, 4,157, 44, 99, 40,252,195,181,169,161,155,229, 40, 36,211,209,136,166,134,210, - 57, 6,157,156, 52,142,153,157, 23, 8, 91, 97,231, 11,148,243,113,194, 11, 33, 24,214,142,174,246,152,214,147,241,140, 40, 74, - 60,239, 93, 8, 84,236, 99,136,139, 69, 69, 63,132,185, 72,229,239,219,190, 84, 76,133,101,138,163, 87, 66, 90, 56,146,220, 7, -180, 68, 26, 31,216,179, 28,247,138, 11,246,199, 54,217,172, 77,152,244, 60,117,131,179,171,157,110,219,248,214,214,248,215,197, -249,176, 16,159,166,166,112, 97,250,227, 11,184, 66,106,223, 5, 43, 33,208,206,145, 88,129,232,110,194,118, 73, 86,213,168, 88, - 99,103, 99,226,216, 18,103,130,100,144, 18,119, 83,162, 88,177,121,105,143,221, 43, 87,232,102, 41, 52, 87, 48,162, 65, 39, 41, - 82, 71,232, 78, 15,155,230,168, 52,195, 74, 95, 28,156,106, 57, 28, 43,198, 56,206,249,232,212,240, 32,179,214,160,156, 95, 45, - 88,235,104,156, 3,235,139,184, 53, 22,173,244,170,160,227, 16, 40, 78,142,207, 56,120,124, 12,206,139,207,202,218,129,212, 72, - 25, 83, 53, 53,117, 93,147,196,254, 96, 97,226,136, 74,123, 1,177,171,189,118, 35,201, 50,206,199,231, 68, 89, 7,180,191,143, -188, 80,213,175,194,132, 2,101,253,248,216, 24, 75, 82, 69,148,117,132,113,102,205,146,235,150,246, 96,223,206,185,181,251, 52, - 36, 65, 74,187,108,180,218,105,223,242,208,191,150,170, 38,195,218, 86, 10,235,119,249,126, 95,129, 8, 33, 56,158,204,103,189, -179, 1,111, 67,211, 73, 76,218,100,212,117,237,189,248, 85,205,130, 18,112, 75, 17, 95,155, 91, 33,228, 69,226,165, 64, 34,157, - 10,235, 98,187,202,145, 8, 52,194, 39, 27,201, 79, 11, 26, 91,190,255, 36,248, 93,172,108,112,246, 25,122,163,214, 45,246,228, - 63,214,249,215, 95, 25,135, 50,134,186, 89, 53, 44,198,132, 21,169,243,107, 84,157,198,209,242,116,229, 99,222,220, 26, 36,166, -245,149, 7,160,204, 90,144,251,106,167,245,236, 24,206,103,165,216, 60,237,223, 99,153, 24, 36,156, 90,138,195, 84,179, 10,105, - 88,191, 64,252, 73, 76,132,208, 7,133, 67, 47, 63,143,181, 22, 67, 56,193,134, 17,255, 42,165,199,255,125,181,115, 12, 54, 6, -188,250,234, 15,153,207,166, 36,169,192, 20, 48,173, 74,174,220,124,153,173, 94,135, 88,207,184,125,251, 45,158,191,241, 60,151, -247,174,113,231,147, 71,244,123,125,186,105,204,220,204,253,206, 10, 75,167,219,193,226,200,243,148,126,175, 3,198,219,150, 58, -217,128,241,228,148,178, 44,113,206, 16,233, 20,231, 26, 31,167,169, 35,138,166,196, 9, 71,150,199,220,191,127,143,233, 98,206, -215,191,254, 21,238, 63, 60,225, 23,127,225,151, 57, 60, 58,231,232,241, 1,121, 28,243,217,231,159,231,195,143,222,131, 6,142, - 78,135, 92, 31, 92, 69, 69, 17,199,143,238,112,247,241, 25, 55,191,250,211, 60, 28,253, 59,204,241, 24,109,107, 70,167,135,116, -178, 75, 28,159, 13,185,246,194, 23,249,240,221,247,217,232,118,233, 68, 51,230,149,135,107, 88, 23, 51,157, 54,196,166,224,237, -119, 63,228,167,255,241, 63,196, 36, 41,103,103, 15,216,221, 72, 48,117,141, 86, 17, 84,139, 11, 69,124,233,129,253,180,198,253, - 2,130, 95, 44, 67, 43,156, 19, 75,129,164, 10,184, 90,171,164,223,214,186, 26,101, 45, 70,250,120, 75,235, 44,177,211, 40,227, - 79,205, 70, 26,111,103, 90,162, 11,107,127,232, 20, 16,107, 31,101,235, 66,118,186, 88, 45,194,150,162,138,229,105,216,195,147, - 1,201,205,231, 94,192, 93,218,231,193,131,187, 8,109,201,251, 3, 92, 93,147, 9,197,100, 50, 99, 49, 91,112,247,195,143,144, -117,195,181,203,251, 12, 54,251,184, 60,162,183,179,143,107, 44, 66, 40,110,216,136,147,163, 35,106, 25,161,133,198,184,154,178, -170, 81, 18,104,106,132,171,137, 59, 9,157, 78,159,249,108, 66, 66,195,151,190,242, 69, 94,123,237,109, 14, 15, 79,216, 28, 12, -184,188, 55,160,172, 43,206,142,199, 20, 69, 77,150,103,100,221,140, 69,229,167, 61, 77,101,124,114, 25, 80,213,181,239,118, 7, - 93, 26, 99, 57,159,204, 56,154,213, 72, 21, 81, 54,126,247,171, 36, 8,229, 35, 69,141, 41, 41, 22,142, 78,183,199,214, 70,151, -186, 44,248,236, 11,207,243, 71,127,252, 45,226, 52, 37,206,114,250,253, 1, 27,253, 62,105,154,176,127,105, 31,107, 44,113, 20, - 51,232, 71, 65,141, 13, 85, 83,177,168, 43,108, 49,227,248,240,128,225,233, 57, 69, 85,114,114,120, 66,228, 96, 97, 27, 42,225, -152, 91,152, 57,137, 43, 42,198,165, 97, 43,213,148,214,139,100,165,244,129, 28, 66, 43,206,143, 70,164,187,125,138,178, 68, 99, - 73,107, 24, 72,197,185, 49, 84, 86,178, 40, 29, 73, 97,200,114,183,220,211,122,113,152, 12,175,223, 26,135,184, 13,197,104,243, -186, 3, 72,198,226, 99, 90, 91, 28,103, 11,164,177,107,199,188,218, 88,148,138,252,254, 92,250,125,165,146,106, 25,255, 43,133, - 32,118, 14,229, 64,139, 30, 8,131,117, 13,113, 30, 65,145, 99, 41,208,218,161, 98,137,234,102,116, 6,125, 6, 87,174,144,239, -110,123,161,152,173,209,206,249,116, 55,157,160,211, 14, 58,237, 18,176,121, 56,105,112, 81,184,167,172, 89,170,218,145, 4,223, -186,197,184,102,233, 80,171,202, 38, 60, 3, 37,126,234,238,191,247, 40,246,227,104, 43, 5, 38,172, 23, 63,254,248, 1,141,241, -247,156,214,154, 2,129, 69,146, 36, 57,101, 99, 40,235, 25, 91,253,109, 22, 74, 81, 71, 49,196, 49,162,242,187,251, 40,210, 30, -202,131, 36, 74, 82, 92, 43, 52, 13,163,223, 72,251, 73, 71,235,110, 50,141, 37,137,189,226,189,110, 84, 16, 57,175, 28, 79,214, -134,144, 39, 97,151,108, 10,132, 63,216,107,213,238,134, 35,111, 89,214,173, 77,121, 61,162,123, 61, 45,205,173,136,122,132,105, -237,218,225,174,181,213,185, 56, 66, 59, 75,236, 12, 89,147,250,162, 94, 55,129,215, 99, 86,128,155,229, 36, 55,208, 47,181, 66, - 56, 17, 4,222, 22,108, 3,118, 93,164,245, 12,202,233, 51,194,197,126, 44, 70, 91,172, 40,255, 45, 94,215,134,215,205,173,133, -201,172,146, 49, 87, 59, 79,223,205, 75, 26,107, 80, 70,122,164,178,168,151,113,182, 46,252,220,154,166, 65,235, 40,236, 49, 66, - 44,158,183,139,172, 83,220, 90,250,219, 10,226, 32, 3, 2,178, 85, 72, 63,235,155, 93,137,166,159,254,102, 69,187, 71,112,107, -228,176, 54, 54, 78, 10, 42,109,215, 48,132, 43, 98,143, 88,138,177,214,181,162, 50, 28,114, 37, 17, 64,212, 22,115,183,178,200, - 57,255, 39, 21,146, 56, 75, 56, 63, 57,103, 52, 26,145,166, 17,196,130,163,217,130,207,239, 95, 38,166,228,133,231,246,121,103, -254,136, 79, 30, 60,224,240,160, 96, 54, 41,120,241,197,235,184,106,129, 45,102, 40,229,200,122, 25, 86, 57,202,106,225, 1, 25, -166, 98, 58, 57, 69,200,156,119,222,186, 77,146, 41, 54,182, 98,156,105,124,120, 64,156, 80,215, 53,198, 25,148,214, 36, 90,210, - 84,130,211,227, 83,186, 27,219,232, 40,162,215,237,177,181,181,195,116,234,225, 3,127,240,111,254, 53,191,254, 55,127,133,255, -227,135,239,162,133,226,108, 86,162, 30,157, 66, 18,243,245,203, 55,120,120,112,194,213,175,253, 18,229, 31,255, 1, 40,184,122, -117,159, 8, 71,181, 24,243,207,254,197, 63,231, 87,127,234,235,124,114,243,135, 76,138, 9,155,221,136,147,121,137,181, 21,200, -152,166, 49,184,133,227,222,131,199,212, 90, 82, 40, 69,227, 44,103,195, 51, 46,119,246,233,117, 7, 12, 23,227, 11,202,245, 11, -187, 33, 39,159, 58, 69,138, 11, 59, 34,231,111, 16,225, 33, 54,202, 73, 79, 77,114, 14, 29,226, 21,173,173, 48,198,162,164, 70, -107,127, 49,214,141,162, 14,171, 32,185,182, 66, 81,203,194,236, 87, 66,137,214,212,141,166,110,170,165, 16,198,143,189,228, 82, -229,188,126, 83, 72,124,232,197,135,239,190,131,178,198, 83,206, 54, 55,113,103,142,197,116, 70,183, 59, 64,197, 29,172, 72, 49, -166,102, 81,149, 28,157, 29,161,116,131,141, 46,179,213,191,142,173, 29,198,105,132,142,217,186,249, 2,253,189,203, 76, 39, 19, -102, 69, 69,119, 99, 3,148,198, 84, 11, 31,168, 16,212,185, 82, 8,206,135, 35,172,180, 92,191,113,131,201,164,228,221,183,111, -179, 40, 10,106,219, 97, 58, 26, 17,107,201,193,233, 9,117,217, 33, 73,182,233,247, 58,108,111,246,120,120,255, 17,166,242, 5, -182, 44, 74,142, 79, 78,201,211,136, 60,221,230,124, 56,162,208, 29, 34,173, 57,159, 44,200,180,192,233, 16, 99, 28,249,200,210, -122, 49, 65, 56, 67,214,233,145, 37, 9,163,201,156,173,173,109,142,143, 79,184,114,229, 38, 8, 24,157, 13, 89, 36, 49,253,141, -126,152,166, 74,242,174,103,105, 47, 22, 11, 22,179, 57,194, 26,154, 98, 78,167,147,177, 88,228,156,207, 43,162,184, 67, 39, 51, - 84, 85,133,113, 48, 53,142, 74,101, 52,101,129, 74, 52,211,178,194, 74,197,162,106,232,198,158, 2,103,173, 67, 90,201,116, 52, -165,108, 44,177, 82, 52,101, 67, 47, 73, 57,181,134,194, 42,226,170, 65, 78, 26,210,184, 32,146, 10,171, 21, 78, 69, 56, 25,225, -156,183, 80,137,240,102,132, 37,110,187, 91,225, 81,187, 72,225,139, 33,126,210,216, 34,125,101,240,119, 91, 97, 1,131,116,194, - 23, 27,185, 54, 74,150, 2, 33,125,120,140,107, 12, 82, 58,210, 72, 16,101, 17,164,154, 56,145, 36,219, 93,116, 51, 67, 80,147, - 68,150,142,104,200, 19, 77,183,215,165,187,181,131,234,118, 17, 90,160, 92,141, 51, 46, 20,244, 12,153,118, 32,206, 32, 73, 65, -106,172,169, 16,194,248, 75,213,130,107,108,187,125,198, 41, 16, 86, 32,140,192, 10,143,174,245, 97, 29,128, 10,251,126,240,201, -112, 82,226,155,102,255,245, 47, 22, 21,167,103, 35,170,202,144,233,152,186,174,124, 62,187,214, 52, 78, 80, 11, 71, 35, 4, 42, -246, 46,145, 90,107, 76,104,216,156,177, 72,237, 35,162,107, 99,201,226, 4,235, 68,184, 46,220, 18, 36,165,219, 3, 68,164,208, -117, 8,233,210, 17, 81, 20,194, 94,214, 1, 90,136,149,165, 89,248,162, 43,164,255, 28,113, 44, 61, 34, 54,241, 8, 88,239,118, - 88,217, 91,125,231,110, 81,238,233,201,224,211,113,165, 98, 21,227,221, 82,232, 26, 67,154, 37,116,234, 28, 99, 12, 2,225, 29, - 30,130,149,147,234,201,209,121, 27, 7,173, 36,202,170,167, 8,152, 23,243,206,197,179, 35,194, 5, 79,141,222,219,189,192,178, -150,185,167, 59,122,150, 54,204, 39,243, 49, 86,131, 28, 95,203,252,100,218, 56,139,180,222,178,186, 76,163,116,126,138,167,117, - 8,144, 0,177,204,186,125,114,159,189, 28,191,183, 39,223, 22,189, 41,197,133,221,182, 12, 99, 50,177,198,147, 93, 21,130, 11, - 25,107, 56, 28,202, 89,172,242,221,156,210, 38,196,179, 74,116, 43,172,176,110,233,107,124, 82, 76,237,214, 58,199,213,239,133, - 48, 83,231,130,181,115,101,169,192, 65,131,160,147,231,140,198, 67, 22,139, 5, 91,251, 57,229,204,209,219,216,161,147,119, 24, -228,150,135,247, 63, 97,115,107,147, 78,190,205,155,175,223,101,111,107,159,243,179,115,178,184, 33,141, 35, 6,155, 61, 26,145, - 50, 91, 24,100,237,112,117,197,116, 60, 34, 79, 83,230,115, 75,222, 29, 32,132,135,129,224, 20, 69,227, 71,127, 89, 39, 35, 78, - 98,138,170,192,154,138, 72, 69, 36,121,135,219,183, 63,228,206,195, 3,126,235, 55,127,143,131,131, 17, 87, 46, 95,229,124, 56, -228,206, 71, 31,241, 59,191,245,107,116,243,156, 98, 90,211, 80,115,116, 50,194, 41,193, 91,175,125,159, 23,191,244,203,124,225, - 11, 63,205,209,204, 82, 55, 53, 71,135,135,188,248,252,139, 28, 60,120,192,230,214, 46,215,158,255, 28, 14, 56,120,248,104,153, -147,238, 79,118, 30, 44, 99,106,195,189,123,247, 48, 8, 58,131, 13,138,121,159,179,199,199, 36,233, 57,253,172,179,140, 72,109, -127,194,171,139,240,105,155,218,133,155, 46, 92,132,194, 6,102,181, 8,168, 70, 11, 66,248,177,188,148, 18,101,195, 40, 73,121, - 27,145,148,146,186,150, 84, 33, 43, 64,174,173,118,116,139,146, 21,146, 40, 86,216,200, 67, 34,154,186,198,154, 6, 23, 8, 93, -226,137,149,207,250, 74,160,156,207,120,251,245,215,168,207, 78,208,182,194, 57,131,194,224,234, 10, 41, 36, 81,146,163,163,132, -162,156, 51, 47, 70,244,183,123,164, 27, 93,140,210,204, 75,131, 41, 43,156, 80, 40, 45, 72, 51, 77,220, 29,208, 79, 50,198, 71, - 7,156, 29, 29,177,115,253, 38, 74,107, 22,101,227,137, 92,117, 77,222,201,232,117, 59, 76, 38, 99,182,171,130,171,215,174,242, -240,254, 1,195,209,144, 52,113,204,231, 5,179,233,148,126,175,203,206,206, 22, 90,251,168,205,189,157,109,142, 31, 31, 48, 30, -158,145, 36, 9,206, 52,156, 12, 71,152,166, 98, 50,157, 17, 39, 49, 87,158,191,225,247,191,117,193,108, 81,161, 83, 77, 39,207, - 73, 58, 61,226, 88, 98, 77,205,249,240, 28,240, 34,184, 71,143, 15,217,217,222, 2, 33,216, 28,244, 73,210,152,170,170, 56, 31, -157, 83,149, 11,182,119,183,169,155, 26,225, 26,210, 56,230,250,213,171, 62,212,101, 50, 70,154,134,189,173, 13, 14,143,142,249, - 76,109,249,137,113,193,172,134, 55,239,124,196,159,124,247,207,105,170,154,243,162,161,167, 5,113,172, 24, 79, 43, 18, 9,243, -178,166, 19, 71, 62, 69,205,120, 53,180, 86,154,217, 98,129, 70,162,133, 64, 88, 67,170, 36,211,198,144, 26,137, 94, 88, 22,179, -154, 56,154, 35,149, 67,170, 28, 37,148, 79, 13,108,237, 80,210,139,227,106, 83, 67,227,119,189,106, 73, 51,244,145,169, 86,216, -112,184, 98, 25,219,105,140,245,169,109,194,163, 75,253,180,111,149,236,214,250,126,157, 54, 64,132,164, 38, 22,146,184, 73,145, -253,140,180, 28,144,218, 5,145, 2, 73, 73,108, 23, 36, 90,120, 69,114, 27, 38,148,104,112,177,223, 3,235, 8,210, 28,155,102, -216, 40,133, 56, 6, 29, 33,106,133,172,107,156,105,150,145,170,206, 47,168,189,232, 79,130, 78, 52, 86, 72,108,101,113,202,239, -175, 17, 2, 29, 69,190, 25,146, 18, 43,220,114,253, 88, 89,203,112, 50,163, 44, 42,159,247,144,166, 68,177,230,244,188, 36,237, - 14,176, 50, 98, 54,157,208,233,116, 81, 81, 12, 74,161,243,148,210,250,102,199,195,121,116,112, 5, 8,207,179, 95, 71,161, 10, - 46, 52, 96,254,153,221,120, 69,118,184,103,149, 84, 24, 97, 86, 49,169,173,144, 45,212, 12,132,207, 2, 73, 35, 69,146,104, 79, -113, 75, 18,178, 52, 33, 77, 98,226, 88, 47, 27, 74,177, 38,122, 19,107, 14, 26,255,133,178, 6,112, 89,153,171,215,131,198, 92, - 28,225, 76, 74,158,187,144,200, 39,168,170, 10,156, 37,106, 65, 55,114, 77,119,181, 30,183, 43,196, 50,125,174, 21,236,174,249, -231, 46,194,181, 86, 88,185, 11,224,176,165, 71,168,157, 24,182, 69,187, 85, 68,182,188,142,181,134,245,211,162, 87,219,177,253, -242,181, 88,130,226, 86, 83,106,107,124,180,121, 85, 87,104, 37,212, 42,228,254, 9,168, 76,123, 90, 18,161,237, 86, 75, 91,147, - 31,129,135, 71,239, 82,233, 46,151,202, 65,183,150,191, 45,158,254, 74,197, 90,172,106,216,135,105,169, 48, 18, 26, 9, 77, 72, -120, 50,141,193, 57, 79, 3, 91, 1,239, 86, 63,178, 11,169,171,203,175,217, 46, 25,242, 45, 52,165,229,218, 11, 7, 29, 37,233, -230,138, 69,100, 40, 22,115, 78, 38,146, 23,191,244, 89,174,239,237, 82, 13,239,211, 73,251, 76,102, 35,100,234,168, 22,167, 40, -177, 1, 86, 35,101,130, 78, 35, 50,237,252, 94, 44, 50,216,186,160,151,118,217,251,202,215,137,187, 25,200,132,172, 51,160,110, - 12, 58, 82, 72,105,105,234, 5,182,158,240,209,135,183,201,123, 61,170,179, 35,138,170, 96, 49, 95,160, 68, 66,164, 12, 47,223, -186, 73, 49, 58,231,225,189,251,188,240,249,175, 49,154, 20,212,229,156,217,120,204, 11,159,251, 60,223,251,193, 27, 52, 86,210, -139,225,165, 91,151, 56, 58,155,242,224,193,135,116,122,191, 73,190,255,121,212,221, 63,163, 40, 27,238, 31,205,216,234,244, 40, -103, 51, 70, 11,131,147,138, 65,183, 67,226, 20,234,100, 24, 20,163, 6,215,212, 32, 29,135,143,238, 48, 63, 63,226,242,102,151, - 15, 63,177,108, 14, 46,115,240,201, 61,174, 61,119,149, 36,206, 88,148, 69,184,200,219,107, 72,134, 61,229, 90, 28,110,155, 33, -188, 34,206, 44,127,237,239,191, 48,126,111,213,153,120, 74,150,113, 62,172, 66, 26,183,162,203, 9,129,172,253,117,163,194,190, -172,197,124,202, 80,176,147, 38, 66,164,150,186,246,214, 28, 63,190,180,107,135, 63, 63,113,178, 33,187,221,235, 42, 5,211,179, - 57,101,105,121,243,157,247,184,190,191, 69, 47,141,112, 77,205,240,228, 8,157, 38,244,227,136, 72,106, 30, 31, 30,112,118,126, -159,179,131, 59, 60,255,153, 47,178,119, 85, 17, 77, 53,121,167, 67,158,165, 40,233,125,219,157, 60, 39,137, 53, 27,253,140,123, -159, 28,241,248, 99,195,149,207,188, 76,186,113,137,209,249, 17,167, 39,247,121,238,214,115, 60,247,220,117, 62,190,243, 49,163, -227, 19,118,247,174,112,237,202, 54,163,201,152, 36,219,192,170, 57, 91,187,151,232,166, 49,229, 98,134,146, 2,131,101,103,163, -199, 43,175,124,131,127,255,239,254,144,241,112,136, 86,130,217,116,194,217,112,194, 71,143, 79,249,155,127,243,215,112,197,148, - 78,175, 79,229, 20, 78, 39, 68,189, 77,140,107,168,203,154,170,130, 36, 77,185,188,127,205, 11,222,164,161, 92,140,137,116,196, -151, 62,255, 34,179,241, 4,179, 88,208,212, 21,202,149,228, 73,138,116, 21, 90, 24, 76, 89, 48,153, 25,100,148, 50,155, 47,168, - 22, 11,242, 88, 19,199,138,189,237, 30,103,231, 35,140,174, 81,166,225, 87,191,244, 34, 61,187,224, 15,255,252,117, 78,107,135, - 18,146, 69, 85,179,208,254,181, 50,198,191, 9, 41, 49,141,161,182,144, 16, 19, 43, 69, 85, 89, 76,164,160, 49,108, 72,193, 1, -150,142,141,233,212,138,106,214,176,200,107,148,145,196,117,130,198, 33,165,239,206,193, 63, 27,132,240,169,103, 90, 27,112,218, -103,145,203,214, 42, 38,151, 98, 55,156, 64, 58,133,177, 2, 21,172, 91, 46, 52, 32, 86, 72,156,136, 2, 18,217,235,122,148,146, -232, 88,135,117,163,135,174,120,251, 88, 76,108,115,114,105,136, 92,131,116, 21, 52, 5,218,213, 68,194, 18,197, 18,165, 29, 50, -137, 33,242, 25,235, 66, 39,136, 56,131, 40,245,197, 92, 71,160, 52, 40, 11,162,128,170,240, 10,119,106, 47, 6, 13,246, 48, 41, -149,159, 54,134, 46,153,112,111, 88, 7,202,121,193,152, 85, 14,235, 12,174, 6, 21,101, 76, 22, 5,103,211,146,102, 54,195, 84, - 83,116, 71,251, 46, 95, 70, 24,145, 96,101, 68, 83, 65,222,239,227,164,166, 22, 22, 34, 9,181, 9,137,122,160,162,152,186,177, - 62,110, 54,201, 66,110,186, 89, 50,213,219,167,124, 43, 32,147, 50,120,215, 3,152, 76, 4,177,148, 53,214,175, 72, 85, 72,123, - 20,218, 31,208, 4, 36, 90,144,197,138, 60,141,124,252,106, 22,145, 38,146, 56,150,232, 72, 44,227,149,165,192, 51, 6,194,212, - 85,184,245,198, 80, 92,116,230,184,167,105,149, 74,107, 92, 18, 19, 91, 75,102,253,250, 51,214, 10,103,109, 16,133, 7,251,154, - 12,142, 7, 15,229,101, 25, 5, 36, 36,200,229,145,228, 2,179,195,139,136,213,242, 47, 94,175,101,109,226,222,211,157, 40,171, -117, 2, 43,165,186, 8,110, 33,143,250, 93,125, 46,193,211,147, 0,133, 64, 11,129,150, 97,104, 35, 89,186,186, 90,123,120, 89, - 54,104,228,234, 4,208,126,144, 88,247,172, 45,171,166,127, 80,170,213,208,226,153,249,230, 23,235,247,218,200,189, 61,125,137, - 39,190,207, 64,124,243, 10,191,240,102,125,124,158, 81,114,181,159,185, 48,206,121,154,102,183,132,205, 44,119, 58,110, 13,138, -226, 85,217, 18,205, 98,238,247,131, 89,234, 5, 9,181,129,205,141, 45,102,147, 49,123,219, 91,196, 17, 56, 97,121,252,232, 33, - 87, 47, 95,194,153,154,249,116,142, 18, 41,253,141, 14,149,107,144, 81,196,230,230, 46, 55,175,220,228,227,247, 63,228,224,248, - 17,189,141, 14,143, 15,142,137, 83,159,187,188, 40,230, 36,137, 36,137, 21,157, 60,102,115, 99,155,173,237,125, 94,126,241, 11, -188,255,254, 91, 60,184,119, 7, 91,195,198,198, 22,101,105,121,237,181,215,184,254,252, 75, 56,106,174,221,184,202, 39,119,230, -188,246,218,155,252,204,207,254, 12,223,249,139, 87, 3,255, 89, 49, 24,244, 25, 79, 75,186,121, 66,146, 36, 92,186,126, 19,247, -189, 63, 99, 86, 44, 16,147, 41,151,119,246, 88, 44, 10,156,147,108,239,238, 50, 57,123, 76, 85, 54,104,225,177,185,142, 42,204, -252, 28,147,209, 41,247,239,125,194,198, 70,159,114, 49, 35, 17,134,147,163, 35,164, 22,184,140,165, 15,212,173,150, 62, 23, 71, - 75, 79,210,228,254,178,188,251,240, 66,250, 67,154, 79,131,147,193,123,187, 62, 70,147, 33,136,163,221,123,181, 93, 59,210, 99, - 52,149,112,212,117, 74, 83,215,152, 48,126,122,230, 9,119,237,197, 63, 59,126,196,230,102,159, 56, 73,249,222, 95,188,206,139, -207, 93,230,249,155, 87, 56, 57, 61,128,200, 49, 60, 59,165, 44, 26, 78, 78,142, 73,115, 13,141,224,116,188, 96,110, 30,241,220, - 11, 41, 11,215, 80, 76,199,116, 59, 25, 46, 73,188,240, 74,116, 80, 81, 74,222,223,228,241,163, 35,122,131, 35, 6,187,123,100, -121, 78,119,176,137,177,160,227,136, 75,151,175,242,209, 71, 31,147,117, 55,248,204,103, 95,192, 57,193,201,201, 41,247,238,223, - 39, 18, 48,137, 52,189, 60,195, 57,201,233,104, 4, 42, 98,247,242, 21,190,249,211,223,228,238, 71, 31, 97, 77,195,254,213,107, -140,230, 5,159,121,233,139, 92,189,126,131,242,252, 49,195,209,148,217, 98,193,254,165, 75,140, 39, 99,148,173,137,133,165,105, -106,210, 44,163, 76, 98, 54, 55, 54, 81,113, 66,175,219, 37,206, 59,244, 55, 54,112, 88,198,163, 49, 27,155, 27,244, 92, 31,165, -181,183,132, 69,154, 70, 10,202,178,166,113, 21, 91,219, 59,156,159,158, 98,154,146, 56,138,209,194, 5, 74,154,101, 60,158, 82, - 46,134,124,227,243, 47, 48,156,140,249,243, 55, 62,196,184,136,218,121, 17,211, 2, 75,207, 10, 10,235,200,252,178,216,191,246, -198, 46,215,115, 74,174, 30,144,153,146, 20,182, 97,129, 36,170, 29,233,194, 98,147,134, 58,106,208,145,241,107, 19,113,241,186, - 82, 50,196, 89,138,214, 24,212, 74, 46,221, 18,148,229, 19, 74, 77,216, 13,107,164,181,254,192,103, 5, 66, 24,164,169,188,138, -222, 42, 48, 6, 97, 5, 81,236,119,189,137, 90,233,136, 16, 9,177,130, 68, 57,180, 48,196,194, 32,155, 25,182,156, 35,109,233, - 69, 97, 58,242, 29,112,146, 32,162, 12,116, 2, 81,130,147,113,248,127,254,255, 47, 31,106,146,176,111,182, 8,219,128,173,150, - 7,140,229,197, 44, 21,166,170, 49, 38,236,232,157,163,177,198,143,196,157, 47,148,214, 58,238, 63,120,196,124, 81, 97, 76, 29, - 66, 63, 34,166,179, 25,121,167, 75,237, 44, 85, 85, 16, 7, 11,102, 99, 45, 73, 55,163, 16, 18, 33,108,152,102, 24,191,159,119, -132,195,143, 92,227, 78,240, 68, 63, 41, 2, 7,190,117, 25,124, 74, 30,136,184, 24,213,173, 37,196,145, 15,235,201,179,196,147, -220, 66,135,238,127,230,171, 8,238,191, 60,222, 89,112,177,194,112,225,249,225,148, 47,236, 81, 20, 97,147, 20, 44, 24,173,125, -184,142,148,168,200,187, 75,214, 27, 10,132,244, 37,125,249, 60, 10, 12,128, 31,251,112,249,235,255,115,225, 16,176,242, 7, 45, -113,233, 23,127,111, 61, 9, 85, 60,161,130,151,216, 37,184, 45, 88,194, 27,131,110, 71,212,254, 40,228,219,155, 22,118, 33,156, -127,176,218,144, 79, 40,145,152,144,229, 43,165,239,186, 68, 40,166,173,138, 81,224,144, 46,156,220,228,186,167,221, 44,125,149, -136,139,249, 31,180, 22,183,128,181, 81, 45,101,204, 10, 47,146, 89,126,102,177, 58, 44, 56,119, 33, 31,199, 61,137,168, 93,223, - 97, 8,129,179,142, 72, 38,204,138,134,249,116, 70,127, 67, 49,156, 85,168,120,131, 36, 77,184,124,105, 7, 45, 22,156,156, 60, - 34,210, 62,145,169,223, 25,208, 44, 28, 39,211, 49, 73,226, 79, 67, 91,131, 13,122,131, 77, 30, 31,158,114,116,118,196,233,217, - 57,147,201, 24, 99,231, 36,145, 64,201,134, 60, 73,201,226, 20,235, 26,230,211,115,102, 99,131,112, 49, 31,127,240,144,141,141, - 77, 46, 95,222,226,214,141,207,240,222,187,239,162,132,162,168,252, 62,243,210,254, 14,175,189,245, 22,184,136, 44,205,121,239, -253,143,249,207,254,198, 47,121,213,169, 53, 68, 74,112,255,254, 67,138, 26,222,126,253, 53,110,223,190,205, 87, 94,249, 41,254, -229, 63,255,175,169, 26, 67, 81, 87, 28, 28, 29,177,185,185,205,100, 50,231,243, 95,252, 10,135,247, 62,226,116,116, 68, 36, 64, - 57,131, 19, 77,216,231, 9, 26, 83,241,232,224,128,207, 93,187,206,233,209, 99,116, 22,129,181, 28, 29,159,208,123,110, 55,140, - 44, 27,164, 92, 9, 86,120,130, 37,248,164, 15,243,105, 97,164, 88,142,239,159, 42,242,206,121, 5,178,115,207, 72,115, 91, 27, - 95,133, 49,149, 12, 99, 83, 27,168, 95,118,105,133,252,241, 55,145,181, 13, 15,238,127,196,100, 58,226,234,245, 27,236,109,110, - 82,204,206,104,108,195,246,206,128,241,249, 1,105,210,101, 50,173,208, 58, 97,103,255, 26,183, 62,251, 50,121,111,143,162, 40, - 25,158, 28,162,149, 34, 77, 83,108,149, 99,123, 93,172,169, 17, 88,210,110,143,254,230, 54,211,241,132,209,241, 67, 58,137, 36, -142, 98,118,119,247,176, 14,138,218,208, 56,152, 21, 5,143, 15,143,184,121,243, 57,162, 56, 98, 81, 46,184,113,243, 26,212, 13, -143,239,223,163,223,237,146,119,187,108,237,238,115,114,126, 70, 85, 20,124,225, 11,159,231,235, 95,253, 10,206, 58,206,134, 67, - 70,211,130, 40,235, 50, 25, 77, 72,117,198, 98,122, 78, 99, 5, 15, 31, 63,102,103,208, 97,119,144, 99, 77, 73,132, 37,178, 18, - 87, 53,140,135, 6, 21,103,188,244,242, 75,164,157, 62,139,170, 34,235,166, 24,103, 25, 78,198,108,109,110,146,101, 25,211,201, -148,218, 84,108,108,109,144,102, 61, 70,211, 57, 81,148,240,153, 23, 63,203,240,248,144,243,227, 3, 34,169,232,118,186, 94,189, -109, 26,108, 53, 39,239, 68,124,249,179,207,241,193,135,159, 48,171, 12, 40,129, 54,150,210, 58,250, 90, 49,175,106, 58, 82, 1, - 13,206, 88,154,202, 44,139,185, 18,122, 73,130,235,201,136,185,169,152, 9,136, 13,184, 66,224, 74, 65,149, 55, 40,219,160, 27, - 25,196, 66,194,167,181, 33,131, 96,204,250,231, 85,171, 36, 15, 83, 36,215,170,149,195,117,100,140,193, 81, 19, 65,176, 72,130, -182,254,192, 39,181,246, 29, 33, 50,248,154,157,223, 75,122, 74, 18, 42, 10, 32, 46, 9, 66, 59,132, 6, 37, 45,145, 73,176,105, -234, 9,140,174,198,105, 13, 42, 65,168, 4,151,100, 56, 29, 35,227, 12, 17,165, 56,169,177, 23,185,113, 94,119,111,106,104, 42, - 47, 4,148,109,246,184,195, 26,135,107, 28,182,177,148, 85, 13, 50, 66, 73,141, 17,190,185,114, 8,111,253,138,115, 30, 60, 62, - 94, 90,213,108,240,175,235, 56,166, 26,142, 24, 12, 6, 52, 69,205, 98, 54, 35,207, 50,132,148, 20,174, 33, 73, 83,143,104,166, - 9,107, 50,191,243,174,154, 2,157, 38,160,148, 63, 56,216,112,159,173,177, 69, 60, 66,250, 34, 76, 69, 60, 25,225, 25, 36, 97, -173, 40, 77, 73,129,142, 36,113,172, 73, 18,143,101, 77, 83,159,146, 22, 71, 62,165,173, 21, 67, 91,203, 19, 79,245, 53,212, 56, -226,153,129, 94, 79,233,182,218,142, 61,210, 68, 54,246,207,129,200, 23,117, 65,136, 4,143, 60,181,142, 53,235,171,144, 34,104, - 9, 86,129, 83,255,145,106,249,197,231,222,122,244,229,210,253,176, 54,121, 88, 67,114, 95, 92, 45,200,101, 70,194,210,212, 23, -174, 25,159, 54,104,208,214,218,101,134,247, 69, 26, 91,136, 41,116, 14, 39,109,240,222,217,144,124, 21,132, 21, 98,101, 99,243, -234, 76, 95,220,109,216,159,138,181,244, 52,255,193,238,130,112,238,211,204,251,178,253,109,185,138,132, 93,158,224,196,147,160, -210, 39, 3,102, 46,254,215,135, 60,248,111, 95,203,196,143,182, 11,131, 86, 62, 73,107,123,235, 18, 74, 73, 62,250,224, 29,226, - 4,170, 98,138,214,254,107,143,181,162,104,230,108,246,123, 84,101, 69,175,219, 67, 42,197,143, 94,125,149,162,178,100,249,192, -239,254, 17, 68, 73,206, 27,111,189, 69,214,233,114,245,234, 53,164, 20,244,123, 57, 81,156,114,126,248, 0,173, 50,250,157, 93, - 48, 53, 31,126,240, 62,141, 43,217,216,236,114, 62,156,210,147,187, 76,230,115, 30, 63,126,200,193,193, 67,246,246,159,163,219, -233,249,204,223, 52,163,223,235, 50, 25, 14,153,205,107,175, 59,176,130,141,243, 51,254,244,219,223,225,103,126,238,167, 49,206, -171,123,203,186, 36,142, 61,128,101, 54,171,248,226,103,191,202, 31,253,219, 63,160, 90, 28,178,221,223, 96, 50,172,252,248, 91, - 8,156,240,222,200, 71, 7, 71,252,236,151,191,204,124, 58,164,116, 9,141,105,152,142, 11,210,106,227, 98,142,253, 51,110,179, -245, 78,253, 73,167,195, 95, 70, 88,106, 19, 1,151,227,251, 11,162,145, 53, 43,221,167,172,154,214, 55, 49, 23,233,117, 23,178, -129,113,214,122,139, 88, 53,231,209,163, 7,216,133,161,159,229, 92,218,221, 36,137, 42, 22,179, 83,186,105,194,217,217, 33,221, -141, 75, 24, 17,243,252, 11,159,227,210,149,231, 57,159, 46,152, 21, 67, 14, 63,185,195,124, 54,101,115,176, 65,127, 48,160,215, -235,178,179,187,139,107, 54,104,154,154,126,175,195, 78, 63,103,120,116,192,226, 44, 38,234,244,169, 85,140,211, 49,139,178, 98, -231,242, 62, 95,253,122,206,209,225, 17, 74, 75, 62,249,228, 14, 31,223,249,136, 65,183, 75, 81, 54,244, 54, 54, 24, 77, 39, 24, -235,216,142, 18,174, 93,185,194,157,251, 15,120,248,240, 33,253, 94,207, 11,158, 44, 62,184, 38,203, 56, 59, 57, 33, 78, 52, 58, - 78,152, 45, 22,148,243, 9,243,209, 49,229,102,135,157,126, 70, 30, 41,138,166, 36, 78, 18,175, 29,136, 34,102,211, 49, 78,106, -178,110,135,198,150,244, 6, 61,148, 86, 62, 81,206, 57,180, 84,212, 69,197,209,193, 17,121,191,207,246,246, 14, 72,205,104, 52, -198, 52,134,237,173, 29,250,157,196,223, 19,117, 67,156,229,126,252, 11,124,238,229, 23,217,252,211, 31,114,114,112, 70, 30, 71, - 84,166, 1, 36,165,146,216,162,162, 78, 52,169, 80,224,188,110, 70,167,241,146,189,174,148,198,214, 53,145, 51, 36, 74, 82, 89, - 75,109,161,174, 36,182, 22,212,166, 33,113, 13,206,233, 11,147,183, 86,192, 11, 96, 92,131,196, 71,142,218,176, 99, 20,214,199, -144, 74,214,210, 2,241,250,141, 54,251,196, 52, 22,140, 66, 89,231,215, 64, 58,194, 9, 11,202,128,176,184,196, 65,211, 16, 89, - 73, 92, 75, 18, 37,145,202,249, 0,159, 52, 2,157,162, 19,141, 83, 37,182,169, 16, 10,164,140,128,144,228,165, 20,104,133, 83, -222, 67,110,219,180, 68,231,112, 86,130,212,126,204,219, 62, 22,165, 31, 93, 75,169,252,253, 41, 28, 85, 83,179,168,141,143,232, -149, 18,227,239,224, 0,218,137,169,157,224,209,209, 9,221,193, 54,135, 15,143, 41, 22, 5, 91, 27, 3, 63, 70, 15,140,114,172, -193,154, 10,103, 35,116,172, 49,141, 37,202,115,132,109,252, 62, 61, 52,117, 50,138, 40,138, 41, 34,142, 16, 90, 97, 28,158, 91, - 31,156, 68,198,216, 96, 83,107,239,181, 53, 97, 42,226, 41,161,247, 82,232, 42, 61, 18, 54, 10, 41,124, 81,164, 67,162, 91,228, - 97, 77,193,167, 46, 37,203,140,118,255, 87,216,103,213,246, 31,147, 55,226, 46, 30, 0,132, 8,185,236,145,159, 70, 44,139,122, -235, 4,108, 51,210,197,138,238,214, 30, 70, 90, 64,140,120,162,202,184, 31,223,204,124,154,152,239, 89,211, 76,231,158, 96,121, -240,116,247,254,164, 32,112,125,178,224,214,232,157, 38,164,211, 53,141, 65, 87,141, 65,181,254, 98,185,202, 48, 23, 86, 32,164, -241,234,101,235,133, 3,203,128, 23,107,195, 55, 78,240, 14,138,229,159,105, 71, 49, 82, 6,218, 81,123, 80,112,172,246,239,194, -219, 78,158,252, 70,151,106,119, 39,158, 56, 9, 62, 1,192, 23,238,194, 8,230,226, 67, 95,114, 49,240,123, 53,146,201,210,140, -225,135,119,216,232,105,170, 69,133, 82, 25, 89,127, 19,103, 29,253, 78,194,245,155, 87,153, 78,135, 60,126,248, 9, 14, 71, 85, - 22, 94,220,133,225,115,159,251, 28,143, 31, 61,162, 42, 75,108, 85,147, 72,159, 7,156,119, 58, 68,105, 7,161, 21,253,237,203, -204,230, 51,230,181,193, 54,134,162,172,153, 77, 71, 84,101,197,238,118,159,199,143, 63, 97, 99, 99,128,115, 21, 59,187, 27, 76, -167, 83,122,131, 13, 6, 91,219,124,255,135,223,227,234,141, 27, 28, 29,157,240,249,159,120,133,241,232, 46,105,150,241,225, 71, -119,184,245,220, 45, 62,120,231, 45,138,178,164, 42,253,131,244,253, 15,111,243,252,231,239, 3, 63, 75,158,119,152, 79,103, 84, -229,140, 69, 53,103, 56, 30, 49,154,206,217,249,210,231,216,189,244, 28,231,103, 83,204,188, 65,210,132,211,151,255,249, 91, 7, -199,167,103,196, 89,202,230, 70, 31, 97, 22,212, 56,166,181, 31, 81,213,117,181, 2, 36,172, 93,106,226,153, 23,232, 95,109, 4, -255, 36,101,233, 73,127,167, 88, 79,130, 16,235,211, 22, 46, 40, 76,151,211, 26,231,158,185, 6, 16,194,171, 93, 35,173,113, 13, - 40, 25,177,152, 45,188,128, 79,119,113,210,103, 1, 68, 81, 70, 36, 28,219, 66, 48,154, 47,120,254,179, 47,177,189,115,153,186, -241,163,221, 56,246,167,226,195,195, 67, 78,143,142, 73,179,132,110, 64,172,110,108,108,176,185,177,193, 70,191,135,118, 13,143, - 30, 60, 96,255,242,140,221, 43,207, 97,117,202,227,179, 33, 50, 73,217,217,217, 69, 73,137,105,106,138,197,148, 52,209,116,179, -132,249,108,206,193,227, 67, 58,105, 70, 81, 84, 40, 89, 48,159, 79,113,174, 33,141, 21, 31,222,185,199,205,155, 55,184,122,245, - 26,105,154,122,108,166,242, 2, 46,154,154,243,115,199,209,227, 9,135, 7,143,176,213,140,243, 3,248,204,141,203,100, 81, 68, - 89,150, 60,247,220, 45, 18, 4,102, 50,162,167, 99,166,227, 51,192,144, 37,154,222,181,203, 76, 39, 83, 14, 31, 31,210,237,245, -217,236,245, 25,143, 39, 28,159,159, 18,105,205,195, 7, 15, 56, 62, 57, 35, 75, 19, 52,150,205, 94,134,116,134,126,127, 64,218, -233,241,181,111,254, 52, 63,241,141,175,243,195,239,125,151,121,237,109, 97,165,177,100, 6, 42,231,232, 72,205,184,105,216, 20, -146,133, 49,100, 82,133, 76, 8,223,101,106, 37,131,181, 76,210,246, 28,145,244,244,188,202,192,188,118,228, 13,164,181,161,169, - 42, 26,180,231, 85,104,237,141,107, 54,232,103, 2, 3, 29, 39, 49,182, 1,137,231, 93, 24,139,148, 22, 43,236,178,192,200,208, -221, 75, 33,113,198,208,216,134,166, 22, 80,148,129,128,151, 16,197, 21,153,241, 57, 9,117,221,128,105,136,140,163,108, 26,166, - 69,137, 43,102,216,186, 36,235,196,108, 95,222, 97,103,103,203,187,129,172,163,158, 22, 84,205,196,211,215, 54, 59, 68,221, 30, -116, 37, 34, 2, 17,123,150,130,107, 59,146,198,248,183,150,173, 97, 5, 77,237, 87, 23,126,207,107, 17,194, 80, 25,139,142, 3, - 84, 73,105, 44,214,231, 33,160, 80, 34,226,189,219, 31,210, 56,129,116,126, 50,163,164, 36,203,114, 76,211,208,233,246, 60,255, -188,174,201,226, 24,211,212,204,138, 57,162,147, 35,147, 24, 81, 58,180, 80, 52,172,208,205,141,131, 88, 71, 88, 60, 11, 95,172, - 77,198, 76, 99,151,112, 49,214,152,250, 79,238,144,151, 58,152, 54,129, 77,249,130, 30,135, 32,146,184,141, 91,141,252,120,220, -191,175, 86,208,151,165, 54, 76, 92, 20, 59,179, 54, 49, 20,226,137, 49,246,211, 65, 99,109, 17,116,106, 77, 48,169, 91,122,159, - 11, 63,103,121, 17, 96,182,238, 73, 95,195,208,138, 39, 28, 53,207,226,186,127,218,196,224,199,218,220,220,106,109,108,157,123, - 66, 54,207,133,110,124, 9,248,122,226,185,231, 1, 64,102,201,215,215, 85,101, 9, 7,222, 0,134,247, 30,184,150,222,230, 5, - 42, 94,240, 36, 77, 0,208,180,167, 32,105, 47, 72,239, 47,218,224,228, 82, 57,216,238, 94,124, 49,246, 31,171,132, 93,123, 64, -139,149,240,205,173, 94,208, 86, 56,208, 42, 63,219, 17,188,104,125,201,110,245,199, 5, 23,131, 27, 46,238,127,130,208, 79, 71, - 44,230,115, 20,158,222, 52, 43, 42,250,121,159, 94,167,203, 64, 11, 18,165, 24,149, 37,243,233,132,126, 55,163,110, 74,146, 52, -227,198,141,107,124,252,201, 93,164, 20, 76,134,231, 20, 69, 73,156,118,216,222,187, 74,154, 86,156, 28, 28,243,224,225, 67, 94, -122,249, 37,146, 52, 70, 41, 73, 93,150, 76,134, 67,174, 93,189,201,241,129,100,120, 62,229,165,151, 62,203,123,239,189,133,165, - 98, 92,140,209, 58,163,187,209,227,209,225, 1, 47,190,240, 89, 38,147, 5, 87,175, 60, 71,146,116,216,191,188,207,189,187, 31, -145,191,221,231,197,207,188,192,193,221, 59,228,121,202,217,124, 78, 89, 27,172, 53, 12,207,135, 52,139,138, 78,154,114, 58,153, - 32, 99,133,117, 13, 39,231, 39, 60, 58, 56, 32,202, 94, 33,206,122,236,238, 94,162, 25,142,225,228,204,143, 34,105, 16,141,165, -211,219, 32, 78,124, 6,249,246,246, 22,103,247, 62,100, 94, 27, 68,150,251, 16,131,198,143,250,108,136,129,108, 49,173,235, 60, -247,191, 10,235,248,175, 55,153, 90,243, 31,175, 17,230,214, 89,207,127,213,147,123, 20, 69,216,166,225,232,209, 99,222,126,253, - 61,226, 40, 99, 58, 29,113, 62, 62,163,223,189,132, 64, 97, 26,133,173, 36,131,205, 61,146, 62,236, 93,185, 70, 85, 90,154,106, - 78, 85,142,137, 35,199,181, 27,207,113,114,114,198, 15, 95,253, 62, 91,155, 3,175,216,142, 35,118,118,182,232,166, 25,155,155, - 91,244,250,125, 78, 78,135,156,205,224,149,157, 91,104,161,217,223,189,204,224,210,142, 7,176,204, 38, 92,187,114,153, 72, 43, - 6,121,202,254,246, 38,239,126,112,143, 52,233,146,165, 41,231, 39, 39,216,166, 98,123,103, 19, 37, 29, 91, 91, 27,196,113,206, -193,193, 99,202,173, 45,122,221,156,188,147, 50,157, 77, 72, 84, 77,154, 40,122,217, 54,253, 94,204,195,251, 61,180, 4,170, 57, -145,176,108,108,110,241,230, 59,111,179, 53, 47,217,239, 15, 80, 82,178,152,141,233,246, 7, 84,179, 17,206,198,212, 8,186, 89, - 70,189,209,227,228,248, 4, 37, 21,253,222, 96,169,214,159, 79,253,155,176, 57,166,156,147, 48,240,201, 99, 56,100,149,128,176, - 92,186,188,199,207,252,234,175,242,157,255,240,109,226, 72,135,112, 20,144,206,119,220, 37, 14, 19,107,230,133, 97, 16,197, 62, -199,220, 58,104,204, 42,157,209,121,129, 93,229, 44,145,131, 60,210,212,214, 48,169, 29,105,101, 73, 42, 16,113,131, 81, 13, 66, - 58,255, 12, 10, 15, 90, 99, 26,148,210,152,186, 21,105,249,124,105, 39, 88, 10,207, 28, 38,172, 22, 87, 96, 42,165,212, 50,107, -219,186,134,186,174,189,207, 89,107,106,165,104, 38, 49,115,165,136,172,197,149, 37,118, 58,167, 25,143,105, 70, 35,204, 98,140, -116, 13, 73, 39,226,100,183, 75,245,153,231,217,220,218,162,169,107,206, 79, 78, 40,103, 51,159, 9,223,237,208,221,222,166,187, -123,137,120, 99, 11,213,239, 33,178, 20,161,180,159, 90, 26,227, 71,239, 85,129,171,188, 98, 29, 2, 61, 13,137,210, 30, 18,175, -163, 4,165, 98, 63,117,136, 34,140,169,145, 82,161, 85,204,163, 71,135,156,158,143,232, 14,182, 25,158,143,160,241,207,237, 60, -239,112,116,124,204,222,222, 37, 30, 62,120, 72, 28,105, 22,243, 57, 81,154, 49, 91,204,217,220,223,243,133,174,165, 58,138, 80, - 80,132,247,169,171, 72, 99,132,223,167, 27,227, 2,198,219,239,109,133,116, 75,209,107, 75,195,123,178,155,108, 9,163, 42,164, - 46,250,188,116, 69, 20,251, 48,161, 54, 97,172,101,197,171,144, 13,208,142, 80,172, 93, 89,188,158,181,144,118,159, 18, 40,182, -158, 57,225,214,187, 91, 21,162, 73,173, 92,139,181,118, 97,133, 19,194,103,108,224, 6, 60,107, 52,176, 62,130, 23, 60,179, 65, -121,178,144,255,216, 26,126, 97,159,206, 5,145,241, 69,189, 88,120, 22, 6, 59,230, 42,176, 70,248, 53,120, 88, 43,121,188,186, -127,141,106, 99,209,117,221, 96,140, 90, 27,151,216, 0,135,183, 33,134,117,181, 23,145,225,102, 90,118,227,235, 24,206, 39, 50, -215,219,192,251,245,177,193,122,152,189,146,161,195, 95, 55,217, 47,145,162,110,169,116,111, 73, 57,171, 29,188, 11,167,241,149, - 1,114, 61, 20,246, 89, 3, 99, 33,124,151,208,212,158,168, 52, 30, 85,244,246,188,210, 51,239,244,152,207,231,228,123, 9,194, - 24,122,157,174, 39, 57, 41,137, 49, 6, 29,105,198,147, 17,231,195,115,110, 92,191, 78, 30,199,140,134, 67, 78,207,199, 20,139, - 5,121,167,131, 49,135,212,101,197,116, 52, 38,142, 54, 25,143, 71,212,101,193,102,191, 79, 93,148,140,199, 5, 95,254,210, 87, -120,251,173,215,233,246,186,244, 55, 59, 32, 35, 30, 62, 58,231,254,251, 31,145,100, 17, 91,189, 30,199,199, 67, 94,249,230,207, -211, 52,142,247,111,127,192, 55,191,254,101,162,110,143, 94, 18, 49, 28,141,168, 5, 20, 65,163,105,157,227,236,236, 12,225, 32, -138, 34, 63, 90,108, 74,142,142, 15, 80, 58,103, 52,153, 80,154,134,193,214,128,225,105, 68,199, 36,104, 21,148,239,194, 43,108, -139, 69,193,201,241, 25, 81,164, 48,206,210,219, 28,176, 37, 51, 30, 79, 74,166,211,169,215,244,200, 39, 20,158, 75,188,204,255, -127,255,121,194, 22,250,148,111,243,153,133,253,201, 27,206, 58,166,147, 49,111,189,241, 22,243, 89,197, 98, 94,210,235,117,216, -219,217, 68,106,193,100, 58, 67, 52, 18,165,114,202,218,145,247,251, 52,141,225,248,248,152,210, 52, 68, 73, 77,150, 71,232,164, -203,139, 47,127,142,243,225,144,183,223,120,141,205,126, 23,209, 73,121,120,255, 30, 89,156,114,124,116,198,141, 23, 94, 98,251, -202,103,232,109,236,114,255,112, 68, 20,151, 36,177,162,172, 23, 92,185,118,149,180,147, 51, 61, 59, 13, 19, 2,127,163,166,105, - 70,180,155, 81, 22, 5,157,110, 23,211, 44,152,207,167, 72, 12, 82,150, 94,251,209,235,241,248,209, 3,138, 98,202,139,159,253, - 12, 91,253, 28,209,204,152,143, 70, 44,138,138,141,222, 6,238,242, 30, 90, 72,178, 72, 48, 29, 14, 33,138,249,226,151, 95, 97, -119,107,128, 86, 2, 83,150,152,166,130,166,164, 42,231,152, 38,246,127, 95, 85,178,189,217,103,107,208,231,224,241, 33,101, 49, - 39, 75, 99,166,179, 25,166,170,188, 3,193, 25,146, 36, 70, 75, 65, 93,206, 56,126, 60,100,107,111,143, 81,189,192, 22, 99,250, - 27, 27,220,188,126,133,111,124,245, 39,120,253,222, 1,139,186,102, 32, 19,166,182,194, 58,199, 68,212, 36,214, 81,133,135,110, -131,207,158, 55,198, 19,232, 26,107,209, 82, 82, 10,207, 8, 23,206, 18, 43, 77,209, 52,140,139,154,222, 2,108, 44,105,116,140, -144,208, 24,185,180,158,181,235,193, 54,120,166, 69, 74,138,128,178,118,214,250,142, 87,201, 37,162,212,218, 21,171,220, 52, 53, -166,153,211,148, 37,206, 26, 79,158,195, 49,179,150,217,104, 76,125, 52,161, 30, 78,169,198, 83,220,124, 78,236, 12,145,176,164, -169, 96, 99, 51,194, 30, 75,212,217, 67, 78,251, 3, 76, 99, 40,231, 11, 98,169, 73,163,152, 70,103, 44,210, 7,156,228, 29,162, -141, 45,242,221,109,242,173, 45,146, 94, 7,221,233, 64,164, 17,174,193, 84, 5,214, 6,255,180,142,130,198, 32,116,205,149, 35, -142, 83,207, 79,211, 49, 14,207,237, 23, 8,234, 69,197,189, 59,159, 96, 67, 72,213,232,240,156,249,120, 74,154,102, 88,103,137, -226, 4, 99,253, 3, 63,137,227, 0,194,242,118,208, 78,191, 79,221,142,113,195,189, 38,149,164,105, 26, 47,154,148, 42,248,161, - 45, 24, 71,211,248,169,133, 31,189,235, 0, 9,147, 33, 93,243, 98,103, 44,150, 98, 46,175,125,104,209,178,177,110, 59,116, 77, -164,189, 40, 78,201,150,137, 18,200,114,174, 29, 47,251,151, 82, 60,235,192,143,123,102, 19,192,143, 41,240, 66, 8,159,212, 40, -236,234,247, 60,248, 98,201, 96,247,211,100,241,169,253, 66, 59,206, 23,252,120,248,204,179,166,143, 79, 47, 48,215, 82, 47,215, - 58,245, 11, 19,137, 39,186,114,156, 11, 65, 53, 62, 37,207,186, 96,235,172, 13,101, 89, 82, 85,134,186,105,168,235, 6, 93,213, - 30,180, 64,128,207,172,119,215, 74,136, 37, 81,110,245, 13,177,242, 3,139, 85,113,111,199,246,170, 45,224,178, 45,254,114,217, -197,175,211,231,228, 90,108,222,122, 55,189,250,161, 60, 61, 18, 89,122,253,172,187,160, 80, 20,235,136, 90,231,150, 54, 44, 17, -130, 25, 86, 22,130,134, 89, 49, 37,221,212,140,138,134,233, 28,146, 40, 65,201,148,211,225,132,198, 53,136, 72,208,217,216, 12, - 99, 59, 65, 83,149, 60,126,116,198,205,235, 55,176,174, 97, 81, 45,168,108, 77,217,148,220,189,243, 33,157,222, 22,221, 88,179, -187,183, 71,109,193,138,152, 89, 97,249,204,173,207,128, 41,153, 14, 79,201,122, 17,175,189,249, 42, 89,156,162,147, 20, 39, 52, -239,191,119,155,189,205,109, 94,249,210, 23,248,236, 23, 62,207,255,243,255,250,127,231,231,127,250, 23, 40,203, 25,184,154,235, -151,247,249,179, 63,249, 22,131, 75,251,252,222,239,253, 54, 78, 41,156,105,188,226,213,121,223,103,156,104,206, 71, 99, 68,156, -251,192,150,208, 41, 77,139,154,186, 42, 73,243,156,253, 65,202,105,172, 25,107,127, 49, 72,106,111,203, 80, 17,210, 57, 78,142, - 30,162,116, 8,144, 80, 17,163,197, 25,187, 91, 59,212,118, 14, 74, 34,131, 51,225,162,246,245,233,155,237,211,119,232, 65,228, -184,126,131,173,135, 1, 5,160,197,250,190,168,101,253,171,214,230, 22, 20,182, 74, 11,143, 83, 77, 34, 34,173,151, 93,141,183, -164,132, 45,156, 16,254,215, 1,217, 58, 58,122,196,191,250,103,255, 15, 54, 58,155,228,221, 28, 65, 67, 81, 84,236,110,238,115, - 94, 54, 76, 23, 99, 34, 37,216, 76,186, 8, 33, 57, 59,122, 64, 83, 7, 10, 87, 39, 67,187, 62,105, 63,101,107,179,207, 79,126, -243,155, 36,121,135,199, 15, 31,179,185,179,237, 19,208, 74,131,213,154, 91, 95,253, 38, 55,111,220,162, 56, 27,115,244,232, 33, -166,154, 18, 13,186, 84, 83,199,248,228,140,238,214, 22,221,205, 75,222, 91,111, 45,211,201,152,110,167,203,116, 50,162,169, 22, - 12, 71,103, 60,126,252,136, 78,167,195,245,235,215,217,238,119,185,121,181,135,142, 4, 81, 26, 83, 86, 21,103,199, 39, 92,218, -223,102, 99,163,135,169, 74, 68,221,208,177, 13,143, 70, 67, 14,199, 19,242, 52,229,198,238, 46, 90,123, 59, 87, 89,150,100, 27, - 3,164,210, 44, 22, 11,198, 69, 69,191,219, 69,162, 40,231, 53,186, 23,133,135,169, 33, 75, 37,231,167, 67,164,204,185,190,191, -139,180,142,106,190,240,227,211, 72, 82,215, 53,189, 60,166,104,230,184,102,142, 35, 66, 19, 83,205,103,228,177,226, 55,126,229, -103,121,243,163,143,121,253,221, 59,204,155,146, 26,111,133, 45, 42,152,162, 57,179,134, 65,164,160,110, 16, 66,178,192,162, 35, -137,171, 33,113,146,153,115,204,241, 88,225, 28,136,132,163, 40, 97, 54, 83, 36,137,194,197,198,211,204,140, 65, 59,208, 2,164, -112, 72,103,144, 78,130,177, 56,209, 96,141, 8,170,112,233, 31,210,182,241,250, 12,169,124, 66,154, 5,179,124, 70,249,189,105, -211, 24,154,197,130,114, 52, 97,122,114,194,228,116,200,252,124, 66, 61,171,113,141, 64, 33, 72,132, 32,195,146, 56, 75, 37,160, - 25, 87,212,155, 2,230, 53,139,238, 25, 66, 7,114, 93,156, 82, 56,137, 54, 49,206, 65, 93, 53,160, 20, 38,150,200,110,138,238, -229,116, 46, 95,161,179,127,153,205,173, 1, 89, 39, 69,104, 65,156,229,225,235,212, 96,189, 56,185,118,142,134,208,241,106, 63, - 93,240,170,125,197,221,187,247, 40,107,160, 19, 33,148,196,212, 37,197, 98,198,214,206, 22,211,249,130,110, 39, 99, 49,157,160, -165,160, 44,203,165,136, 42,221,200,137,178,132, 58,132,225,248, 36, 59,175, 79,104,234, 18, 39, 53, 78,121, 82,167,176,198, 39, -217,153,136,218, 52,136,198, 55, 89, 42, 52, 74,222, 31, 93, 47,189,245, 82, 58,148, 0, 84, 32,198, 41, 69,172, 34,226, 72,134, - 98,238, 59,244, 54, 78, 85, 4,182,187, 12, 28, 10,175,199, 90, 5,247, 32, 86,228,184, 37, 47,176,197,183, 94,104,225,196, 74, - 56,189,156,232,186, 37,183,100,249,220,106,169,132, 75, 55,149, 67,216,246,179,123, 71,129, 13, 30,138, 11,246,115,119, 17,126, -243,172,117,223,167, 30, 46,158, 60, 28, 56,177,202, 56, 17,225,123, 89, 87,143, 11,183, 22,158, 33,150, 99,121,159,200,215, 96, -141,164, 9,126,209,198, 88,234,186,161,168, 12,101,109,168,106,235, 69,158,101,213, 32,149, 88,141,223,215, 5, 14, 98, 13,167, - 23,186,112, 88, 21, 83,183, 86,212,101,136, 30,212,203,152,195,192,213, 13, 85, 87, 46, 19,112,218,206,126, 37,162, 91,177,157, -151, 92,165,229, 79, 84,240,244, 94, 67, 62,131, 96,183, 44,240,171, 40,229,229,235, 32, 3, 38,180,155,166,161, 51,133, 40,137, -137,103, 53,157, 52,163,219,233,146,208, 80, 53,134,241,116,206,230,246, 37,134,103, 71,116, 98,197,108, 92,209, 73, 59, 8, 20, -179,233, 57, 39,103, 39,220,184,121, 19, 35, 20, 90,231,220,249,248, 46,159,251,194,151,153, 55, 13,198,249, 2,179,181,187, 79, -213, 56,108, 85,113,122,118,138,144,150,126, 63,103,179,183,205,227,195, 71,196,249, 54,207,221,186, 78, 47,206,185,253,193,123, -188,123,251, 3,126,250,149,111,242,218,155, 63,228,171, 63,249, 83,124,120,239, 35,186,105, 78,167,211, 35,214, 17,113,146, 82, - 27, 11, 74,162, 26,159,116, 36,133, 96, 62,159, 17, 37, 26,161,162, 48,253, 0,173, 35,156, 19, 52,101,197,233,233, 25,145,107, -216,236,245, 56, 24, 77,188, 14,194,129, 16,138, 74, 42, 68, 99,168,235, 57, 8,135,214,154,227,163, 49,103,195, 33, 73,218,103, -115,167, 71, 99, 10, 15,118,129,255,225,166,142,139,231,179,139,197, 93,132,140,224,245,132,182, 96,213,104,109,109,173, 32,170, - 45,234,137, 82, 36,113, 76,146, 36, 68, 1, 49,185,124, 8,172,188, 55, 97,125,227,104,102, 83,134,199,135, 28, 31, 28,113,227, -234, 85,122,221, 28, 44, 84, 85,141, 84,154, 94,191,207,104, 60,228,116, 56,102,171,223, 33,150,142, 98,177, 0,169, 41,230, 17, -231,167, 39,164,221,156,188,211, 71, 38, 29, 94,120,249,139,252,202,175,253,118,176,123,157,113,112,239, 1, 86,194,112, 60,163, -123,114, 74, 63,138, 16, 52, 76,199, 19,178,216,122,145,105,153, 83, 78, 20,105,127,131,166, 54,164,131, 62, 59,253, 62,213,120, - 76,175,147,208, 84, 5,219, 91, 27,140, 70, 67, 78,207, 70,108,110,239,211,137,107,164,242, 9, 83, 69, 9,113,146,251,125,105, -146, 80, 84, 13, 89,183, 67,108, 28,162,174,233,118, 58,124,124,124,138,149,154,178,113, 72, 87,163,180,239,148,202, 98, 65,183, -215,243,246, 29,173,208, 81,140, 48, 80,153,154, 69, 93,161, 83, 15, 76,217,216,217, 36,205, 99, 78,207,134, 84,197,140,231,111, - 92,227,242,254, 21,166, 85,193,108, 54,225,248,225, 67,202,178, 36, 78, 83, 36,144,103, 49,166,105, 80,218,145,198, 49, 87, 47, -237,242,159,252,218,223,224,133, 27, 31,240,167,175,190,193,189,195, 19,132,118, 52, 53,156,227, 21,212,113, 28, 99, 10, 71, 55, - 86,212,162,193, 56,239, 11,142,129, 72, 41, 10,103,105, 2, 42, 85, 57, 63, 22,158,206, 28, 89,218,160, 50,137, 80, 2, 39, 29, - 85,227,173, 95, 82,123, 63,177, 31, 81, 46,151,211, 30, 45,107, 27, 84,152,208,217, 0,121,241,246, 55,141, 49, 53,214,249, 67, -161, 78,123,100, 34,102, 90, 11,106, 59,167,113, 49,184,132, 56,113,244,186, 29,226,164,131,148, 26,211, 52,184, 98,129,173,230, -148,245, 2, 99,107,202, 97,205,180,170,201,114, 67,148, 4,142,188, 40,136,147, 4, 33, 74, 34, 33,201,117, 76, 55,143, 72,148, -198, 24,193,238, 96,155,189,235, 55, 73,247,118,200, 58, 25, 66, 11, 42, 83,249,107, 92,233,160, 55,208,212,149, 89, 50,194,189, - 34,188, 9,207, 96,205,120, 56,229,224,248,148, 56,239,162,123,221, 37,196, 72, 71,154,188,211,165,156, 79,201,211,148,225,201, - 49, 82, 64,217, 52, 24, 7, 58, 73,200,186, 29, 84, 20, 65,211, 98,119,252,195, 82, 40, 29,236,174, 62,176,196,135, 52,249,206, -182, 17,146,198, 72, 68,227,191, 71,237, 2, 72,202, 58,207,138,112,118,109,212,237,237,203,126,228, 30, 17, 71, 49, 73, 36,194, -254,124, 5,248, 89,165, 51,202,101, 67,232,195,184,220,114,237,235,214,129, 47,226, 73, 67,237,133,205,237, 19,138,120,177,246, -177,114, 53,210, 94, 51, 79, 9,111,129, 95, 29, 11, 90, 38,128,120,106,161,189,110, 50,255,255,249, 31,233, 4,110, 61,178, 92, - 56,158, 9,128, 95,219,221,183, 49,213, 34, 76,173, 77, 99, 48, 56,234,218, 80, 53, 13, 85,221, 80,215,190, 83,183,214,160,203, -198,162,108,235, 83, 95, 47,186,171,113,187, 88, 31,183,179,190,223, 92,219,175,135,194, 93,183, 93,248,178,168,203,149, 79, 93, -172,198, 24,106, 45, 27,253,162, 0, 97, 21,207,249, 36,166,207,127, 93,173,119, 84, 92, 76, 99, 91, 83,226,183, 30, 74,183,214, -193, 75, 9, 89,146,248, 27, 44, 73,161, 42,137,149, 64, 9,199,253,251,159,176,255,194, 46, 78, 58,158,219,191,194, 71,119, 63, - 6, 98,132, 86,108,239,108,114,255,225, 9, 89, 83,177,191,191,207,222,165, 61, 38,147, 9,123,187,123,228,221, 77,116,220,225, -225,227,135,220,188,114,137,199,199,231,148,243, 41, 87,174, 94,103,120,126, 66,181, 88,176,168, 26,166,211, 41,199,135,199, 12, -186, 39,116,122, 29,246, 46, 93,230,241,227, 7,116, 7,125,162, 88,179,127,249, 26,239,125,124,155,211,225, 57,223,253,222,159, -177,119,229, 42,121,183,203,116, 60, 99,111,239, 18, 81, 20, 81, 91, 75, 26,107,108, 8,175, 17, 66,146,103, 41,163,243,211,149, -215,213, 89,172,245,164,170,197,108, 78, 83,123,202,208,108,182,160, 40, 42,154,160,172, 21, 50, 80,183,108, 21,110, 66,111,221, - 25,141,103, 52,141, 37, 75,115,178, 44, 97, 60, 41, 46,236,119,254, 99,122, 53,219, 98,173,149, 34,142,162,176, 99,211, 23, 10, -187,146, 42, 68, 52,134,130,175, 5,177, 10, 10,218, 36, 33,138, 19,148, 86,107, 26, 10, 95,200, 5, 62,249,175,156, 78,248,151, -255,252, 95,112,237,250,117, 62,254,240, 14,111,188,241, 35,190,248,249,151,185,118,101, 63,216,184,198, 76,199, 99,164,138,152, - 76,198,116,179, 20, 99, 42,178, 52,166,168, 74, 36, 6,219, 72, 70,103, 21,143, 31,159, 48,173, 12,191,240, 43,191,198,214,238, - 37,206, 71, 19, 22,198, 49,109, 42,138,233,148,108,146,112,119, 58,101,103,119, 27,155, 72, 22,231, 11,202,137,196,106, 75, 53, -143, 49,182,162, 49, 5,147,249,130,230, 0,118,118,119,104, 74,195,201,241, 49,121,154, 16, 73,193,238, 55,190,193,131,135, 7, - 28, 28,157,178,211,237, 6,123,169,161,110,106,108,227, 72,211, 20,172, 35,141, 83,154,198,162, 54, 4,103, 71, 39, 84, 77, 67, -150,117, 88, 44, 10,191, 82,210,130, 88,121, 49,154,146, 80,204,167, 68,113,140,116,254,247, 85, 18,145,200, 4,131,165, 9,226, -179,218, 24, 68,214, 33,237, 84, 20,211, 57,179,233, 24, 25,165, 36,177, 66,233, 30, 59,131,151,136, 36,204,166, 35,138,249,156, -249,172,100,111,127,131, 52,239, 82, 25,203,198,214, 54, 63,243,213,175,176,191,177,201,115,251,251,188,243,209, 29,126,244,238, - 7, 28, 12,199, 52, 66,114, 62, 47, 80,101, 77,220, 30,178,133, 90, 58,104, 44, 22,225,132,199, 39, 24,139,210, 17,166, 49, 62, -202,184,177, 20,243,138,184,227,208, 74,120, 55, 85, 99, 64,121, 69,252,114,173,219,122,141,195,168,210,227,224,205,154,168,201, -143,246,173,243,169, 87, 62,153, 55,246, 73,108,202,145,111,108,147,230,125,118,247, 43,234,217,130,197,120,138,182,138, 60,235, -161,146,132,193,230, 38,105, 28, 17,107,135,107, 74,220,124,134,153, 77,208,210, 97, 77, 65,158,199,104, 29, 17,197, 9, 73,214, - 65, 71,130, 44,142,176,101,137, 4,202,186, 36, 29,116,216,187,118,133,120,187,139,205,124,128,140,144,130, 40,242, 2, 72,130, - 58,222, 6, 52,108, 59,150, 22, 64, 93, 87,196,113,194,108, 94,112,239,225, 33, 34, 74,137,210,156, 94,127,147,251,159,124, 66, -221, 24,146, 36, 37, 73, 18, 48,141, 79,248,115,190,123, 42,234, 5, 66, 43,116,154,146,182,233,131, 33, 40,169,157,178, 42,165, -252,179, 59,136,219,214, 15,225,198, 24,170, 58,236,216,173,165, 49,106, 57, 90,174, 27,191,207,109,167,117,126, 45, 18,138,120, -240,159,199,177,159,246,232,245,136,213,240,113, 23,158,223, 75, 90,160,193,218, 16,222, 19,120, 21,159,246,236,105,167,198, 23, -167,133,173, 35,107,117,224,147, 79,137,118, 87,211,222,118, 50,188,194,197,174,125,172,112, 79,215,221,191,134, 54,232,194,251, -238,175,246,137,150,202,125, 9, 90,203,112,102,241, 76, 1,107,188,158,170,118,150,170,246,194, 56,143,216,246,207, 9, 39, 28, -186,110, 12, 54,164,252,248, 83,147, 11,105,108,107,251, 3,187,150,143,190, 38, 96, 82,172,197,174,178, 18,206,181,187,120,191, - 95,105, 59, 51,123,225,207, 10,231,158,218, 77,136,139,166,245,181,221,234,197, 9,194,147,211,131, 85,130,147,135,227, 8,225, -150,120,114, 63,118,243, 95,119,222,233,114,229,242, 62,143, 30,222,227,234,206, 54,135,231,231,104, 45,217,216,232, 82, 53, 5, -221, 94,151,195,131,199, 28, 29,159,242,171,191,240,211,220,126,239, 29,172,115,116, 54,123, 62,222, 51, 74,249,139,239,255, 57, -253, 65,159, 91,159,121, 25, 21, 37,108,110,111, 49, 28,141, 57, 61,122,196,205, 43,215,121,227,157, 15,121,241,249,231,249,139, -247,223, 99,103,107,131, 52,203,105,202,130, 47,190,252, 18, 56,120,248,248,128, 31,188,246, 35,110, 61,247, 28,127,241,195,215, - 25,143, 70,140,171,134,203,123,151,184,121,235, 57,190,255,250,235, 84,101,197,251,183,111, 51,155,205,249,194,151,190,204,217, -104,136, 20,146,178,172,125,216,129, 16, 52,214,114,255,193,125,222,122,231, 13,127,138,199,123,235,133,107, 72,147,152,186, 42, -153, 78,231, 44,230,133,255,115,214,195,120,164,240, 2, 28,143,250,130, 56,210,204,139,146,147,211,115,162, 56,241,167, 87,233, - 99, 10, 89, 63, 81,254, 71, 42,234, 98,169,203,144,203,124,224, 40,210,196,137, 63,213,235,200, 23,247,245,162,190,126,186,111, -179,181,147, 36, 37,138, 34,148,246,217,198,237, 3, 81, 58,239,206,168,202,130,239,126,251, 91, 60,122,248,136, 76, 71,124,254, -115,159,227,228,228,136,195,163, 67,146, 72,113,237,234, 85,146, 52,229,244,244, 20, 83,212, 52, 70,144,229, 61, 30,221,251,144, - 27,215,246, 73, 34, 73, 81, 22, 84, 69, 77, 81, 41,140,147,148,243,146, 78, 18, 51, 30,158, 97,140,161,174, 11,146, 78,202,157, - 15,222,231, 82,183,143,114, 27,140,243,136, 44, 79,200,210,148,106, 94, 48, 77, 4, 81,167,131, 22,146,133,177, 24,225,175, 67, -173, 4,181,173,105,202,130,209,249, 57, 73,156,176,177,153,208,205, 50,132, 51,124,120,251, 54, 55,246,183,217,216,204, 81, 1, - 78, 98,170,154, 98, 62, 71, 71,146, 52, 75, 65, 43,250, 59, 91, 60, 28, 78, 88,204, 23, 44,230, 37, 39,103,103, 36, 91, 57,177, -138,168, 49, 88,167,168,107,203, 98, 33, 24, 12, 6, 76,166, 37, 82, 40,132,210,116,250,126, 18,100,173, 35,235,118, 61,114,210, - 84,152,178, 68, 1, 58,150,204,102, 83,166,139, 25,187,253, 1,198, 88,180, 78,200,114, 69, 89, 46, 56, 57, 27,114,115,123,143, - 94,154,115,118,124,202,246,246, 0,201,117, 18,237,115,223, 95,124,238, 22,127,246,198, 27,220, 63, 58,161,168,106,206, 15, 79, - 72,240,202,239,174,138,112, 77,133,138, 21,182,105,136,165, 38,106,154,144,228,231,119,173, 6, 79, 37, 91, 20,142,184, 48,196, -177, 37,210, 30,186,226, 66,129,145,194,210, 88,139,116, 45,142, 52, 12, 95,173, 89, 61, 23, 16,254,123, 22,248,223,119, 96, 76, -229, 83,254,100,179, 18, 37, 73, 48, 74, 32, 59, 41,145,112, 80, 26, 74, 81,250,207, 93,140,105, 68,202, 70,222,163,211,223, 36, -222,219, 65, 41, 73,172, 0, 83,147, 36, 26,219, 24,210, 44,195, 57, 80,229,130,178, 88, 80,105, 16, 90,146, 95,218, 97,231,234, - 62,186,155, 65, 2, 66, 25,132, 86,129, 95,166, 16, 45,213,204, 65,211,184,150, 12,186, 36,143, 73, 9,117, 89,112,255,222, 17, -139,202, 66,146,208,223,217, 70, 72, 77, 93, 86,126, 18,146,166,104,173,113,113,226,187,183,198, 39, 33,214,181, 33,235,118,137, -242,156, 56,207,189,139,162,241, 41,125,166,181,115,233,176, 95, 14, 93,187, 93, 22,116, 23,138,172,239,204,155,198, 46, 11,114, - 91,240,173,241, 83, 18,133, 88,118,223,177,214,164,145, 34,141, 86, 96,153, 56,168,220,149,146,203, 3,203, 5,175, 88,187, 54, -181,109,122,219, 26,138,252,175,144, 93,254,244, 42, 80,172, 14,124,235,163,114, 46,226,174, 47,114,221,197, 5,107,217, 95,187, - 59, 15,217, 4,114,237,137,105,255, 90, 15,200, 21,180, 39, 10, 77, 79,235,219, 23, 66, 96, 91,235, 90, 24,189, 55, 77,227,217, - 29,206, 96,157, 63, 8,235, 85, 15, 38,150, 49,151, 88, 48, 34,112,146,221, 42, 95, 86,172,137, 10,218, 45,132, 20, 65, 21,223, -194, 31, 96,109,247,206,218,104,148,167,138,248,167,165,186,173,139,215,253,231,145, 79,120, 31, 87,187,147,245,189,253,250,126, -127,213,188,185,176, 26,128,186,177,108,111,111,179,152,143,152, 79,199, 72,107, 24,142,206,216,222,222,162,108, 38,108,232,132, -162,154,162,100,195,119,190,251, 93,110, 94,222,166,219, 25,208,221,180,148,115,131,138, 98, 62,255,133, 47,177,189,189,201,120, - 58,103, 54,155,130, 83, 12, 54,186,188,245,250,187,108,110, 12,136, 48,100,145,230,149,175,125,141,110, 47, 99, 52, 60,229,253, -201, 24,140,163,170, 11,126,254,231,126, 14,221,217,224,143,191,245,199,116,187, 61,126,234, 39,127,146,239,124,239, 85,142, 79, - 79,120,120,120,128,150,146,166,170,152, 45, 22, 28,157, 15,249,209, 91,111,177,177,189,129, 84, 10, 99,205,106,106, 35, 37, 39, -167,103, 60,122,124,196,162, 44,151,115,110, 31, 86,224,136, 98, 63,194,158, 76,166,164,105,234, 89,199,129, 14, 39, 90,191, 44, -142, 44,207, 41, 42, 75, 99, 29, 78, 10,174, 92,187,202,163,199,143,216,218,187,133,115, 38,224, 41,237, 19, 55,206,143,247, 99, -186, 39,252,162, 79, 90,216,124, 2, 96, 59,146, 11, 5, 61,140,212,227, 56, 38,142,227,101, 81,215,107,227,120,169, 53, 90, 74, - 52,130, 56,209, 68,113,236,197, 69, 74,133, 81,154, 95,154, 58,219,240,232,147,187,252,219,127,245,223,178,187,179,205,124, 50, - 67, 72,184,117,235, 51, 88,211, 80, 44,230,124,112,251, 67, 58,157,156,221, 75,251, 60,124,116, 72,222,219, 64,165, 29, 22,181, -227,254,163, 35,174, 93,217,131,186,162, 92,204, 41, 10, 75,109, 96,127,239, 50,195,163, 7, 24,161,168,194,205,116, 58, 28,162, -132, 97, 58, 60,229,133, 23,111, 96, 19, 73,154,104, 58,155, 27,148,147, 49,181, 76, 24, 21, 6,234, 5,221,205,148,221,221, 61, -164, 20, 20, 85,197,124, 58, 65, 9,139,198, 34,154, 10,217, 84,236,110, 14, 16,226, 6, 15, 31, 60, 34,237,228,196, 73,140,173, - 75,154,166, 38,235,245,209, 74,209,216, 6, 91, 26,175, 45,200, 83,118,118,119,120,240,248,148,163, 71, 7,220,153,143, 25, 29, - 75, 46,109,245,169,141, 97,123,123,135, 75,151,247, 25,142,198, 68,113, 74,158,101,104,124, 70,248,244,108,232,173, 80, 90, 82, - 87, 13,105,158,147,229, 29, 92,175, 98,120, 50,100, 50,155, 49, 94,204,105,156,197,246,123, 40, 33,136,147, 24, 23, 71, 97, 84, - 41,104,234,134, 56, 19,108,108,111,115,120,124,192,254,205, 43,236,236,109, 35, 36, 12,134, 51,182, 6,191,192,247,223,124,155, - 59, 7, 7, 52,181, 97,124, 54, 2, 99, 61,234,210, 57, 82, 33, 3, 29,205, 4,173, 72,128,145,106, 65,229,124,108,110,209, 56, -244, 2,146, 12,162, 4,234,186, 14,226, 80,177,150,110,197, 50,134,213, 79, 95, 13,194,133,140,103,188,104,210, 5, 38,185, 8, -191,182,182, 6, 87,248,144,148, 48,166,247, 22,174, 6, 29, 57,132,180,152,166,193,218,130,106, 54,131,185, 38, 90,228, 68,189, - 30, 34,141, 49,145,196, 41, 65, 36, 4,166,150, 68, 81,204, 98, 52,199,212, 6,213,212, 56, 9, 73, 55,167,191,183, 69,103,103, -128,238,164, 84,202,162,195,132,176,193,174, 70,224,248,175,213,107,176, 77,176,143,201,101, 56,146,169, 45,143, 15,142,168, 27, - 65,141,162,191,181, 77,212,233, 48, 60, 57, 33, 75, 83,134,206,209,217, 24,224,132,160,211,239, 51, 62, 61,161,110,106,148,246, - 83,176, 56, 73, 80,105,134,206, 50,132,242, 98, 52, 41, 2, 90, 87, 72, 92,235,171,119, 46, 88,239, 4,198,121, 50,159,119, 10, -180, 8,102,115,161,195,109,139,125, 91, 69,100, 24,189, 39, 73, 76,146,198, 36,105, 20, 10,185,242,226, 56, 45,130,218,125,237, - 57,205,122,204,246,106,183,238, 39,136,114,181,119, 23, 23, 39,183, 23, 1, 87, 79, 60,159,130,182, 70, 56,150,135, 64,108, 75, - 27,196,175, 21, 5, 23, 59,245,150, 88,234,214,246,230,225, 95, 27,236,125,106,205, 70,246,108,149,187, 91,170,248,215,131, 86, - 86, 93,187,120,182, 61,173,109,153, 91,250, 94,232,212,149,112,104,121,241,179, 90, 99,151, 29,250,242,115, 88,139, 14,137,167, - 90, 46,247,214,171,174,251, 66, 1,191, 96, 11,251,148,111, 97,121, 58, 94, 59,249,132,125, 16,214, 92, 8, 6, 88,118,222,238, -211,139, 58,242, 98,122, 77,139,124, 92,165,224, 93,140,128, 21, 98,245,119, 44,157, 10, 98,109, 44,135,247,124,142, 70, 19,198, -211, 57, 90, 69, 84, 14,242, 78,234,147,166,128,110,191, 75, 39,147,100,177,164, 42, 43,110, 60,127,157,162, 88, 48,153, 28, 50, -157, 23, 96, 35,102,163, 41,179,233, 8,233, 12,215,111,252,127,121,251,175, 39, 75,183, 51,189, 19,251, 45,243,217,109,211,103, -150,183,199,225, 28,224, 0, 13,160,209,222,136, 61, 36,155,106, 74, 61, 51, 36,131, 23,163, 11, 94, 40,230, 66,250, 7, 20,138, - 80,255, 17, 10, 93, 72,186, 80, 40,228, 70,156, 17, 53, 28, 14,217,156,110,160, 27,104,160, 97, 15,204,241,167,124,101, 85, 86, -165,207,220,254,115,107, 45, 93,172,111,155,204,170, 58, 64,147,138, 57, 39,118,100,102,165,223,185,247,247,174,247,125,159,231, -247, 92,102,156, 23,196,141, 22,113, 28, 16,134,138,131,189,231, 72, 44,135,187,207,120,188,189,141,142, 20,237,118,202,235,175, -189,201, 15,254,246,175,185,117,235, 58,113, 18, 99,165, 70,203,136,139,155,107,108, 63,124, 68, 85,148, 44,173, 44, 17, 4,154, -163,189, 35, 66,169,184,176,121,145,219,111,125,137, 43, 91,155,140,198, 99,138,170,244,118,157, 5, 33,199,219,239,124,137, 55, -222,122,135,247, 63,252, 25,134,250, 96,163, 4,189,254, 41,101,153,145,229,147,217,131, 42, 12, 67,180,210, 51, 34,155,212, 17, - 82, 88,218,237,174, 87,177, 10,216,216,220,228,105,239,132, 76, 9,202,178,172, 11,186,241,147,143, 95, 1, 2,241,210,120, 93, -193,217,216, 86,225, 60, 55,121, 42,146, 11, 20, 65,224,139,122, 28,199,196,113, 60, 47,234, 98,142, 67,244,156,102,141,146,126, - 26, 19, 4,170,238,210,107,177,143, 84,222,150,226, 28,119, 62,120,159,191,250, 31,254, 61,210, 86, 60,217,126,194,230,250, 38, -206, 24,242,162,162,209, 72,185,120,249, 10,101, 89,242,224,254, 61,210, 36,161,179,180, 76,167,221,161,114,146,147, 81,193,179, -189, 83, 42, 39, 8,181,164, 18, 1, 97, 34,105, 68, 9,173,102, 74,239,248, 16,169, 20,121,150, 49, 30,143, 65, 5, 44,119, 27, -216,108,194,201,233, 62,114,164,168,210, 6, 43,221,101, 70,101,197,222,238, 49,205,182, 33, 74, 83, 90,107,155, 68,113, 66,160, - 4,163, 65, 73, 89,140, 72, 66, 69,178,210, 37, 31, 79,104, 55, 98,114, 11,215,174, 94, 68,105,201,241,225, 1,105,179, 67,154, - 68, 28, 29, 30,179,187,251,156, 48, 9, 89,219, 90,167, 40, 75, 44, 6, 25,104, 46, 93,190, 72,179,209,161,127,114,196,189,251, -119, 56, 18,134, 64,223, 98, 99,115,139,206,202, 26, 65,210,224,210,210, 42, 69, 89,130,148,152,178,182, 69,105,197,104, 48, 32, -110, 52,104, 52,155,168, 64, 35, 8, 72, 26, 13,168, 96, 50,201,153,148, 57, 79,182,119, 60,120, 39,105,160, 36,152,202,160,180, - 36, 76, 98,226,102,138, 12, 3,108, 94,144,180,219, 88, 91,177,180,177,194,175,255,230,215,185,243,217, 61, 30, 63,122,198, 55, -222,249, 2, 73, 24,145,151,158,113, 62, 56,233, 83, 72,136,165,170, 71,163,117,188,103, 32,102,113,204,206,248,122,108,133,160, -168, 96, 50,176,132,169, 67, 5, 22, 41, 43, 66, 93, 18,168,202,167,158,205, 82, 25,189,210, 93,214, 44, 5, 91,153, 89,145,146, - 82,227, 68, 13,158,241,246, 25, 48,118,186, 88,245, 1,165,214, 7, 4,137,170,244,215, 45, 4, 81, 32, 17,149,197,230, 5, 85, -105, 25, 77, 20,140, 19,154,113, 68, 20, 4, 56, 41,169,132,160,148,245,238, 83, 41,162, 56, 38,106, 55,105, 44,117,104, 44,183, - 9, 59, 77,136, 53, 4,126,178, 80, 19,115,230, 22, 77, 33, 61, 41, 79,105, 42,227, 47,208,206,250, 41,133, 49, 22,172,100, 56, -200, 24,246,115, 84,220, 33,208,154,116,169,139,140, 52,149,169, 40,243, 9,206, 89,226,102, 74, 16, 70,132,129, 38,219, 45, 17, - 66, 35,132,242,222,101,165, 81, 81, 68,216,104, 80, 42, 63, 77,213, 18,159,210,166,252, 74, 78,135,161,159,224, 77,157, 74,110, - 14,127, 49,214, 71,232, 58,103, 22,108, 92,204,162, 63,167,129, 95,170, 70,212, 6,225,162, 31,221, 39,255,105, 37,208,122,250, -177,231,247,228, 98, 46,168, 93,224,159,136, 51, 2,107,249,202,174,253,165, 29,188, 88, 8,123,161, 94,221,212, 69, 94,188,244, - 32,176, 72, 58, 21,103, 9,112,181,161,119, 58, 70, 23, 47, 17,205,205,222,119,222, 75,190, 8,233,226,252,161, 68,188, 56,124, - 23,110,118,253,211,245, 65,171,114, 53,246,188, 22,206, 77, 39, 36,150,169, 45,180,110,106, 4,232, 51, 29,246,130,128,109, 17, - 4, 48,199,124,206, 95, 78,137,111,179,127, 95, 16, 28,200,185,212,111,238,189,155,243, 66,206, 64, 97,196, 44,243,110, 33,118, -206,206,199, 32,103,138,254,140, 57,204,194,110,223,158,217,243,159,193,208, 10, 63,126,183,214,120,104, 71, 16,210,106,117,120, -252,240, 33, 77, 45, 41,141,143, 25,172,156,227,180,223,103, 57,109,211,109, 54,185,122,249, 6,210, 5, 8,165, 41,243, 33, 74, -107,172,149,148,110,194, 23,191,244, 21, 14,119,119,200,199, 19,126,237,215,190,194, 95,127,247,123, 62, 78, 48, 80,126,239,165, - 35, 34,173,160, 42,113,178, 98,216, 47,232, 92,232,146, 52, 90,244,135, 61,246, 14,246,105,180, 52,151, 47, 94,229,227,143,222, - 35,159,244,177, 42,100,127,111,143, 63,248,195, 63,224,161,187,207,246,246, 51, 46,221, 90,225,193,163, 71, 92,217,186,192,201, -233, 41, 2, 57, 19,174, 56, 33, 81, 82,179,190,121,129,175,254,250,111,243,127,251,127,252, 95,253,154, 65, 88,156,112,148,166, -224,116,112, 74,191,223, 35,203, 38,140, 70, 67,146, 52,198,216,178,126,178, 76,159,212, 1,215,175, 93,231,248,244, 20,235, 28, -105, 43,165, 43, 43,150,187, 75, 88,155, 47, 8, 58, 62,127,167,254, 42,184,194,226, 19,255,188,208,206,143,223, 64, 73,191,107, -155,226, 35,167,157,186, 82,231, 59,245, 41,120,197,255,205,195,122, 63, 55,219,165,214,143,169, 34,207,249,206,183,190,201,253, -207, 62,101,109,101,149,222,225, 41,167,167, 61,150,150,150, 64, 74, 84, 24,146,180,218, 68,198,176,186,190, 69, 89, 20,132, 81, -192,202,250, 26, 79,159, 62, 33, 72, 91, 36,173, 22, 31,221,125,192, 82,167, 77,154,198,180,151, 58, 92,188,124,157, 36,241, 46, -131, 98, 50,198, 20, 5,197,112, 72, 97, 44,151,174, 93,129,229,148,251,119, 62,161, 21, 37,148,165,161,189,190, 70,123,109,139, -211, 97, 70,218, 89,161, 40, 74,238,125,246, 25,202,148, 44,119,189,152, 9, 87,145,101, 57,177, 80, 56, 83,176,253,232, 62, 23, -174, 94, 37,141, 3,182, 46,108,114,241,210, 5,180,200,113,197,132,126,127,192,238,222, 33,235,197, 38,227,241,152, 56, 74, 9, - 59,109,242,201,144,225,201,136, 78, 51,229,159,252,233, 63,230,249,225, 51, 14,118,247,184,114,233, 50,198, 88,242,178,100,148, -149,148, 66,179,185,185,229, 85,183,166,100, 52, 24, 80, 86, 21,205,118, 27,180,244,227, 87, 5, 84,194,199,225, 42,133,177, 21, -173,102,139,141,245, 13,142,142, 78,113,109, 67,154,132, 56,103,137,146,136, 48,137,168, 76,129, 18, 49, 81,179,129, 19,154,193, -233, 17, 34, 8,144,137,230,202,173,107, 8, 29, 32, 31, 62,227,107, 95,124,155,254,104,132, 17, 48, 24,143, 25, 85, 5,177,212, - 24,107, 80,224,221, 38, 82, 64,101,169, 92,229,249, 8,190,246, 97,149,102, 84, 89,118,142,114,194, 72,160,149, 37,210, 5,186, - 78,219, 82, 74,215, 8,217,202, 23,111,103,234, 11,171,173,181,115, 10,171,236,172,123,155,131,139,106,182,185,245,159,235,108, -137, 45,115,132,169,144, 88,164,208, 72,225,208, 26,180, 10, 80,194,239,243, 51, 59,166,156, 76,136,202,192,139,193,116, 64, 20, - 69,196, 81, 64,179,211,166,209,106,162,154, 41, 65,167,137, 77, 67, 74,109, 81, 84, 40, 35,137,234, 24, 90,175,221,149,179, 98, -101, 17,179, 32, 43,159,137,173,113,214,224,140,227,244,164,199, 47,126,250, 49,151, 46,221,192, 88, 69,220, 74, 9, 27,113,205, - 47, 23, 12,250, 61,154,173, 6,105,171, 65, 16,132, 20,227,140,210, 90,194, 36, 98,208, 31, 82,149,126, 10, 18, 38, 9, 58,138, - 49,182,168,159,123,202, 31,156,181, 68, 26,229, 15, 63, 2, 31, 40, 51, 75, 17,243,205,130, 49,198, 51,231, 23, 58, 79,223,185, -215, 9,158,106,110, 87, 11, 3,229, 5,190,129, 38,212, 1, 65,232,167, 5, 74,122, 43,179,172,199,239, 44,212, 4, 87,103, 52, -156,189,182,139, 89, 97,151,126,180,240, 75, 60,224,110,225, 90, 48, 63, 42, 56,177,168,149,175,197,105,246, 28,192, 76,156,231, -156, 48,207, 16, 57, 83,187,120,165,242,125, 86,192, 61, 16,161,126,125, 97,114, 89, 7,164,185, 58,179,221,205,110,103,113,215, - 66, 72,127, 31, 41,233,187,111,159, 33,236, 15,123, 53,167,223,152,122, 37,226,188, 22, 46,152, 93, 43, 5,218,123, 58,197, 28, -224, 34,230, 95,248, 60, 57,103, 58, 74,159,223, 17,211, 61,185,156,167,244, 44,118,246,159, 19, 34, 47,220, 75,252,200,130, 5, - 19,130,152, 5,201,204, 79, 52,110,102, 97, 19,103,148,206,115,165,188,168,249,245, 66,206, 15, 22,254,180,234, 99, 43,117, 24, -209,105,119,120,114,255, 57, 65, 51,101,216, 59,225,230,173,107, 60,186,255,148,163,231, 21,237,246, 42,173,230, 42,229,184,224, -248,232,136, 75, 87,175,208,127,250,156,172, 40, 41,171,138, 15, 62,186,131, 51, 19,126,239,119,190,202,123, 63,253, 91, 78, 14, -119,209, 65, 68, 24, 53,216,123,126,192,106,119,157,201,104, 72, 24, 41,156,240,233, 64,167,131, 62, 75,171,203,220,188,182,201, -246,227,231,140,135,240,229, 47,127,149,131,189,199, 20, 69,204,218,198, 69,126,246,225,251,252,229, 95,252, 37, 95,249,226,187, -168,231,123, 36, 73,196,151,191,248, 54, 97,160,120,250,228, 96,118,178, 11,149,154, 77, 58,132,208, 12, 70, 99,138,194,251,108, -165,246,227,117, 41,253, 62, 70, 41,205,112, 60,166,127,122,204,131,227, 83,159, 45, 45,165,143,110,180, 14,165, 35, 46, 92,220, - 66,217,156,246, 82,151,178, 44, 72,180, 34, 73, 90,244,199,249,194, 88,234,124, 66,222,175,188, 94, 58,195, 46,118,245,105,243, - 76, 72, 65,253,115,106, 29,248, 81,252, 20, 25, 89, 71, 57, 42, 33, 23, 58,117, 47,154,145,136,217, 58, 1, 4,166, 22, 88,149, - 89,198,207,126,242, 67,178,225,128, 34,155, 48,234,247,248,250,215,191,202,206,211,231,168, 48, 32,142, 98,148, 14, 41,139,138, - 60,203,209, 58, 68, 34,137,146,136,194, 24,130, 56,101,253,194,101,180, 20,172,174, 95,192, 85, 5, 72, 65,107,169,203,165, 91, -175,243,217, 71, 31,113,184,183, 71, 35,138, 61, 22,212, 57,242, 73, 65, 20, 38, 28,156, 30, 48, 41, 42,182, 86,219,148, 69, 69, - 16, 69, 92,184,124,153,180,149,115,114,124,132, 51, 5, 85, 57, 97,247,241, 61,154, 73,200,234,242, 18,171,203,109,112,150, 81, - 86, 18, 6, 49, 82,107,158,237,238,113, 33,140, 41,138,202,171,197,235,206,110,125, 99,131, 86,187, 75, 24, 40,178,241, 8, 97, - 33,104,132,132, 81, 76, 16, 87,156,238, 31,145,166, 49, 43,221, 22,141, 56, 66,235,152,194,192,225,193, 51,130, 40,100,171,217, - 33,203,114,130,154,121,189,124, 97, 11,234, 2,146,149, 5, 78,248,192, 19, 33, 3, 28, 5, 58,140,104,119,150, 56, 29, 14,184, -124,229, 26, 81,152,128,169, 8,149, 35, 8, 3, 84,168,153, 20,133,207,214,174, 59,227, 36,109, 16,135,161, 15, 38, 65, 96,109, -201,214,214, 26, 69,150,147,156,142,184,121,101,139,131, 81,143, 86,187, 73,255,224,148, 86, 8,161,177,132, 2, 74, 3, 82,251, -149,204,148, 67, 46,173,163,172,252,197, 55, 8, 52,187,147, 2,121, 82,112, 43,136,104, 20, 25,149,148,148, 50, 64,169, 10, 99, -100,221,103,212,249,108,114,118, 53,192,154,202,239,197,149,242,133, 97,250,252,193,147,209, 76, 29,136,129, 53, 56, 83, 33,173, -169,175,103, 6, 48,126, 20, 45,124,175, 22,196, 65, 93,140, 21, 78, 7, 88, 29,226,194, 24,151,196,184, 36,194,180, 82,138, 70, - 72,210,136,169, 2,137,243, 51, 52,108,229, 39, 18, 30,194,101, 33,168,215, 97,181, 32, 76, 34,189,181,206, 24,172, 48, 40,161, - 48,149,160,223,155,112,231,147,123, 76, 70, 19,118, 30, 63, 1, 21,114,225,181,155, 52,194, 16,180,160,168, 74,114, 83,178,186, -182, 69,146, 54,253,202,173, 63,192, 56, 8,162,136, 98,114,136,169,140,159,170,164, 41, 58, 12,168, 10, 83,115,217,253,104,219, -107, 87,188, 7,222, 85,114, 22,119,108, 0,171,234,209,187,240, 35,231,178, 44,189,255,189, 46, 92, 82, 42, 2,237,115,232, 3, -188, 22, 70,235, 41,250, 53,240, 98,185,186, 83,247,152,117,231, 57, 40, 11,226,184,105, 24,151, 56,195,255,158, 23,244, 57,128, - 74,206,248,239,211, 86,146, 87, 94,151,196, 28, 39,238,196, 25,103,204, 66,250, 41,103,153,101,231, 49,228,245,105,195,250, 78, - 93, 50, 77,140,115, 51, 77,216,244,237, 69,158,187,123, 1, 50,195,172,120, 91, 55,133,121, 89,255,120,115,182,206,177, 48,126, - 61,228,230, 36, 60,127, 61, 12,252,180,162, 50, 84, 37,243,144, 34,166,214, 63,135,146,146, 80, 9, 66,237, 15,102,122,186,179, - 88, 12,213, 88,180,158,137,115,112,152,197, 78, 93, 45,158,168, 16, 47, 13,148, 95,204,184,158,142, 86,206,135,130,156, 63,125, -201, 51,197,222,157,155, 22,136,179,136, 25,113,230, 79, 80, 95, 96,124, 28,157, 56, 23, 0, 51,152,228,148,198,208,136, 21,105, - 2, 5,150,193,209, 51,198, 39,151,112, 34, 34, 89, 89,161,127,116,204,143,190,251, 35,190,252,206, 23, 81, 58,166,127,124,192, -241,193, 46,105, 28,242, 39,255,240, 31,241,139, 95,220,225,238,253, 15,113,161,100, 48, 58, 70,218,138,108, 0, 97,103,137,170, - 60,160,204, 75,182, 31,223,167,179,190, 68,111, 48, 68, 11, 65,110, 42,174,221,188,201,206,147,123,100,195, 62,195,227, 9,253, -107,215, 89,191,120,153,229,205,101,222,127,255,125,162,180,129, 53,134,103,123, 7,172,109,108,114,114,124, 64,255,201, 67,190, -252, 79,254, 25,223,255,219,111,251, 83, 49,176,212, 72,137,131,136,222,160, 32, 77, 26,140,178, 9,227, 81, 15,137,247,176, 98, - 5, 43, 75,171, 92,216,220,228,240, 96,143,178,172, 48, 69, 78,225,188, 96,199, 73, 1,165,244,204,103,161, 89, 93, 94,102,180, -247, 12,165, 52,229,120,136,156, 12, 9,211, 37,191,175,153,121, 37,197, 47,237,200,207, 40, 61, 92, 29, 96,120,198,115, 50, 79, -203, 67,137, 89, 58,223,116,164, 38,229,130, 88, 72,212,209,153,206,191, 95, 10,137,181, 14, 41, 61, 30,212, 63, 33, 61,215,221, - 90,139, 69, 32, 76,197,179,237,199,236, 63,125, 66, 35,142,216, 88, 95,231,228,248,132,193,160,199,218,198, 26,227,162, 36, 73, - 83, 86,150,150,209, 74,114, 58, 62,166,200, 38,164, 62,174,143,194, 56,218,157,101,164, 12, 25,143, 71, 44, 45,173,224, 92, 69, -101, 45, 91, 23,175, 96, 92,128, 49,142, 32,208,244, 6,167,236,238,238,241,165, 47,127,153,214, 74,204,254,209,144, 73,230,248, -226,151,127,147, 70,179,129, 10,148, 31,139, 22,150,201,100,194,206,147,199,220,186,126, 25,157,180,217,125,182,195, 94,191,207, -112, 48, 70,218, 18,169, 20,163, 73,201,230,133, 54, 81,220, 0, 33, 24,143, 51,154,173, 22, 81, 28, 18, 4, 13,202,124,194,225, -254, 46, 85,149, 83,101,150, 78,186, 10,194,145,143, 39,232, 52,165,177,180, 76, 24, 69,140,122, 39, 84,195,156, 70, 20, 83, 88, - 1, 82, 19,183, 87, 88, 93, 93, 35,144, 37,174,204,124, 40,147,138, 40,203,138, 48, 8, 61,158, 83,105,178,113, 78, 67,199, 96, -253,223,187,114,128, 82, 52, 26,109,122,163, 12,227, 74,150,151,186, 68,162,194, 58, 8,147, 38, 97, 75,145, 23,185,183, 75, 9, - 40, 50, 47,176, 19,198,161,141, 36, 63, 29,240,236,217, 14, 81, 28,211,108, 42,214, 86,154,132,166,162, 28,103, 76,172,227, 20, -139, 22,144,214,118, 25,105, 44,186,126, 8,104, 41,105,200,136,113, 89,160,140,223, 13,143,100,192, 39, 39, 5,141, 68,208, 81, - 2, 43, 11,170,192, 98,116,133, 81,202, 91,216,170,122, 7,138,245, 83,189,217,174,212,249,145,183, 3, 39, 37,216,250, 96,235, -188,120,206,217,218, 31, 44, 36, 96,234, 93,118, 9,149,103, 31, 56,225, 53, 39, 82, 56, 4, 26, 29, 40, 47, 6, 75, 19,194, 48, - 38,138, 35,210,102, 66,156,132,196,145, 38,144, 2, 79,129,119, 4,245, 70,212, 24,131, 12, 66, 68,160,106, 33,175, 4,148,143, -151,182,126, 79,154, 23, 25, 74,131, 51,138,108, 2,247,239, 60, 5, 35,233, 54,189,216,242,249,246, 99,142,118,159, 80, 86, 35, - 86,175, 94,246, 95, 51, 12, 73,219, 29,162, 56, 65, 43,141, 80, 39,136, 64,163,170,128,178,168,136, 26, 9,113,187, 73,208, 72, -252, 69, 95, 5, 40, 25, 96,164, 67, 40,141, 86, 1,129,182,181, 69,145,217,120,220, 89,208, 82, 96,167,241,203,248,200,228,162, -244, 25, 20,254, 33,226,239,111, 29,120, 4,174,148,222,162, 26,106, 61, 47,236,129,246,211, 0, 33,144, 88, 95,220,229,212, 22, - 93, 71,123, 59,127,221,246, 53,184,246,208, 79,173, 92,181,143,221,223, 95,117,179,105,229, 12, 21,251,242, 70,194,175,254,166, - 25,230,110, 97,140, 62, 21,179, 45,238,169,207,162,200,167,242,182,105,100,153,173, 3,109,106,131, 92,173,205,120,217,232,125, - 6,145, 57,131,118,245, 69,124,246,118, 93,204,253, 36,198,212, 24, 94, 63,149,153,254, 64, 94,115,164,168,194,160,214, 55,128, - 40,235,201,147,155, 10, 26, 33, 16,130, 64, 73,180,114,115, 82,159,170, 71, 27,174,246, 62,139, 51,133,218,157,139, 59, 60,187, -115,144,175, 82,175,191,162, 88,191,138,192,243,249, 69,226,101, 74, 71, 94, 80,199,191,138, 74, 54, 63, 72, 56, 6,189, 83, 54, -215, 55, 56,122,124, 15,107,160,217,142, 57,232, 29, 19, 69, 1, 73,179,129, 52,134, 70,156,178,190,113,129,227,254,136,160, 25, - 32,117,201,181, 43,151,249,228,227,247,185,119,239, 51,194, 80, 51, 24, 12, 25, 14,114,118,158, 30,146,234, 54,163, 81, 73,208, -245,126,242, 40,214,228,249,144,229,238, 21, 30,220,255,140, 52, 78,104,139, 22, 61, 42,108,149, 51, 26,158,144, 52, 86, 65, 88, -226,164, 65, 85,250,145, 91,146, 52,200,198, 19,118, 15, 14, 73,226, 6,227,124, 82,239, 2, 29, 7, 7,187, 8, 33, 8, 85, 64, - 81, 20,140, 71, 25,105,115,141,164,209,242,208, 92,227,159, 24, 66,105, 58, 75,203,172,172,174,177,178,188,194,201,193, 14,206, -230,100,249,144,126,127,136, 68, 82, 86, 85, 45,128,116, 40, 37,233, 38, 13,238,125,248, 83,142,159,238, 80, 28,239,209,137, 3, -186, 27,151, 48,166,250,143,136, 22, 92, 12,122,121, 53,101,233,165,182,143,250,129, 38,157,157,241, 15,172,169,144, 82, 97, 42, -139, 84,154,162, 50, 68, 74, 83, 89,135,113,240,244,233, 14, 91, 75,109,122,123, 59,116, 26, 17,195,129,240, 92,241,184,201,193, -176,160, 69, 76,187,213,164,217,110,145,118,154,236, 60,217, 97,144,141, 8, 66,141, 11, 3,194, 70,131, 36,105, 50, 26,142,113, - 42,100,117,163,131,115,150, 60, 31, 81, 20, 57,119,238, 63,100,117,169,203,155,239,124, 25,225, 42,238,220,249,140,145,145,220, -254,194,187,236, 62,223,231,238,221,123,220,186,121,139,180,179,194,193,209, 1,151, 47, 95, 98,255,233, 83, 78,250, 57, 87,174, - 92,167,213,108,240,236,233, 67, 20,150, 11,151,175,176,180,180,132, 16,146, 32, 10, 24,141, 70,152,114,204, 48,243, 4,182,102, - 20, 32,243,146, 82, 86, 8,215,160,202,188, 30, 98,115,115,139,211,147, 99,142, 14, 15,137,162, 49,205,182, 66, 58,199,100, 48, -164,177,212, 37, 74, 83, 38,147, 49,165,144,100,163, 17,163,113, 69,127, 92,178,127,220, 35, 77, 98,226,118,140,195,122,197,184, -149, 20,185,161, 24, 15, 17, 66, 18,167,169, 23,190,230, 99, 36, 62,211,189,118,185, 82, 20, 5,163,225, 0, 29, 70, 20,105, 66, -101, 10,164, 82, 4,177, 65,105,229,247,232,206, 81,150, 37,133,245, 12,116,237, 12, 65, 18,179,188,186,198,233,201, 9,163,209, -152, 70,218, 64, 9,216,126,248,152, 80,105,116,160,201, 42, 67,174, 4,185,242, 10,125, 53, 37, 69, 74, 15,138,210, 58,244, 0, -148,122, 15,218, 80,146,163, 28, 62,221,205,105,197, 13, 54,181,160, 85, 78, 80,129, 99,142,241,246,112, 38,191, 55,149,243,145, -160,195,143,250, 69, 61,206, 92,232,206,252, 20, 72,248,162, 98, 1, 35,252,129,203, 86,179,200, 44, 33,124,177, 11,180, 32, 12, - 21, 81, 20, 16, 39, 49, 73, 35, 34,142, 19,162, 56, 34, 74, 35,226,216,119,167, 50,144, 62,179, 91,207, 41,136, 74,123,111,253, - 52, 27,221,185,169, 63,219, 82,217,138,162,204,189, 88,185, 84,216,202,241,241, 71,159, 50, 26, 78, 88,238, 54, 17,206, 50,232, - 13,105, 45,181,121,184,243,132,231, 79,158,240,201,157,207,184,126,245, 6,155,171,107,232, 32, 36,106, 52, 16, 72, 76,253, 60, -234,245,122,132,113,132,142, 66,116, 28, 19,197,201,108,218,170,181,194,168,169,111,188,172, 21,233,243,176,144,233,116, 12, 64, - 89,111,123, 22,117,103,108,173,163, 42, 61, 47,131, 64,212, 17,217,190, 56,120,235,169, 71,191,234, 32,152,221,148,154,106,158, - 76, 61,226,247,195,148,153,109, 12,113,198,229, 52,237,204,229, 25,177,156,152,177, 81,196, 52,181,243,115,132, 62,194,113,230, -154,114,102, 35,124,134, 92,186, 80,128,237,194, 40,221,214,193, 82,114, 90,176,235,110, 90, 24,236,130, 8,248,236,141,121, 33, -183,110,214,149, 91, 99,234,135, 82, 93,204,173,239,206,109,101,176,198,107, 57,166,197, 94,212, 58,133,243,225, 45,214, 26,191, - 38,170, 65,113, 76, 1,113,117, 81,159,254, 13,245,204, 90,224,196, 92,132,198, 89,177,220,108,180,189, 48,126, 63,255, 49,175, -234,210, 95,134,202, 59,111,217,123, 85,125,127,245, 33, 65,252,202,135,130,197, 67, 71, 54, 30,113,249,173,215,121,182,180,196, -184, 63,164,159,231, 84,121,238,119,113, 90, 19, 80, 34, 84,136, 14,155,108,239,238,115,245,246, 10,101,101, 56,220,125,204,141, -235,215, 49,166,162,223, 31,242,235, 95,255,117,190,251,237, 31,210,105,109, 50, 62,205, 25, 13,199, 52,172, 87,139,142, 70, 61, -198,147, 33,249,184,143,194,103,195,223,255,228, 83,154,237,148, 56, 54, 52,218, 41,198,150,124,255,135,127, 67,218,217, 96,243, -210, 69,214, 86, 55, 56, 81, 39, 68, 81, 66, 24, 68,156,246,251,252,103,255,249, 63,227,191,254,255,252, 75, 78, 79,143, 25, 13, - 7,132,129,166, 40,115,170,202, 1,154, 56,136,216,188,112,145,231,187,207,176,117,184,142, 84, 33, 66, 5,156,246,250, 88, 83, - 50,234,239,163,117,137,149, 30, 86, 96, 77,173,120, 81, 14,235, 12,141, 52, 37, 9, 52,131,131,125,204,112, 64,224, 44, 54,155, -208, 59, 57,193, 44, 64,103,126,105, 40,193, 11, 97,193,245,147, 97, 97,167,126,126,253,114,126, 39,117,230,164,237, 28, 56,131, -116, 22, 45, 52,141, 70, 66, 24, 70, 12,198,185,231,238,135, 33,149,243, 29,212,233, 73,143, 70,179,193,131, 7,247,113,197,132, -213,213, 85,150,215, 54, 40, 12,124,122,231, 1, 84, 22, 29,197, 4, 81,194, 36, 43,216,191,251,144,118,183, 75, 51, 8, 73,211, -132,149,213, 85,210,164,193,112, 48, 98,148, 85,172,108, 46, 81, 22, 5,131, 65, 15, 29, 68,116,210, 38, 69,105, 72, 91, 13, 70, -165,101,208, 27,176,118,233, 38,239,126,227,247, 64, 72,130,230, 50, 46,136,105,183, 91,228,214,114,225,234,117,198,227,140,149, -245, 11,244,250, 3, 14,142,143, 89, 91, 89,162,180,130, 7,143, 31,243,149, 47, 47, 51,202, 43,250,189, 62,157,181,117,150, 87, - 47, 32,195, 30, 75,221, 22,137, 22, 80,140,177,229, 4, 35, 13, 70, 57,208, 33,147,178, 68, 7, 33,205,102,135,251, 15, 30,209, -234,116, 9,198, 99, 63,242,140, 99, 76,150,161,162,136,238,133,139,196,205, 38,207, 31, 61, 97,124,116,192,120, 52,193,148, 57, - 31,125,248,115,190,242,165, 47,160, 82, 63, 42, 21,206,119,196,214, 26,202,162, 32,199,144, 54,155,254,226, 37,180,247,144, 11, -234,216, 93,193,100, 52, 68,151, 37, 89,154,226, 76, 78,179,213,172,197,171, 22,155,103,200,180,129,114, 16, 40, 47,242,170,242, - 10, 83, 20, 52,151,151, 89, 91,223, 34,234, 13, 8,195,128,213,110,151,181,149, 46,186, 82, 12,141,101, 52, 26,147,105,205, 4, -137,113,165,143, 22,117, 62, 22,216, 88, 75,172, 5, 97, 32,125, 46,189,148, 36,165,143, 78, 61, 42,225,135, 79, 39,252,206,237, -132,200, 20,232,210,239,133, 69, 85,235, 52,172, 64,214, 28,243,169,240,118,234,160,153,141, 75, 23,217, 72, 82,162,235,137,144, -180, 2,225, 36,194, 42,148, 45, 61,200,198,121, 63,125, 24,248, 16,167, 56, 8,136,226,144, 56,209, 68,177, 34,138, 37, 97, 44, -137, 66, 65, 20,105, 15,243, 82,254,160, 33,213, 84,124,236,167, 78,174,246, 61,171,122,143, 46,240, 56, 86,191, 39, 45, 81, 72, -164, 9,248,217,123, 31, 49,232,143, 9,180,246,241,161,129, 34, 43, 42, 66, 44, 95,250,202,187,124,114,239, 30,149,117, 60,158, - 84,220,184,117,155, 40,137,145, 81, 4, 22,132, 86, 4, 97, 72, 81,248,245, 81,144, 36,168, 40, 34,105, 36,160,235,144, 21,173, - 49,218, 80, 85,245,235,198,160,181, 94,128, 61,205, 93, 75, 65, 93,164,202,202, 7,163,212,126,183,186, 0,214,235, 48,225,187, -122,173,228,140,231, 62,181,171,170, 64,123, 50,233,108, 10,238,230, 73,160, 44,230, 59,112,102,151, 62, 77,174,155,114, 82,168, -173,210,179,209,252,185,209,251,171,136,110,231, 27,135, 23,197,110, 62, 24,224, 76,183,109, 23, 82,212,172,245, 29,117,101, 16, -162,244, 26,136, 5,229,188, 59,167, 51,152,119,231,117, 81, 55,115, 75, 32,245,116,209,152, 10,103, 12,198, 84,190,160, 87, 21, -166, 42,113, 85,229,175,125,216,154,230, 58,229, 47,216,217, 4, 64, 72, 80,181,214, 65, 9,225, 5,136, 74,212, 98,196,105, 81, -175,187,242, 41, 11, 88,158,233,190, 95,236,136,231, 99,122, 94,180,162,157,243,148,159,217, 80, 76, 79, 50,128, 19,238,151,198, -212, 9,241,170,130,206, 47,133,231,159,183, 62, 8, 1,101,145,163,164, 98,125,125,147,201,112, 64,156,229,244,198, 71,236,239, - 61, 7, 29,243,193, 47,126,192,181, 75, 87, 25, 76, 96,125,235, 34,227, 73,206,201,222, 33, 46,159,208,108,166, 52, 5, 84,197, -132,189,103,125,222,184,245, 6,151, 54,183,248,206, 95,125,143, 32, 40,125,220,233,120,204,202, 70,135, 36,109,113,120,184,207, -133,205, 77,142,247, 79, 89,233,118, 48,194,144,196, 9,163,188, 79, 16, 69,196,137, 87,169, 74, 36,207,119,118, 57, 58, 62,226, - 31,254,195, 63,230, 47,190,249, 77, 42, 99,248,203,111,125,139,102,171,205,243,231,207,168,172,167, 5,205,125, 31,138, 48, 73, -185,112,105,139,127,253,223,253,171, 90, 83,160, 80,129,143, 93,109,181, 90,180, 91, 9,217,222, 93,130,192,208, 94,110, 83,238, -142,188,223,209,249,145, 23, 50, 96,237,194, 6,107,107,171, 72,103,104, 53, 35, 42, 49, 33, 10, 52,167,163, 30, 85,104,124,214, -240, 52,221,232, 87,140, 21,156,133, 23,138,179, 73,247, 47,211, 85, 44,138, 67,166,153,192,181,153, 24,101, 45,167,199, 71,236, -236, 60,245, 99,193, 32,160, 40,161,179,180,204,214,165, 75,188,241,214,219, 62,255, 57,207,168,138,156,221,131, 19,174, 95,191, -198,202,214, 5,250,189, 19,150,186, 29,254,249, 63,249, 83,170,202,178,189,189,195, 40,115,132,113,147,166,136, 40, 75, 75, 81, - 58, 86,214,151,105,117,214,121,246,100,155,211,147, 99, 90,157, 46, 40, 73, 16,199,172, 55, 82,138,124,130,196,178, 20,197,228, -121,193,147,157,103,172,172,174,145,180,187,244,199, 57, 65,224, 15, 81,183,223,124,139,211,211, 83,150,150,186, 76, 70, 99,130, - 40,101,169,219,101, 37,203, 57, 62, 62, 66, 6, 1, 95,120,231, 29,154,205, 38, 59,207,247,217,220,218,226,100, 48,100,148,229, -180, 27, 41,101, 81,208, 27, 14,233, 94,186, 72,162, 59,148,147, 17,227, 81,143,192, 26,132,179, 24, 43, 40,138,146, 40, 86,124, -241,221, 47,123,244,105, 81, 82, 20,165, 47, 70, 74, 83, 24, 67, 8,132, 73,131,229,245, 77,156,211, 4,199,254,112,230,172,225, -251,127,251, 93,222,124,253, 38,151, 46,108,208,237, 6, 96,253, 46,174,176, 57,217,184,162, 52, 21,221,181,245, 90,147, 35, 8, -194,152,178, 40,235,100,185, 17,167,207,159,161,176, 44,117,219,132,129,198,153,146,170,168,144, 74, 99, 6, 6, 25, 68, 68,141, - 20,146, 8, 59, 26, 99,198, 35,170,210,162,155, 45, 26, 34,192, 85, 37,175,191,246, 26,223,248,250,215,248,151,127,254, 45,159, -253, 13,100,198, 48,112,142,134,214, 84,194,225,140, 35,116, 94,124,133, 16, 4,129,196, 85,254,241,212,144,142,134, 18,244,173, - 96, 55,119,252,244,193, 9,191,123,179,141,214, 32, 75,131,148, 37,170, 18, 4, 90,225,106,186,227,153, 53,158,245, 9,133, 98, -166,243,144,136,160, 46,100, 90,161,132, 67, 82,121,244, 44, 6,237, 74,168, 25, 16, 74,130, 86,138, 56, 10,136, 2, 47,254, 10, - 67, 73, 24, 10,130,208,161,180, 65, 40,239,123, 23, 74,227,164, 67,105,129,212,210, 11,249,166,231, 11, 37,253,161,193,249,233, -128,197, 97,156,193, 84, 21,210,249,245,217, 79,127,242, 1,207,118, 14,232,118,150,137,227,144,202,148, 24, 87,146, 52, 35, 90, -221, 6, 50,208,124,125,233,171,252,224,123, 63, 96,116,210, 35, 31, 79, 72,211, 20, 17,104,202,162, 34,140,252,152,221, 58,139, - 12, 52,113,179, 65,208,108, 16,165, 49,165,117, 62, 75, 92,213, 25,241,211,155,241,169,105, 8, 47,160,243,156,145,250, 80, 34, -124,188,173,150, 30,221,172,165,196, 5,218,227,122,181, 34,168,129, 53, 94,220, 42,209,218, 23,118,169, 37, 82,123,205,140, 82, - 98, 38,138, 22,152,185,152,122,186,176, 63,207,131, 19, 11, 81,219,115, 5,183, 31,199,159, 19, 90,191,106, 10,248,170,105,160, -155, 42,212,167,187,252,197,127, 59,167, 13,246, 88, 90,129, 16, 85,125, 40,147, 62,177,212,169,133, 32,178, 41, 3,127,225, 96, - 48, 61, 36,212,226, 66, 99, 13, 24, 55, 27,181, 27, 83,249,110,221,248,195,156,169, 12,148, 37,206,150, 62, 54, 24, 55, 59, 40, -201, 25, 96,199,206,173,236,210,175, 2, 2,237, 51,234, 67, 45, 9, 3, 93, 3,189,106,161,196,244,162, 43,207,248,201, 95,236, -162,207,236,221, 95,209, 77,191,204,143,126,102,215, 80,255,209, 94,149,108,243, 50, 47,251, 47, 43,220,191,108,116, 47,234,108, -237,254,112,128,142, 98, 63, 66, 20,150,245,110,202,195,187,119,249, 71,255,249, 63, 39, 54, 99,170,113,134, 29,143, 89,238, 54, -185,191,253,132,219, 87, 46,114,255,211, 79,217,218,186, 72,144,196, 40,229, 24,244, 78,120,120,247, 14, 31, 72, 77,153,151, 24, - 10,164,128,162,200, 57,220, 63, 34, 78, 37,198, 90,222,121,251, 58,249,112,140,138, 82,134, 89,129, 10, 19,214,150,150, 40, 77, -197,165,203,215,232,247, 74, 46,110,172,115, 55, 73,168,218, 29,172,245, 33, 45,111,189,253, 5,218,173, 14,161,214,220,185,123, -159,202, 88, 12, 83,251,136, 36,140, 34,190,240,246, 59, 36, 73,196,195,251,159, 81, 7,224,145, 38, 13, 47,252,210,138, 72, 75, -250,131, 35,132,203, 57, 29, 15,169,240,136, 73,132,195, 42, 65, 37, 4,237,110,155,193,224,148,163,195, 61,180,114, 52,151, 91, -180,187, 45,118, 75, 73, 89, 12,126,245,238,252,204,201, 88,188,152,170,244, 57,211,152,243,227, 51, 91, 91,121,138,124,196, 47, -222,251, 33,119,239,124,198,229, 43,151,136,226,132,202, 74,118,247,158, 49,202, 38,164,173, 22,171, 43,171,100,163, 33,163,222, - 41, 23,182, 46,210, 93,187,192,243,253, 67, 58,205,152, 43, 23, 47, 16, 74, 11,213,152,165, 36, 96,119,247, 0,235,250,188,241, -214,155, 52, 90, 45,172,117, 68,113,196,209,225, 9, 56, 71,146, 68,196, 81, 72, 24,199, 52, 26, 41,197,100, 76, 26, 74,138, 60, - 7,103, 72,226,144,235,215,174,121,114, 83,145, 19, 5,138,108,212, 67,235, 0, 97, 43, 4,142, 44,203,232, 46,117,177, 78,240, -124,255,128, 36,142,184,120,249, 34,195,222, 9, 81,148,178,188,178,130,117,142, 86,167,203,181, 27, 55,249,171,191,248,119,148, -197,132, 86,187, 77,254,188, 32,203, 11,110, 94,191, 74,103,105,149,160,145, 80,101, 99, 79, 60, 19, 62, 97, 48,136, 82,132,130, -170,202, 17, 82, 51,232, 15, 72,148, 66,100, 25, 50, 10,177,149, 69, 37, 17, 73, 35,101,121,165, 75, 20, 5, 52,210,152,178, 40, - 88,238, 52,176, 56, 14, 79, 6,140,243,130,141,181, 53, 2, 21, 34,180, 35,159,140,233,198, 77,156, 21,168, 40, 36,108, 8,168, - 10,130, 34,163,152, 76, 88,106,183, 24, 13,250, 12, 78, 79, 72, 67,141, 41, 27,200, 88, 82,228, 37, 86,106,164,142, 48, 69, 73, -160,106,145,106,160,208,173, 38,167,123, 71,148, 90,179,122,229, 42, 54,159,160,142,246,185,120,233, 2,171, 43,203, 60, 59,221, - 70, 1, 74, 43,242,162, 34,142, 21, 85, 29,233,156, 57, 75, 36, 5,165, 53,232, 64, 81,225,188, 22,160,128, 68, 10,148,147,228, - 88,246,134,134, 79, 30, 13,248,226,141,200, 59, 35,148, 65, 41, 79,217,242,151,126, 89,139,178,228,220, 98, 59,203, 26,156,107, -132,130, 40,156, 9,185, 2, 25,162,133, 67, 11,175, 88,199, 85,179,113,168, 18, 16,135,154, 64,123,171,145, 79, 29,147,168, 0, -148,118, 62,107, 93,129,172,187,107,111,113,211, 80, 3, 89,230,250,158, 26,111, 59, 77, 71, 67, 32,241,194,192,191,249,171,239, -113,116, 48,161,209,232,250, 36, 59,103,152,100, 19, 15,183, 17,138, 70,171,193,202,198, 58,135, 7, 71,188,254,198,235, 28, 31, -246,106, 6,187, 69, 7, 33,147,194,160,162,128,172,204,209, 90, 81,148, 37, 73,167, 77,212,105,163,194, 16, 91, 86, 53,217, 77, - 82, 77, 11,113,253, 50, 8,245, 44,197,110,234, 80,177,245, 30, 70, 27,139,214,138, 56, 8,192, 57,116, 37,107,141,154,156,119, -136,117,234,154, 84, 26,165,213, 76,193,173,180,242,123,250,217,200,219,205,252,247,240, 43,164, 46, 78, 39,200, 11, 32, 26,225, -206,174,114, 95, 54,249,155, 9,216,236, 66,136,203,172,171, 92, 24,199,187,249,132,112,234,103,119,214, 97,141, 31,149,207,103, -246, 94,235, 83,115,123,153, 99,225,235,143,159, 9,224,108,237, 18, 48,184, 90, 4,103,173,127,221, 84,181, 14,200,120,164,171, - 53,254,117, 83,143,226, 49,149,183, 87,138,249,130, 97,102, 29,159, 77, 4,188,232, 50,208,146, 32,144,196,129, 95, 7,133,245, - 1, 85,171,250, 1,231,189,110,231,130, 91, 22, 81,180, 51,117,252,124, 76,255,226,251,120,233, 56,229,204,222,194,186,153,183, -206,185, 95,214,113,139,115, 19,130, 23, 71,239,191,108,143,207,185,132,175,222,160,207,234,198, 6,247, 62,253, 0, 97, 75,150, -210,136,103, 59,199,156,158, 14, 56, 26,101,184,241,152, 36,214, 28,239, 63, 33, 82,150,195,253, 61, 86,150, 55,216,218,186,130, - 17,142,131,221, 93,150,151,154,228,227, 1,182, 52,228,249,132,102, 43,198,153,156, 72,107,164, 80,100,147, 18,165, 75,126,254, -139,159,243,238, 23,223,225,253, 79,238,226, 84, 74,233, 34, 94,187,241, 14,223,249,238, 95,176,188,186,238,125,194,195, 19,254, -244, 79,254, 49,159,222,187,203,221,187,159,113,243,214, 13,142, 15,143, 16,198,241,181,175,126,149,247,222,251,126,125, 0, 18, - 8, 97, 48,206,114,237,250, 85, 94,127,253, 54,166, 42,216,125,246,196, 23, 21, 1,227,209, 8, 41, 99, 34,173,104,198, 17,119, -142,246,161, 97, 57, 25,141, 40, 17, 8, 21, 34,176, 88,109,145, 56,222,184,253, 26,189,195, 67,242,193,128, 73,191,135,106, 4, - 68,233, 50,102, 80,242, 63,218,127,103, 60,157,162,142,228,180,152, 34,103, 50,236,129,201,201,199, 3, 86, 87,186,180, 91, 75, -220,123,188,195,127,245,255,254,255,178,186,177,206,210, 82,135,241,176,207,209,222,115, 94,187,253, 26,197,168,143,201,199, 28, - 12,142,233,247,142,105, 55,155, 68, 58, 32,142, 67,154,169,230,217,179,231,140,122,171,104, 81,177,191,127,232,199,147, 66,144, - 38, 1, 75,157, 22, 97, 26, 18,198, 33, 91,155,107,216, 34,231,244, 96,159, 65, 85, 80, 20, 5,217,100,140, 14, 34,111,253, 75, - 98,122, 7,187,132, 90, 18, 53,218, 56,103,104, 70, 33,121,158,209, 59,173,104,180,218, 52,219, 13,162, 32, 64, 58,203,250,234, - 42,237, 86,147,141,245, 85,126,244,163, 31,115,218,239, 35,181,230,246, 27, 95, 96, 50,158,112,229,218, 85,138,178, 32,155,140, -120,248,248, 17,113,160,216, 92, 95, 65, 43,137, 51,150, 48, 72,137,210, 6, 58, 12, 60, 88, 40, 9, 65,104, 68, 24, 81, 77, 38, -152,178,244, 57,227, 85,137, 16, 41, 42,212, 52, 59, 77,162, 72, 83,100, 99, 6,167,199, 76, 38, 57, 78, 64,119,105,141, 70,179, - 69,220, 88, 34, 76, 26, 68, 74,209,172, 42,191,134,146, 33,194,121,191,178, 19, 80, 85, 21, 75, 75, 93,218,141,148,245,213, 85, -134,131, 1,163, 81,143,124, 28, 83, 21, 3,116, 16,208,236, 46, 81, 21, 19,164,138,177,147, 9,227,211, 99,100, 28, 17,183, 90, - 52, 86, 87,232, 92,104, 32,157,162, 28,156,178, 30, 74,222,253,242,187,124,251,135, 63,229,254,147,231,148,214,160, 48,116,219, - 41,121,158, 97, 45, 4, 90, 83, 9, 5,198, 32,169, 72, 67,141, 82, 6,172, 67, 75, 69,130, 32,197,171,226,157, 20,236, 13, 12, - 15,183,143,185,125,125,131, 64, 43, 74, 81,162,107,151,132,146, 26, 91, 11,225,165,208,179, 73,228,244,129, 39,149,170, 65, 44, -114,150,235, 29, 77, 17,187,210,214,241,208,166, 78,127, 51, 4,181,194, 56,168,173, 70, 74, 75,212, 20,129, 26, 42, 84, 52,199, - 23,187,233, 46, 88,168,218, 70, 55,207, 6,151,106,161,219,172,139,135, 34,228,199, 63,252, 41,159,252,252, 51, 46,223,120, 19, -173, 67,140, 53,104, 21, 80, 26, 67, 81, 20, 4, 58,194, 58,207, 8, 88,221, 88, 99,231,249, 62, 50, 10,104,116,218, 76,178,156, -142,246,145,169, 42,140,252,193, 70, 43,168, 12,173,165, 37,226,102,115,182,151,158,238,203,167, 5, 93,107,133, 49, 10,231,206, - 22,245,169,247, 31, 32,212, 22, 27, 42,112, 26, 33, 29,101, 41,124,138,155,131,160, 70, 55,107,223, 37,122,237,192, 84,228,166, - 68,173, 13,154, 22, 77,137,116, 11, 45,177,251,149,182,121,231,180, 83, 98,158, 11,242, 42, 1,239, 34, 94,125,241, 99, 22, 10, -250,226, 78,125,246,117,236,180,203,174, 85,230,214, 46,152,227,170, 90,175, 1, 78,201, 51,121,238,211,251,202,213,170,118,107, -231, 47,125,241,174, 51,233,205,124,252, 62, 45,254,211, 3,128,173, 42, 31,172,229, 92,205, 8,240,135,186,153,133,109,161, 83, -151,194,239,208,163, 80, 19,133,190,160,123, 27,164, 69, 75,229,247, 80,194, 45,176,221, 95, 24,193,159,229,175,207, 10,171,112, - 47,121,255,203,133,115,179, 95, 94,248,157,150,125, 73,170,205,175,134, 2, 20,159,187,199,255,124, 60,169,227,248,228,132,141, -245, 53,150,150,151, 57, 26,247, 24,244,251,184,178,226,233,211,167, 92,188,113, 19, 57,238,115,180,179, 67, 18, 8,118,119,247, - 89,187,113,139, 52, 89,226,232,232,152,225,120, 88, 51,152, 53,141, 70, 76,145,229, 8,153,226,180, 38,155, 12,104,164, 41, 17, -146, 70,107,133,206,114,131,189,131,231,108,239, 60,225,237, 47,189,201,103,247,247, 24, 77, 44, 65,212,226,194,229,155,252,232, -199,239,113,249,194, 69,108,105,185,119,247, 30,203, 27,235,124,252,201, 71,188,246,250, 27,180, 90, 45,180, 84, 28, 28,236, 49, - 24,143,177, 66,205, 84,156, 73, 24,114, 97,115,131,245,245, 53,142, 14,247,201,179, 33, 96,105, 53,154, 40, 29,162,133, 36,141, - 35,178, 81,159, 34,207,232,219,146, 18,225,243,147,157, 66, 56, 9,210, 17,201,144,119,223,122,155, 39,247, 31, 64, 94,160,172, -165,119,114, 76,107,181, 69, 85,169,255, 17,107,186, 59, 23,147,235, 61, 27, 85, 89, 96,138,140,229, 78,147,241,112,192,221,207, -238, 16, 4, 17,221,181, 13,222,184,125,145, 91, 55,174,114,122,116, 72, 43,142,184,245,181, 95,163, 28,157,112,120,124,204,112, - 52,162,179,212, 37,138, 66,186,203,171,140, 70, 19, 6,217,144, 70, 34,104, 54, 36,167,199,207,201,198, 94,188, 37,144, 44, 45, - 45, 17, 71,138, 36,242, 17,187, 23, 46,110,250,241,160,176,116,154, 41,154,138,209,200,213, 99,232, 33,253, 94,143,178,213,160, -202, 39,148, 74, 98,138, 28, 99, 32,105, 52, 88,219,220,100,239,240,128,113, 54,161,217,110, 1,117,231, 34, 5,101,145,209,110, - 54,121,231,157,183,249,203,111,126, 11, 7,108, 93,184,194,165,102,147, 50,159,208, 78, 26, 44,119, 90, 44,183, 19,132,205,137, -146,148,188,168,216, 63, 56,226,194,133, 54, 82, 5, 53,198, 83, 80,148, 57, 89, 89, 16, 42, 77,163,219,229,232,249, 14,227,241, -152,102,183,227,225, 19,105, 2,161, 66,137,136,245,181,101, 26, 73,130,177,130,135,219, 79,107,205, 72, 74, 86, 90,140,203, 16, - 66, 33, 3, 77,216,236, 80, 21, 69,141,133,246,150,174, 48, 12,200,179, 9, 85, 94, 96, 77, 69,187,149, 34,241,135, 15, 29, 8, - 4,113,205, 54, 87,184, 42,247, 52, 44, 99,137,163, 16, 25,197,158,103,174, 67,108,233,208,205, 38,101, 57,225,181, 55, 94,231, -143,255,254,127,194,227,103,207,153, 20, 57,217, 96,136,150,146,147,145, 37,210,202,199, 10,215,158,237, 73, 81, 17, 42,233, 5, -110,206,163, 94, 35, 33,104, 82, 50,169, 28,198, 73, 10, 17,112,114,154,243,248,241, 1,183,111,111,160,165,166, 50, 22, 37, 42, -180,170,230,129, 82,138, 89,118, 4,117,242,159, 80,218,119,213,117,140,171, 20,222, 70,148, 68, 1, 97, 32,102, 22, 44, 91,149, -216,170, 32, 84,130, 40,208,190, 43, 85, 18, 33,157, 47,234,161, 70, 69, 33, 50, 8, 9,227, 8,165, 3,175,115,145,129, 15,131, - 49,245, 10, 75, 56,132,174,169,138,178,206,195,168,167, 5,223,251,206,119,217,254,236, 9, 43,157, 53,191,105,214,146, 64, 11, -138, 34, 35,138, 21,166, 42,145,194, 34,177,228,121,134,142, 19, 54, 46,109,209, 27,222,247, 59,116,173, 9,164, 36, 74, 82,138, - 40,242,142, 38, 28, 42,208,164,205, 38,141, 78, 27,165,213, 12,160, 98, 42,223,177, 7,129,158,121,158,167,215,233,233, 30,119, -218, 25, 2,136,208,250,162,239,141,110, 72, 41,252, 72,185,182, 27, 6,129,158, 69,171,106,173,231, 35,254, 26, 7, 45,101,125, -128,177,158,243,143,112, 51,110,191,120,229,220,238, 92,193, 22,231,220, 86,191,132,147,113,102,135,254,194, 40,158,179,227,251, -105,188,233, 66,109,242,138,116, 59,223, 18,224,237,104,194,152,179, 2, 54,103,107, 66,225, 52, 80,104, 94,224,103, 35,246,170, -238,198,157,183,223,250, 32,156,233, 1,162,222,151, 91, 51,155, 44, 76,187,123, 83, 25,202,178,162, 44, 61,234, 91,214,194, 56, -165, 60,220, 39,172,221, 5,186,190,175, 45,248,157,186, 82,117, 84,229,185, 52,180,105,152,188, 88,160,206,157, 9,116, 65,156, -217,113,139,115,129, 47,139, 59,245,133,251,205,175,134,237, 43,196, 87,231,146,217,120, 9, 32,224,243,199,237,226,115, 14, 5, -150, 44, 27, 99,170,138,141,205, 75,140,135, 3,134,123,143,145, 85,197,253,247,127,206,141,127,254, 95,240,248,199,223, 69,217, -146,201,160,226,242,230, 21,158, 29,157,242,251,191,243, 5, 6,123, 59, 24,161,176, 74, 82,149, 21,191,241, 27, 95,229,199,127, -251,183, 20,165, 38,140,187, 60,127,254,140,180,153, 66, 81, 50,113, 6, 55, 24,243,133,119,191,198,183,255,230,219,228, 54,224, -214,213, 27, 60,124,178,199,247,190,253,151,124,229,203, 95,230,218,230, 22,191,248,233, 79,249,254,253, 31, 48, 44, 11, 38, 31, - 58,214,183, 46,210, 94, 90, 38, 27, 13,121,253,141, 91,124,231,187,127, 67, 97, 42,156, 12,144,194, 17,227,184,208,214,132,118, - 66,163,217,224, 47,191,245, 77,160, 68, 41,197,106, 51, 38, 10, 91, 44, 95,121,147,183,222,126,135,163,199, 63, 33,112,134, 97, -169, 57, 24, 89,223, 57,184,137, 23, 5,161,105, 54, 86,184,178,117,137,111,125,247,187,140,178,138, 50, 47, 56,234,245,105,244, -115, 8,194, 87, 90, 14,207,167,172,189,188, 76,251, 7,166, 16,226,172, 40, 67,204,189,163, 78,204, 87,105, 30, 50,226,234, 68, - 56, 67, 41, 36,147,170, 64,138,130, 86, 8,187, 39, 37, 59, 7, 19,108,163,100,101,228,248, 79,255,201, 63,102,127,239,144,205, -110,151,110,224,120,244,240, 83,170,162,226,163, 15, 62,228,245, 47,125,137,214,114, 23,161, 3,138,170,226,249,147, 39,236,237, - 60,165,172,134, 52,147, 38,101, 54,164,223,239, 49,153,100, 68,113, 64,105, 70,116,219, 93,148,150, 52, 26, 77, 66, 29, 80,102, - 57,161,116, 88, 81, 34,165, 33, 73, 19,116, 20,114,114,122,194,209,209,152,103,207, 78, 88, 89, 90, 66, 10,193,225,241,177,191, -167, 78, 14,168,170, 9,203,171,235,148,198, 17, 41, 77, 49,201, 24, 22, 5,194,149, 52,211,136, 64, 24, 54, 55,214,120,243,157, -183,105,180,187, 4, 74,248,209,120,183, 77, 40, 21, 39, 71,123, 28, 29,101,172,175, 47, 17,167, 77,116, 36, 8,123, 19,146,102, -138, 19,206,223, 71,214,121, 79,191, 41, 40,198, 67,172,131,102,218,100,111,255, 57, 81, 18,250, 46,169,118,213,234, 32, 36,105, - 47, 97,117,202,157,187, 15, 24,151, 22,113, 58, 32, 31,246, 88, 95, 95,161,213,110,249, 61,106, 33,169,202, 33, 65, 20, 67,145, -205, 46, 46, 90, 75, 38,101,238,247,250,166,100,146, 21, 68, 73,131, 70,163,225, 71,214,129,166, 48, 37,142, 18, 33,193,102, 37, - 70,104,143,113, 45,114,100,172, 16,174,162,154,140,253, 78, 85,105, 26,145,228,183,191,242, 69,182,239,127,131,239,252,228,167, - 28, 71, 13,238, 62,126,142,171, 28, 65, 40,176,174,196, 73, 65,133,100, 82,130,116,190,219,141,235,136,222,208, 65, 44, 36, 90, - 24, 63,213,145, 96,156,228,228, 56,231,254,103,123,188,254,198,229,217,184,183, 40, 74, 63,221,192,161,148,239,126, 28, 21, 74, -106, 28, 83, 69,181,158,221,148,210,132,113, 76, 16,121, 59,150,214,194, 19,230,130, 8,103, 42,148,112,168, 58,164, 68, 43,233, -139,172,242,221,186,212,254,254, 86, 58, 64, 41,141, 12, 66,111,205,180,162, 86, 77, 27,112, 22, 77,224,239, 43,107,124,234, 89, -169,249,214,191,249, 75,158,109, 63,163, 42, 43,111, 75,139, 99,132,130, 48,116, 4,202,122, 70, 62,126,228,235,108, 70,158,157, - 82,212,161, 45, 91,151, 47,251,180,180,201, 24, 81,228,126,191,173, 21, 42,138, 16,194, 55, 31, 81,146, 16, 52, 18,207, 33,176, - 32,148,243,170,244,170,196, 24, 73, 16, 8,140,149,216,186, 83,159, 42,175,167, 93,171,176,142, 50,112, 4,198,167, 6,218, 0, - 16, 21,202,213,121, 12, 90, 17,199,154, 32,210,168, 80, 35,181,242,254,117,165,208, 82,207,133,110,202, 59, 18, 28,198, 63,249, -235, 28, 10, 87,139, 5,221,180,177,156, 1, 92, 22, 65, 50,115,197,187,199, 65,251,245,197, 92,144,187,192, 63,153,142,210, 63, - 71,232,235, 22, 97, 94,204,196, 70, 94,241,110,124, 81,157,171,225,109,221, 57,251,238, 27,165,230,215,190,105, 30,186,173, 11, -120, 93,212,167,227,120,103,189, 78,196,204,186,246,106,238, 75,159,213,197,233, 46,222,107,104,166, 24,227,178,244,220,130,162, - 44,168, 42,131, 53,254,194,169,132, 32,144,117,184,149,146, 53, 90,121,154,154,103,209,211, 4,172,105, 16,139, 60,211, 9,187, -217, 73,242,124, 55,254,170,226,122,230, 64, 48,165,243,188,160, 12,116, 24,241,162,192,225,151, 41,233,207,203,229, 95,222,217, -203,207,107,215,177,206,210,239,247,216,220,218,226,206,103, 31,209,233,164, 28, 29,159, 34, 38, 67,142,159,239,178,178,117,137, -222,211,156,178, 24,242,224,209, 93,190,254,141,223,224,223,254,187,127,203,229,213, 54,175,191,241, 22,185,117,252,248,189,247, - 48,227, 83,146, 52,101,103,127,192,229,173, 46,110,251, 33,215,111,221,224,227,207, 62,101, 69, 71, 60,122,246,140, 48, 10,249, -173,223,248, 45,190,255,227,247, 72,219, 75, 4,161, 96, 99, 99,137, 15, 63,126,159, 48,138,120,227, 75, 95,226,234,228, 54,255, -250,207,255, 45, 34,140,144, 74,113,249,242, 21,170,108,194,112, 52,228,241,211,109,255,112, 51,149,239, 10, 2, 72,219, 29, 54, -183, 46,210, 59,220,227,195,247,126,232,189,182, 65, 64, 86,248,189,239,218,202, 26, 23,183,214,249,222, 15, 31,211,108,182, 56, - 58,238, 51, 41,188,151, 91, 42,229,195, 23,132,230,242,214, 37, 92, 89,242,116,251, 49,206, 24,142,123,167,132,105,130, 83,129, - 63,113,202, 23, 73, 77,127,215, 29,251,223, 57,236, 5,137, 53, 26,167, 3, 90,237, 85, 86,215, 55, 24, 31, 62, 71, 9, 63,134, -106,183,219,252,175,254,203,255, 5, 7, 39, 71,236,237,237,161, 75,195, 68,150,172, 92,190,232, 61,248, 31,191, 79, 26,133,168, -178,226,100,255,136,157,103, 59,228,121, 65,137, 97,255,176,199,104,180,207, 91,239,124, 25,169, 29, 90,197, 60,120,120,151, 94, -239,152, 27, 55,110,176, 62,206,184,114,237, 58,227,193,169, 23,230, 37, 49,101, 85, 49,201, 11,130, 48, 37,212,154,238,242, 18, -131,225,128,143,159,125,204, 27,111,190,197,201,225, 17,130,146, 60,243,225, 29,206, 20,140, 71, 67,210,102,155,170, 44, 9,116, - 64,101,124,135, 55, 49, 25,205, 36, 70, 40,205,213,203, 87,216, 61, 60,166,202,114, 2, 41,209,210,210,109, 55,217, 92,189,205, -227,237, 71,236, 31,157,130,142, 41, 10,195,112, 60,102,146,101,180, 91, 13,239, 41,119, 37,224,136,181, 36,136, 3,202, 73,142, - 84,138,110,167, 67, 62,153,248,145, 92,146, 82,230, 57,147,241, 24, 99,125,108,107,167,219,225,227, 79, 62, 37,137, 3, 86, 91, - 9,161, 22, 52,210,168, 22,116,105, 63, 10,204,199,148,166, 36, 12, 67,172, 49, 68, 65,200, 68, 7, 12, 70,125, 78,143, 79,102, -196,191, 34,175,232,245,188, 37,112,101,181,203, 36,203,144, 74, 32,195,168,102,248,199, 84,101,142, 49,134, 32, 44,145,166, 36, - 27, 78,136,116,200,120,216,167,219, 72,248,189,223,248, 42,159,222,187,203, 94,111,215,167,166,105, 77,110, 44,129,246,187,103, - 21, 4, 12, 70, 5, 50, 47, 73,147,128,202, 81, 79, 20, 65, 11,133, 42,203,218,210,104,189,167, 94, 8,134,131,156, 59,119, 30, -115,235,245,139,168, 78,138,196, 33,170,186, 43, 52, 10, 53,219, 41,218,218,255,124, 14, 67, 42, 61,110, 88,232, 0,166, 59, 97, - 41, 61,181,218,122, 92,114, 16, 42,130,200, 31,158, 4,198,135, 86,105,233, 19,215,116, 0,210,239,208,125,196,149,170, 3,178, - 36, 86, 75,191, 57,151,245, 58,210, 56,242,113,193,119,190,249, 61, 30,124,246,128,165,165,101, 78, 38, 39,116,155, 77,164, 82, - 32, 28,113, 18, 19, 7,138,209, 48,163,172, 74,162, 72, 80,153,130,170,200, 17,132,228,185, 97,115,115,195,187, 28, 76,197,201, -225, 1, 54,109, 16, 8, 8,194, 16, 35, 36, 75,107, 27,132,113, 74, 18,167, 62,143, 93,131,118, 14, 91, 85,232, 64,215, 66, 45, - 77, 96,173, 95,111,219,243, 69,125,174, 61,176,198, 98,172, 47,129, 74,121, 29,150, 87,185, 75,162, 56, 36,140,130, 89, 32,211, -153, 40,229,250,235,205,174, 35,117, 77,152, 22,233, 69,102,165,157,238,219,103,188,254,179,234,181,122,142, 92,167,112, 58,102, -108,153, 90, 51,229,234, 3,193,249, 14,253,252,203,105,227, 56, 21,203,205,225, 49,117, 71,111,234, 34,237,103,240,224,132,183, -177,213,157,185, 96,161,168, 79,109,112,214,226,168,139,117, 77,128,243,205,123, 45,144,155,146, 11,207,216,191, 22,166,221,162, -190, 63, 42, 63,197, 48,198,213,177,170,149,135, 18,213, 63,231,212, 94, 57, 69,243,158,229,223,131,122,243,230,133, 63,155, 70, -240,169, 26,166, 47,165, 64, 77,233, 93, 11,190,197, 23,111,204, 62,254,252, 77,212, 24,208,249,219, 83,116,171, 59, 35,196,155, -130,253, 95,245,117, 94,122,171,127, 41, 89,139, 34,149, 60,247,115, 75,249,138,207,245, 15, 70, 91, 26,110,222,184,198,100,212, -167, 42, 38, 20,227, 49, 85, 97,121,178,179,195, 63,250,167,255,132,163,163, 62,150, 10, 25, 57,250,187,187,188,245,214,219,244, -250,167,188,113,235, 38,131,254,128,195,253,125,191,187, 8, 34, 6,147,130,168,145, 34, 48,108,110,172,147,229, 19,168, 12, 73, - 18, 51, 30,141, 25, 14, 71, 92,121,227, 77,190,253,183,223,103, 56, 30,177,187,183,203,179,221,231, 4,113,204, 32, 47, 40,138, -138,253,103, 79, 89, 89, 93,227,247,127,239, 15,216,126,244,152,229,165, 46, 63,250,201,143,216, 63, 58,172, 31,222, 62, 72,192, - 57,201,149,155,111,241,238,151,191,198,221,247,127,198,253, 79, 63,172,179,181, 59, 44,173,108,209, 93,222,228,250,245, 27,164, - 50, 99,231,206,207,112, 2,182,247, 78, 56, 26,229, 84, 40,148, 10, 60,119,221, 41,254,248,143,254, 1,235,237, 22,191,248,209, -247,232, 31,237,209, 72, 99, 54,175, 94,160, 16, 14, 35,167, 84,191, 87,163, 24,127, 85, 6,243,203, 14,123, 82,202, 25,243, 61, -168, 73,114, 62,146, 49, 68,171,132, 80, 37,104,169,232, 52, 99,122,167,135,228, 85,198,112,148,241,238, 59,111,242,246, 27,215, - 57, 62, 62,102, 52,169,232, 52, 27,188,253,133,215, 81,105,155, 94, 54, 33,203, 38,252,252,199, 63,227,224,201, 30, 79,238,111, -115,124,124,196,254,233, 9, 63,250,249, 7,124,240,201, 35,194,184,197,181,171, 55,216,222,126,194,100, 52,166,221,106,147,198, - 9, 58, 12,177,166,164,119,124, 72, 39,137, 48,197, 4,172,101, 82,148, 20,149,143,171,117,245,147,108, 48, 24,179,186,178,202, -234,202,106, 61,217,242,163, 89, 83,228,100,147, 17,166, 42, 57,216,219,101,121,169,131,198, 32,108,129, 51, 5,189,147, 99,198, -163, 9,167, 39, 3, 70,227, 9,161, 10, 81, 86,144,143,135, 30, 33, 42, 43,130, 64,209, 93, 94,162, 40, 13,214,121, 81,206,227, -199,219,148,121, 81,163, 55,149, 15, 66, 81, 2, 41, 44, 90,122,223,111, 62,201, 16,206, 81,228, 5,195,225,152, 80,107,146, 36, -161, 42, 75, 78, 79, 78, 24, 14, 6,116, 90, 77, 6,253, 30,119, 62,249,152,110,171, 53,139,193, 76,210,184,190, 64,123, 60,104, - 89,100,184,170, 68, 74, 73, 81, 20,196, 81,138, 67,178,253,228, 41,205,102,131, 80, 9,108,229,161, 25, 30,215, 6,113, 24, 35, -145, 32, 52, 73,167, 51, 27, 65,122, 75,167, 65, 84, 21,186,102, 83, 7, 58,100,116,124, 76,163, 17,115,229,218,101,126,241,139, - 15, 72,162, 8, 33, 4,163,225,164, 30,107,107,162,200,199,140, 22,198, 17,134,186,198,180, 8, 10,107, 40,149,100,108, 45,133, -241,240,152,166, 0,141, 35,210, 14,132,161, 55,236,147,164, 1, 73, 20,214,141,138,143,147,152, 61, 6, 37,245,158, 87,121,109, - 66, 93, 44,148, 86, 4,181,216,107,102,197, 82,218,171,210,103,163,105,129,172,223,175,117,128, 10, 2,132,146, 62, 56, 37,136, -144, 58,192, 9, 89,103,146,187, 25, 53,108,166, 51,114, 2, 87, 9, 6,253,140,127,251,175,255, 45, 71,123, 39,152,202, 17,167, - 77, 42,231, 72, 27, 13,100, 16, 32, 48, 52, 27, 1,221,110,147,178,200, 40,202,140, 32, 84, 68, 73,236,109,106, 81,204,104,156, -147, 54,218,180, 90,109,112,142,126,175, 71,149, 77, 8,149,100,208,239,209, 27, 14,217,184,124,149,205,107,215,136, 91,157,250, - 0,195, 76,173,205,180,147,156, 22,195,218, 23,174, 85,157,138, 40,228, 66, 64,150, 56, 67, 76,147,210, 79, 4,124,110, 67, 64, - 28,249, 64,166,121, 40, 83, 80,167, 40,250,251, 80,200, 5,255,182, 57,227, 23,171,193, 44,246, 44,164,170,126, 60, 82, 11,239, -164,242,180,180, 89,120, 87, 93,232, 93,109, 57,116,181, 45,208, 57,139, 39,162,219, 58,179,194,206, 59,113,225, 22, 90,249,154, - 20,231,252, 4,197, 85, 21,182,242,246, 50, 83, 21, 24, 83,249, 48, 31, 83,205,187,254,122,154,232,191, 76,253,115,215, 36, 66, -166,163,115,103,112,174,154,117,238, 56,131,168,247,235,206, 26,172, 55, 23,215,117,208,205,114, 74,196, 2,201,206, 24, 40, 75, - 67,158, 87,140,179,156, 73, 94, 80, 84,134,178,242, 95, 83, 74, 49,187,223,163, 48, 34, 8, 2, 63, 29, 81, 26,132,168, 59,117, - 41, 17,142,153,144,100,126, 1,118,204,115,234,231, 34,186,197,208,122,113,174,115, 94, 28,157,191,176, 83,151,206,143,221, 61, - 97,246,156,117,109,126,210, 16,139, 10,188, 23, 44,115,188, 52,153,231,151, 9,229,234, 24, 39,172,117,228,101, 73,111, 48,224, -214,237,155, 28,239, 63,103,107,179,205,157,207,142,152,100,123,252,205, 95,125,155,215,222,122,135,159,253,100,159,173,205,117, -118,239, 63,162,215,235,241,149, 95,251, 26,219, 79,182,249,228,147,187, 36, 81,200, 59, 95,252, 18,223,250,171,191, 97,121,125, -139,201,100,194,175,255,238,239,241,173,111,126,139,110,156, 50,210, 57,178, 84,196,237, 22,187, 7, 7,116,175,104, 58, 75, 43, -252,233,159,252, 3,222,255,233,123, 12,122, 61,134, 69, 70, 20,199,252,224,111,191, 79,138,228,205,155,175,241,239,255,221,159, -115,249,210,101,242, 44,227,209,227,199, 51,239,130,178, 22,229,192, 56, 65,165, 82,158, 60,219,231,238, 71, 63, 39, 31, 13, 17, - 66, 33, 80,100,149, 36, 76,219,164,129,100,231,222, 71,228,147, 17,174,217,101,156, 59, 74, 35,137,226,200,147,176, 84, 64,148, -180,248,202,187, 95,226,206,251,191,192, 20, 25, 97, 20,176,117,121,139,220, 21,160, 37,214,189,156,233,240, 31,210,169,255, 50, -208,208,153, 39, 50, 6, 39, 11, 63, 6, 68,209,236, 94,160,187,113,141,231,251, 71,188,245,198, 5, 26,137,162,127,124,204, 74, -167,139, 8, 74, 78, 15,159,240, 23,255,230,125,210,181, 11,220,127,126,204,251, 31,126,200,241,193, 49,163, 65,129,181,158, 87, -221,207,114,194, 56, 98,148, 87,188,245,238, 87,217,188,180,197,104,120,204,206,227,135, 72,155, 82,230, 25,207,247,119,137, 34, -205,214,234, 18,189,131,103, 68,113,236, 45, 91, 50,196,212,207, 50,169, 3,170,202, 80,228, 5, 27, 27,107, 20,121,134,192,146, -132, 1, 97,183,141, 45, 51,158,237, 28,112,176,191, 75,150,231,104, 5,171, 43, 43, 28, 31, 30,242,108,103,135, 40,136, 88, 90, - 93,167,189,180, 66, 94, 9,174, 94,187, 73,183,217,196,149, 21,249,120,200, 36,180,132,161,162, 25, 46,211,108,117,233, 44,175, - 32,165,226,228,232,136, 7,247,238, 50, 25,246, 88, 91,233,210,105, 37,190,192, 7,190,179,212, 82, 98,157, 79,239, 75,226, 4, - 55,158, 48, 25, 13, 81, 74, 16,169,128,149, 78,155,202, 24,130, 72,241,165,183,223,224,224,249, 14,219, 79,119,136,211,152,188, -240, 99,189, 48,244,207,125,107, 12,178, 22,238, 20,165, 69, 72, 69, 86, 11,216, 42, 43,208, 97, 68,212, 8,235, 52,192, 0, 81, -227, 69,199,185,247,238, 98, 11,170,163, 67,226, 52,241,177, 67, 14,162, 40,194,150, 21,121, 94,161,162,148,236,100, 56, 75, 78, -188,121,229, 2,255,252, 79,255, 17,255,135,255,243,255,157, 72, 9,100,160, 25,100, 21, 86, 24,116, 85, 98, 37, 84, 22,198,149, - 87, 32, 43,169, 61,174,213, 26,130, 58,182,179,172,163, 54,168,119,141,129, 6, 41, 45, 79,158, 62,199,150, 5,155,171, 43, 30, -121,106, 12, 66, 58,164,116,216, 74,160,116,133,160, 66,184,170,110, 4, 37,206, 84, 20,121,129,214,194, 31, 36, 42,227,187,230, -133, 0, 19,107, 61,239,161, 50,118,238,111, 87,178, 46, 58, 1, 66,250, 29,181, 43,202, 5,145, 85,221, 12, 90,143, 55,222,223, - 57,224, 7,223,253, 49,195,147, 9,101,105,145, 50, 96,146,231,232, 48,194, 8,137,194, 18,134, 1,163,201,132,110, 55,246,143, -223,113,189,218,178, 21, 56,141,173, 74, 58,173,148,253,253,103,220,190,253, 22,105,154, 50,122, 56, 32,114, 21, 89,239,148, 56, - 12, 81,105, 74, 99,109,133,180,187, 68, 24,198,148,166,168,119,217, 22, 93, 25,156,209, 88,109, 48, 65, 80,219, 73, 61, 80,102, - 54,173,181,182, 94, 31,248, 78, 52, 8,106, 49,157,172,119,198,181,123, 65, 43, 53,235,208, 61, 18,118,158,153,238,167,192,243, - 48,146,233, 56,123,122,144, 16, 47,185,166, 76,213,241,214, 58,168, 12, 86, 25,132,177,160,106,225,162,240,149,103,198, 81,183, -231,186,243, 26, 97,107,207, 67,173, 22,246,231,114,166,211,171, 5,109,166,170, 33, 48, 37,212, 93,186, 47,214,211,172,120, 47, -204,196, 10,132,171, 94, 16, 2, 76,149,246, 82,184,249, 4, 1, 87, 31, 50,168, 29, 20, 83,138,157,123,193, 6,108,107, 98,157, -169,124, 30, 73, 94, 26,138,178, 34, 47, 74, 95,204,167,171, 8, 41,106,119,129,246,135,158, 89,114,155,255,122,149,113,168,119, -110, 93,252, 51,175,128,175,187,241,197,174, 92,248,174, 96,222,181, 79,187, 97, 81,171, 75,229, 12,232, 63,253,220,197,156,115, -185,192,238, 21,117,136,200,226,215,153,125,173,233,235, 11, 57,187, 74,202, 51, 31,179,248, 62,113,238,227, 85,157,144,228,191, -167,247, 74,122, 62,243,185,201,130,192,159, 26, 61,141,153,171,151, 47,113,176,255,156,195,253, 3,172,113,196, 73,200,147,237, -103,124,245, 15,126, 15,107, 42, 78,158,238,240, 71,255,240,239,243,253, 31,254, 24, 37,180,167,139,125,122,143,215,110,223,228, -240,168,207,133,107, 55,248,249,135, 31,113,220, 59,229,209,179,231, 92,191,113,147,193,104,194,205,215,223,228,189,247,223,231, - 43,191,254,155, 52,218,203,116,151, 87, 57, 62, 60,100,116,114,204,224,244,132,175,127,229,215, 8,195,144,251,247, 31, 18,171, -136,215,111,222, 98,105,109,141,222,176,207, 55,126,227, 27,252,187, 63,255,239, 25, 78,198, 51, 86,123,168,188,157,198,201,144, -225,184,224,249,211,109,220,100, 64,127, 56,194, 74, 13, 42,160,176,154,165,118,135, 43, 43, 41, 31,255,228, 59, 72,105, 25, 91, -205,246,254, 41,153,161, 78,101,147,132, 65,202,229,203, 55,248,227, 63,252, 67,190,253,231,255,134,227, 3,223, 85, 46, 45, 47, -145, 59, 67,238,124,230,183, 64,254,210,162,252, 42, 59,227,231,233, 26,166,143, 47, 29,212,226,158, 96,126,170, 15, 66, 65, 16, -120,149,179, 16, 10, 33, 21,173, 86,155,123,119,238,211,109,182,104, 45, 45,145, 70, 33,205,214, 18,107,235,235, 52, 84,201,238, -163, 79,185,255,224, 17,255,254,175,127,206,195,231,167,216,180,201,195,163, 62, 71,121,193,216, 56,176,130, 86,146, 50,170, 74, - 94,187,125,157,175,124,233,117, 92, 49,228,248,224, 57,195,225, 41,227,209,136,222,233, 41, 90, 10,134,189, 19,150,218, 77, 86, -151,150,112,206, 50,153,100, 72, 44,113,160, 8,181,164,200,114, 78,143, 14,105, 38, 9,249,176,207,120,112, 90, 91,217, 38,140, -198, 99,239,171, 14, 67,170,162,100,123,251, 17,143, 31, 61,226,112,239,128, 86,171,205,218,198, 38,198, 66, 89, 57,172, 19,252, -226, 23,191,160,219,106,146,196, 1,214,249,139,109,218,104, 80, 25,232, 15, 38,116,218,109,170,124, 66, 18,133, 92,220,218, 98, -127,127,151,124, 60,166,213,104, 32,149,223,167, 89,107, 41,138,114, 78,223, 18, 18,231,224,228,228, 4,132,160,172, 10,175,109, -168, 59,162, 52,137,185,114,229, 50, 31,124,240, 49, 39, 39, 39,180,219, 77,186,157, 54,129, 14,208, 74,131, 3, 29,106, 38,131, -190, 39, 15, 74,143, 47,213,161, 38, 77, 83, 90,173, 6, 97,172, 80,161, 34,105,196,126, 12, 29, 4, 80, 11,116, 26,205, 70, 61, -158,207,145, 14,148, 0, 83,148,216,178,228,180,119,202,225,193, 17,166,178,100,227, 9, 65,232, 35,100,187,157, 37,126,246,179, -143, 57, 60,233, 81, 56,193,160,240,227,201, 40, 84,228,149,161,172,179,181, 99,237,193, 39, 86,120,169, 86,233, 32, 51,254,114, -217, 18,130, 72, 66,164, 5, 58, 0, 25,128,212,142,188,204, 49,149, 33, 73, 18, 2,173,106, 10,230, 20, 47, 90, 35,135,241,169, - 86, 2, 63, 34,245, 96, 30, 57,215, 23,213,120,102, 95,224,204, 76, 82, 45, 22, 68, 86,162,190, 6, 89,231,144, 78,248, 90, 80, -121,255,241,116,108,237,172,196,217,128, 59,119, 31,241,237,111,125,143,108, 82, 1,138,178,112, 88, 36,133, 49,180,187,203, 20, - 85, 69, 28,105,154,173,148,178,204,208,218,107,129,180,242,247,103, 16,249, 24, 85, 33, 37, 81,156, 98,173, 32, 74,155,180,187, - 75,152,170, 98,220, 59, 98, 60, 28,145, 87,150, 66, 72, 46,220,188,201,210,198, 70,237,157,159,239,111,125,135,238,139,150,152, -118,208,178, 14,122, 82,178, 22, 99,201,133, 36, 53,113,102, 76, 44,132,168,237,106,154, 32,244,222,253,197,248,100,143,134, 85, -245, 42, 65,212,123,103, 63,225,153,130, 89, 48,182, 30,190,219, 51, 1, 98,243, 68, 54,191, 14,145,114,138,140, 21, 11,194, 44, - 59, 27,121, 51,227,166,251,174,216,213,246,177,233,239,231, 63,102,218, 85,219,250,230, 81,194,174,238,160,157,245, 0, 24, 87, -249,194,110,109,181,240,241,117,218, 95, 93,203,212,116,226, 88, 95,207,212,130,213, 78, 10,255,120, 16, 44,140,242,103,106,122, -127,208,176,118, 58, 45,153,255, 56,206, 58,140, 1, 83, 89,223,165, 23, 21,227, 73,193, 56, 47, 40, 42, 75,101,234,248,215, 41, - 83, 65,201, 89,135,111,141,165,172, 12, 69,229,247,239,234,157,215, 46,253,153, 84,226,236, 24, 91, 76, 9,101, 98, 94,236,229, -139, 24,193,249,120, 93,190, 80,148,117, 93,244,117, 93, 76,103, 95,179,126,125, 42,158,152,127,158, 90, 64, 21, 78,227, 54, 23, -255, 93,204,254,205,167,119,249,226,173,228,252, 99,212,194,207,177, 88,240,167, 55, 61, 85,100, 42,141, 49,150, 70, 35,161,221, -110,240,217,167,119,252, 88,222, 58, 26, 65,200, 47, 62,254,132,127,240,247,255, 33,207,158,236, 82, 74,193,229, 75, 23,184,123, -127,155, 79,238,220,227,181, 27, 87, 57, 62, 62,225,233,254, 49,119, 31,110, 99,172,229,127,246, 63,255, 19,238,221,127, 64, 28, -198,136, 80,147, 4, 49,207, 78,142,233,245, 7, 4,113,196, 79,126,242, 99,110, 92,185,204,195,123,119,185,117,235, 54,159,125, -118,135, 79, 62,187,195,133,205, 13,222,253,210,151,184,121,235, 53,142,135, 61, 90, 75, 29, 62,249,236, 19, 30, 63,126, 92,167, -239,120,209, 83, 20,196,232, 32,225,198,245,155,148,227, 33,161, 52, 28, 29, 31,145, 89, 7, 65,136, 14, 20, 42, 72,184,118,113, -139, 85,157,243,244,254,135,140, 42,195,209,168,224,104,152,225,116,140,148,138, 56,140,137,194,148,223,249,157, 63,228,194,202, - 18, 63,253,254,119, 72,162,136, 86,171,193,164,200, 16, 74, 81,214,223,247,151,133,183,252, 42,227,247,151,233, 45,206, 20,245, - 32,152,141,145,130, 96,186,143,147,117, 88,139,196, 74,229,199,155,166,162, 21, 37,172,111,173,209,110,182, 8,162, 22,151,174, -223,226, 23, 63,255, 17,207,158, 61,229,147, 71, 7,124,186, 51, 32, 19,146,147, 73, 78,102, 28,102, 26, 92, 3, 4, 97,194,164, - 44,176,197,132, 47,189,113, 3, 81,142,216,219,121,194,163, 7,143,217,219, 63, 97,101,101,137,165, 78,155,118,187, 69, 85, 85, -220,127,240,128,231,207,118,200,134, 61,170,108,132,173, 50,182, 31, 62,228,195,247,127,193,222,179,103,116, 26, 49,197,100,192, -224,228,144,113,150,131, 10,216,220,186,192,107,111,126,129,205,205, 45, 58,221, 14, 91, 27, 27,172,174,174,177,186,190,133, 19, -138,193, 56, 99,105,117,157,102,103,137, 48,142, 57, 58, 62,230, 39,239,253,128,188,152,144, 23, 5, 66, 40,154,173, 46, 78, 72, - 30,111, 63,225,217,211,109, 30, 61,184,203,253,187,119, 25, 14, 6,116,219,109,174, 94,185, 66,156,196, 52, 26, 13,194, 32,164, - 52,134,147, 94,223, 11,220,234,156,101,103, 45,141, 86,139, 48,138,121,250,116,135,193,176, 79,167,211, 66, 41,137,169, 10,223, -213,200,144,209,104, 76, 24, 6, 36,113, 76, 24, 6,254,185, 36,132, 15, 6,170, 59,161,180,145,122,202,152, 20, 52,146,216, 71, - 21,103, 99,194, 58,160, 99, 58, 54,157, 30, 26, 68,221,209, 4, 82,122,223,180, 14,209, 81,140, 51,142,180,217, 70, 69, 41,207, -182,119,188,119,186,225, 35,111,145, 1, 74, 5,124,239,199, 63,198,133, 49,167,227, 28,128, 68,251, 68,198, 97, 97, 9,148, 38, - 9,148, 31,125,214, 30, 94,131,100, 82, 57, 74,235,104, 1,177,148,132,210,213, 69,221, 33,180, 64,105, 73,101, 28,227, 73, 78, -156,196, 68, 97, 88, 31,232,235,105,160,181, 94,233,239,124,177,169,202,130,170, 44,102,160, 25,137,155, 93,212, 93,229, 9,135, -202,219, 51,188, 56,169,238, 8,197,212,155,108,124,151,235,140, 47, 20,170,198,155, 90, 3,101, 33,248,230, 95,126,151,159,254, -228, 99,156, 11,169, 74,139, 19,138, 44, 43,144, 58, 32,175, 42, 90,237, 14,167,189, 30,113,172,105,119,155, 68,113, 64, 94,140, -233,118, 91, 8, 12, 85,145,225,156,245, 99,127,237,197,125,141,118,135, 81, 86,208,104,119, 72, 27, 13,246,158, 63,161, 42, 13, -195, 97, 70,123,109,157,245,107, 87,105,173,174,248, 48, 27,124,138,163, 88,240, 85,139, 51,227,247,186, 41,154,238,194,229, 66, -212,169, 91, 20,188,214,227,119,229, 11,122, 24,132, 68, 97,176, 80,208, 3, 47,216,156, 34,200,103,246,184, 26,139, 90, 23,201, -185, 76,214,157, 3,150,213, 10, 27, 89, 7,240,212,217, 0,211, 40, 85, 55,251,187,204,249,233,204,248,233, 21,118, 22,206,179, -112,179,139, 5,221,212, 34, 54,255,249,182,126,191,171, 45,101,166,254, 26,211,189,186,172,215, 13, 98, 90,195, 88,160,226,213, -169,151, 78,184, 90,103, 87,119,221,117,170,175,183,232,214, 58, 50,231,124,218,175,117, 51,150,252,116, 21, 98,140, 23,185,149, -165, 37, 47, 42,178,172,168, 71,239, 21,165,113, 84,117,168,140,146,126, 69, 52,173,149, 2,127, 32,168,172, 63, 52, 84,149, 69, -125,241,245,203,127,166,106, 74,207,244,143,160,234,144,141,121, 23,237, 79, 77,234,133,253,186,127, 16,204,119,240,243,155, 58, -119, 0, 56, 3,165,153,125,238,217, 61,248,226,247, 83,139, 7,138,115, 63,203,217,151,103, 15, 19,243,195,128,172,247,245,231, - 52, 0, 74,123,255,170,115, 20,101,198,213,171, 87,217,222,126,202,254,222, 33,166,172, 24, 79, 50, 38, 39,125, 14,143,122,124, -245,119,255, 39,252,224,251, 63, 32,160,224,181, 47,188,131, 69,243,248,193,125,178, 44,163,189,178,193,202,198, 22,237, 78,147, -227,131,231, 12, 6, 3, 2, 37,217,121,242,132, 36,137,232,116, 59, 52, 59, 77, 30, 61,121, 72, 40, 36, 56,203,214,165,203, 28, -158,158,242,112,251, 9,221,229, 46,127,244,247,126, 31, 83, 85,252,236,253,143,232,141, 71,200, 64,243,195, 31,254,112,118,250, -215, 58, 32,196, 33,100, 72,148,118,105, 37, 9,121,127, 31,103,114, 78,199, 25,185, 10,188, 15, 20, 75,210,104,242,246,173, 27, -244,159,124,198,184,119, 68, 25, 52,216, 31,140,201,140, 32, 72, 26, 68, 81, 66, 18, 39,164,105,139, 63,253,211,127,198,243, 71, -247,249,236,131,159,215,105,110,245,190, 74,107,170,202,204,236, 48,191,220,247, 47, 94, 10, 28, 58, 63, 81,251,149,139,186,142, -208, 42, 38,144,190,171, 48, 18,178, 98,204,163, 59,159,208, 80,130, 11,151,215, 41,242,146,181, 11, 55, 24, 84,146,143,238,124, -198,223,190,247, 17,191,120, 60,164,143,162, 16, 22, 99,252,138, 71,214, 74, 90, 35, 28, 85,189,251, 85,182, 36,116, 5,235,157, - 6, 71,187,123,124,246,217, 99,246, 14,198,116,218, 49,157, 78,139,139,151,174,176,186,190,201,105,239,148,157,237, 7,148,227, - 30,143,239,127,202, 71, 31,188,207,100, 56, 68, 90, 88, 95, 89, 70, 99, 56,220,219, 33,159, 12, 72, 58,203, 92,187,249, 58,183, - 94,127,147,253,163, 99,142, 79, 78,125,154, 94, 16, 50, 24,142,177, 78,209,238, 46,211, 94, 90, 97,117, 99,147,180,213, 38, 73, - 27, 92,191,121,157, 27, 55,175,176,177,185, 65,154, 52, 73, 27, 93,198,163,156,253,131, 67,214,214,215, 88, 89,106,209,109,166, - 92,188,120,145,131,253, 3,126,254,179,159, 51, 26,143,235,204,249, 4,156,224,201,211,103,148,198,146, 52, 26, 40,169,106, 65, -152, 97,146, 23, 84,149, 37,140,162, 89,147,229,247,186, 94, 57, 95, 84,158, 11,222,237,180, 57, 62, 62,162,217,104,176,212,233, - 32,133,164, 40,114, 78, 79, 78,234,195,149,164, 50, 37,214, 20,128, 33, 84,146,124, 48, 36, 27,141, 80, 24,108, 89,224,170,138, - 36,246, 86,202, 60,207,200,198, 99,164, 80, 56,227, 24, 14, 70, 76,198, 25, 50, 8, 40, 75,131,214, 33,141, 86,155, 86,103,137, -245,203,151,136,210, 6,157,165, 21,110,191,249, 14,223,255,225,247,249,244,209, 51, 50,227,109, 87,177,242, 69,103, 88,122, 39, - 65, 36,220,172,195,210, 82, 97,145,100,214, 81, 24, 75, 3, 65, 34, 64, 11, 75, 24, 8,100, 32, 16,218,211,219,116, 16, 83, 57, -193,112, 56, 36, 14, 67,226, 40,240,201,127,194, 91,172, 36,118,118,225,183,149, 47,236,214,122, 14,253, 52, 73,203, 23,245,122, - 52, 91,243,191,125, 33,177,245,219, 85, 13, 35,113, 84,101, 85,135, 14,249,107, 86, 85, 25,202,210,241,175,254,213,127,207,119, -255,230, 39,116, 90, 27, 12, 71,185,183,237, 25, 63,105, 17,245,245, 53, 73, 82, 14,142, 14,105,181, 34,132,180,116,151, 58, 12, -134, 61,194,192, 91, 46,173, 41,168, 76, 69, 16, 70,104, 29,225,132, 34,140, 18,140, 80, 32, 21,221,181, 85,202, 98,204,100,232, -181, 27, 27, 87,174,178,121,227, 58,186,153,214, 53,217,206, 83,196,166,123,109, 59,183,114,249, 66,186,224, 99,159,197, 26,207, -226,206,102, 91,209,169,234, 61, 8,207, 63,135,235,209,176,154, 95,251,103, 22,177,170,242,171, 9,107,102, 99,119, 95, 28, 23, -147,219, 22, 3,194,252,253, 50, 29,183, 51,109,212,107,251,152,179,190,219,247,252,116, 59, 47,196,179,151,182, 30,165,207,133, -111,211,223,247,172,183,220, 64, 85,157, 59, 20,248,191,189,172, 5,125,242, 37, 48, 54,183, 88,208,167, 7,151,154,144, 55,179, -198, 89, 48,214,214,233,108,174,254,246,238,108, 58,107,173, 90,175,140,165,168, 42,138,188,100,146,229,140,198, 57,121, 81, 11, -228,132, 68,235,105, 60,117, 52, 79,190, 83,114,142,211, 21, 10,135, 64,203,169,103, 83,190, 24,210, 34,167, 41, 71,139,119,246, -212,235, 57,243,178,191, 60, 80,101,113,148,114, 94, 61,253,178,221,236, 98,145,112,231,236,112, 11, 25,171,243,127,249, 37, 94, -245,151, 22,163,122,255,236,207,170,146,178,178, 60,217,217,229, 27,191,249, 59, 28, 31,246, 56, 58,216,243, 42,115, 35,185,247, -209,135,196,203, 43,252,254, 31,252, 1,223,249,246,191,227,198, 23, 90, 8, 41, 89,218,188,192,189, 59,247,201,212, 49, 95,189, -113,139,189,231,219,180,147, 24,181,181,206,227, 39,207,216, 88, 89,225,195, 79, 62, 70, 7, 33, 27,151, 47,147,164, 13, 46,174, -174,242,232,225, 67,158, 60,127,198,104, 52,228,141,215, 95, 99,115,125,141,159,127,240, 1, 82, 6,172, 93,216,162,112,134,127, -255,205,191,240, 86, 23, 4,113, 16, 81, 90,139,208, 17,101, 94,210, 93, 15, 25,103, 61,150,149,226,116, 56,164,130,217,254, 59, -140,154,172,116, 58, 44, 37, 1,119, 14,119,145, 58, 32, 43, 13,167,163,140, 48,237, 16, 68, 1, 50,148, 20,165,229,234,250, 69, -174, 92,218,224,131,239,254,247, 40, 12,163,222, 9,221,230, 38,141, 78,147,147,241,192,159,232,221,252,201, 59, 85,138,186, 87, - 24, 7,207,253,133,120,249,218,125, 1, 17,251,146,109,186, 91, 80,158, 10, 59,101, 98, 11,134,131, 33,255,250,191,249,151, 68, -249, 49,205, 27, 91,216,108,131, 60, 87, 4, 73,202,199,247, 31,241,227, 15,238,241,254,246,128,161, 85, 24, 29, 34, 92, 78, 36, - 33,148,130,118,179, 65,171,211, 98, 82, 85, 92,187,117,139,189, 39,123,156,238, 61,227, 91,127,243, 51,170, 94, 31, 81, 12, 72, - 34,197,250,122, 66,175,215,103, 50, 89,153,193, 27,150,150,150,176,217, 58, 75,237,148,108,220,224,147,207,238,112,113,115,131, - 43, 87,174,147,151, 21,198, 85, 4, 67,205,197,205, 75,172, 92,185,197,209,201, 49,221,229,101, 6,189, 94,157,117, 30,208,235, - 15, 89,219,188, 64,171,179, 68, 20, 39,140, 38, 25, 75,203, 43,179, 11, 84, 35,141,105,221,184, 72, 18, 37,164, 73,155,214,242, - 26,123, 79,159,210,106, 55,176, 46, 67,218, 18,147, 79, 72,155, 77,218,205, 38,215,175, 95, 99, 52, 24,249,195, 99, 32, 73,194, - 6, 71,135,167, 44,175,174, 80,230, 21, 34,168, 59,103, 1, 42,212,164,141,148, 52, 77,192, 89, 38,227,145,135, 93, 8,239,104, -185,125,253, 18,131,147, 67, 30, 60,184, 79,146, 38, 60,124,240,136, 52,142, 89,238,118, 61,207, 62, 74,144, 58,164, 52,214,243, -168,173,183,110, 13,250, 67,172,149,228,227,146,124,156,209,110, 53, 73,210,132, 42,155, 80, 84, 37,206, 73, 70,163, 17,206, 10, -116, 16,179,191,127,200, 96, 56,160,217,238,144,196, 17,161, 10, 24, 79,252, 72,218,228, 61, 26,237, 54, 81,179, 67,148, 54,248, -223,252,239,254,183,124,248, 47,254,215,244,119,142, 48, 14, 38,149,207,138,182, 66, 50,113,160, 10, 67,170, 36, 74,248,139,163, - 22, 16,212,249, 43,185,112, 84,194,191, 33, 23,140, 27,190,139, 49, 4,161, 70, 32,120,190,119, 72, 89, 84,108,109,108,120, 76, -174,112,168,250,176, 99,141,193, 88,111, 5,204,134, 21,167,166,192, 52, 83,170, 48,172,189,233,222,183,110, 43,137, 14,180,207, -113, 83, 10, 66,141, 43, 53,132, 33,166,168, 80, 65,132,140, 20, 86, 72, 74,107, 40,141,165, 44, 37,251,251,167,228,149,224,184, - 63, 70, 74,139, 10, 36,121,101,233,143,198, 44,135, 49, 81, 28,211, 31,143,200,243, 49,198,142,193,133,148,197,132,102,154,112, -112,176,207,218,146, 15,206,169, 76,137,181,165, 79,241,138, 34,191,199,150,138, 44,159, 96, 77, 73,107,105,157,195,103, 39,132, - 97,128, 43, 43, 26,113,130,147, 1, 78,218,185,206,220,129, 11,234,238, 84, 87, 88,163,209,182,222, 85, 59, 53,215, 85, 77,175, -223, 51, 34,168,245, 33,118,213,252, 57,175,106,165,123,160,188, 87, 90, 46,160,160,157,115, 84,198,167,185, 97,167, 94,237,250, - 0, 52, 21,223, 97,231,170,246,105,226,166, 59,187,255,198, 90,132,169,252,110, 90,152, 57,199,127,234, 68,179,115,176,217, 76, -252,119,142,243, 62,157, 68, 44,106,192, 92,173,227,169, 91,106,127, 64,112,103, 87, 0, 78,184,153, 16,207, 15, 21,166,233,114, - 53,123,222, 67, 93,234,251,135, 90,131, 0,214,201,250, 12,106,177, 78,213, 47, 69,237,128, 19, 51, 6,142, 1,156,243, 33, 60, -101,173,101,201, 42,203, 36, 55,228,165,245,225, 60,245, 74, 36, 8, 52,113, 20,250,117,153,174,155, 89,193,252,123, 59,129, 52, - 18, 45,197,180,139,118, 83,188, 46, 82,190,100, 28, 34,206,101,206,214, 74,206, 51,197,216,189, 60, 31,253,124, 97,255, 60,180, - 44,224, 5, 9,175,234, 16, 95,129,136,125, 89, 2,220,121, 75,156,227, 44, 34,207, 26, 75, 54, 41,105,173,116,248,226,187, 95, -228,163, 15,126,204,225,193,200,199,154, 42,195,251,127,251,151, 72, 55,226,107,191,253,123,252,213,183,190, 69, 26,134,252,206, - 31,254, 61,122, 89,197,209,254, 1,127,249,205,255,129,165, 36,230,107,239,190,197,205, 75, 27,252,198,151,191,200,113,111,204, -205, 27,215,216, 61, 60,230,240,228,148,201,112,192,123,143, 30,162,132,160,213,238,240,187,191,245, 13,180, 80, 60,126,252,152, - 59,247,238,241, 27,191,245, 91,140,170,156,191,254,235,191,166, 42,203,249,131, 9,136,194, 8,235, 52, 23, 54, 59,244,199,135, -184,178,100, 43,104,114, 88,148, 8, 37,136, 67,141, 34,164,221,222,228,221,215,223,166,232, 31,146,155,156,220, 58, 14,142, 79, - 16, 65,125,186, 11, 37, 81, 43, 36,155,196,252,246,111,253, 62,178,234, 19,139, 49, 49,134,188, 42, 88, 91,234, 48, 9,192, 40, -111,103,161,178,179,100,162, 57, 30,102, 65, 1, 60,221,175, 77,209,155,139, 92,247,133,221,216,203, 69,113,231, 99, 92, 23,252, -240, 88,160,196,214,211,158, 70,148,114,101,109,131,167,159, 62, 33,210,150,221,167, 79,217,186,241, 22,143,159, 60,224,241,163, -135,124,118,255, 9,185, 3, 43, 5,210, 89, 2, 17,178,218, 77, 9,156,225,221,183,223,228,187, 63,124,143, 73, 89,113,122,210, -103,101,117,157,227,172,194,104,201, 95,255,228, 19, 94,223, 74,185,253,198, 77, 46,222,126,131,221,221,125,198,253, 62,135,135, -135,172,173, 45, 99,109,133, 17,146, 94,102,200, 10, 71,115,121, 13, 41, 67,170,202, 48, 24, 13,233, 13, 7, 8, 39,201, 10, 71, - 89,228, 8, 83,114,188,247,156, 42, 31,211,110, 54,232, 46, 47,147, 54, 90,108,108, 93,152, 93, 16,165,214,156,158, 28,115,114, -114, 66, 81,148,124,227, 27,223,192, 25, 71,158,151, 24, 59, 70,199, 99,142, 79, 78,136,211,192,231,129, 35, 25, 12,199, 12, 71, - 3,172, 49,108,109,109, 16,223,104,146, 13, 79,233,247, 79,217,125,182,207,160, 63, 36,109, 52,104,164, 9, 73, 24,214, 36, 56, -127, 1,139, 98,141,146,126,226, 3,102, 22,178, 33, 5,216, 98,200,187,239,188, 65,187,213,228,253, 15, 62, 66,169, 8, 33, 21, - 78, 56,162, 36, 37,136,188,114, 94, 43, 79, 15,203,199, 19,138,162,240,151,223, 48,161,185,148,120, 37,122, 62,198,140, 10,132, -246, 86, 41,164, 70,202,128,225,104, 66,171, 25,114, 97, 99,147,125, 37,233, 15,251,108,173, 93,129,170, 98,212,235, 99,170,138, -138, 24,153, 56,116,216, 64, 52,224,173,219, 87,249, 63,253, 31,255,247,252,211,255,226,191,228,232,228, 4,131,164, 44,253, 85, -123,104, 10, 80, 26, 87,214,113,148,182,162, 29,134,232,172,194, 10,200,128,170,206, 72,151,206, 33,172, 15,188, 80, 78,160,176, - 72, 87,161, 3,255, 59, 30,246, 6,228,165, 97,107, 99,141, 86, 18,130, 43,235,149,131, 64, 9,135, 49,134, 42, 47,153,152, 18, - 81,230, 20, 51, 90,151, 7,207, 68, 81,128,214,158,160,102,165,196,150, 1, 65, 24, 33,156, 39,202,137,208, 55, 13,149,169,175, -167, 72,140, 21, 12, 70, 5,198, 66, 86, 77, 56,220,123,206,230,198, 58, 78, 6,148, 66, 51,177, 80, 21, 5,170,168, 88, 91,239, -176,188, 20,146, 38, 14, 87,141, 48,101,197,230,250, 6,187,207,159,176,180,212,241, 1, 59,227, 33,113,218, 38,172,159, 53,170, - 6,136, 25, 83, 17, 69, 13,162, 36, 69, 5, 18,103,114,100,229, 16, 66, 97,165,159,158,120,229, 63, 72,229,185,253, 66,107,164, - 53, 40,171,253,117,231,197, 49, 27,106,225, 26,106,140,153,217,217,168,199,210,114,186, 6,157, 22, 9,231, 41,121,117,164, 27, -162, 78, 41,155,117,197,206,249,231,172,152,142,176,125, 39,186,120, 13,169,229, 99,245,106,131,121,144,184,144,115,190, 69,157, -162, 86, 7,140,207, 10,184,125, 73,192,202, 98,113, 18,179, 48, 24, 55,123, 57,181,206, 57, 59,167,182, 33, 60, 8,105, 90,128, -231, 58,138,121, 45,241,123,126,102, 5,123,218,145,251,141,140,168, 63, 86,204,149, 24,210,130, 85, 32,109, 61,193, 0, 43,235, -209,187,129,188,116, 76, 10,203,164, 52,254, 49, 45, 21, 82, 11,194, 64,147,198, 33,113, 18,215, 66, 68,253, 66, 96,218,148, 78, -167,222,125,227,234,159,249,241, 56,179,113,248,249,113,234,226, 46,125,246,246, 57,187,195, 76,196,182,240, 49,175,122,249, 42, -155,220,236,227,166,251,242,250,228, 55, 35, 19,189,228,243, 62,239,237, 23,222,247,130,213, 77,122,235,210,100,204,237, 91,183, - 56, 57, 62,101, 56, 24,131,169, 8,180, 99,117,181,195, 71, 31,125,202,104,144,241,123,191,253,219,220,187,119,151, 52,109,177, -117,225, 2,101,145,243,229, 47,126,145, 56, 84, 60,186,255,144,163,131, 61, 6,131, 17,143, 31,111,179,251,124,159, 79, 62,185, -203,100, 50,162,145,164,172, 47,175,178,177,186,206,165,205, 11,108,110,108,210,239, 15,216,222,126,194,215,190,246, 53, 6,163, - 49,127,253,189,239, 82,213,148,162, 41, 19,177,170, 42,146, 36,225,194,218, 5,116, 26,208,223,123,206,107,221, 14, 39,253, 62, -135, 85, 69, 37, 52,206, 42,194, 32,101,185,213,225,237,219,215, 56,222,125,136,115, 5, 71,195, 49,123,253,140, 40, 13, 64, 4, -168, 40,162,114,146,118,123,149,127,254,159,254,103,156, 62,187,207,193,246, 3,132,117,172,175,175,161,227,144, 97,145, 81,213, -132, 40, 49,205, 34,158,247,217,231,200,124,175,166, 7,186, 95, 97,175,174,166,163,187,115,150,182, 80,251,241,157,208,126,167, -174,165,226,210,198, 10,195,147,103, 92,189,188,137,173,224,244,232,128, 79, 63,254,144,191,250,219,159,241,228,104, 64, 41, 66, -148, 12,105, 37, 49, 27,203,109, 46,109,172,210,140, 67,142, 15,246,107, 60,107,135,229,229, 85,238, 63,124,136,147,138, 73,149, -131,128,113, 94,241, 47,254,151,255,130,102,119,153,165,149, 53, 54, 47, 92,196, 58,199,157,123,247,216,219,219,103,117,109, 13, -161, 36,155, 23, 46,176,177,121,137, 39, 59,207, 41, 74,195,113,175,207,218,230, 22, 72,201,193,222, 1, 97, 20, 17,198, 49,199, -199,199, 52, 27, 45,174, 94,191,142,144, 62, 22, 54, 73, 18,202,178, 96, 52, 26, 81, 86, 37,205,102,147,229,229,101,170,170,196, - 90, 67,160,235, 76,120,227, 40,178, 9,187,187, 59,228,217,136,147,163, 3,138,201,132,229,110,151, 52,137,124,178, 26,146, 60, -203, 24,142, 6,117, 66, 88, 66, 94,102,244,251,167,180, 90, 13,226, 56, 38, 10, 52,113,160, 73, 35,141, 45,115,156,241, 12,244, -209,112, 76, 54,201,201,139,210,123,149, 5, 40, 29,210,106,119,105,182, 58,124,240,193, 7,132, 97,200,234,250,154, 87,248, 23, - 69, 13,159, 81, 53,213,170,194,152,106,182, 58,211, 81, 72,123,115, 29,162,136,254,112,224, 15, 4, 86,224, 80, 68, 81,204,112, - 56, 66, 41, 77,158,231,132, 81,192,242, 82,135, 86, 51, 65,107,201,202,198, 6, 74, 11,154,205,148,168,153, 16, 44,119, 65, 43, -156, 82, 92,186,120,141, 27,183,110,243,239,191,245, 23,104,107,136, 43, 67, 43, 14,201,157, 69, 24,127, 51,245,101, 54, 14, 66, - 50, 11,131,170, 34,112,208, 20,130,134,115,132, 90,160, 35,137, 14,167, 22, 86,137, 80,170,222, 67, 7, 72,229,247,253,131, 65, - 31,173, 20, 81, 24,213, 86, 79,233,161, 62, 90,251, 14, 8, 31,213, 90, 25,207,146, 47,203, 90,133,108, 37,198,128, 80, 33, 78, - 40,156,208, 40,237,105,114, 50, 8,176,194, 71,215,250,108,115,137,181,134,170,114,252,226,231, 31,113,112,120,236,191, 78, 81, - 32,157,100,146,149,232, 32,246,209,171,197, 24, 45, 13,166, 26,209,110, 10, 54, 55,215,188,149,173,200,232,180, 91,104, 45, 57, - 58, 60, 32,142, 52, 97, 24, 33,164, 38, 78,154, 8, 29,146, 54,155, 76,242, 98, 38,156,171,170,130,209,112, 72,163,213, 66,197, - 33,237,149, 21,172,231,180,214,142,174,122,159,238,166, 74,116, 55,155,200,157,191,126, 46, 10, 92,207,215,132,233,222,125,250, -186, 23,182, 77,139,140,157,227,193,141,169, 81,169,213,108,159, 62,231,159,184, 51, 22,106,199,153, 30,178,254, 25,188, 45,109, -106,137,243,216,212,106, 38,134,155,237,196,167,249,228, 83,225,155,181,184, 58, 13,205,218, 69, 81,156, 89,192,179,206, 45,117, -118,102, 67,115,179,183,173,179,179,157,248,140,243,238,196,244, 28,225,253,228,214,205, 10,180, 91,160,207, 81, 31, 0, 22,225, -105, 78, 44,164,204, 77,179,226,133,160,172, 42,242,194,115, 49, 38,147,140,178,168,252, 40, 93, 43,162, 40,162,145,198, 52,154, - 62,151, 34, 77, 19,175, 17,137,194,217,181, 51, 8,194, 89,177,215,103,194, 91,102,133,240,229,193, 44,231,255, 77,184, 87,195, -104, 88,132,137, 77, 67, 61,156,152,157,195,188,175,117,126, 34, 58, 59,226,159,219,230,156, 59,155,202,230,156,120, 65,141, 41, - 94,176,191,137,133, 60,245,179, 9,111, 44,172,136,102, 39, 54, 7, 79,119,158,241,214, 23,190, 76,149, 11, 2,181,237,199, 89, -197, 0, 81, 90,158,223,191,199,127,119,124,194,239,254,193,239,241,100,231, 25,199,199,167, 28, 29,159,112, 97,125,157,102,167, -203,215,190,246, 53,158, 60,221,161,209,236,208,153,148,156,244, 71,116, 55,111,250, 88,207,102,147,231,219,143, 56, 60,220,103, -109,125,147,135,143,159,176,180,178,204,215,126,227,183,248,241, 79,127,204,253, 71,143,106,181,185,168,115,142,245,236,193,148, -101, 19,130, 48,224,233,222, 54, 75, 8, 26, 66,112,223,228, 20, 90,160, 8,208, 97, 3,137,230,250,197, 11, 60,188,243, 33,123, - 59,119, 25, 23, 35,158, 28,101,184, 36, 32, 12, 21, 78, 8,130, 40,165, 18,154, 55,223,124,131, 88,149, 60,188,255, 41, 39,187, -207,176,214,209,236, 44, 51,174, 74,202,178,242,251, 47,107, 17, 74,176, 24,162, 39,206,119,216,130,255, 63,254,119, 54, 6,179, - 14,210,154,205,242,211, 52,229, 11,239,124,145,205,149,132,254,233,152,254,225, 51, 78,159, 63,196,100, 57,113,179,195, 23,223, -254, 58,221, 56, 33, 27, 30, 96,237,132, 50, 27,115,124,120,204, 31,252,246,111,114,241,242, 85, 12,154,131,227, 30,198, 56, 62, -125,248,136, 74, 72,134, 56, 66, 37,113, 81,139, 72, 22,100,147,130, 81, 57,193, 42,197,198,133, 75, 28,237,239, 81,213, 42,102, -100, 72,110, 37,199,195,156,175,124,237, 13,134,147, 33, 43,107, 43,236,238,236,160,162,140,237,237,109,150, 86,150,233, 44,173, -160, 2, 77,127, 48, 64,168,128,178, 50, 28, 28, 30,112,114,124,136, 82,154,139, 23, 47, 18,199, 33,113,156, 48, 26, 53,249,248, -163, 15,233,180, 98,207,253,214, 33,215,174, 93, 35, 13, 3, 98, 37,232, 46,173,178,243,116, 7, 87, 25,154,173,136, 36,137, 81, - 74,178,191,191,135,210,130, 36, 13, 65, 57,190,244,238, 23,121,252,232, 33, 71,199, 7,148,249,216, 11,104,164,164, 17, 7, 4, - 74, 82, 26,203,112,146,177,186,182, 65,160, 67,111, 91, 2,132, 12,144,202,103, 92, 95,185,126,149, 73, 49, 97,103,231, 9, 87, -135, 87,233,118,218,245,225,210,119, 90, 90,107, 84,236,195,138,172,169, 80, 65,136, 12, 3, 42, 9,201,214, 58,203, 74,146,245, -250,222,114, 4,190,179, 80, 83, 59, 86,151,170,204,137,130, 0,227, 12,165,112, 20,166, 98,229,230, 13, 6, 7,207, 25,155, 18, -237, 42,100,144,160, 2,133,235,245,249,199,255,248,239,241,175,254,252, 15,249, 55,255,207,127,205,141, 40,100,236, 44,167,214, - 11,140, 42, 4, 85,233, 71,164, 73,225,213,249,126, 14, 49,237,144, 4,198, 76,241,163, 94,212, 36,100, 13, 46,147, 2,161,133, - 7,194,212, 69,103,239,248,132, 34, 47, 88, 95, 93, 37, 10, 67,172, 53, 40, 1, 74,122,148,242,244, 48,107,235,177,188,176,130, -210, 74, 20, 33,165, 85, 56, 2,164,140, 48, 50,192, 72, 69, 85, 25,210, 56,162,189,212, 70,160, 41,138, 9, 14, 75,168, 53,141, - 52,193,148, 5, 96,189, 74,125, 60, 65,168, 16,203, 0,173,154,244,135,135, 4,203, 41, 58,118, 12, 7, 5, 82, 94,162,170, 38, - 36,113, 72,191,119, 66, 28, 39, 52, 27, 45,242,124, 66,156,164,158, 41, 80,149,184,202,127,205,178,200, 41,139, 2,227, 20, 73, -171, 69,179,219, 5, 97,169,242, 33,152, 12, 33, 99,164, 86,179, 76,111, 41, 53, 66, 91, 76,165,145,218,160,140,242,158,160, 5, - 52,236,249,195,250, 98, 65,159, 22,197,197,169,172,115, 22, 91, 89,159, 62,231,132, 63, 52,212, 44,243,105, 81,247,196, 58, 63, -193, 16, 98, 10,102,159, 79, 8,196,249,213,156,173, 22,192, 44,102,118, 53,154,225,102, 29,103,104,114,231,225, 51,231, 81,177, - 51, 88,205,185,108, 17,231,220,204, 51, 63,175,206,139,227, 97, 89,231,150,248, 7,149,117,110,150,145,226,206,212, 21,129, 91, -216, 87,250, 62, 77,248, 9, 82,253,184,163,118, 84, 56, 87, 79,174, 43,131,144,101, 93, 48, 61, 45, 79,233, 0, 45, 37, 65,160, - 8,195,128, 70, 51, 38,109,132,196,113,228, 15,168,181, 85,208, 24,139, 49, 6, 83,185, 89,237,211,211, 46,251, 87, 98,167,191, -112,171,199,244,184,249, 62,132,133,144,151,115,121,236, 44,142, 49, 94,117, 80,168, 79, 51, 47,140,206, 63,199, 35,253, 42,242, -220, 75, 95,175,105,128,179,144, 0,239,138, 97,146,229, 4, 65,202,181, 91, 55,233,245, 14, 8,116, 73, 16, 54, 56, 62,174,252, -126,247,244,132,255,234,191,254,111,248,202, 87,126,141,219,183,111,209,109,183,177,192,103,159,222, 65, 43,197, 74,167, 73, 49, -238, 19,234, 16, 81,142, 89, 95,106, 51,232, 29,242,252,201, 3,198,101,197,216, 24, 78,243,140,238,198, 38,143,119,158,240,254, - 71, 31, 50, 28, 13,207,140,162,149, 80, 84,166,154, 77, 21, 74, 83,113,127,251, 30, 50,159,176,222,108,242,236,248,132,147,202, -103, 67,135, 65, 76,144, 54,120,243,250, 13, 26,145,228,103, 63,251, 5, 42, 40, 57,205, 11, 38,206,143,238, 13,150,110,167, 67, -216, 88,194, 16,242,229,119,222,230,100,255, 1,247, 62,120,143,157,135, 15, 88,217,220,164,176, 5, 89, 89, 32,165, 66, 11, 75, - 37, 44, 78,120,161,153, 93, 28, 69, 33,206,250, 50, 95,178,238, 88, 60, 72,189,154,191,127,222,147,186,200,104,166, 54,138,248, - 39,152, 64, 81, 20, 37, 65,156, 50, 24, 79,176, 66,163, 67,175,244, 54, 22,126,243,183,126,135,229,141,235, 28, 61,122, 0, 85, - 78,163, 17,243,243, 79, 62,225, 55,190,242, 46,105,163,193,246,163,199,200, 48, 37, 12, 99, 86,154, 45,150, 26, 41, 71,163, 33, - 89, 89, 50,204, 12, 89,110,216,106,166,100,163, 1, 39, 85,206,254,222, 46,155, 27, 27, 92,190,114, 5, 83, 85, 60,122,244,144, -231,251, 71,180,186, 43,252,225,223,251, 79,216,220,216, 96, 92, 76,152,228, 19, 84, 16,179,178,190, 73,167,149,146,164, 9, 78, - 40,223,133,149, 5,167, 71, 39, 12,199, 19,210, 36,166,219,110, 97, 42,195,209,193, 62,141, 70,211,199,181, 58,203, 87,190,244, - 37,180, 18,180, 90, 45,142, 78,142, 9, 67, 69, 28,106,178,241,144, 92, 11,122, 39,167, 20,121,129,117, 13,172, 53, 28, 28, 28, -227, 42, 71,154,164, 72,225,128,138,202,228, 92,186,180,197,198,218, 50, 90, 74,122,199, 39, 12,135,125, 40, 39,117,124,165,194, -201,128,209, 56, 39, 78, 18, 2,165,253,133,192, 90,111,125, 9, 67,140,173,184,113,243, 6,215,111, 92,197, 85,198, 35, 94, 67, - 77, 85, 24,223,229, 74,225, 39,103, 74, 50, 26, 13,105,133, 1, 74, 11,191,215, 53, 21,113,183, 77, 49,206,113,166, 68,106, 9, - 82,178,121,233, 50, 71, 71,135,132, 73,140, 14, 36,214,228,148, 54, 32, 94, 91, 35, 76, 90,136, 64,147,232, 75,100,189, 35, 31, - 21, 26,131, 12, 5,163,147,125,154,205, 6,255,244,159,254, 9,223,249,111,255,156,150,142,145,182, 64, 87, 6,161, 20, 10,197, -184,202,113, 6, 6,121, 65, 16, 37,179, 3,255,116, 76,106,166, 20, 50,108,173,226, 22,245,234,193,119, 70, 74,250, 60,121,225, -252,116,114,144,149, 84,251,135, 44,119, 59,116,154, 13, 31, 55, 92, 23,247,233, 5, 28, 28, 66,106, 80, 26,131,196, 72,141,145, - 26,165, 35, 8, 60,185,173,180,208,238,180,232, 46,119,144, 90, 96, 10, 15, 25, 17, 88,132, 48, 68, 97,128,146, 14, 37, 43, 38, -101, 70,238, 4, 58,196, 39, 14, 38,138,201,184,207, 64,143,232, 54,187,164,113, 76, 62, 25, 32,169,176, 22,210, 70,155,201,120, - 68,150,101, 52, 26, 49, 32,169,170,138, 44, 27,147,132, 49,206, 84,196, 81,128,169, 10,242, 74, 16, 39, 41,221,213, 85,178,193, - 9,145,168,176,147, 1, 58,136, 49, 72,172,170,139,186, 86, 88,231, 69,109,214, 24, 92, 96,177,194,204, 56, 34, 83,141,203,116, - 39, 59, 93,171,121, 72,140, 31, 43,203,154,142,183, 24,111,235,189,231,178, 86,212,155,121, 48, 76, 85,121,158,194,148,125, 34, -167,182,217, 23, 19,214,102,241,168,245, 95,214,205, 50, 65,207, 38,170, 77, 11,231,226, 40,221, 89, 55,179,233,213,136,188, 25, -241,237,204, 14, 87, 44,224,203,103, 32, 26,183, 80,212, 23, 14, 4, 83, 53,194, 52, 99, 94,170, 26,205, 42,102, 81,211,179,175, -185,112, 42,153,133,155,213,247,151, 47,239,213, 60,153, 78,212,212,188,188, 64, 7, 1, 66, 22,254,159,165,167,127,250,213,169, - 38, 78, 34,146, 56, 38,142,189,195, 96, 74,128,181, 53, 7, 97, 22,201, 90, 55,184,250,124,230,249,231, 69,168,190,248,114,118, -133, 63,251,249,127,135,232,212,151,221,102,254,246,151, 1,254,207, 81,104, 94, 44, 42,226,213,241,171,245, 29, 54, 99,143, 59, - 87,199,150,250, 24,206,131,227, 3,186,173, 54, 55,110,222,226,228,232, 57,121, 54, 33,137, 4,121,233,106, 8,146,227, 71, 63, -254, 17,205,180,193, 27,111,188,201,230,230, 38, 95,255,141,223,100, 60,236,179,179,183,199, 96, 48,100,255,224,152,245,245, 11, -244,198, 19,174, 92,187, 70, 37, 29,151,182, 46,144, 87,134,135,143, 30,113,247,222, 61,142, 79,142,231,163,152,233, 78,168, 30, -247, 77,149,232,206,248, 39, 64,158,141, 88,215,154,113, 89,177, 91,148,148, 66, 16, 90,127,226,110, 52, 98,174, 94,218,224,167, -223,251,107, 84,168,153,152,138, 94,102, 17, 65,224,119,121, 78,161,130,136,102,218, 98,107,235, 10,111,220,188,196,119,254,219, -255, 11, 39,135, 59,104, 12,217,100, 68,137,193, 40, 1, 6,175, 24,175, 51,158,177,243, 19,249, 11,165,248, 60, 71,249,115, 2, - 21,206,255, 45,220,231,125,157, 25,176,193,205,232, 76, 85, 85,113,114,218, 35, 32, 3, 17, 34,100,194, 73, 17,162,226,132,110, -171,205,225,243, 39,196,202, 80,133, 1, 63,248,209,123,220,184,114,137,171, 55,110,240,224,254, 3,150,151, 87,136, 66, 77,171, -221,228,245,215,110,177,253,116,155,188, 8,232, 27, 75,150, 85, 60,184,119,159,245,215, 47, 49, 56,122, 78,214,239,179,212, 74, - 9,164, 35, 8,189, 5,240,250,141,155, 28, 28, 28,144, 52, 98, 86,150, 58,140, 71, 67,140,128,193,112,194, 96, 60, 33, 81, 1, -141, 86,135,227,227, 35, 78,251,125,210,102,155,195,163, 99, 28, 2, 21,132,148,185, 35, 27,121,157, 68, 85, 25,198,163, 17,198, - 24, 86,150, 87, 57,156,140, 49,149, 65,202, 61,132,132, 48,212,180, 26, 41, 38,207, 24,245, 78, 25, 14,134,244, 7, 67,210,198, - 37,198,227, 49,135,123, 71, 92,190,116,217, 91,175,242, 28, 45, 4,101,158, 97, 42,131, 18, 2, 99, 61,178,179,209,108, 19, 72, - 24, 14, 7, 76,242,146,246,114, 23,131, 36, 47, 61,203, 58,137, 67, 92,101,200,198, 35, 58, 73,204,104, 60, 65, 8, 65,168, 3, - 68,164, 40,203, 28, 99, 75,180, 84, 56,231,163, 34, 21,130, 48, 10,253, 8,222, 25,108,145, 17,198, 1,100, 35,164,142,105, 52, - 27,140,203, 1, 78, 42,207,203,178,142,149,205, 13,180, 18,104,145, 80,142,135,216, 80, 17, 54,155,136, 36,133,202, 18, 36, 41, -102, 50,130,162,194, 77, 50,164, 11,177,147, 1,213,201, 30,175, 95,218, 98,169,211, 38, 82, 9,131,147, 35, 84,125, 1, 44,140, -161,170,197,113,227,202,210,138,196,188,115,171, 5, 72,126,207,202, 44,112,106,250, 17, 98,161,248, 40,165,235, 78,201,239,155, -141,144,156, 12, 71,228,101, 65,187,209,160,213, 72, 16,202,179,203,103, 33, 87,210, 19,187,194, 48, 66, 5, 33, 34, 80, 30,194, - 34, 45, 65, 18,211,238,248,100, 62,148,168,135,197, 83,171,150,191,173,173, 54,113,102,140, 10, 35,160,196, 88, 65, 26, 53,177, - 24,172,201,145, 20,152,202, 97,109, 76, 18, 46, 99,242,194,239,161,171, 18,155, 36, 52, 26, 9,195,225,144,189,221,125,214, 55, -215,136,145, 4, 73, 74, 85,102,152,170, 36, 10, 2,138, 60, 71,232, 24, 29, 70,116,151,150,217,237, 31,144,157, 30, 48, 72, 82, - 58,141,101,108,160,253,232, 91,122,106,159, 80, 22,161, 21,210, 4, 40,107, 17, 14,172, 16,103, 11,171,173,247,198, 82,122,207, -254, 12,247, 58,151,201, 78, 33, 43,211,103,186,177,213, 25,168,204,140,246,134,173, 19,206,196, 28,197, 90,139,222,108, 29, 18, -227,236, 60, 80, 69,212,121, 29, 76,187,223, 41, 86,118, 38, 74,155,238,210,235,162,110, 23,179,205,125,177, 61,147,115,190, 24, -241, 60,141,222, 93,200, 77,247, 77,244,249, 46,127, 26,249,190,192,130,168,121,246,139,130,187, 89, 65, 95,108,100,235,207,153, -234, 12, 28,212,201,127,211,107,159,215,117, 85,198,214,235,139,233, 99, 77,214,170,251,186,217,171,215, 72,231,215, 34,103, 86, -221,204,115, 87,244,121, 17,218,171, 68, 78,191, 10, 18,244, 85,138,231,179,175,139, 51,111, 47, 76,219,235,137,193,124,231,125, -166,104, 44, 70,184, 46,204,134,167, 31,247, 74, 53,252,130, 52, 91,214, 98, 26,123, 46, 60,198, 58,135,181, 21,141, 78,131,221, -221, 93,186,205, 54, 81, 20,112,116,120,192,242,106,206,163,237, 35, 8, 35,138,188,192, 57, 65, 18, 71,188,247,222,123,252,228, - 39, 63, 97,117,121,133,141,205, 77,186,203, 93,218, 91,107,172, 92,123,203, 43, 95,141,225,222,225, 9, 71, 71,167,188,119,247, - 30,199,199,135,100, 89,118,230, 48,228,156,123, 73,158,248, 60,142, 79, 73, 65, 83,123, 1,217,147,201,152,177, 16, 72,161,113, - 65, 72,212, 72,120,237,234, 37, 62,122,255,199,140,199, 61,130, 56,228,116, 84,146, 57, 65,170, 67,180, 80,196,173, 21,132,142, -192, 56,126,253, 75, 95, 38,239, 31,208, 59,218, 38, 9, 21,153, 53,116,187, 45, 38,197, 4, 43, 67, 15,137, 48,126,191,229,166, -112, 90,203,108,207,239,167, 90,246,151,142,223, 29, 47,142,187,206, 31, 8,102, 46,136, 89,103, 63,127, 2,217, 41, 24, 67, 88, - 64, 17,198, 17, 81,156,112,255,206, 93,174,223,122,157,103,135, 25,101,122,129,183,111, 92,231,104,119,143,173,173, 53,238,124, -124,151,143,239,220,165,217,108,113,227,214,109,122,163, 9, 59,123, 7, 60,121,190,203,107,175,191,206,233,104,200,157,251, 15, - 80,161,196,148,121,253,132,145,124,243, 91,223,164, 89,188,197,147,199, 15, 24, 78,114, 54,183, 46,146,132,146, 52, 14,201,138, -156,110,183, 75, 28, 39, 28,238,238,240,209,207,127, 74, 28,167, 36,237, 22, 34,138,136,227, 4,147,151,244, 71, 19,210, 86,135, - 10, 15, 60, 90, 93, 91,101,127,127, 31, 76, 65,145, 85, 94,232, 53, 28,146,101, 57,167, 39,167,148,101,201,197,139,151,189,181, -172, 52, 32, 36,105, 35,194,148, 57,237, 86,147,120, 26,161,170, 2,186, 43,203, 44,175,172, 80,149, 57,221, 78, 7,140, 97, 60, - 26,226, 74, 77, 86, 84,180,154, 77,194, 48,164, 42, 75, 80,154,188, 40, 57, 61, 61,165, 42, 75,198, 89, 70, 97, 5, 43,151,110, - 16,134, 33, 74, 9, 40, 11,242, 44, 35,137, 35, 6,195, 49,206,180,169,138,137,223,163, 11, 77, 28, 69, 8, 69,157,208, 85,225, -156, 64, 7, 33, 56, 71, 16, 6,148,101, 78,239,244,152, 86,187, 77,172, 37, 78, 74, 42,211,199, 57, 77, 24, 41, 10,167,136,163, -152, 32,137,144,218,147,183,132, 41, 8,226, 16,145, 6,136,192, 65,237,183,150, 85,137,178, 21, 34,203,161,172,112, 81, 68, 57, - 25, 48, 60, 48,148,131,138,210,193,206, 96,232,175, 7, 14, 10, 83, 97,240,223,211, 72, 75, 85,249,199,138, 16,222, 62,228, 9, - 99, 83, 53,181, 92,200,245,157, 70, 89,122,138,165, 14,165, 23, 0, 58,188,117, 73, 9, 31,163, 41, 37,133,115,140,202, 2, 59, - 17,196, 97, 68, 28, 9,194,122, 87,169,180,223,203, 75, 29, 16, 68, 1,113, 26,145, 54, 19,154,141,148, 56, 12, 9, 67, 13,194, -206,248,229, 62,243,218,243,105,133,131,110,167, 81,135,116, 76, 72, 18,191, 67,149,170, 66, 41,139, 49, 25, 74,218, 25,225,110, - 50,202,176,109, 75, 80,139, 23,171, 34,199, 41, 72,146,148,241,120,204,120,156,209, 89, 94,161,145, 38, 84,206, 95,244,165,210, - 94, 77, 93, 79,187,194, 40,162,211, 72, 56,221,127, 70,144,180, 73, 71, 99,212, 82,130,145, 14,225, 20, 82, 25,176, 62,208, 70, -105,139,181,218, 71,162,158,139, 92,253,220,137,234, 66,242,166, 91,216,215, 79, 75,230,244, 50,109,169,109,128,211, 11,137,168, - 67, 83,156,172, 21,245, 2, 39,253,223,192, 45, 8,221,132,152,254, 37,231, 13,144,117,243,233,222,153, 44,118, 55,247,125,207, - 89,236,211, 3,197,252, 90,235,156, 59,215, 88,156,189, 38,249, 14,219,214, 56, 87,175, 76, 23, 83, 17,223, 52,205, 79,107,159, - 17,160, 22, 2, 50,164, 56, 43, 34, 23,162,118, 91,205,249,242, 14,176,210, 46, 68,188, 66, 69, 9, 82,214,215, 62,127, 63,248, -233,144,153, 77, 59,230,117, 66,250, 53,192,116,141,237,166, 28,124,255, 41,182,118, 40,232, 87,103,152,243, 43, 51,190, 95,149, - 93,254,242,238,249,252, 62,252,229,183,197,255, 22, 79,135,142,186,147,124, 69,103,254,194,231, 47,252, 46,114, 97, 63,239,106, -107,140,144,126, 8,228,172, 37, 47, 39,172,109,174,179,187,253,140,155,215,174,162,116, 68,127,100, 24,103,142, 79,158,236,227, -148,164,170, 12,199, 39, 39, 84,149,223, 15,157,246,122, 28, 28,236, 19, 5,146,202, 66, 97,157,127, 98, 9, 65,229, 60,233,231, -252,253,234,220, 44,107, 8, 33,164,207, 37,126, 89,135,235, 32,145, 48, 46, 12,125, 41,145, 68,196, 34,196, 68, 1,151,175, 94, -166,234,159,176,183,187,237, 89,207,227, 49,131,204,160,226, 20,173, 99,226, 48, 34,136, 27, 24, 39, 88, 89, 90,230,246,213,203, -252,240,187,255, 47,170,172, 71, 28, 73,154,173,150,191, 31,133, 64,168,218, 14, 36,197, 25, 70,181,148,126, 4, 47,167, 91, 10, -241,106, 30,252,203, 34, 15, 63,239,113, 51, 11,246, 49, 62, 43,184,170, 42,170,170,244,196, 63, 63, 71, 35,208,126,151, 91,150, - 37, 81,156,144,151, 57,159, 60,120, 74, 17,172,241,100,183,199,114, 55,165,154,244,216,220, 90,102,235,242,239,243,189,239,191, - 71, 94, 24, 94,127,237, 18,123,123,123,124,239, 7, 63,228,100,216, 39, 47, 13, 7,253, 62,113,160,105, 54, 18,242,158,167,245, -221,223,222, 97,251, 89, 3,108, 65, 32, 44, 39,135,123, 28, 31, 31,179,117,241, 10, 81,218, 36, 12, 52,101, 62,198,148, 25,223, -249,235,191,102,107,107,131,219,111,190, 69,212,238,128,144,244, 70, 35,214,229, 38, 22,191, 3, 91, 93, 89, 97, 52, 30,162,132, -160,215, 59, 97,121,105,133,254, 96,136,169, 74, 46,108,109,178,181,185,137, 49,142,123,247,239, 1,130,119,190,248,107,172,172, -174,114,231,238,167, 60,218,126,130, 45, 11,150, 59,109,110, 93,191,206,133, 11, 23,144,145,166,172, 42,142, 14,143, 80, 86,162, - 28, 40,225,152,140,198, 60,219,221,231,202,149, 43,180,181,247,128, 7, 97,204,202,218, 26,237,110,151,195,195, 99, 70,135, 7, - 76, 70, 19,198, 69, 73,107,105,153, 64, 90, 2,145, 80,140,135,148,121, 78, 18, 69,244, 78,143, 9, 34, 47,184,137,195, 24, 83, - 26, 42,235,125,186, 73, 28,205,159, 75,129, 6, 43, 49,214,135, 33,197,129,194,133, 26,161, 36,163,254, 16, 25, 38, 4,113,131, -180,213, 65, 69, 30,192,132, 48,216,162,172, 33,222,222,135, 92,245,143, 40, 42,129,176, 16, 33,168, 78,143, 24, 31,157,208,110, - 47, 49, 50,138,157,237,199,180,150, 87, 25,143, 5,121, 81,113,216, 31, 16, 3,101,173,122, 6, 31,119,234,156,165, 2,138,170, -170,245, 58,110,158,187,237,106,190,186,181,243,161,173, 93, 8,216,174, 31,170, 90, 41, 60,174,205,175,179,132,146,117, 58,156, -191,149,128,182, 14,237,220,124, 93,167, 36, 73, 18,146, 54, 27,164,205,152, 36, 13,137,131,192,219,221,116, 77,169,115,204,194, - 70,100, 61, 98,182,206,177,177,177,234, 11,191,242, 96, 91, 36, 56,231, 69,155, 69,225,234,125,115,229,131,112,106, 28,113,187, -211, 34, 47, 10,140,181,148, 85, 70, 85,131, 81,122,189, 62, 43,235,107, 88, 99,234,136,223,105,238, 54, 68,137,207, 82,111,196, - 1, 73, 28,113,106, 13,189,147, 35,210,225,128,230,210,178,255,123,206, 68,195,202,243, 13,148, 23, 42,250,169, 28, 47,168,199, - 95, 22,200, 53, 45,190, 30, 23,187, 80,176,103,153,223,117,145, 23, 11, 7, 5, 83,213,244, 55,137,181,117, 34,155,162,254, 89, -228,236, 58, 63, 31,191,139,217,152,155,218, 17,180, 32,118,127,113,120, 56, 19,180,217, 25,252,101,241,128,114,230,107,215,126, -242,105,199, 34, 22, 28, 61, 78,120, 54,187,155,122,209,241, 28,122,165, 3,148, 14,113,218,179,232, 61,211,126,177, 51,167, 22, -194,185,121,170,220, 66, 3,227,157, 67,115,113,162, 53, 22,170,106,166,216,175,234,107,161, 88, 16, 20, 71, 81, 72, 20,134,158, -199, 47,181,103, 64, 56,191, 75,119,211,223,161,142,178,157,254,157,212, 87,222,186, 62, 87,191,207,216,239,191, 66,177,172,215, - 45,175, 4,145,204,162, 92,197,108,196,193,153,127,155, 27,250,103, 74,122,196,130, 95,241,243, 1, 39, 51,228,236, 66,254,187, -156,126,205,197,183,153,127,204,162,250,112,254,115, 45, 62,232, 28,227,241,152,213,245, 85, 62,254,228, 19,110,221,126, 13,235, - 12,205,102,194, 96, 52,161,215, 31, 35,129,188,172,102, 39,207, 40,128, 52, 82, 40,229, 24,142, 75, 10, 99,169,156,163,114,130, -106,106,147, 88,176, 69,156,241, 41,178, 8,106, 17, 47,245,239, 77, 42, 71, 6, 88,167,145, 42, 32,142, 35,110, 95,218, 98,171, -147,114,255,179, 95, 80, 81, 50,182,134,222,184, 68,138,128, 36,136,209, 58, 68, 68, 17,205, 72, 32, 84,194,239,254,238,239, 19, -152, 62,159,252,205,191,243, 23,210,124,130,106, 47,161,210, 14, 81, 28,123,175,227,212,141, 34, 4, 74,168, 41, 40,105,129, 69, - 48,127,162, 77,199, 97,110,150,116,196,108, 28, 53, 67, 74,184,197,212,188,133, 0, 31,225, 59,139, 64, 7, 40,225, 89,216,178, -254,223, 31,182,132,135,199, 88, 3,213,132,227,253,199,236, 61,125,204,100, 48, 34, 31, 79,120,242,100,151, 86,187,139, 83,240, - 96,251, 1,131,209,144,175,125,229,235, 72, 39,137,164, 96,181,157,114,101,107,141, 75, 23, 55,121,182,183,199,195,157, 61, 78, - 39,185,255,153, 42,131, 40, 42, 4,142, 92, 8,172, 18,252,225,175,127,157, 91,183,222,100,229,242, 13,156,140, 57, 56,236, 51, - 25, 14, 17,229,152,231, 15, 63,161, 24,247, 41, 69,196,250,250, 26,215,174, 93, 37,142, 35,226, 36, 97, 48,202,113, 42, 98,169, -211,228, 96,239, 57,171,203,203,100,147, 49,195,126,143, 73, 54,228,225,195,251, 96, 75,180, 51,188,249,250,109, 2, 29, 82, 89, - 71,175, 63,230,218,205,215,249,250, 55,126,155, 27,151, 86,185,116, 97,147,183,191,248, 14,105,163, 77,146, 54,249,163, 63,250, - 35,190,244,206,219, 44, 45,181, 57, 61, 60, 96,112,210,227,228,224,216, 31,172,108,197,210,210, 50, 82,135, 52,151, 86,137,147, - 20, 33, 4,141, 36,193, 86, 21,194, 73,164, 80,116,151,150, 9,226,136,167,207,158,211,104, 52, 89,233,116, 73,211, 24, 21, 5, - 76,202, 49,213,120,132, 14, 98,114, 35,217, 63,234,209,104,117, 80, 74,162,181, 67, 58,203,179,167, 59, 4, 90, 34,149, 47, 0, - 40,141, 74, 27, 68, 73,196,160,183,135, 41,115,198,131, 30,227,222, 0,165, 3, 12,146,194, 58,194,164,141, 10, 4,194,142,113, -147, 19,164,153, 32,109,133, 48, 14,161, 2,138, 94,159,225,254, 51,196,104, 64,104, 5, 39,123, 39,228,227,140, 48, 12,184,243, -233, 67,118,159, 62, 37, 9, 66,150,215, 47,240,183, 63,253,136,187, 59,123,100, 8, 10,111,141,198,212,220,114, 89, 23, 74, 35, - 37, 85, 29, 28,211,144,130, 20, 8,177,196,145, 32,136, 4, 42, 0, 33, 53, 82,251, 92,115, 85, 3,174,230,164, 74,133, 22,158, -164,167, 23,108, 89, 82, 80, 7,203, 40,132, 82, 53, 14,213, 39,145, 37,105, 72,146, 4, 36,145, 23, 35,106,165,234,224,151, 26, -118, 5, 53,164,198,135,236,248,127,241,163,213, 31,252,248,199, 32, 13,105,172,144,206, 96, 41,144, 74, 16, 71, 33,163,193, 8, -173, 44,157, 86, 64,218,140, 80,129, 70, 74,201, 56,203, 22,246,203, 32,180,194, 10, 75,101, 42, 86,215, 86,105,180,154, 12, 39, - 57, 82,133, 32, 3,156,138, 16,182,242,250, 24, 83, 50,169, 12,195,209,136,165, 86, 74, 99,105, 13, 84,224,249,249,128,176, 22, -105,166,236,115,127, 40,168,147,189,253, 36, 99,198, 63,119, 24,103, 48,206,212,120, 93, 59,243,110, 79, 35,101,167, 0, 30,234, -152,210,217,248,184, 86,148,155,202,103,131, 87,149, 7, 68,205,148,229, 51, 45,141,152,209,215,102, 96,150,154, 39, 98,107,181, -185,127, 41,102,215,205,133,245,247, 44,173,117,106, 41, 51,142, 51,202,117,235,188,150,196,213, 7, 17, 31, 53, 59,133,204,185, -217, 53,203, 78, 15,136,245,251,164, 20,179,224, 26, 21,134,232, 48, 66, 69,145,143, 30, 14, 3,164,214,200, 32, 64, 6,254,250, - 44,180, 94,232,228,107,168,215,140,140,167,144, 4, 11, 62,123,131, 41, 43,138, 44,103, 50, 26, 51, 30,101,245, 52,216, 32,165, - 35,136, 20,141, 52,245,215,156, 56, 34,136, 60,212,103, 74,214,155, 89, 4, 22, 88,242,214,190,180, 83,255, 15, 11,235,248,229, -193, 29,175,136, 74,253, 15,144, 82,203, 87,236,204, 63,247,251,212,177,118,159,247,243, 76,199, 55,135,135,135, 92,185,122,149, -239,255,224,251,152,202,210,105,119,249,253,223,249,117,126,248,147,159, 51, 24,103,236,236,157,208,104,132,228,121, 73, 26,135, -140, 71, 25,205,134,166,213,212,244,199,134,204,250,113,254,116,244, 50, 61, 64,184,151,237,149, 23,100,150,139, 58,139,133,180, -122, 2,169,145, 50, 34, 12, 18,214, 59, 93, 46, 46,175,240,224,211, 15,177, 78,211, 47, 44,163,162, 68, 7, 9,145, 14,125,192, - 71, 85, 16, 71, 13,130, 32,100,105,117,141, 75,155,235,124,250,131,111,162,170,146, 98,148, 99,131,152, 50, 43,105,175,198, 51, - 61,196,212,199, 63, 61,232,136,217, 40,108,170,242,116,243,184,195,133, 95,230,151,133,188,156, 5, 15,205,127, 65,255,196,178, -190, 59,159,158,210,165, 63,116,185,202, 98, 5, 84, 98,194,120, 60,228,248,244,148,227,253, 67,146,102,147,181,181,117,162, 70, -202,147,135,219,132,129,228,194,214, 38, 0, 43,221, 54,225,205, 43,252,224, 71, 63,224,163,143, 63,228,181,183,222, 98,125,115, -139,143,238, 63, 70, 66,125,241,118, 52,227,144, 40,110,241,240,228,104,198, 97,119,245,250,165,217,108,112,237,234, 37,218,141, -132,167, 15,239, 17,134, 1,135, 7,251,136,164,226,143,255,248,127,202,163,199,143, 56, 58, 29,112,177,189,194,214,214, 50, 89, - 94, 16,104,191,119, 29,141, 70, 88,107, 56, 57, 57, 33,155,140,248,194,155, 95,160,170, 74,194, 32,100,239,240,132, 40, 74,185, -127,255, 17,121,101,248,226,151,127,141,103,207,118,168, 58, 33,173, 78,135, 34,207,185,116,233, 34,171, 43, 93,202,124,194,206, -206,128,209,224,196,175, 95,218, 13,180, 22,156,158,156,178,178,113,153,184,213, 32, 77, 83,156, 84, 28, 31, 30,128, 21,228,101, -233, 5,120,194, 99,117,173,113, 36,113,147,110,123,137,254,209, 49,131, 86,155,200,116,168,108, 6,182, 64, 83,225, 76, 70, 62, -156,112,122,112, 72,167,145,144, 73, 75, 18, 72,146, 56, 37, 12, 2, 4, 80,149, 37,133, 49, 36, 74,227,202,138,102,103,153, 75, -151,111, 83,142, 70, 80, 86,228, 89, 73,152, 44, 65,146,210, 31,103,236, 61,127, 76, 26, 41,218,141, 0,107, 10,100,160,144, 81, -138, 11, 19, 2, 52, 74,104, 76, 86, 48,177, 32, 74,141,112,138,113,110,184,247,222,251,156, 14, 74,210, 32,226,224,176, 71,145, -244,104,181,154, 72, 41, 48,204, 5, 69, 98, 81,225,140, 32,175,170, 25,182, 83, 46, 60,179,220,172, 56,212, 13, 0,194,103,169, - 27, 11,202,183,122, 66,250, 80, 15,185,144, 30,168,132,207, 88,240, 97, 34,211,242, 54,199,152, 74, 89,235,198,102, 42,233, 57, -176,107,234,117,246,235,170, 69,198,131,159,115, 53,155, 13, 58,157,132,227,211,156, 40, 14,145,194, 96,132,164,178, 22, 89,239, - 89,157, 5, 29,104,194, 40, 4, 28,147,108, 76,229,115,101,209, 73,128, 20,130,102,154,208, 72, 35,132,242, 22,199,209,104, 12, - 50,102,156,229,158,143,110,125, 94, 64,145,151, 68,113, 76,179,213,230,232,228,132,221,157, 39, 52, 46,222, 66,117, 34,144, 96, -133,239, 62,167,182, 42,127,171,234,177,112,173, 86,183,102, 6,116,153, 93,155,220, 66,218,218, 2, 71,126,206,173,224,140,247, -219, 88, 75,105, 43, 42, 99,235, 76,112,127,223,123,148,183, 79,203,243, 59, 99,102, 4,208,185, 2, 78,128,176, 11,187,233, 5, - 21,246,204, 19,255,178,107,233,220,101, 53,229, 54,156,209,126,205,214,185, 51,122, 12,118,186, 18,119,211,221,116, 77,186,155, - 98,115,235, 98,173,130, 0, 57, 45,230, 82, 46,236,213,231, 63,147, 19,188, 32,254, 19, 83,167,128,153, 78, 16,252,164,215,212, -246,188,178, 40,168,202,114, 54, 85,208, 90,215,214,181,136, 40,142, 8,194, 96,102, 33,180,214,250,239, 61, 19,203,177,144, 34, - 40,255,227,138,250,226, 69,253, 87, 45,232,175,202, 96,255, 15,249,158,159, 71,146,251,187,124,205,121,247,239, 69,115, 85, 85, -113,112,112,192,213,107, 55,217,126,244,136,131,131, 3,222, 88, 93,225, 79,254,193, 31,242,139, 15, 62,102,216, 31,209,106,198, -244,156, 33, 14, 52,185,112,140, 71, 37, 6,203, 82, 39,102, 48, 41, 25,101,211,196, 35,102, 10, 73,193, 89,167,196, 25,251,223, - 34, 88,199,205,134, 65, 88,169, 64,249,136,199,164,145,210, 94,238,240,225,167, 31,225,138, 49,253,172,100, 92, 9,156, 12, 17, - 65, 92,243,157, 61,250,210,228, 25,101,220,228,107,239,190, 75,126,114,192,254,195,251,216,211, 1, 69,238, 80, 97, 76,179,213, - 69, 7,122, 78,134, 2, 76,189, 18, 88,100,200,201, 26,174,224,147,132,188,112, 69, 44, 60, 41,126,149,195,220,252, 99,220,236, - 52,108,140, 57,147,252, 55,101, 35, 91,235, 48,202, 80, 97,193, 12, 57, 62,237, 97,156,224,205,119,222,101,255,228,148,103,123, - 61, 78,203, 67,110,222,184,198,241,233, 17,131,222, 49,163, 65,143, 73,239,132,241,224, 4,107, 13,247,158,236,242,217,206, 62, -173, 78,147, 48,212, 20,121, 73, 35,142,184,118,101,147,209,225, 17, 43,203, 43, 60, 27,156, 82, 86, 5, 15, 30, 62, 97,173, 25, - 48,204,134,100,147,130,131,131, 67,138,118,155,253,195, 35, 94,187,121, 5, 25, 68, 8,157,250,117, 64,148,178,179,127,194,187, - 27, 91,116,187, 29,222,255,249,207,216, 27, 58, 90,205, 22,159,125,246, 25,214, 86, 76, 38, 19, 54, 55,215,105,181,219,236,237, - 31, 97,149,230,198,229,235, 4, 58, 66,132, 41,173,118,135,225,176,135,192, 50,206,115, 30, 62,122, 68, 86, 20, 8, 41,137, 3, -133, 80, 14,147,141, 49,197, 24, 25,104,202,210, 39, 73,201, 64, 51,204, 38,112,122,204,178,116, 4, 65,224,173, 83,206, 71,195, -234, 32,194, 9, 73, 81, 26,132,146, 68, 82,243,218,235,111,208, 59,220,231,224,217, 83,242,227,125,146, 36, 32, 74, 52, 74, 24, -132,132, 52,212, 8, 91, 49,236,247, 89, 93,233,210,104,166, 20, 89, 49,243,164,107,165,200,202,194,235, 16,148,194, 88, 72,146, - 46, 38,243,182,215, 32,145, 4,141, 54,193,242, 50,205, 36,226,224,209, 39,220,127,255,231, 92,189,184, 73, 24, 40,162,118,155, -184, 25,161, 90, 93, 48,150,114,239, 25,157,118,151,225, 96,200, 73,127,200,160, 95,176,253,244, 57,207,119,119,113, 68,236,229, - 99, 58,221, 46,147, 96,159, 75,155,155, 72,103, 49, 82,188, 18,126, 48,189, 40,215,129,194,117,188,170, 91, 24,169,158, 21, 99, - 10,177,112,120,150, 32,164,171, 9,155, 83,142, 6,179, 12,117,191, 14,247,108,244, 25,155,124,154,186, 85,115,195,103,250, 24, -103,193,201, 89, 69,147,181, 5, 10,225, 15, 14, 86, 64,154,198,172,173,109,114,218,239,163,181,255,126,121,105, 65, 24,202, 98, -136,192, 18, 6,126,122, 96,141,171,133, 83, 10,165,124, 65,213,218,143, 93,139,124,226,243,203,163,148,201,100, 76,220,234,146, - 52, 27, 88,153, 48,201,124,103, 61, 25,143,104, 38, 33, 97,160, 25, 13, 6,172, 46, 45,131, 51,156,238,239,177,210,104,249,131, - 31,202,107, 0,132,244,226, 56,177,144, 15,238,230, 33, 40,212,209,166,130,233,235,102, 30, 87, 90, 23,118,129, 15,178,169, 21, -101,115,143,183, 49, 84,166, 34, 55,198, 23,175,202, 31,150, 68, 29, 20,166,181, 68,217,169,112, 78,212, 33, 37,246,108, 77,145, -212, 89, 32,139,123,107, 57, 91, 17,138,151, 58,105,236,124,219,226,230, 96, 25, 49,157,156,202, 41, 57,110, 58, 73,117,245,225, -112, 58, 81,173,127,223, 26, 46, 51, 61,244,248,226,174,124, 65,215, 26, 37,213, 89, 1,223, 20,190,229,206,234,139,112,130,105, - 22, 13,194, 79, 72,168,168,173,104, 21,121, 94, 80,148,229, 52, 54, 21,132, 36,138, 3, 26, 13,239,172,137,162,144, 32, 12,234, - 76,142, 57, 75, 96, 90,196,173,181, 24,231,127, 39, 45, 4,234, 43,111, 94,251, 51,177,208,173, 73,241,226,248,253,101,187,238, -105, 52,235, 43,247,226, 47, 41,224,191,140, 36,119,198,167,254,119, 12, 13,249,101, 69, 93, 44,128, 13, 94,246,223, 20, 78,224, -247,187,150, 60,207, 25, 12,134,108, 93,184, 8, 66,242,209, 7,239,227,140,225,237,183, 94,227,250,213, 11, 44, 45,117,120,244, -104,135, 40, 20, 40, 5, 81, 44,177,206,162,148,156,243,144,234,199,150,173,255,232,103, 18,131,197,130, 74,112,190, 97,175,199, -208,211,222, 94, 98,165,223,229,133,113, 68, 26,135,156,158, 28, 96, 77,129, 16,142, 78,154,208, 8, 34, 42, 83,160, 2, 69, 24, -132, 40, 37,137,226,216,195, 79,226, 54,191,245,181,175,242,217,143,191,207,224,217, 99,108, 54,162,114, 2, 17,183, 89,185,176, - 85, 63, 73,168,187,242,179, 20,191,179,194, 70,177,240, 0,125,113,218,240,178,191,211,249,195,222, 89, 77, 5,103, 68,147,182, -182,148, 88,252, 94,201, 86, 53, 87,220, 22, 30,145,185,177,201,234,250, 22,143,118,118,217, 61, 56,229,176, 55,224,181,219,215, -185,124,105,147, 34, 27,147,141,199,108,173,118,217,121,242,152,251,219,207,200,157, 32,171, 44,227, 44, 99,115,109, 9, 76,133, - 53,150,219,183,175,211, 74, 18,118,182,159, 50,204,115,140,115, 44, 37, 33, 87,214,155,148,217,128,211,147, 99,182,183,159,211, -235,245,201,178,220, 67, 99,242,146,102,146,162,195, 24,161, 67, 94,123,227,109,150,150, 58, 28,237,239, 50,238,159,210, 72, 18, - 26,141, 6, 65,160,152, 76, 38,164,105,138,177,176,191,127,196,164,116,220,120,253, 11, 76,242,146,241,100, 66,210,104, 80, 85, - 37,227,225, 0, 37,125,138,218,120, 50, 97, 60, 30,251,168,214,110,155, 36, 84,196,181, 13, 12, 87, 17, 69, 17, 89, 89, 18,196, - 17,173,118,139, 70,171, 65,220,136, 9, 2, 69,158,141,145, 66, 50, 26,101,196, 73,138,142, 99,226,110,151,168,219, 37, 76, 83, -194, 52, 34,141, 2,170,201,152,227,253,231, 12,251, 61,242, 34, 99,156,229,232, 40,197, 10, 77,179,189,196,165,203, 87,232, 13, -250, 76,242,156, 70,146,210,235,157, 50, 25, 15,105, 52,210,153, 2, 92,214, 65, 74, 85, 89,113,116,112,136, 84,202,231, 39,216, -202, 31,244,176,164,237, 38,174,170,184,243,225,135,104, 1,166,170, 72, 58, 45,100, 26, 49,216,221,165,236,251,125,254,233,201, - 41,187,187,199,140, 39, 21,219, 79,159, 49, 24,141, 41, 42,199, 36, 43, 40, 12,232, 56,101,253,226, 69,190,253,253, 31, 50,169, -217,221,226, 37,207,105, 41,188, 34, 59, 5, 90, 66,146, 58, 71, 32, 28, 97, 44, 8, 34,252, 8, 94,249,189,177,174,113,166,126, -205, 16,204, 66, 75,180,244,209,161,179, 0, 40, 37, 9,234,192,168,249, 77, 17, 6,154,112,154, 44,168,124,158,250,148,191, 61, - 87, 33, 79,187, 77,234, 24,206,233,229,222, 23,164,147,211, 30,159,124,114,151, 40, 22, 4,129, 15,204, 18,206,145, 77, 74,180, -128, 78, 59,160,145, 70,196, 81, 68, 16,120, 4,172,172, 69, 84, 74, 43,159, 83, 30, 40,138, 44, 35, 77, 83,242,162,162,217,234, -208,232,172, 48,202, 42, 31,234, 97, 44,152,138,241,224,148, 64,250,131, 76,239,244,132, 70,154,226,100,136,147, 1, 81,163,225, - 53, 69,198,131, 97,140,173,176, 85, 89,115,207,167, 72,212,233,104,221,205, 96, 53,206,212, 42,118, 83,199,219,205, 84,107,204, -198,218,214, 24,170,178,162,170, 12,121,145, 83, 20, 37, 69,101,234,125,177,155,141,222,221, 57,176,213,220,250,181, 48,232,168, - 73,115,178, 30, 93, 11,181, 48,210,174, 51,214,133,170, 71,221,211,247,207,166, 15,117, 14,187,156,142,192, 61,132, 72,214, 31, - 43,245, 52,163,125, 26, 32,230, 31, 15, 98,118, 77,156,186,215,124, 49,215, 65,128, 10, 3,180, 14,145, 97,136,210,122,246,253, - 56, 51,241,152,130,101,196,188, 8,203,179, 84, 86,172,197,150, 37,101,150, 51, 25, 79, 24, 14,134,140,199,153, 7, 67,213, 89, -233,141, 70, 99, 6,154, 9, 34, 31,146, 51, 75, 60,149,114,150, 47, 63,251,221,102,135, 15,241,119,235,212, 95, 68, 8,126,206, -216,253, 87, 96,179,191,236,243, 22, 11,199,171,124,234,159,215,157,159,231,204,159, 69,233,189, 98, 44,239, 94, 20,222, 9,169, - 41,178, 9, 15, 31,109,179,190,177,193,173,215,110,115,255,222, 93,238,222,253,148,203, 87,174,240,214, 23,222,161,119,114,130, -113,208, 27, 14,121,250,124, 31, 29, 4,228, 69,229,193, 11,211, 81,224,212, 50, 40,230,209,129, 66, 74, 92,101,102,234,123,137, - 34,212, 1, 81,168, 73,227,152,205,245, 53, 90,205, 38,205,102,131, 88, 7,132,202,119,155, 85, 62,193, 86, 57,137, 22, 72, 42, -170,201,152,147,222, 0,179, 59, 96, 76,137,146, 33, 82, 70, 32, 67,180, 84,124,229,157,183,201, 79,143, 48,163, 30,161,150,156, - 76, 10,140, 82, 92, 88, 91, 67, 6, 1,142,170, 22,159,212, 97, 14,245,207,123,126,154, 32,241, 86, 23, 41, 36,182, 6, 64,136, -255, 80, 0,205,194,254,171,114, 53, 76,194, 85, 88,235,247,185, 66, 20, 20, 40, 86, 90, 13, 58,157, 14,250,198, 13,164, 12, 56, -233,143, 73,218, 29, 84,120,194, 86,171,193,238,147,135, 92,186,188,193,181,139,235,188,255,243,143, 56,221,221, 38,203,198, 30, -124, 97, 45,129,242,118, 17,229, 44, 95,126,251, 13,222,255,232, 62,119,239, 63,224,205, 27,215,144, 74,146, 4, 17,216,146,167, -251, 71,244,250,125, 98,237,187, 28,225, 42, 70,195,138,215,110, 93,227,254,189, 7,196,161, 38,137, 18,198,253, 30, 78,231,132, - 23,182,216,127,246,132, 34, 27, 83,149, 19, 70,253,130,165, 78,139,141,181, 21, 76, 85, 48, 24, 78, 56, 29,140,184,125,251, 45, -110,220,126,131,195,126,143,162,202,201, 38, 99, 70,227, 49,221, 78,147,102,171,225, 35, 91, 11,203,104, 56,100, 50, 26,210,109, - 94, 66, 73,136, 2,237, 17,159,213,132, 34,207,193, 66, 85, 25, 86,214, 87, 89, 89, 93,165,211,109, 16, 54, 83,156, 53,104, 37, -232,159,244,121,178,189, 77, 81, 22,172,172,173,211,136, 52, 40, 80,177, 36,141, 83,146, 84,161, 92,142, 20,190, 35,159, 88,135, - 54, 10,167, 99,134,195,156,113, 86,176,113, 41,164,213, 93,225,228,248,144,172, 40,217,216,220, 96,216,239, 81,230, 57, 81, 28, -121, 15,186, 9,252, 20,171, 24, 81, 85, 99,156,211, 88, 39,252,110,184, 20,136,202,129,141,184,120,245, 6,249, 96,128, 43, 38, - 4,129,226,224,193, 29, 86,243, 33,249,201,136, 88, 69, 28, 30,159,114,116,112,196,233,241,136,225,216,208,105,119,184,118,253, - 42,237,165,117, 14, 14,142,216,217,217, 99,127,239,128,139, 55,110,114,109,107,131,147,135,219,152, 26,126,240,130, 45,201, 89, - 2,152,119,234, 51, 97,149, 23,169, 77, 53, 54, 74,121,136,135,146, 83, 50, 37,179,177,253,153,116,199, 89,168, 20,103, 83, 30, -235,232, 99,191,225,117,179,215, 93, 29,238, 98,235,189,128,143,117,102, 30, 70, 82,119,129, 8,223,229,126,225,173,155,252,197, - 95, 42,170, 58, 60, 68,105, 95,132, 3,237,136, 18, 77,146,250, 61,173,115,194,243, 2,234, 56,211,162, 40, 25, 14,135, 4, 65, - 64, 26,199, 52,146,148,210, 89, 66, 29,242,124,119, 23,226, 14,113,107,133,124,144,213,227,115,195,120, 52, 32,148,150, 64, 75, -132,173,168,138,140,234,244, 24,157, 54,105,173, 45,123, 75,219, 76,192,101,235, 14,211,205, 58,242,105,122,218,180, 83,199,214, - 29, 58,211,174,125,225, 99,157,243,251,242,169,232,213,152, 26,138, 82,249, 21,219,153, 16,147,186,229,153,142,213, 49, 88, 33, -234, 14,254,108,147, 39,153,194,208,234, 2,166,117,173,145,168, 11,153, 80, 47, 88, 99,231,161, 42,204,220, 52,152,133,152,214, -233,238,121,193,244,238,106,208,146,135,239,212, 52, 58, 83, 97,169,167,137,114,161, 99, 87,211, 72, 88,127,112,152,206, 96,167, -186,128, 41, 88,118, 38,140,147,202,139, 54,133,156,221,167,198,121, 96, 76, 85, 86,228, 89, 70,158, 23, 84,198,103,126, 4, 90, - 19, 39, 33,141, 52, 33, 77, 19,162, 36,170, 19,249,228, 75,189,252,174,158, 44,251,169,176,197, 34,254,227,199,239, 47,219,173, - 47,178,115,255, 46,176,152,207,251,122,159, 87,132,207,115,229,127,149,145,240, 75,119,245,103, 50,225,189, 77,164,172, 10,182, -159, 60,101,121,185,203,151,191,250, 53,118,158,108, 51,232,247,249,214,183,254, 2,165, 34,110,189,241, 22,151,116,192, 59, 95, -137,217,219,223,103,111,239,144,131,227, 19, 38,165, 99, 48, 46, 25,229, 5, 69, 81,224,156, 35,144,138, 40, 8,137,163,136,102, -210,160,211,110,179,190,178,194,114,203,147,162, 54, 86, 87,112,182, 32, 14, 3,194, 64, 49, 26,244, 49,167, 99,154, 74,163, 27, - 41, 46, 14, 72,211,152, 40,148,140, 70,125,246,158, 63, 35, 90,238,178, 55, 30, 48, 25,231,181, 53, 66, 2,154, 86,218,226,107, -239,188,197,163,143,126,129,166, 98, 48, 24,114, 50,201, 88,187,176, 69,123,185,141,169, 31,176, 47,216, 4,234,251,206, 56,247, - 82,154,212,116, 66,227,220,231, 41,223, 95,181, 83,159, 27, 51,172,243,214,163,178,242, 79,124, 89, 85,136,210,219,194,172, 19, -164, 27, 43,148, 69,238,187,222,195, 99,242,194,177,178,182, 65,150, 25,168, 12,199,135, 59,244, 14, 12,169,190, 64,255,232,144, -163,211, 17, 73, 51,225,234,149,203,228, 15,158, 98,113,148,206,146, 15, 70, 92,187,116,137, 94,191,224,209,222, 99, 84, 24, 34, -148, 98, 99, 99,139,251,207,183, 57, 26,100,236, 30, 28,177,218, 12, 56, 61, 61, 69, 74,199,107,183,175, 98,138,138,102,218, 96, -125,117, 5, 37, 65,216, 10,105, 39, 28, 60,185, 79,220,104,208,239,247,216,126,178, 77, 43,138,113,101,206, 96, 50, 98,152,229, -116, 87, 54,248,181,175,255, 38,235, 27, 87,113, 2,214, 87,215, 25, 14,250, 76,226,144, 97,191, 71,167,211, 38,137, 2,156,181, - 76,198, 19,180,128,201,160,135, 18, 80,140, 39, 36,237, 38, 42, 8,105,164, 45, 34, 29, 82, 10, 77,117, 60,164, 42, 12,249,100, - 66,166, 29, 26,131,108, 36,196,141,148,163,231,251, 8,107,201,134,125,250,210, 34, 69, 65,212,108, 33,226,168,134,159, 56, 26, -203, 93, 92,101,185,116,243,150, 39,179,229,254, 62, 95, 14, 27, 60,250,233,207, 88, 90,238,178,178,186, 76,187,213,244, 83, 4, - 97,233,180,219,117, 58, 89,133, 41,189,111, 93,106,197,184,127, 66,153,143, 40,148,240,116, 43,101, 9,173, 68, 25, 65, 89,121, - 31,242,149,235, 87, 9,147, 16,161,160, 56, 57, 98,114,218,163, 28, 21,156,244, 15, 41,138, 17, 59, 79,182,105, 52,150,104,196, - 1,221,213, 37,214,183,214,137, 27, 75,220,126,253, 13, 62,252,232, 14,159,126,252, 49,189,131,125,110, 92,190,200, 47, 30, 62, -193,204,184,113, 47,245,234, 16, 8,208, 78, 32,103,125,223,220, 93, 50,141,127,214,117, 74,163, 18,178,190,205, 35,153,103,201, -100, 51, 33,157,239,222,245, 20, 94, 83,167, 70, 6, 74,249,143, 95, 16, 39, 77,199,201, 30,143,106,103, 22, 41, 37,228, 28,182, -226, 44, 72,207,239, 95, 89,233,112,114,210, 99, 48, 46,104,183,197,255,143,182, 63, 15,178, 45,203,206,251,176,223,222,251,140, -119,204,155,227,155,199,154,187,186,170,171, 27, 13,160,187,209, 13, 98,224, 4,146,160, 56, 25, 33,202,142,160, 21,146,172,160, -100,202, 22, 35, 36, 51,108, 82,176,101,138,182,131,182, 34,172,160,109, 42,108,146, 22, 67, 38, 77, 75, 34, 65, 0,196,208, 0, -129,102, 99,238, 70,117, 87,215,248,230, 57,231,204,155,119, 56,243,217,123,251,143,125,238,205,155,111,170,106, 0,124, 21, 25, - 47,235,189,204,151,153,247,158,123,214, 94,107,125,223,239,195,247, 32,244,125,218,173, 54, 97,168,156,195,221, 44,218, 66,221, -247,150,101, 25,135,135,135, 76,253,128, 94,183,231,242,212,219, 17,203,253,101,242,100,138, 23,180,169,138,124, 94,152, 77, 93, - 49, 25, 13, 49,186, 34, 12,124,242, 52,193,215,138,122,122,132,201, 83,108, 16, 53, 66, 51,237,114,200,173,118,249,226,118, 6, - 52,105,210,233,230,130,184,102,204, 62, 35,178,105,219,196,205,186, 34, 94,206,132,112, 70, 83,107, 51, 79, 30,211,198, 56, 32, -144, 93, 88,103, 75,144, 86,206,199,232,139,214,230, 69, 31,182, 83,196, 59,161,163,242,124,188, 32,152,143,190,101, 99, 47,123, - 42,188,198, 28,123,231, 49, 11,150, 54, 99, 79, 22,245,230,227, 22,243,217,141,214, 24,221, 56,172,230,195,203,133,245,196, 76, -237,219,160, 10,197,252,106, 99, 65, 67, 65,179,162,108,126,110, 33,230,158, 45,219, 28,146,140,174,169,170,146, 60,207, 93,174, - 66,147,236,231, 41, 73,232,187, 92,122,223,247,241, 2, 31, 79, 57,107, 35, 70, 52, 7,150,153,248,207,233, 20,234,186,162,174, -106,167,160,175,170,223,191, 80,238,241, 66,251,188, 98,250,113,201,106,207,251,183,159,215,217, 63,175,208,127,215,163,251,249, - 40, 77, 97, 76,137,244, 20,121, 90,241,112,107,135,131,209,136, 23,175, 92, 38,242,165,219,181,239, 30,242,187,223,252, 38,227, -180,192,250,145,243,244, 10,151,134, 54,157,230, 24, 25,208,237, 14, 88,234,117, 88, 93, 30, 16, 72,111,206,176, 54, 85,205,232, - 96, 72,103,176,140, 30,238, 67,153, 51,206, 71, 96, 74, 90,107, 3,130, 56,160, 72, 71,248,158,143,148, 5,158, 39, 88, 90,237, - 35,149,160, 40,114,186, 43, 61, 42, 33, 25,151,134,112,146, 83, 23,123,120,210, 39, 80, 46, 45,234,139,159,255, 60,217,112,143, -195,237,135,228,195, 3,210,170, 66,181, 58,156,123,225, 42,149,117,214, 49, 99, 23, 3,114,142,145,186,207,154,118, 44,198, 34, -242, 60, 47,250,115,175,141,217, 94,157,185,253,197, 24,115,130,251,236, 71, 49, 82, 8,138,188, 36,203, 10,242,170, 34,205, 45, -249,193, 33,111,189,245, 22, 38, 79,185,117,173,198,146,243,224,206,117,150,151, 34, 14,199, 57, 59,195,156,149, 13,201, 43, 47, - 92,230,254,189, 59,120, 81, 68, 93,187,189,213,198,218, 6,219,163, 29, 90,189, 14,231,206,157,231, 32,169,168, 42, 67,107,208, -102,227,244,121,182,110,189,199,238,254, 24, 63,136, 48,218,242,240,254, 67,246,118, 19,170,188,164,211,141, 57,181,177, 6,166, - 66,231, 99, 70, 7, 30,155,123, 7,116, 7,203,140, 14, 15,209, 69,206, 40, 73,120,253,173,207,145,214, 32, 84, 72,105, 36,107, -171,203,100,211, 67,164,176, 40, 33,104,181, 34,130,192,169,176,181, 53, 40, 41,177, 85, 77, 54, 77,200,166, 41,129,144,174,131, -147, 18,169, 11, 60, 9,165,209,164,211, 12, 63,156,128,169,169, 83, 69, 62,242,232, 44, 47, 17, 69, 29,132, 53,120, 66, 96,171, -130,108, 82, 35,109, 65,175, 46,240,219, 45, 84, 28,161,171,146,233,112,130,244, 66,132, 31, 35,140, 69,167, 71,110,204,170, 53, -159,123,243,117,118,119,183,217,223,188,195,153, 51,167, 81, 66, 80,100, 57,251, 89, 66,183,221,162,174, 43,198,147, 9, 23, 46, - 94, 66, 96,168,139,156, 42,203,169, 93,182, 41, 74, 10,200, 50,116, 93, 96,152, 98, 4, 20, 85, 73,105, 2,124,229,113,176, 63, - 34,159,166, 20,121, 5, 8,222,126,251,119, 57,181,190,206,229, 75, 23,152, 76,114, 52, 6,105, 75,246, 15,182,201,106,203, 27, -111,126, 26, 15,203, 71,215,175,241,202,213, 75,120,191,246, 59, 84,181,125,102, 65, 87,178,217,169,219, 38,231, 90,112, 34,154, -121,177,104,251,190,239,186,245,217,232,189, 97,101,203, 38, 75, 94, 45,100, 78,120,158,114,241,192,158, 71,224,121, 46, 67,126, - 30, 71, 58,147, 87,193,226, 92,107,190,207,229,120,173,230,104,116,238,127,195, 40,228,149,151, 95,230, 87,127,245,215,240, 61, - 9, 86,224,123,174, 59,243,125,247,245,132,176, 84,117, 69,150,229,148,101,133,148, 19,103, 57,140, 34,124,223, 35, 47, 74, 44, - 9,126,224,211, 89, 90,113,235,145, 32, 32, 79,166, 28,238, 29,208,110,119,208,101, 78,158, 78,241,132,161, 44, 50,186,221, 46, -121, 81, 48,240, 98,210,163, 3, 70, 7,187,116, 54,206,186, 14,118, 22, 39, 59,239,206,205,137, 14,214, 46,136,254, 26,105,185, -203, 28,159,241,240,171,138, 74,215, 20,245,140,149,110,169,141,105, 38,113,238,181, 62,195, 19, 99,229,241,218, 68, 41,231,249, -247,132,131, 20, 53,207,195, 19,124,121,207,195,107, 10,186, 23,132, 72,207,137, 65,133,242,142,197,115,246, 56,118,138, 70,245, -238, 14, 88,141,215,123,238, 91, 55,115, 81,159, 69,206,145,185,243,159,215,104,106,217,116,219, 86, 65,109,231,121,233,199,201, -117, 11, 5,125, 70,212,107,196,113, 98,150, 13, 43,142, 31,178,185, 54,207,184,207,213,141,141,183,174,107,234,210, 21, 99,221, - 8, 59,177, 26,235,201,147,252,150,198, 53,111,180,157,179, 66,102,150, 67, 99, 12, 85, 93,185, 67, 65, 85,163,107,167,233,241, - 62,238,198,252,180,142,121,150,204, 53, 59,161,184,166,107,129,185,142,192, 10,251, 68,162,218,227,239, 63,171,240,138, 5, 93, -252,252,125,251,201, 5,111,207,252,251,103, 6,136, 90,119,163, 53,218,141,229,132,131,100,120,190,196, 22,110,167,109,140,100, - 60,205,120,247,131,143, 88, 91, 30,112,233,210,139,172,174,166,220,187,123, 15,187,179,203, 81, 86,145,233, 18, 63,104, 17,199, - 93,150, 86, 78,145, 23,181, 67,193, 22, 83,134,155, 5, 82, 11, 76, 61,101,125,176,140,206, 45,171,237, 14,170, 44,145,182,226, -194,198, 58, 73, 58, 69,170,144, 78,167,139, 12, 44,101,230, 65,123,133,178,244,216,122,180, 73,125,176, 71, 81,104,100, 9,147, -236, 16,107,107,176, 33, 73, 97,209, 90, 56,101,169,134,183, 94,121,157,207,189,246, 2,111,127,253,231,136, 67, 77,233,149, 32, - 42, 78,157, 62,139, 84, 1,194,211, 77,135, 33, 23, 16,176,226,177,117,202,252,217, 61,126,238,231, 88, 96,158,185, 67,159, 79, -195,236, 66,151,143,120, 2, 54, 35,158, 66, 6,164, 81, 18,123,148, 84,233, 33,101, 54, 70,104, 75, 39,142, 40,138,156,100,120, - 64, 57,218,225,197,139,231,233,183,223,226,103,190,250,203,236, 31,142, 57,189,182,204, 11, 47,116,184,251,104,151,123,247,238, -243,153, 55, 62,197,198,218, 26, 69, 81,176,182,182, 70, 16,132, 92,188, 48,224,238,195,219,124,231, 91, 31, 81,214,240,112,103, - 7,133,229,220,234, 50,167,214, 87, 89, 31,124, 31,185,134,163,131, 67, 62,248,246,123, 76,143, 18,148, 23,178,113,238, 37,242, - 98,194,230,246, 14,203, 75, 1,217, 56,101,148,150,188,248,234,103, 88, 26,108,240,192,222, 39, 43,114,190,248,163, 63,196, 36, - 45, 81, 69, 77,232, 7,136, 50, 97,180,147,128, 45,144,166,164,204, 39, 76,167, 19,150,218, 1, 50,244, 41,210,140,113,146,242, -225,135,239,177,179,189, 73,232, 27,210,165, 37,150,151, 6,116, 90, 29,116,145, 18,248,146,189,225,152, 59,183,238,114, 54, 75, -241, 79,175,225,229, 30, 90, 26,166, 71,251, 68, 81,151,189,189, 49,214, 72,170, 92, 99, 77,133, 53, 25, 82, 23,116,203, 62,245, - 52, 36, 43, 53,211,164,116,200,221, 90,211,233,116, 8, 90, 49,217,116, 74,224, 11,202,124,194,114,223, 71,170,128,155,183,110, -113,246,204,121,124, 47,112, 97, 68,184,238,124,121, 53,118,104, 76, 21, 98,133,199,254,222, 30,182, 87, 18, 80, 83, 78,221,168, - 50, 8, 3,188,168, 67,220, 13, 9,100, 77,114,120,196, 48,133,233,184,162,204,107,134,147, 17, 55,111,188,195,122, 91,210,245, - 2,198,251, 83, 76,145,241,237,111,127,131,238,249, 53,118,139,138,187,143,106, 62,255,185, 47,241,249, 79,191, 66,119,107,155, - 94,110,241, 44, 72,229,138,132,156, 53,194,174, 30,162,180, 37, 68, 16, 2, 82, 24,172,180,120, 65, 83, 36,154,252,105, 23,210, -226,130, 90, 66,223,119,248, 77,165,240, 61,183, 55,119,232, 86, 80, 82,224,121, 14, 41,235, 73, 87, 96, 67, 79, 17,249, 77,193, -245,154,177,189,180,141,192, 78, 35,208, 11,118,220,153,120, 76,185, 53,149,173,221,168, 90,204, 60,233, 6, 91,151,188,249,153, - 79,243,213,175,254, 26,158, 39,145, 94, 72,220,242,177, 86, 99, 76,141,196, 39,244, 34,148,116, 32,153,162, 44, 9,131,192, 89, -253,165,219,221, 71, 81,136,231,123,172,172,172, 48,158,140,105,247, 6,120,190, 99,208,143, 71, 35, 66, 21,144, 36, 83,210,100, - 66, 24,184, 67,201,206,238, 1, 81, 24,145,249, 5, 86, 79,241, 14,246,104, 15, 6, 88, 33, 48,214,217,115,197,140,170, 54, 63, -164, 24,230,230,219, 70, 16,103, 76, 77, 93, 53, 5,169,210, 84,181,113,111,186,177,172,205,172, 99,218,162, 77, 35,124,117,225, -242,243,123,141,148,238, 49, 14,124,223, 29,148, 60,199, 94, 56, 25, 8,118, 76,251,148,205,115,163,148,155,226,121,190, 83,160, -179,208,169,243,216,228, 80, 44, 20,233,249,216,125, 70,170,107,132, 78,179, 53,175, 69,206, 15, 5, 86, 75, 60, 44,218, 72,132, -145, 14, 74,100,205,220,102,109,197,227, 52, 85,215,181,219, 5,225,253, 92,119, 47,142,189,233, 13, 82, 13,107, 53,162,174, 48, - 85, 69, 89,148,100, 69, 73, 89,214,232,218,173, 42,228,204, 97,161,196,252, 92,104,153, 97,110,157, 6, 66,155,227,201,137,174, - 53, 85, 81, 82,230, 5,117, 89, 82, 20, 37, 73,154,207, 58,117,203, 83,179, 83,159,163,110,183, 11, 65, 45,179, 88, 60, 33,143, -177,141,226, 25,251,246, 79,212, 65,219,199, 33, 53, 39,179,187, 63, 9,142,244,169, 66, 57,123,210,212, 38, 22,172, 7, 74,186, -109,136,108,152,246,206, 14,232, 46,172,249,248, 89, 42,180,134,131,225,152,233,244, 58, 27,171,107, 92,188,116, 25,164, 34, 30, -103,228,149,165,208,150, 52,175,152, 78, 15, 16,214, 52,169, 89, 62,186, 12,176, 70,208,237,247,233, 44,245,200, 18,139,242, 3, - 82, 37, 64,196,220, 62,156,242,112,115,135, 90, 73, 90,123, 9, 90,104,180, 82,156, 94,221,231,149, 83,151,121,245, 83, 47, 18, - 44,135, 68, 81, 15,175,244, 40,139, 67,134,201, 62, 55,111, 29,114,120,235, 33,190, 20,212,182,166,211,235,242,149, 47,126, 31, - 55,223,255, 6,117,145, 18,132, 6, 43,107,218,157,136,245,181, 85, 36, 2,109,155, 29,255,130,115,196, 46, 68,168,186,199,115, - 70, 44,122,172, 27,193, 60, 25,246,112,162, 43,159,101, 35,219,167,131,135,132, 61, 49,176, 58, 41,146,148, 72, 97, 80, 82,147, - 77, 15, 48, 85, 73, 94,104,130,238, 26,155, 15,239, 99,170,156, 95,219,121,200,206, 11,151, 57,125,241, 42,185, 86,236, 30,229, -148,213, 62, 47,190,112,149, 87, 94,238,130,144,236,238,237,242,234,235,175,115,255,222, 3,178,178, 36, 73, 82,206,174, 12,232, -181,218,124,235,131, 27,212, 65, 64, 73, 69,128, 37,148,146,241,209, 33,126,232,145,107, 15, 47,110,115,230,204, 41,246,212, 30, -175,189,249, 5,240, 91,148,197,136,124,188,205,189,251,219, 88, 33,185,242,202,167,105,119,150,201,243,130,238,234, 6,203, 81, -155,222,234, 89, 70, 15, 55,137,162,128, 98, 58,226,240,193, 77,148,208,244,250, 29, 74,237,180, 3,117,150,112,235,163, 15, 92, -212,237,116,194,112,154, 99,107, 77,224, 73,238,220,185,193, 78, 24,208,107,117, 24,116,251,116, 91, 49, 86, 90, 30,110,238,112, -227,214, 29,246,119,183,216,223, 90,229,252,198, 26,237,216,167,150, 22,233,197,236, 29, 36,156, 61,127,153,254,160,135, 31, 24, -194, 16,148, 46, 40, 39, 99,180, 10,217,220, 61, 66, 5, 49, 97, 20,129,174,240, 76, 13,190,135,173, 42,106, 93, 32,117, 14,182, -102,208,235,178,189,115, 68,154,230,156, 57,125, 26,165,124,132,231, 59, 46, 67,153, 83,150, 53,126, 20, 51, 88, 93,163,211,237, -146,229, 19, 54, 55,135,180,195,160, 57, 12, 10, 58, 75, 78,164, 38, 84, 69, 54, 26,115,176, 95, 98, 76, 72,150,103,220,184,246, - 17,235,203, 29,206, 14, 58,236,236, 76,184,113,247, 1,247,223,255, 22,210, 76,121,248,155, 21, 63,252, 19,127,138,247,174,125, -139, 95,252, 87,223,226,223,255,159,254,121, 94, 58,123, 17,243,112,151,192, 19,140, 43, 59,183,119,206,189, 36,214,226, 3,109, - 43, 8, 48,168,230,192,233,249, 2, 95, 57, 22,130, 43,222,222,188,128,184, 78, 93, 54,157,177,239,138,250, 66,119,174,148,112, -161, 56, 74,225,251,146,208,243, 8, 2,255,248, 0,224, 9,100, 19,115,234,186,239,153,250,219, 28, 19,173,172,152,251,136,133, -112,194, 50, 7,189,114, 74,233, 75,151, 47,178,188,178,194,193,225,161,251, 88, 41, 9, 61,133,174,116, 83, 59,221,194, 63,140, - 34,172, 53,132,161, 19,206,185,216, 83,195,210, 82,215,169,165,203, 28, 79,133,132, 97, 76,109, 96,154, 37,148, 85, 69,154,164, - 76,198, 83,234,170,164, 44, 44, 81, 20,114,247,222, 3, 46, 95,186,194,209,120, 10, 65, 1,251, 17,131,245, 85,252,184,229,198, -232,186, 65,182,218,227,159, 71, 10, 48,194,117,143,218, 84,232,202,165,247, 85,101, 77, 85,105,106,109,155, 4,187,153,239,156, - 38, 76,199, 21,115,151, 92,214, 8,221,154,201,136,106,220, 5,158,146, 4,158,215, 60,174, 22,185, 80,212, 23, 39,122,199,177, -172,199,188,120,169,164,131,101, 53,246,183,199,239, 65, 39,128, 57, 66, 52, 60, 17,231, 68, 16, 13,113,205,206,199,237,179, 90, - 44,221,250,193, 26,164,146, 88,237, 78, 19,194,136,199, 16, 34,143, 37,174,205, 19, 91, 30, 11,148, 17, 11, 46,167,230,123,192, - 2,181,198,150, 5,117, 81,144,101, 5,105, 90,144, 23,181,195, 69,131, 19, 99,134, 1,126,232, 8,134,110, 16,177,144, 0,103, -155,188, 89, 26, 81,119, 93, 83, 21, 37, 69, 86,144,167, 25, 89, 94, 50, 57, 46,234,207, 31,123, 63,107,156,122, 50, 1,109,241, - 99,142,207, 7,207,218,137,127,220,232,253,187,241,191,127, 55,251,250,231,126,238,194,110,253,216,230, 38, 23, 10,211, 73,140, -226,222,222, 30, 31,237,237, 53,113,150, 33, 74,122,116,130,136,186,212, 88, 33,241,195,144,192,119, 59,220,202, 10, 42, 11, 73, -154,178,157,108, 81,105,159, 86, 43,198,107,251, 12, 86, 79,113,106,101,153, 55,175, 92,165, 29, 69, 88, 91, 35,108,129,169,198, - 80,142,201, 39,143, 56, 74, 70,136,251, 9,168, 8,107,125, 98,175,162, 18,138, 23,174,190, 69, 86, 73,246,222,223, 71, 82,209, -137, 21,173,208,240,246,237, 15, 48,133,225,254,104,159,100, 50,226,226,197,203, 4,113,212, 4,182,240,196,228, 99, 14,231,121, - 26, 6, 86, 60,182, 50,121,202,116,231,120,100, 38,156,112,136, 5,134,191, 56, 38,234,205,195, 7, 22,174,157,217, 62, 83, 72, -231, 37, 71,212,140, 38, 19,103,183, 74, 75,178, 97,142,231,121, 76,211,154,131,105,206,230,239,126, 68,231,163,123,180,219, 45, -122,145, 36,140, 98,190,245,238, 45, 94,255,244,139, 92,188,112,145, 48,106, 83,215, 53,203, 43, 43,188,247,254,251,220,125,176, -197,133,157, 11,228, 70, 99,164,160,170,171,102,250,162, 57, 76,166,236,236, 31, 48,232, 68, 20, 86,145,166, 41,248,146,206,242, - 50,126,187,197,225,100,194,160,235,211, 10,214,152, 30, 37, 8, 17,179,182,118,133,241,100, 72,187,165, 8, 60, 15,105, 75,198, - 7,219,216, 98, 76, 93, 21, 12, 19,205,193,246, 67, 6,253, 14, 58, 11,153,100, 25,203,107, 27, 8,157,241,240,238, 29,238, 92, - 75, 49,149,166,213,221,160,191,212, 71, 88,197,214,214, 67, 36,134,126,167,197, 67, 1,173, 40, 38,108,181, 25, 79, 19,188,208, - 67,219,154, 71,219,155,152, 42,231,252,185, 51,200,184, 79, 59,236,178,185,123,135,163, 36,225, 13,255, 83,156, 57,179,238,216, -212, 66,243,112,107,155,238,202, 6,163,241, 8, 99,198, 44, 45, 45, 17, 72,137,205,115,231,139,174, 12,105, 54,193,247, 44, 81, -219,197,184, 10,109,185,126,237, 58,105,146,160, 60,201,250,218, 26,221, 78, 11,223,247,208, 85, 73,145, 36,128,229,197,151, 95, - 66,232,146,108, 50,162, 46,114,210, 36, 97,117,109,141, 78,111,137,209,116,196,209,209,144,163, 97, 66, 93, 7, 36,233,148,143, -174,125,135,182, 15, 23, 87, 95,226, 40,183,252,194,219,239,243,222,239, 94,163, 91, 22, 44,183, 20,253, 65,135,127,241,143,126, -153,191,240, 19, 63,198,127,241,119,255, 41,255,240,167,126,134,255,227, 95,253,143, 56,191,210,167,213,246, 16,163,227,160, 17, - 23,220, 97,144, 22, 98, 32, 22, 2,223,184,189,122,160,104,160, 57, 77,151,231, 9, 60, 95, 17, 4, 30, 97,224, 19, 6, 46,218, -215, 87,238,166,169,164,131,202, 72,233, 20,238, 82, 54,163,112,207,141,223,125,213, 64,101,212,177,178,125,214, 77, 46,198, 76, - 63,254, 26,112,100, 54,211,160,118, 77, 19,126,162,176,182, 70,121, 1, 95,254,242,231,249,167,255,236,231,169,170, 28,140,194, -243, 66,124,229,227, 9,213,120,228,157, 71, 60, 12, 67, 60,165,208, 90, 55,130,185,146,209,104,140,239,249, 60,122,180,201,210, -242, 58,211,201,148,184, 31, 50, 60, 60,164, 44, 74,114,149, 82, 20, 57,117,149,163,148,224,232,112, 31, 41,160,170, 10,178,188, - 32,104,197, 4,195, 33, 59, 55,111,209, 91, 93,163,183,188, 66, 86, 85,243, 17,180, 20,179,215,175,251,127,173,221,152,189, 40, -106,202,162,162,168, 42,234, 74,163, 13,110, 95,174,143,129, 49,179,218, 5,242, 68,188,245,204,117, 48, 91,113, 72, 41,240,149, - 68, 41, 15,165, 44, 82,152,231, 78, 89, 79,174,255, 22,132,106, 31, 87,212,103, 45,136,104,216, 4,246,216,105, 51,235, 47,236, - 76,204,108,164, 11,162,177, 10, 43, 21,182, 97,103, 24,183,236, 62,150, 28,137,197, 49,252,115,162,166,143,185, 48,205,222, 95, - 55, 0, 30, 67, 89, 86, 20, 89, 78,158,231, 78,228,214,248,206,131, 48, 32,140, 34, 55,245,242,221,122,235,132, 85,111,222,190, - 59, 24, 79, 85,107,202,178, 34, 75, 11,178,204,185, 90,146, 52, 67,189,245,234,165,159,148,143,161,238, 22, 49,177,207,235,124, -197, 51,199,223, 98,193, 19, 42,158,171,124,127,158,111,125,177,184, 62, 15, 42,243,120,222,251, 39, 45,238,143,255,185,209,199, -182,140,153,181,173,172,221,152,169, 94,224, 17, 43,233,108, 62,190,239,147,164, 9,202,243,232,117,150,156,133,194,243,209, 22, -210, 60, 35, 47,107,151, 8, 86,148, 72,191,133,140, 66,186, 43, 61,194,110,159,118,119,141,238,160, 75,153,143, 72,143,246, 56, -120,116,159,195,251, 31,113,248,232, 22,117,153, 51,232,250,136,241, 22,175,188,249, 5,222,250, 67,127,148,239,251,210, 23,185, -241,225,135,252,187,127,229,175,242, 23,255,189,255,144, 56,140, 40,146,146,191,254,191,255, 47, 57,216, 63,226,215,127,243, 55, - 64,192,155,175,189,129, 87,103, 12, 90,150, 60,211,248, 94, 64,171,213, 98,227,244, 25,144, 18, 35, 45, 86,186, 23,239,113,167, - 46,142, 19,136,102,235,147, 89,156,221, 9, 15,232, 12, 33,185,200, 95,126,242, 69,167,102, 54,144,102,103, 57,219, 81,158,200, - 95,110,126,247, 60,239,184,115,242, 60,162, 48, 64, 73,192,106,146, 52, 99,176,186, 78,171,219,231,229,151, 95,101,154,166,140, -106,193,254,180,164,170, 42,150, 90,110, 10,210, 94, 90,101,237,204, 25,199, 99,215,134,118,187,227,240,187,198,112,239,254, 3, -210,162,226,193,214,142,243,188,207, 22, 93,205,139, 92,104, 77,104, 10,166,251, 7, 28, 30,142,184,123,111,139,209,100, 74,119, -176, 14, 94,132, 23,120, 88, 61, 69, 1,145, 31,146, 21, 37,103,206,157,231,104, 60, 68, 9,131,169, 75, 38, 71, 7,248,210, 80, - 76,143,152, 28,238,160,116,194,112,239, 17,163,131, 29, 38,227, 17,101,145, 83,149, 57,233,116, 76,183,219,118,171,148,186,166, -221,234, 50,157, 78, 80, 74, 56,208,205,238, 30,113, 28,163,107, 67, 20,181, 64,121, 8, 21,224,251, 1,218, 64,167,211,163,221, -238,226,135, 49,119, 31,238, 16, 4, 33,151, 46,159, 39, 77, 71,124,248,193,187, 28,238,237, 81,103, 37, 82, 73,250,131, 37, 86, - 79,157, 97,237,204, 25,190,243,246,219,152,170,162, 72,166,148,233,132, 98, 58,164,152, 78,169,242, 20, 99,107, 38, 73, 66,146, - 87,132,173, 30, 27, 27, 27, 8, 33,216,218,124, 68,187, 21,209,239,118, 26, 59,151,231, 80,175, 70,147,231, 46, 18,212,247,125, -150,215,214,157,237, 10, 40,138, 18,173, 45, 55,110,220,163, 21, 15, 48, 6,222,121,231,155, 8, 81,242,242, 11, 23,104,121, 45, -126,235,198, 62,255,175,175,254, 22, 85, 97, 8, 13, 76, 10,141, 95, 9,122, 49, 28, 30, 37,156,126,245, 28,191,243,254, 29,126, -224,205,215,232, 32,249,149,119,222,103, 63, 45,155,162,126, 92,112, 2,160, 39,160, 43, 4, 93, 4,161,178, 68, 1,180, 90, 10, - 63,132, 32, 86,142,254, 22,197,196, 97, 76, 28,133, 4,129, 79, 20, 6, 4,161, 71, 16,184, 93,185,231,201,121, 33,247, 61, 53, -247,138, 59,235,219,236,205,141,223, 61,223,155,255,191,106, 48,161,178, 9,226, 16, 18,103,113,154,113,105, 77, 53,143,175, 85, -194,117,151,198,214,104, 93,113,234,204, 89,222,249,214,219,120,202, 52, 19, 49, 67, 20, 70,243,123,207, 60,251,161, 73,227,170, -171, 10, 41, 21, 88,168,181,158,211,214,122,253,101,218,221, 30, 65,212,230,230,237, 59,206,179,239, 41,166,211, 49, 90,151, 72, - 44,155, 91, 15, 57,119,238, 44, 85, 85,145,151, 25, 81, 20, 33,180,161,156, 38, 76, 71, 19,124,165, 26,197,189,158,143,217,235, -170,158,231,190, 23,165, 27, 21,231,121, 77, 81, 86,212,181, 67, 95, 59,117,251,140, 12,199,220, 18, 59,183,140, 41,133, 31, 4, - 4,129,187, 78,252, 89,214,183,175,154,105,137,187, 79,200,185,175,255, 41,247,255,134,234,167, 26,232,139,242, 60,119,143,117, -164,154, 70, 17, 46, 62,118, 74,187,176,120, 95,104, 50,237, 19,218,135,121,226,153,117,221,240,204,122,231, 82,211,124,164,239, -187,232, 97,207,119, 76,144, 5,161,223, 60, 45,206, 30,195,185,108,163, 27,114,193, 72,206,129, 80, 21, 25,211,241,148,201,100, - 74,150,185,162, 14,182,137, 87,109,211,238,180,136,226,216, 89,232,124,207,197,188,206,181,249,199, 99,107,163, 93, 65, 79,211, -156, 52,205, 72,179,140, 44, 47,152, 38,153,235,212,173, 93,160, 49, 61, 54,228,254,100, 15,216, 83,246,170,198,206,119,180, 79, - 43,230, 31,215,129, 63, 45,122,245,241,204, 93,196,226,174,221,206, 79, 79,207,234,252, 63,201,116, 64, 45, 32,104,133,116,169, - 60,162,217,233, 47,118,183, 82, 57, 59, 67,187,219,193, 34,152,102, 5, 7,195, 35,140,144, 68,189, 30, 27,231,206, 98,149, 71, - 89,105,198,211, 41, 89,145, 51,222,219,193,238,151, 72, 19,210,107,173,209,239, 41, 34, 79,242,165, 31,254,179,188,242,210,139, -252,242, 63,255,199,188,254,198,167,248,183,255,151,255, 43,160,228,239,252,111,255, 42,237,245,151,248,220, 87,126,156,149,142, -226,239,255,221,191,207,112,100,104, 13, 46, 66,120,138,223,248,237,247,249,247,135, 19, 60, 17,224,171, 8, 33, 32,240, 34, 46, -156,187,200,141,119,110, 49,157, 76,232,116,122, 28, 30,142, 88, 74, 75, 58,125,223,217,107, 16, 79,213, 55,156, 56,237, 62,197, -109, 96,159,209,161, 31, 43, 85,221,233,121,241,144, 53, 19, 37, 45, 78, 56,172, 53,142,242,181,112, 32,155, 11,148,148, 36,144, - 62, 54,240, 8,219, 93,234,202,176,178,178,198,185,243,231, 89, 94, 91,229,149,113,193, 55,190,253, 30, 55,223,127,135,218,192, - 43, 47,189,202,168,146, 44,111,156, 37, 12, 20,123,219, 91,220,189,119,159,189,189, 3,242,178,100, 52, 77, 81,158, 71,228,249, -148,198,193, 68, 66, 41,241,164, 79,169, 11,231,239,173,125,118, 15,247, 25, 78,106, 50, 3,231,206, 47,227,249,109,124, 63, 38, -157, 30, 33, 67, 67,161, 19,202,122, 76,101, 70,228,197, 14,129, 50,232,172, 96, 58, 57,100, 60, 25, 81,167, 71,164,211,132, 34, -155,178,190,188,132, 48, 21,123,123,251,140,167, 5,253,229, 37,194,131, 3, 90,157, 30, 23, 46, 92,160,174, 13,147,201,148,131, -225,152,149,213, 53, 38, 73,130, 82,138,115,231,175,242,232,193, 67,122,237, 14,239, 62,184,199,234,250,128,186,214, 84,218, 16, -199, 45,142, 14,167,220, 44,238,113,233,226, 5, 86, 87, 86,121,251,155,223,160, 63,104,241,210, 11,151,233, 93, 58,135,143,135, -212,134,233, 36,229,198,157,187,188,254,105,197,233, 51,103,249,236,155,111,112,255,206, 29,210,233,132, 97,154,144,101, 35, 48, -130,110,167, 75,171,235, 66,106,142,210,148,164, 24,114,233,252, 69,206,157, 61, 77, 93, 23, 78, 40, 87,149, 14,134, 18, 6, 24, -109, 9,124,159, 97,158, 83,229, 25, 97, 16, 16, 26,139, 21,146,195,225, 17,121,150, 50,158, 20,172, 44,159, 37,203,107,190,243, -238,183, 57, 26,237,115,254,236, 42, 8,193,158, 81,252,131,159,255, 26,187, 89,205,196,106,144,130,101, 33,153,102, 53, 81, 0, -123, 55,238,243,250,155, 63,128,146, 30, 59,187, 71, 44,175,157, 37,246, 98,148, 25,185, 14,182, 65,100, 98, 4,190,181, 68, 82, -224, 97,240,172,192,151,182,129,186,152,121,220,170,167, 92,225,142, 67,103, 23, 13, 67, 55, 74,247,253,227,131,230, 44,225, 74, - 53,221,152,148,174,219,247,125,213,116,154,238,207, 60,239,228,193, 84, 44,224,147, 17,246, 24,144, 34, 26,214,248, 76, 45,222, -120,184, 49,110,247,142,180,244, 58, 1, 95,252,194,231,248,173,223,250, 77,148,148, 84,101, 73, 38, 19,176, 46,108,166, 29,196, -142,111, 95, 59,194,152, 39, 21,166,185, 6,178, 60,167,172, 28,153,109,134, 85, 61, 26, 14,121,244,240, 17,131,193, 10,210,104, -146,201,152,229, 65,143,253,131, 93,116, 93, 49, 88,234,179,191,191, 79,173, 75,132,213, 36,163, 35,238,239, 15, 89, 61,117, 6, -164, 96, 80,157,166,183,186,140,105,178,185,171,178,162, 42,107,215, 81, 22, 21,101, 89, 83, 86,150, 74, 67, 93,187,181,220,108, -127,110, 27, 57,187, 43,230,205, 10,173,137, 14,149,158, 90, 16, 44, 54,218, 3,217, 76, 4,100,179,202,104, 8,125, 79,211,110, -205,217,112,115,209,222,236,222,212, 84,169,199,166,193, 79,212, 22, 97,177, 82, 52, 99,113,225,248, 64, 52, 49,127,200,249,191, -101,103,157, 55, 98, 33, 93, 77,156, 76, 90,155, 59, 30,204,177,237, 90, 60, 57,189, 62, 73,195,113,206, 8, 99,106,172,169,168, -171,146, 34, 43,201,211,156,170,168, 92,222,134, 16, 72, 79, 57,251, 90, 43,196, 11,220,225, 69,121,206,151,110,102,107,167,230, -176, 40,172,179,196,205,172,210,198, 58,242,254, 76,160, 88,107,253, 52,245,187,125,166, 47, 93,124, 12,158,245, 15,130, 56,247, -221,118,217,243,223,155, 34, 97,191,139,177,251,227, 63,159, 60, 97,219, 18,115, 53,173,120,140,248,102,155, 29,143,242, 61,130, - 40,226,238,189,135,180,122, 3, 46,188,112,137,170,214,108,237, 28,240,112,251, 22,147,220, 49,153,123,189, 14,131,213, 13, 46, - 92, 58,203,237, 59,215,249,195, 95,249, 19,124,239, 27, 95, 98,116,120,151,159,253,197, 95,224,251,126,232,223,228,212,153, 13, -126,245, 87,254, 21,239,124,112,151,189,169,192,234,154, 78,220,226,155,191,243,219,124,233, 7,126,132,101,213,229,236,169, 21, - 54,239,222,134,105, 70, 91,133, 28,236,237, 51, 25, 30,130,177, 72,161,192, 90,238, 63,216,226,194,159,254, 49,110,190,247,117, - 4, 21, 69,154,210,105,117,201,178,156,238, 82,220,220,104,228, 51,227, 84,231,197, 93,216, 19,118,145,231, 21,244,185, 82,117, -177, 19, 87, 51,160,131,156,199, 10, 46,198, 32,206,198,239,243,241,156,156,117, 64,146,192,147, 72, 17,115,176,183,203,237,219, -119,225,214, 61,190,245,237,119,249,226, 15,254, 32, 85,158,178,182,212,101,240, 61,159,229,214, 71, 31, 48, 41,225,244,185,139, -164,101,205,240,104,202,230,246, 46, 55,175, 93, 35,136, 2,164, 23, 96,165,203,186, 14, 60, 31, 81, 85, 14,217, 25,132,248, 66, - 50,170, 43,170, 90,179, 59, 76,121,237,204, 89,244,131, 7,108,116,123,248, 97,140, 49,134,228,232,128,233,209, 33, 58, 50,180, -195, 10, 41,114,172, 78, 56, 58,120, 72,236,119,209,149,165, 76, 71, 28,108, 63,160,215,186,140,178, 53,186, 42, 25, 14,199, 46, - 13,173,179, 66,103,165,195,135,215,110,240,214,231, 46, 96, 45,108,110,237, 51, 73, 75,162,246, 18,149,174,184,126,251, 1, 65, - 24,147, 76, 18,140,217,195, 23,150,209, 97, 65, 85, 21, 28, 28,222,163,219,109, 51, 26, 37, 84,149,192,243, 5,186, 54,220,190, -179,205,234,160,205, 96,185, 77, 85,245,121,112,247, 1,151, 47,156, 39,157, 36, 92,185,120, 5, 25,121,100,186,226,131,247,222, -103,127,103,135,149,165, 1,103, 78,173, 83,100, 41, 73, 58,229,112, 40,168, 43, 75, 82,212,156,221, 56,195,133,171, 87,248,214, -123, 31,113,243,163,247,177,218,162,155,209,173,203,113,223, 37,244, 4, 81,232,211,106,183, 40, 11,137,169, 74,226, 78, 23, 33, -132,227, 36,104,195,131,135, 15,241,165, 66,121, 29, 62,186,118,147,189,131,125, 38,227, 61,206,156,217, 96,169,215,163,182, 45, -254,254, 47,254, 38, 31,236, 30,209,246, 66, 86,207,157,101,247,209, 35,214,145, 84,166,162, 46,160,221,181, 28,221, 29,242,218, -249, 85,146, 73, 78,112,169, 79,191, 29,211,178, 6,131, 37,109,108, 65, 18, 75, 4, 68, 64,128, 69, 42,139, 31, 73,252, 8,164, -103, 81,190,179,159, 5,202,173,191,130, 38, 69, 45,240,189, 6, 26,115, 12,157, 17,243,188,139, 25, 76, 11, 36, 6, 37, 20, 82, -205, 4, 90, 52,104, 83,209,116,240,222,137,107,125, 70,163, 59, 46, 60,110,231,233,240,177,210,137,252,180, 65,250,142,215,168, - 77,197,151,190,248,121,222,253,206,183, 27, 92,168, 96, 50,153, 16,248, 33,198,119, 0, 26,229, 5,212,117,141, 82,174,241,247, -188, 0,207, 11, 8, 2,193, 36, 77, 8,252,144,178, 44, 9,252,128, 7,247, 54, 41,139,130,170, 44,144, 90, 83,228, 41, 66,118, -121,244,232, 1, 75,253, 30,202,147,148, 85,137,167,156,187, 98, 60, 25, 83, 27, 77,146, 78, 49, 91,219,104, 11, 85, 85,209,234, -245, 26, 69,123, 77, 93,215,205,200,189,166,172, 12, 85,109,155,253,185,105, 2,168,236, 44,199,214, 77, 46,213,226, 99, 34, 78, - 68,133, 50, 27,195,207, 24,178,214, 52,123,116,199,218, 63,153,218,189,160,177, 89,144, 54, 47, 54,158,159,168,169,108, 42,190, -152, 99, 56, 26, 46,127, 67,169, 19,230,184,224,207,254,110, 86,196,109,243, 38, 22,111,252,143,241, 59,236,162,145,237, 25,129, - 86,110, 50,224,184,250,186, 44,169,202,130, 34,205, 40,178,156,186,170,231, 56, 88,229, 73,194, 56, 36,140, 34,252,176,225,254, -123,106, 46, 28,158,147,112,140,179, 43,138, 74, 56, 34,167, 84, 72,233,185, 87,132,144,104, 3,149,214, 46, 79,253, 88,224,244, -252,189,250, 39,165,183,125,183,191,158, 53,130,127,252,228,245,188,169,129, 88,124, 18,158,211,133,126, 28,110, 86, 44,236,123, - 31,255,239,241, 52, 27, 99, 12,173, 86, 76,167,219,226,254,230, 54,183,110,223,227,212,198, 6, 97, 24,241,202, 11, 47,240,214, -247,124,129,247, 63,188, 70, 85, 85,156,191,112,133,238,160,205,183,190,245, 54, 15, 54,247,184,112,102,132,169, 43, 70,195, 29, -246,239,189,131,170,206,176,214,130, 95,123,231, 61, 62,124,255, 26,166, 46, 49,133, 97,243,254,109, 70,247,111,179, 42,214, 56, -123,102,192, 71,239,191,205,214, 71, 31,160,140,102,125, 99,137,107,215,190, 69,150, 14,137, 34,159, 44,203, 56, 56, 58, 36,108, -117, 80, 65, 64, 59, 14,216,221, 25,114,230,220, 37, 52, 21,179,140, 59, 97,213,252,194,156, 63, 22,143, 77, 67,172, 93, 44,244, - 79, 90,137, 30, 79,242,123,188,168, 31,143,221,189, 19,222,211,227,148,164,147, 69,221,107, 58,167, 40, 10,231, 55,200,205,157, -125,138,134, 96,134,177,236, 28, 13,121,235,141,215,185,122,106,153,183,223,221,226,165, 55, 63,207, 36, 41,104,103, 37,183,110, -221,226,230,157, 59,156, 90, 29, 32, 61,143,188,168,232,132, 49, 66, 42,170,218,160,171, 10,163, 28, 90, 50, 47, 50,132, 23, 96, - 17, 84, 66,114,148,101, 28,140,224,165,151, 78, 19, 68, 17,219, 71, 41,227,225, 46,173,229, 62, 58,217, 99, 56, 42,160,227,130, - 60,178, 35,216,123,116,128, 47,246, 8,164,165,168, 82,148,168,153, 30, 29, 2,138, 48,104,147,100, 37,105,234, 14, 15, 69,106, -185,183,157,210,187,183, 67,158,101,196,113,139, 36,183,220,188,123,207,117, 62, 26,194,208, 82, 22, 5,117,169,169, 43,195,160, -237,209,110,249,156, 59,191,206,218,202, 10, 74,121,206,182, 98, 33,138, 98, 30,237, 12,185,127,127,147, 7,187, 35,150,250, 7, - 4,126,192,230,118,130,180,150,237,253,132,254, 82,139,201,116,196,107,175,188,204,209,254, 62,129, 39,185,116,233, 2, 90,215, -244,250, 61,226,184,197,210,210, 58, 31,126,116,141,251, 15,182, 81, 81,155, 75, 23, 46,243,254,251,119,184,126,253, 6,117,145, - 50,232,119, 41,146, 41,189,118,204, 36,205, 57,200, 51,122,253, 30,158,231, 83,213,154,233, 36, 97,105,121,149,118, 28, 97,132, -228,149,151, 95,165, 46, 42,182,247, 70,220,188,113, 11,235,105,124,207,146,231, 41,189,179, 23,184,185,155,240,179,191,254, 46, -214,192,171, 47, 93,224, 31,253,211,255, 47,127,237,127,253,147, 92,251,185,127,193,107,107, 17,161, 41,144,161,199,209,157,123, -124,230,133,179, 12,143,246, 40,124,201, 90,183,205, 25, 95,144, 25, 65,165, 53,149,128,200, 10, 58, 66,208, 50, 16, 73,139, 84, -224,133, 2, 63,146,168, 16,148,175,240,252, 0,223, 11, 9,188,144,192,115,112,167,192,247, 9,125, 15,207, 63, 46, 60, 2, 57, - 31,255, 42, 41,143, 57,231,194, 52,150,170, 99, 16,205,227, 43, 65,113, 34,236,200,237,206,103,217,225,206,120,236, 97,133, 11, -217, 17, 2,180,174, 29,246, 20, 75,191,215,226, 71,127,248, 43,252,226, 87,191,234,198,179,218, 32, 35,167, 1, 72,211,148,118, - 91,224,123, 97, 51,169,169,209,218, 41,185,103, 17,176, 8, 65, 20,197,248,190,207,246,230,102, 19,150,162,121,112,231, 54,131, - 65,143,219,183,111, 49, 28, 30,112,250,212, 26,117, 93, 48,153,140, 16, 66, 33, 85,192,189,205,135, 46, 82,180, 21,115,239,250, - 53,214,142,142,184, 92,191,200,217,176,213, 8,225,106,138,170,162,170, 52, 85,101,209,181,235,208,107, 61,163,100, 10,247,115, - 41,183,186,152,145,217,102,135,242,121,103, 62,211, 29, 52,202,125,119,200,153,121,222, 77,115,128, 18, 96,229, 83, 11,227, 19, -187,191,231,212,141, 39,118,234, 79,104,130,152,123,254,141, 49,238, 48,103,236, 92,255, 99,133,108,214, 15, 98,230, 85,108, 66, -174, 30, 47,230, 60,145, 92,119, 12, 77, 19,141,184,120,193, 53,212,120,210,235,178,164,204, 50,178,212, 65,165,172,118,226, 56, -225,249,196,173,144, 86,187, 69, 20, 71, 4,161,235,214,165,242, 26,197,253,241,189, 19,227, 84,242,212,117, 99, 21,212,148, 85, - 73, 94, 20,110,162, 82, 85, 20,101,125,220,169,159, 44,160, 79, 25, 77, 63,102, 65,146, 79, 20, 97,158, 67, 25, 19,223, 85,113, -127,218,232,253, 89, 66,187,199, 15, 1,150,231,140,245,159, 2,149,155, 37,143, 45, 46, 29, 78, 20,248,199, 39, 24, 11,197, 76, -249, 46,126,178,219,235,242,169,254, 42,157, 86,155, 47,125,225,139,220,191,255,136,111,126,251, 93, 66,169,136,148,207,193,214, - 30,213,106,206, 65,149,209,138, 58,236,236,238,177, 59, 60, 32,240,115, 14,139,156,143, 30, 62, 32,247, 20, 50,140, 24, 30, 29, -114,235,189,111,209,243, 37, 42,153,176,185,121,159,189,221, 45, 86,122,130, 83, 23, 47,112,243,222, 14, 97,167,203,224,212, 6, - 97,183, 77,146, 77, 72,243, 49,210,171,209,178, 98,255,232,128, 66,151, 36, 69,225, 44,111,186,230,225,189,123,180,123,109,150, - 87, 58, 39, 25,244,226, 57,167,220, 39,222,127, 54,197, 79, 46,140,220,149, 60, 86,187,250,190,127,162,208, 47, 62,142,162,137, -193, 61, 89,212, 37,190,239,225,249, 1, 7,195, 33,211,172,224, 51,159,251, 30,238,220,188,197, 71, 31,125,196,246,221, 45,170, -116,202,235,175,190,204,103, 62,243, 38,119,247, 38,172,116, 87,216,220,188,199, 59,239,190,131,242, 3, 70,163, 17,113, 24, 82, -149, 25, 85,158,225,121, 30,105, 93, 80,105,237,132, 48, 13, 12,163, 40, 50, 12, 2, 63, 12,185,120,105, 3, 38,187, 76,142,134, - 24, 43,120,112,144,210,235, 7,244,130, 26,207, 20,140,134, 19, 38,123,208,107,199, 28, 14, 43,108,125,200,250, 90, 72, 86,142, -144,161, 15, 66, 58,196,105,105, 40,202, 9,181, 81,236, 31,100,156,111,175,176,115, 56, 34,205, 45, 7, 71, 57, 82,194, 36, 27, -113,106,125,131,157,157, 17, 86, 57,235, 88,150, 78, 17,158, 96,109,169,197,213, 75, 27, 92, 62,127,154,149, 65,151,229,193, 18, - 81, 28, 59,212,102, 81, 33,164,199,229,171, 87, 41,138,146, 71,247,239,241,246,123, 31,241,206,187, 55,184,183, 61,114,190,115, -160,253,240,144,165,150,194,199,112,184,125,192,197,139, 27,140, 39, 71,124,248,209, 50,173, 86,196,247,126,207,247,162, 75, 67, - 58,173,240,189,128, 7,247,238,208,233, 45,193,254,152, 51,235,167,216,195, 16,199, 17, 89,158,179,187,179,205, 75, 47, 92,225, -165, 23,175,224, 53, 20,182,186,214, 76,146,148,189,253, 67,118,183,119, 56,115,230, 12, 69,158,209, 10, 91, 76,166, 67,170, 90, -208, 27, 44, 83,218, 12, 91, 31, 82, 87, 25,147,180,230,191,253,217,175, 51, 45, 28,253,237,253, 91, 55,249, 27,255,233, 95,227, -230,237,123,108,151, 21, 43,189, 24, 41, 42,170, 90, 98,199, 41, 43,129,225,214,225, 35, 14,166, 67,214,150, 6, 44,121,130, 88, -250, 12,167, 25,194, 66, 91, 72, 58, 72, 98,171,241, 45, 40, 31,164, 15, 42,144, 4,145, 71, 24, 5, 4, 65,216, 88,217,220,117, -232, 55,157,122, 16,184,189,184,179, 74,169,249,157,204, 21, 24, 11,168,230, 90,181,141,157,169,233,222, 23,196,113, 79, 22,149, -230,198,210,132,159, 96,108,227, 43,174,157,139,198, 19, 88,131, 83,109, 55, 66, 83,173,107, 94,127,243,117, 62,248,224,125,238, -220,185, 79,183,219, 33,138, 98,130, 32,160, 46,114,151, 87,208,234, 97, 13,206,206,153, 78,233,118,187,232,218,221,175,166,211, - 4,207, 31,178,180, 60,101,111,127,159,188,112, 80, 19,229, 75,194, 40,228,222,189, 59,244,123, 61,122,189, 30,251,251,251, 84, - 69,137, 84, 62,251,251,251,236, 13,135, 20, 53,200, 86,159, 86,187, 75,167,187,196, 52,201,121,240, 96,139,181,181,117,170,202, -184, 34, 94, 27,106,237, 32, 50,198,186, 25,137, 35,171,113,236,245,111, 18,234,132, 20,115, 45,130,131,120, 53,200,220, 6, 32, - 51,211, 96,205, 82,222,176,245,113, 60,235,124,186, 97, 23, 58,243,133,194, 57, 47,166, 79,169, 40,207, 88, 15,158,200, 91,183, - 44, 24,198,143,213,245,243, 14,125, 30,196,178,216,192, 29, 55,114, 39,114, 57, 30, 31,104, 47,150,133,197,204,246,230,125, 71, -142,171, 40,203,130, 60,115,111,186,110, 30, 79, 33, 8, 66,159, 86, 59,166,213,110, 17,182, 98,188, 48,112,235, 74, 33,209,179, -245,124,243,195, 27,227,118,243,101, 81,144,103, 57,105,146,146, 36, 41, 69, 89,186,233, 74,229, 14,126,222, 44,141,102,182, 38, -144,139, 39,131, 5,182,187,108, 44, 80,199,211, 8, 49, 15, 79, 56, 81, 4, 79, 20,247,199, 31, 14,113,194,166,246, 73, 59,252, - 69, 68,222,199,141, 95,212, 99, 31,251, 56,118,118,254, 92,136, 25,113,221,141,217,177, 46,222,241, 36,154,125, 97,246, 46,103, -118, 2,220,137,183, 65, 70, 10,107,217, 88, 95,231,104,148,208,138, 67,222,254,230,239,176,188,178,202,214,246, 22,121,153, 98, -148,101,127,188,205,169,100, 21,240, 80, 86, 33,171,140,241,193, 45, 34, 95,226, 35, 57,220,185,206, 75,231, 6,132,237, 1, 37, - 17, 34, 59,228,220,198, 57,166, 47,189, 73,245,219,223,164,127,170, 77,119, 99,137,157, 95, 29,178,253, 96,135,159,253,153,255, - 31,215, 63,122,143,155, 55,239,240,127,249,191,253, 61,246, 15, 39, 28, 36, 71,152,192,163,172, 42,166, 73, 69, 59, 92, 97, 88, -111, 99,180, 97,124,116, 0, 86, 99,244, 5,172,106, 50,125, 79,244,233, 79,203, 39,150,199,238,126,123, 18, 28, 59, 95, 37, 46, - 68,232, 42, 49,139,173,148,243, 23,252, 98,167, 62,239,112, 56,190,102, 28,173,203,107,246,107, 78, 60, 19, 4, 62,105,105,121, -180,185,195,238,206, 62, 55,131, 27, 92,121,225, 10,185, 16, 76,222,189,201,157,221, 41, 71,249, 13, 94, 46, 60, 46, 94,185,204, -189,251,119,249,157,111,126,131, 32,246,233,117, 58, 4,128,153,230, 44,251, 10,163, 36,217,180,196, 8, 65, 13,248,141,143,191, - 18, 2,227, 11,148, 54,156, 13, 67,162,170,166, 28,215,236,238,214,224, 9, 6, 27, 49,120,112,255,238, 30, 93, 43, 49, 9, 24, -165, 56, 40, 50,172, 82,172,172, 13, 40,117, 74, 85,123,120, 97,155, 73,233, 68,102, 43,107, 29, 70,163, 3, 70,147, 20,229, 89, -210,209, 33,245, 56, 97,117,169, 71, 43, 94, 97, 60, 61,164, 42, 75,134,251,251,244, 58, 29,242, 36, 39,240, 5,161, 18,156, 63, -183,202,139,175, 92,225,234, 11, 23,104, 69, 1, 82,107,252,198,214, 82,107,205,112, 50,225,112, 56, 34, 41, 43,242, 52,163, 99, - 51,222,124,101,131,239,253,204, 37,110,222,216,226,231,126,243, 67,110,237,143, 24,213,138, 60, 13, 88, 82, 21,173,113,202,189, - 59,247, 41,173,100,227,236, 69,118,247, 14,249,218,175,252, 26,167,214,150,233, 45, 13, 24, 37, 41, 15, 54,183, 57, 24, 79, 89, -219, 56,227,212,182,182, 34,157,140,185,250,226, 75,180, 95,122,153,195,225, 1, 90,120,120, 18,170,218,165,109, 21, 69, 73,153, -231, 32, 20, 66,122,224,183,152,214,130, 68,123,136,160, 69,111,229, 20,123,195, 45,116,150,131, 47,249,234,219,215,120,231,222, - 8, 3,228,210, 80,151,146,255,246,159,255, 60, 90,192,154,182,212,129, 97,185, 35,169,166, 5,195,137, 34, 86, 45,250, 75, 49, -113, 16,210, 9, 91, 40,171,168,107,237,144,176, 82,208,177, 16, 91,131, 47, 12, 97, 0, 97, 27,130, 16, 66, 95, 46,216,215, 60, -188, 64, 33, 61,217, 56,199,164, 27,107, 42,209,216,211,100,115,175, 88,136, 9,158,145,232,230,240, 26, 55,181, 83,184,235,219, -221, 14,154,244,174,102,127, 62,179, 74, 27,235,178,221,133,177, 72, 93, 53,200, 16,235, 82,194,132,117,119, 25,161,154,172,119, -144, 70,226, 99,248,145, 31,249, 17,254,233,127,255, 63,224, 7, 49, 82, 40, 52, 16,117, 20, 82, 4,196, 97, 11, 33, 44,157, 78, -136, 49,154,170,206,168, 74, 67, 85,228,160, 13, 71, 71, 99,118,118,247,248,190, 47,124,129,225,100, 76,187,221,225,229, 87,175, -160,139,154,135, 15, 30,226,123,224,121,146,173,237, 45,192,199,232,154, 59,247,239,147,217,128,176,189, 76, 86, 7,248, 58,226, -254,238, 17,253, 82, 48, 48, 49,163,201, 35,148, 18,172,174,175,128, 54,104, 42,116,179,138,243, 60,217,132,177, 40,152,233, 22, -230,175,111, 23, 81, 58, 91,181, 33, 22, 1, 64, 52,130,175,102,143,109, 42,208, 22,137,158,131, 2,231,137,106,179,251,248, 44, - 63,164,153,156, 32, 5, 86, 10,140, 20,120, 56,102,190,155, 72,219, 39, 90, 14, 97,143,109,209,243,134,116,161,217,159, 39,118, -202, 5,202,221,220, 89,193,201,251,221,220,247,214, 8,107,141, 65, 24,215, 32, 8, 43,155,175, 47,142,113,179,243,189,191,155, -216, 56,129, 92, 73,157, 87,148,105, 73, 94,214,148, 90, 99,133,117, 44,132,200,195,143, 3,100,224, 33,131, 0,225,185, 38,193, - 52,185,176, 51, 18,158,214, 53,198, 84, 84, 89, 78,149, 37, 20, 73, 58,135, 58, 85, 53, 84, 13, 87,223, 87,222,239,141, 40,247, -113,227,242,143, 3,195, 28,143,173,126,111,163,251,103,145,233,158,183, 38,248,184,136, 80,241,148,166,222, 46, 62,169, 79,227, - 89, 9, 71, 66,210,117,205,100, 60, 98,185,215,231,238,195, 77,150, 87,215, 72,146, 41,135,135,251,148, 69, 70,150,165,236, 31, - 28, 80, 86,238,137, 78,178, 41, 85,149,211,235, 46,209,110,183,153, 76,134,236, 31,108,227,133, 10, 21, 72,190,250,203, 63,199, -222, 43, 87, 73, 15,247,105,213, 21,127,247,111,253, 77, 90,173,144,189,237,125, 36, 62, 63,251,143,255, 9,167, 78,173,243,198, - 11, 87,217,158, 20,100, 81,140,151,250, 84, 70,162,100,200,131,205, 93,206, 92,188,202,245,247,190,205,210,210, 10,147, 81,234, - 70,106,101, 69,216, 14, 92, 44,172,144,159,140,239,255,180,238,253, 57,207,199,211, 86, 36,179,110, 92, 52,184,196,217, 65,205, - 83, 2, 79, 53, 84, 47, 37,137,148, 68, 9,197,187, 31,125,192,193,246, 46,129, 80,220,248,240, 6,143, 30, 62,226,236,229, 43, -252,208, 31,249, 81,174, 93,191,129,180, 22,207,243,121,112,231, 46, 15,239,220,101,173,211, 33,175, 28,128, 65, 40, 15, 21,182, - 48,190,162, 52, 53,147, 60,161,106,190,174,215,172, 13,102,168, 69, 37, 64, 97, 56,218, 57,160, 40,106, 14, 74,203,122,183,197, - 82, 38, 8,234,154, 42, 55, 28, 86, 21,177,144,196,177,135,150,138, 51, 23,207, 98,172,179, 7, 69, 97, 72,183,219,161,219, 83, -180,194, 54,113,224, 19, 69, 43, 40,207,137,208,246,183, 15, 81, 6, 46, 94, 57, 71,110, 44,129,167, 24,111,103, 76, 68, 70, 29, -134,236, 15,167,180,164,224,202,133, 85, 94,122,241, 42,203,107,171,136,176,205,238, 40, 97,247,112,200,157,251,143,216,220,222, -103, 56, 74, 73,139, 10, 83,107,206,158, 63,199, 75, 47, 92,102,235,250, 71,156,107, 75,190,244,217, 23,249,222, 79, 95,228,213, -151, 46,241,139,191,241, 14, 63,255,141,143,120, 56, 45, 56,144,112, 88, 8,186, 67,193,114, 55,228,237,183,175, 19,196, 1,123, - 7,251,124,234,234, 25, 46,156,215, 92,186,122,149,254,218,105,118,246, 14, 48, 70,227,251, 30, 73,158,147, 74,120,248,224, 62, -103,206,158, 33, 80,138,107, 31,125, 72,232, 73,166,147, 49, 75,253, 37,234,170, 98, 58, 30, 83, 27, 88, 90, 62, 98,237,212, 89, -202,218,146, 79, 71,248,109, 31, 91, 79, 81,229,148, 52,133,180,213,225, 95,190,123,147, 68,231, 40,161, 29, 93, 84,216, 70,180, - 20, 33,100, 65,220,175,185,176,226,145, 71,134, 97, 10,165,182,220,184,191,205, 31,106,119,233,174,109, 32,252,128,122,154,208, -145, 2, 79, 64, 91, 24, 66, 1,190, 15, 81, 87, 17,183, 92,170, 85, 16, 52, 94,244,198,138,230, 55, 59,244, 89, 39,233, 41, 57, -183,171, 73,197,220, 70, 57, 19,246,138,121, 76,178, 99,125, 31, 23,119,121,194,194,182,248,126,227, 48,114, 93,166,177,160, 27, -152,203, 28,188,232,196,103,110, 55,238,138,157,169,103,153,228,150, 51,167, 78,241,253, 95,248, 2,191,249,155,191, 77,191, 55, -160, 44, 43,252,192, 67,226, 99,180,193, 83,150, 86, 20, 82,213, 53,121, 94,224, 7, 45,164,231, 64, 54, 65, 16,144,102, 41,167, -206,158,225,204,153, 13,146, 52, 65, 42, 15, 97, 37,127,241, 47,254, 69,110,221,186,206,237,187, 55,168,140, 37,207, 11,164,240, -217,217,155, 64,220,161,165, 74,194,184,164, 28,142, 48, 2,140, 12, 49,140,136,194, 16,165, 36, 69,181,205,217,179,103, 8,130, -144, 60,207,209, 74, 59, 29,145, 82, 78, 80,232,169, 5,109,129,152,119,234,114, 22,108, 34,196,177, 88, 86, 90,172,148,110, 58, -103, 13, 70, 55,170,245, 38, 31,221, 88, 57, 27,112, 44,236,171, 79,180,192,243,195,212,140,169, 97,165,108,120, 89,226, 41, 99, -240,231,235,128,236,227, 45,255, 49, 91,235,233, 28,148,134,166, 55,119,252,204, 80,216,115,142, 61,115, 11, 29, 11,226, 62,163, -107,234,170,164, 42, 29, 33, 48,205,114,106,173, 27, 41,130,154,147, 2,163, 40, 34, 8, 92,135, 46, 16,205,181,100,230,212,199, -186,118, 26,135,170,202,201,211,140,116,154, 48, 25, 79,153, 76,147,198,113,226,166, 52, 78, 40,234,127,119, 69,253,147, 20,230, - 79, 82,220,127,175, 62,242,223, 11,114,246,169,186,128,217,190,228, 99, 10, 61,243,209,207,211, 66,102,142,167, 8,101, 85,128, - 53,140, 39, 35,134,163, 33,201, 52, 33,138, 2,166,147, 17, 82, 24,119,115,240, 20,182,212, 88, 12,163,209,136, 91,183,110,113, -235,134, 19, 34,221,123,120,143,239,124,243, 27, 84, 89, 70, 89,229,220,189, 59,162,156,110,115,249,212, 41,126,224,251,191,159, -213,149, 1,189, 65, 15, 35, 60,242,218, 69, 42,164,197,148,221,237,219,172, 3,163, 81,129, 41, 53, 34,240,144,194,227,218,173, -219,252,153, 63,250, 3,252,234,207,255, 52,201, 36,165,213,238, 80, 25, 77, 94,148, 4,237,176, 81,141, 62,198,104,127, 82, 51, -247, 68, 31,255,201, 10,190,125, 34,112,224,196,227, 54,139,181,156,189, 40, 23,118,242, 66, 56, 33,216,157, 91,183, 57,125,250, - 44, 75,237, 22,183,110,126, 68, 86, 86,188,251,157,247,185,244,154,224,205, 55,223,164, 46, 11,118, 30, 62, 98,103,107,139, 58, -207,137,253, 0, 79, 26, 38,101,193, 97, 90,224,251, 33, 71,121,198, 52, 77, 41,154, 49, 91, 32, 5, 45, 47,192, 52, 62, 81,217, - 64,179,242,178, 68, 99,153,214,150, 3, 41, 24, 31,101,188,214,238,225,215,154, 90, 67,237, 73, 10,109,232,198, 62,203,203, 3, - 52,150,209,100, 2,198,178,186, 54,192,154,154,229, 65,143,100,146, 80,226, 83,150, 41,158, 50, 36,147,148,118, 43,102, 50, 77, - 88, 90, 93,226,222,163, 77,146,209, 4, 99, 4,195,170,230, 40,157,210,247, 5, 87, 78,111,240,210,139, 87,232,118,186, 76,179, -138,155,239,222,228,219,239, 95,231,206,246,144, 73, 89,207,111,116,224,198,113, 47,156,123,137,255,224, 63,251, 91,252,187,127, -254,127,196,240,254,125,210,163, 33,159,253,226,139,188,254,234,171,252,248, 15,188,201,114, 71,242, 75,223,186,201,189,189,156, -157, 28,242,160,197,120,191, 32, 28,142, 89,234,123,224,133,228,132,132,189,101, 14,198, 46,234, 84, 91,195,246,206, 54,175,190, -242, 10,254,242,128,163,195,125, 38,147, 49,123, 59, 91,156, 59,119,150,208, 87, 4,189,142, 11,120,241, 61,146,241, 8, 33,192, -247, 61,234,170,100, 50, 30, 35,188,128,218,122,140,234,146, 73,145, 16,162,201, 85,151, 27, 59,154,135,195, 9, 66, 25,151, 19, - 2, 88,105,177, 40, 60, 13,171, 29,203,133,243, 33, 81, 54,193,250, 18,225, 1,190, 96,146,164,228,149, 6, 63,192, 11, 99,194, - 73, 66,208,168,221, 35, 1,113, 4,113, 91,208,234, 5, 78,221, 30, 6,132,190, 34, 10,125,194,208, 39,108,172, 84,158,239, 17, - 6, 65,131,121,149,120, 13, 29, 78, 52,194,216,217, 88,214,217,171, 26,109,145,181, 39,136,150,162,185,227,203, 5,128,146, 56, -110, 7,143, 25, 15,194,204,239, 57,198,104,102,203,122, 93, 59, 27,154, 39, 29, 5, 77, 42,209,228,139,215, 88, 97,121,227,141, - 55,216,221,217, 99,123,107, 23,169, 36, 85,165,137,252,160,201,243, 22, 84,101,137, 31,198,236, 29,140,233,175,244,240, 98,119, -112,146, 94, 64,158, 23,236,237,108,211, 95,234,210,235,245,208, 6,138,188,196, 8,201,167, 62,253,105,240, 36,191,248,203,191, -138,242, 58,236,110,237,179, 63, 44, 81, 85,142,106, 27,142, 38, 83, 36, 62, 94, 16,145, 63,218,102, 60,205, 24, 44, 13,232,118, -218, 76,146, 20,172,164,213,138,105,119, 58,116,151, 92, 51, 80,235,186,177,154,185,157,186, 84, 51,151,192,241,154,237, 56, 77, -108, 65,119, 32, 92,232, 14, 6,215,177, 35, 26,184,139,104, 72,173,226,177,130,107,231,108, 11, 33,154, 3,151,176,115,251,173, -157,233,116,236, 39, 95, 33,158,172, 5,226,100, 70,137,253,152, 58,240,148,183, 89, 33,159, 21,120,187,192,221,182,198,161,192, -117, 89, 83,230, 37, 89,154, 81, 85,174, 0,207,234,134,187, 62,253,121,195, 99, 27, 78,253,220, 86,221, 8, 22, 29,193,175,162, - 44, 10,178, 52,101, 58, 73, 24, 79,166, 36, 73, 78, 85,187,207,145,194,101, 8, 40,165, 62,174,168,139,223, 87,167,254,180,200, - 86,219,216, 25, 30, 47,198, 79,132,202, 63, 39,153,237,187, 21,232, 61,213,114,240,172, 2,181, 40,186, 56, 49,190,127,242,123, -154,139,194,148,162,170, 10,170,170, 66, 73,193,185,243,231,121,225,234, 85,146,233,148,218, 24, 60, 37,185,125,235, 38, 8,197, -100, 60, 69,107,195,181,235, 35,167, 40,142, 3, 46,156,190, 64, 63,140,216, 88, 89,102,105,208, 35, 12,125,202,116,138,210,154, -237,241, 1, 91,163, 45,234, 50,163,229, 7,212,121,201,248,240,128,181,213,152,218,100,212,182,205,246,163, 45,231,157,164,198, -243, 12,119, 30,222,101,249,236, 95,224,252,197,171, 20,163, 9,211,163, 49,247, 30,221,115,254, 82,227, 86, 44,198,216,103,218, -255,158,167,129, 56,126, 60,196, 83, 21,159,207, 42,232,243,142, 93, 46, 30, 6, 23, 56, 3,205,233,219,143, 2,250, 43, 43,252, -198, 55,127,135,229,126,143,165,165, 37,142,118,246,104,245,150, 16, 69, 69, 58, 28, 18,199, 17,198,104,142,198, 71,238,243, 76, -133, 31, 40,168, 4,133,214,140,138, 4, 97,181,251, 90, 82, 16, 69, 17,212, 21, 26, 73, 13,152,230, 64, 97,177, 76,171,138,229, - 48,112,127, 14,248,113,139,173, 44,193,139, 3, 70,149,225,194,185, 21,234,209,152,149, 83, 27,132,173,152,251,143, 30,146,231, - 21,237, 56,162,214, 2,101, 53,201,100,132,209,150,201, 36, 33, 73, 38, 72, 41, 73,167, 57, 65, 52,224,236,229, 11, 36, 7, 7, -120, 85, 77,169,107, 50,223, 35, 43,106,148,144,116, 98,159,139, 23,207, 18,197, 49,219, 7,135,252,238,141, 91,220,222, 25, 49, - 46, 52, 37,130, 90,136,121, 78,183, 16,110,227,251,171,191,246, 27,252,241, 63,253,231,152, 28,236,176, 82,215,248,155, 21,245, - 47,125,132, 30, 11, 46, 92,189,192,231,222,120,145,203,231,214,249,103,191,248, 13,222,125, 48, 33,177, 26, 25,134,180,253,154, - 51,103,214, 88, 94,238,179,127,184,207,251,215,111, 19,199, 46, 17,112, 48, 24,224,121, 62,105,150, 98,235, 26,165, 20, 89,154, - 18,250,138, 60, 77, 8,123, 29, 60,207,195, 88, 75,150,229,132, 97, 4,184,200,201, 78,167,139,239,251,164, 69,141,106, 47,179, -187,255,128, 81,154, 19,166, 25, 94,107,141,239,188,253, 62,153,177,232,121,119,165,193, 42,164, 9,104,219,146,243, 29, 75, 71, - 25, 42, 27, 51,169,106, 50,235,225, 71,109, 94,125,225, 37,206,172,174, 83,158, 75,233,182, 91,100,135,194,141,219, 21,132, 33, -180,219,130,168,235, 19,181,124, 90, 97,139, 40, 8, 9,124,233,114,220, 67,159, 40, 10, 9,195,160, 9,101,113, 30,244,153,218, -218, 83,202, 89, 87,165,116,168, 84,173,143,193, 83,130,199, 66, 70,196, 44,254,227, 9,161, 41,243,206,241,120, 93,103,165,179, - 76, 41,229,205, 25,224,198, 58, 17,155, 80,198,249,172,133, 68, 74,237,190,190, 54, 32, 44, 95,249,202,151,249,229,175,254, 50, -123,251,135, 46,193, 44,112,118,175, 32,244, 49,104, 10, 3,211,220,112,243,189,107, 68,113,135, 65,127,137,184, 19,210,239,119, -233,117,123,212, 69,198,214,163, 17,103,207,157,199,139, 35, 39,152,242,125,222,248,204, 91,228, 90,240, 79,254,187,159,227,225, -131, 49, 70, 74, 58, 94, 76, 90,104,172,173,232,181, 91,104, 43,168, 43,195,206,222, 33,251, 7, 71,196,113, 72,183,221,161, 42, -107,214, 86, 87,209,181, 5, 90, 44, 45,117, 9,130,128,188,200, 93,183,222, 68,149, 74,117,108,101, 21, 51,253, 76,211, 81,207, -139,251, 44,235, 65, 58,206,175,197,121,176,157, 48,177,201, 5,183, 46,107,220, 90,129, 53, 26,225,205,214,128,170,177, 22, 51, - 79, 64,155,239,190,197,147,162,186,231, 21,244,199, 91,244,249,138,213,206, 18, 53,237, 2, 60,220,158,152,192, 31,239,248, 23, -212,237, 98,241,235, 52,133, 94, 27,108, 93,161,171,138,186,104,104,111, 89, 65,217, 20,105, 48,243,200,222,217,184, 94, 27,141, -173, 29, 39, 95,215, 78, 24, 57,139,177,213,117, 77, 85, 86,205, 30, 61,103,154,100, 76,166,206,151, 62,183, 19, 54, 66,227, 48, - 8, 29,251,253,153, 62,191,231,128,102, 62,174,184, 62,175, 99,183, 11, 69,242, 89, 93,251,243,146,216,158,182,103,127, 90, 8, -201, 83, 11,251,204,131,253,216,148,193, 26,243, 84,139,215,252, 52,198,211, 97, 43, 0, 97, 24,114,254,220, 89,172,149,124,207, -231, 63,207,191,252,149,175, 81, 27,205,181, 27,183, 17, 82,144,107,131, 31, 69,132, 97,200,250,218,128, 94,183,139, 39, 20, 81, - 16, 64, 93, 18,216,154,100,111,155,123,187,155, 76,215, 6,180,218, 45, 20,146, 80,120, 4, 97,204,218,250, 26,117,153, 17, 5, - 1, 86, 27,178, 94,151,178, 58,162, 29,120, 28,165, 16,183, 99,146,170, 66,138, 18, 93,167,236,238,237, 16,180, 59,200, 32,198, -243, 53,210, 43,136,219, 61,116, 51,252, 22, 11, 48,134,103, 58, 10,236,239,113,132, 98,159,173, 76,117, 47,122,154,142,200,206, -133,114, 44, 32, 21, 63,188,121,139,107,183,111, 50,201, 51, 38,105,198,214,158,194, 42, 65,128, 71,251,240,136,177,242,121,127, -103,139,110,183, 67, 16,135,164, 69,206, 56,207, 32, 53, 72,161, 28, 45, 14,129, 39, 29, 46, 52,244, 60, 23, 5, 89, 89, 10, 91, -185, 24, 72,225, 49, 83,161,100,214,144, 40,193,210,114,159,124, 56, 69, 26,131,215,246, 57,164, 70,251,146,241,116, 74, 47,240, - 28, 29, 48,138,121,180, 51,162, 29,194,202,160,207,209,112,204, 96, 41, 32, 75, 11,198,227,132,213,181,101,146,244,128,110, 43, - 70, 32,153,228, 5,189,158,199,100,123, 23,207, 15, 25,231, 5, 59, 89,133, 4, 6,158,228,234,185, 13,226,200,231,131,235, 55, -185,187,187,207,131, 81,202,176,178, 24, 33,209, 77, 1,153,221, 90,108,131,172,172,171,154,253,189, 7, 88, 79, 51, 2,138, 74, - 98,134, 30,191,250, 75, 31,176,177, 59,228,135,190,252,105, 46,117,187,252,232, 43, 23,145,250, 46,239,239, 37, 28,165, 22,218, -146,164,200,233, 21, 33,151,175,188, 64, 16, 4,100, 73, 66, 86,106,228,100, 74,224,249,140, 70, 35,250,109,103,171, 57,215,239, - 83,150, 57, 97,224, 97,173,101,119,111, 31, 33, 61,198,211,196,133,102, 24,219, 40,181,115,186, 97,135, 56,110,225, 85, 6,145, - 14,201,143,246, 8,131,128,195,188,230,254,225, 17,181,138,155,241,152, 70, 89,141,176,130,208,194,197,174,229,135, 63,219, 37, - 27,105,240,207,146,249, 37,137,153,114,245,202, 43,188,246,185, 43,156, 91, 30, 48,221,223,227,252,217,117, 70, 91, 15,136, 36, -116, 91, 18, 47,132,168, 27, 16,119, 29, 66, 53, 84,161, 27, 99,206,109,107,178, 25,197,187,162, 46,155,113,174, 20, 52, 49,170, -199,162, 46,139,117, 4, 49,115,220,125, 49,119,102,204,155,237,133,224,143,217,238,221, 62,134, 51, 21,200, 6, 5, 43,140,117, - 69, 92,184,165,173,231, 5,199, 5, 66,219,249,142,223,243,148,219,187, 26,135,147,254,202, 15,252, 0,191,240,139, 95, 37, 43, - 11, 20,224, 43,143, 90, 27,178,170,162,146, 1,239, 92,127,128,198,227,226,229, 85, 10,235,145, 22, 6, 47, 41, 89, 89,245, 16, - 42,196,152,130,189,221, 29, 86, 87, 78,161, 4,142,239,223,142,248,220, 91,111,177,183,159,241,247,255,155,159, 33,110, 71, 24, - 36,227, 73, 74,233, 91,116, 9, 89, 89,178,180,178,236, 20,248,141, 74, 95, 73,197,112,164,152, 76, 83, 58,237, 22,253, 81,196, -232,168, 75, 16, 6,172,175,175, 17,183,226,102,117, 97, 93,113,247,212,194, 52,206,137,206, 84,211, 77,155, 70,123,228,138,184, - 69,122, 62,101, 45,208, 86, 35, 2,133, 41, 43,180,133,178, 46, 81,248,110,244, 46,132, 83,232,203, 0,132,135,182,224,207,252, -226,226,164, 30,104,102, 67, 19, 79,177,190, 61,123,130,123,162, 8, 60,166,123, 59,190, 7, 90,219,140,215, 57, 46,230,214,204, -246,231,118,206,121,159,239,233, 27,230,188,235,210, 43,202,204,137,218,138,162,164,104,132,108,178,201, 76,119,171,162,227,137, -131, 53, 6,211,164,221, 25, 61, 35,208,185,224,151,178, 40,201,210,156, 36, 73, 25, 79, 82,166,105,142,174,181, 3,250, 40,133, - 31,184,131,108, 16, 4,199,157,250,211, 20,238,255,186,127,125, 82, 15,251, 31,244, 47, 49,139,207, 59,230, 26, 62, 93,113, 57, - 59, 0, 60, 38,189, 92, 28, 25,207,198, 40, 2,248,214,183,223,229,209,230, 33,158,239,211,237,247,249,212,107, 47, 19,134, 62, - 73, 81, 49,154, 78,201,242,156, 52,157,178, 59, 61, 66,152,134, 76,103, 52,175,191,112,137, 23, 95,121, 1, 95, 88, 58,189, 14, - 66,121,148,185,198,179, 62, 75,189, 54, 65,168, 24, 38, 41,187, 59,123, 84, 69, 73,232, 89, 44,154, 73, 61,101,100, 98,114,163, -208,194, 96,109,134, 39, 67,242,188,192,138,144,165,229, 13,174,223,223, 97, 58, 73,233,246,150, 8,162,150, 75,159,211,245,220, -189,240,123,141,169,125,222,112,231, 89,135,189,185,211, 96, 14,172, 57,249,247,117, 93,115,227,250,117,190,248,133, 47,178,181, -187, 77,150, 36,220,191,255,136,172,172, 9,163, 22, 86, 8,142, 38, 99,246, 15, 15, 81,161, 59,233, 6,161, 79,141,102,120,152, -226,251,238,223, 12,176,172,244, 98,170,162, 98,146, 22,115,206,189,187,175,168,249,129,114,105,169,207,104,116,196,118,146,179, - 46, 61,122,173, 54, 85, 93,208, 10, 66,116, 85, 51,232,199, 20, 73,193, 97, 81,210,233, 78, 88, 81, 17,145,175,232,118,218, 12, - 15, 71,116, 99, 31,163, 35,198,227, 9,190, 31,145,166, 53,121, 1,161, 15, 71,135, 21,167, 47,159, 71,120, 62,133,177,108, 62, -216,102, 98,156,152, 37, 86,240,217, 23,207,114,250,204, 10,105,158,242,104,127,200,163, 81,206,176,130, 90,138, 19, 98,196,153, -120,231,196,141,202, 10,188, 10,150, 61,133,213,112,246,211,159,226,236,167,174,242,247,254,201, 63, 33,166,226,181,179,103,137, - 91, 1, 95,121,227, 2,217, 55,174,115,109, 88,179,151, 24,190,125,115,143,228,116,206,121, 35,217,216, 88, 39, 73, 50,170,170, - 70,174,173,146,154, 28,107, 12,237, 40,166,215, 95,230, 96,111,135, 86,228,147,164, 25,105,150, 83, 25, 67, 50, 77,231, 49,161, -198, 88,188, 32, 4, 47,198,111, 45, 17, 68, 1, 70, 87,248,249,132,190,167,136, 58, 45,118,239,110, 17,232,156, 0, 69, 5, 40, - 99,136, 45, 72, 81, 51,136, 5, 63,246,133,243,124,250,165, 46,195, 29,184,240,218,151,104, 15,119,185,244,217, 37,218, 81, 72, -232, 73,100, 93,184,157,241,153,117,110,198,130, 94,232, 19,134, 22,191,227, 19,116, 34, 90, 97, 76,203,143, 8, 2, 71,139, 11, -155,209,186,239, 57, 52,172,211,188,200,121,178,218, 12, 42,229, 82, 1,157, 26,189,169, 51,115, 91,175,105,178,183, 93,103, 40, -143, 59,204, 57, 0, 69, 55,221,227, 44,244, 68,156, 88,204, 30,239,220,221, 13, 92,235, 6,138, 35, 36, 22,229,172, 72,118, 38, -200, 83,184, 69, 4,212,117, 73, 28,249,252,240, 31,250, 65,190,254,235,191, 65, 58, 77,157,143,222,243,168,240,120,247,250, 93, - 70,133, 96,117,109, 29, 47, 90, 34,234,244,137,218, 29,162,110, 11,225,181, 17, 50, 32,201, 15,155, 96,144, 3, 4, 10,233, 9, -218,180,241,195, 14,127,236, 71,191,140,231,133,252,131,127,252,207, 41,178,148,180, 16,244, 91,146, 34, 41, 8, 91, 30, 71, 71, - 7,120,210,119,235,196,162,192, 90,203, 52, 73,208, 90, 19,199, 17,235,131, 62,182, 54, 40, 79,146,231, 37, 43, 43,203,172,172, -174, 16,197,145, 43,122,114, 97,189, 38, 23,225, 30, 2,213,132,162,204, 80,167, 6,139, 17, 30,211, 50,231,254,195, 77,110,223, -190,199,225,254, 8,180,165,215,233,209,138, 66, 86, 6, 61,206,159, 63, 77, 47,140, 49, 66,225, 9,151,170,166,236,241, 98,228, - 68, 19,119, 76,100,253, 68, 26,170,239,190, 86,125,204,250,113,102,213, 53,110, 15,174,235,138, 42,111,186,244, 36,165, 40, 10, -234, 90, 35,133,211, 3,205, 72,123,243,209,187,157,141,221,205,156, 66,103, 27,107,100, 93, 85,228, 89, 70,158, 21, 76,167, 41, - 73,146, 81,150,122,174, 99, 8,131,128, 40,242,137, 35,231,117, 63,209,169,219, 79,108, 62,251,131, 41,232,207,203, 76,255,215, - 86,204,231, 8,212,199,246,228,143, 55,168,139,227,148,199,148,226, 79,250,179, 37,126, 43,230,181,215, 94,161,211,221,162,215, - 95,102,154,164,236,239,239,185, 48,140,218,146,228, 5,189,126, 7, 79,106,144,146,126,183, 15,218,146, 76, 70, 68,157,144,118, -183, 69,168, 4,126, 24,112, 52,201,200, 18,205, 82, 55,198,168,154, 66,151, 84, 10,252,149, 85,138,180, 70,245,123, 4, 45,197, -178,172,121, 33, 94,102,245,101,195,219, 55,190,195,205,187,239, 34,144, 4,170,205,205, 27,155,156, 62,115,129,235,223,249,160, -137, 44,116,207,110, 85,107, 60,121, 60,181,152,191, 0,254,128, 31,243,167, 21,116, 99, 12, 86,202,103, 30, 36,124,225, 17, 74, -143,223,250,245,223, 66,249,138,239,255,222,207,241,210,229, 43, 76,178,154, 73, 86, 97,109,201, 7, 31,188, 71,133,225,224,240, -112,238,192, 48, 89,233,196, 61,218,208, 10, 3,190,255, 51,159,226,223,249,183,254, 2,119,110,220,224,191,249, 71,255,140,131, - 73, 70,220,142,217, 62, 26,147,214,213,220,201,161,139, 20, 97,106, 42, 1, 91,147,132,141, 94, 15, 81, 11,116,161, 57,183,188, -132, 68,241,104, 47,161,163, 4,183,239, 60, 66, 5, 33, 86, 43,198,163,148,186, 40, 81,198,176, 87,215, 28, 14,115,206, 94,108, -211,237,175,176,179,239,108, 93, 82, 73, 90,126,196,254,120,202, 65,150, 51,198, 82,214,208,149,138,171, 27,109, 94,122, 97, 29, -131,225, 59, 31,220, 96,148, 25, 38,181,161,146, 46, 55, 89, 88,221,136,118,196,211,237,132, 86, 33,172,166, 47, 20, 75,194, 16, -116, 44,127,234,223,252, 83,252,212,207,255, 20,211, 2,126,225,253, 27,172,246,125,206, 71,150, 23,150, 67,118,199,150,163,218, -103,168,107,238,236, 78, 41,178,187,140,142,198,156, 57,125,138,170,168,184,117,243, 14, 47,188,112,149, 86, 39,102,239,240,136, - 48, 90, 7,169,216,217,221,199, 83,146,168, 21, 19,197,109,186,189, 37, 76,173,241,252, 16,223, 15, 8,227, 54,210,115,191, 91, - 25,240,112,154,179, 61, 44,208, 38, 64, 91,193, 70,175,224,207,127,190,195,214,161,224,163,131, 2, 35,219, 92, 30,156,161,215, - 83, 92, 62,223,227,205, 11, 33,121, 49, 66,245,206,242, 96,235, 16, 47, 20,232,108,138,167, 13,173,206, 26,195,163,125,218, 43, - 3,186,171, 75, 68,177, 34,142, 60,226,174,135,106, 7,248, 81, 72,228,181,105,121, 33, 94,232, 53,193, 45,178,137,182,117,251, -254, 32, 8,230,249,232, 82, 58,129,151, 53, 6,164, 90, 88,253, 52, 80, 18, 99,154,238,218,145,206,142, 41,150, 6,107,196, 60, -238,114,230,153, 54,198, 32,156, 79,237,100,114,151,153,173,230, 84, 51, 26, 93,160, 95,206, 70,254,179, 2,176, 48,169, 50, 66, - 80, 27, 77,167,221,230, 7,190,244, 37,126,247,155,111, 51, 26,141, 17,192, 71,119,183,185,118,231,144,160,183, 65,105, 61, 14, -134, 19, 44, 30,101,105,217,221, 59,228,250,245,155,188,242,210, 21, 58,221, 21,170,108,159,201,100,130, 20,138, 40,246,169, 14, - 50,226,118, 69,212,178,124,229, 43,159,103, 82,215,252,215,255,240,103, 72,178,138, 42,169, 24, 44,117, 64,149,216, 50, 69, 88, -151, 98,183,180,180, 68,146,166,136,102,119, 94,153,154, 64, 56,173,193,233, 51,167, 57, 26,142,157, 61, 43, 47, 88, 89, 89,165, -183,220,195,247,220,186,193, 44,218,139, 23, 89, 22, 77, 81,215,192,209,209,136, 95,254, 87,191,197, 79,255,220,175,112,227,222, - 3,166,121,141, 48,138,192, 11,232,180,218, 92, 58,127,142,183,222,124,157,219,219, 67,206,174,118,121,237,149, 23, 88, 93,233, - 32,133,231,184, 2, 11, 80,149,121, 13, 89,152, 38,219,167,172, 74,159, 63, 88,180,159,224,131, 78,234,138, 26, 52,215, 99,159, -122,108, 59,171,203,146, 34,203,201,146,148,178, 40,209,250, 88, 32, 28, 4,129,243,163,123, 30,202,243,230, 86,236,121,116,239, -236, 96,160,157,125, 45,203, 82,210, 36, 97, 58,201, 72,167, 41, 69, 81, 97, 44, 4, 82,225,249, 14,125,220,138, 66,162, 56, 36, - 12, 67,212,231, 94,187,240,147,178,241,110, 44,176, 91,142, 79,182, 60, 37, 79,123,126, 17,219, 57, 59,119,150,253,250,180,241, -244,211,118,235,143, 63,144,139, 31,251, 56,108,230, 89,123,251, 79,162,188,127,226,207,197, 99,102, 59,187,248,188, 53,123,140, -185,218, 80, 83, 84, 53,101, 93,163,181,105, 78,244, 13,175,188,185,105, 56, 28,165,154,251, 97,183,182,182,184,113,243, 54,135, -135,251,152,170,164, 29, 69,132, 81, 15,109, 21, 90, 10,164,239, 44, 32,121, 94, 48,205, 10,146,170, 38,110,247, 89, 93, 59, 67, -127,176, 78,167,191, 78,216, 89, 33,236,175,209, 90, 59, 69,171,211,103,146, 85, 24,169,240,162, 16, 21,121,200, 64,145,151, 5, -105, 82,112,243,198, 61,172,242, 57, 28, 79,152,166, 21,120, 45,218,189,101, 46, 93,186,200,155,159,186,202, 7,239,188,131,173, - 42,130,208, 39,136, 67,164,239,200, 78,199,193, 45, 98,145,206,112, 98, 63, 36,143,165,111,199,234,207,121,204,161,120,234,212, -194, 29,114, 92,102,248,140,218,165, 22,224, 51,204,197, 72, 13,134, 81,186,157,144,106,132, 54, 59, 59,123,188,251,209,117,138, -186,230,209,195, 7,236,108,111, 83, 22, 37, 74,121,220,122,116,151,189,221,125,222,124,229,101,166,163, 49,121, 89,147,213,154, - 73, 94, 35, 53,188,241,210, 21,254,242,191,253, 63,225,223,250,243, 63,206,203, 87, 47,240,198, 27,159,230, 75, 95,254, 34,223, -247,125,223,195,159,254,211,127,130,105,146,114,237,246, 29, 76, 35,106,242,173,165, 43, 36,149,177, 84, 8,210,170, 38, 8,125, -186,145, 79, 91, 57,107, 82, 89, 84,164,165,166, 86,150,210,104, 58, 97, 72, 53,206,241,149,219,199,230,121,197,169,139,103, 88, - 62,181, 76, 8,196,161,199,242,169, 13,202, 60,103,165,187,196, 4,203,245,173, 61, 34,223,199, 22, 53,129, 39,248,212,165, 37, -150,187, 17,191,253,206, 29, 30,238, 38, 76, 75, 77,102,172,251,190, 0,105,155, 65,146,120,204, 9, 58,123,147, 22,139,100,201, -214,188,226, 73,178,173,109,110,252,210,215, 25, 31, 78,153,234,148, 47,127,254, 20,239, 92,223,231, 48, 43,233, 4,154, 0,203, -118,102, 24,225, 58,199, 58, 55,244,186, 17, 81, 32, 88, 90,234, 17,197, 81,195, 26, 7,141, 37, 77, 11,162,184,135,144, 33,221, -238, 82,179,115, 23,180,226,152, 78,183,143,192,162,117, 73, 93, 87,148,101,197,100,154,178,178,178, 78,212, 25,176,191,191,207, -157,187,247,176, 6,146,163, 35,206,174,172,178,214,233,176, 28, 24, 94,218,232,112,101, 57,102, 41,204, 81,213, 24,116, 77, 94, - 10, 14,199, 25,198, 86,180, 34,133,194, 58, 53,112,220, 70, 70,109, 14,167, 57,147,195, 29,246, 54,111,211,237,119,136,219, 49, - 81, 20,209,142, 98,226, 32, 34, 12,124,130,224, 56,180, 37,240, 61,134, 7,251, 68, 65, 64,167,221,198, 83,162,225,142,207,162, - 86,103, 72,226,198,117,225, 29, 99, 95,143, 85,237,114,158, 7, 39,132,117,100,185,230,240, 46,103, 62,108, 37, 17,141, 69, 14, -121,236,170,152, 99, 71,109,243,118,108,252, 4,219,136,243,148, 56,246, 93, 53,207,169, 49,134,178,114,187,212,208,247, 25,172, - 44,147,106,203,183, 62,124,192,239,188,179, 3,126,140, 10, 2,164,112,252,248,180,168, 25,167, 5, 42,136,169,234,146,118, 59, -160,223,239,178,180,188,198,180, 48, 8, 63,166,170,220, 56,247,232,112, 68, 93,129,181, 5, 87, 47,159,227,202,149, 75,220,184, -187,201,246,112, 66, 94,185,194,145, 78, 19,146, 36, 35,244, 61, 66, 79,129,173, 73,178,132,162, 44,230, 56,210,162,118,118, 44, - 4,140,142, 70, 20,121, 65,149,231,152,162,194,179, 78, 71,224,135, 33, 40,137,109, 2,112,220,218,195, 96,165, 34,183,138,175, -253,214,183,248, 91,255,229,255,131,255,254,103,127,133,173,253, 67,178,202, 98, 16, 24, 33,208,214,144,150, 5,219, 7,123, 92, -187,125, 27,233, 7, 96, 21, 71,227,148,131,225,132, 86,111,224,174, 63,233, 14,243, 46, 2,183, 41,175,198,130,149,115, 75,218, - 19,173,152, 61,134,160,139, 70,177,110,102, 30,167, 38,100, 10,163,155,195,155, 70,204, 57,252,238,160, 39,148, 66, 41, 7,133, -177,205,189,202, 34, 23,130,190,154,177,123, 93, 82,231, 25, 69, 90, 48, 29, 79,152, 78, 82,138,188, 68, 91,103,109,140, 67,143, - 86, 59, 34,142, 35,130, 40,112, 78,135, 6,136, 99,106,131,169, 12,186,121, 78,234,178,162,200, 10,210, 52, 39, 73, 75,146,164, - 36,205, 75,140, 53,115,237, 72, 28, 7, 14, 92,211, 10, 8, 91,238,223, 84,159,125,245,194, 79,206,118,230, 39, 11,102,131, 77, -125, 28,159,186, 88, 64, 23,212,203, 98, 1,213,250,180, 98,251,100, 65,126,190, 37,234,227,138,250,199, 5,189, 60,149, 58,244, - 4,155,247,241,231,220,160,103,145,118,149,166,172,106,202,230,119,173,221,232, 72, 10,231,207,156, 21,245, 57, 75, 90, 10,124, - 63, 68,121, 30, 91, 59,219,110, 52,236,251,116,218,109,202, 74, 32,195,136,202,130,244, 98, 6,189, 13, 58,173, 13,186,189, 51, -156,189,252, 18, 65, 39, 2,169,152, 36, 9,195,209, 17,183,110, 93,227,240,104,151, 52, 29,113, 52, 28,241,246,183,191,197,165, -139,231, 56,125,122,149, 86,164,216,222,122,200, 15,255,161, 31,226,242,197,211,124,248,254, 55,249, 19,127,230,199, 88, 89, 91, -227,218,205, 7,248,241, 18,126,208, 97,125,253, 12,127,248,143,126,133, 91, 55,111,130, 54,196,237, 22,185,201,233,246, 90,212, - 85,190,104,218,124,198, 20,221,156, 68,239,216,227, 64,132,103, 21,245, 69,127,250,226,255, 47,170,219,141,117,188,234,185,111, - 84, 48,103,236, 23, 69,193,123, 31,124,192,193,104, 76, 16, 4,116,219,109, 90,113, 68, 81,148,236, 30, 28,242,104,119, 7,105, - 32, 80,138,188, 40, 73,203,146,172,172, 17, 82,241,249, 79,191,206, 95,249,119,254, 18,159,126,245, 5,150,122, 45, 71, 13,243, - 61, 78,157, 57,195, 75, 47,191,196,229, 43, 23,121,241,197,151,249,234,191,252, 26,163,233, 20, 33, 32, 22,138,181, 86,135,188, - 40,230, 66,185,178, 44,137,125,143, 78,164,176,182, 98,169,215, 99,146,228, 72, 95,144,164, 37,171,189, 46,201,120,130, 23, 8, - 58,203, 61,140, 54,108, 92, 56,133,161, 32,182, 37,189,110,196,164, 72,152,140, 38,180,194,136,123,195, 49, 71,147, 28,145, 87, -244,162, 24, 60,205,217, 21,159,195,225,152,111, 61, 24, 51,205, 45, 93, 41,136,141,160,237,249, 84,214, 82, 9, 87,180,149,145, - 14,233,107,143,139, 4,246, 24,135,220,182,134,215, 37,108, 68,208, 33, 71, 11,143,137, 41,249,193,207,173,241,242,167,222,226, - 23,126,243, 22,158, 16,132, 6,118, 19,205,212, 66,109, 21,161,178, 40,107,136,164,164,200, 11, 14,135, 99,166, 89,198,112, 56, -100,121,109,141,165,165,101,132, 84, 20, 89,129,174, 43, 60, 97,193, 58,126,117,153,166,248, 74, 80,151,110,202,225, 41,137,174, -107,140,214,172,111,172, 83,228, 25,183,111,223, 64, 88,203,189,219,247, 24,141,142,220, 1, 55, 75,241,171, 49,117,121, 8, 85, - 74,167, 21, 17, 4, 17,202,143,104,119, 98,250, 75,109,150, 7, 75,172, 46, 47, 19,183,219,180,186, 3,114, 13,126,212,102,239, -209, 93,146,163, 29,226, 56, 38,142, 34, 90, 81, 76,236, 7, 68, 65,224,172,108,179,124,238,192, 35,244, 3, 58,157, 22,157,118, -219,121,213,103,248, 97,217, 36,175,121,202,253,153, 82, 40,207,145,208,102,225, 44,243,107,117,126, 77, 51,183,181, 9, 41,231, - 62,108,165,142, 67, 75,102,217, 16, 82, 28,143,132,221,245,236, 49,203,249,126, 28, 47,106,173, 89, 92,231,206,167,134, 85,229, - 64, 37,194, 90, 60,223, 35,106,119,201, 42,143,223,125,247, 17,219,195,140, 78, 55,160, 27,121,132, 18,166,211, 12,107,160,221, -106,209,239,182, 9, 26,198, 67,220,233,145, 20,154,168,213, 65, 24, 67, 50, 30,115,116, 56, 36,207,115,210,100,140, 68,211,142, - 67,190,239, 11, 95,224,189, 27,119,216, 59, 58,114, 89,235, 69, 77,213, 76,186, 90,113, 72,154, 78, 27, 54,187, 43,148,181,214, - 20,101, 73, 94,228, 36,105, 74, 50,157,162,171, 18, 83,214,100, 73, 66, 50,157, 82, 20, 5,194, 83,132,113,212,208,249,220,190, -221, 8,197, 48, 41,248,191,255,189,127,196,255,245,239,254, 67,238,108,238, 82, 91, 49,111, 27,230, 69,209, 13,230,177, 88,202, -186, 98,115,107,135,201, 40,165,221, 29, 96, 9,248,232,198,109,162,184, 67,171,221, 37, 10, 34,119,232,106,130,110, 88, 80,205, - 47,138,162,237,226,182,124,129, 57,107,230,222,114, 59,247,160, 31,115,221, 45, 86,187,107,218,217, 19,221,170, 68,121, 30, 66, - 45,132,202,136, 38,211,221, 90, 96,134,131, 45, 40,210,148,116,154, 50, 29, 39,228, 89, 78, 85,107, 44, 22,233, 9,226, 56, 32, -138, 99,130, 48, 64,121,142, 26,103,140,161,170,106,170, 82, 83, 21, 21,117, 89,185,110,191,170, 41,202,146,178,212,228, 69, 69, - 86,214,110,189,162,164,115,120,132, 62,113, 28,210,106,199, 4, 81,232, 14, 10,193, 66, 81,127,154,194, 92, 46, 20,251,167, 21, -117,113,162,168, 31,191, 24,158, 87,136, 31,175,168,207,235,194,255, 32,138,250,227, 93,186,125, 92, 67,192, 73, 0,191,110, 20, -135,117,237, 10,122, 81,214,148,181,203, 15,158,125,173, 89, 81,119,182, 25, 15,223,243,241,154,128,151,178,172,185,127,255, 33, -173,184, 69,191,215,103, 48, 88,166,191,180, 70,216,234,224,199, 17,173,118, 12,104,246, 14,182,152,230, 99,202,116,140, 29,143, -185,119,235, 54,103,207,158, 71,133, 49,147,194,112, 56, 46, 89,217,184,192,103, 63,247, 38,105, 62,225,251,191,248, 5,254,216, -143,255, 41,214, 78,159,225,253,143,174,241, 71,254,204,159,161,211,139,185,118,227,125,150,214, 79, 49, 46,106,174,223,126,136, - 10, 58,196,173, 30, 82,250,252,241, 63,254,135, 26, 36, 35,104, 83,113, 56,218,231,194,249, 83, 76,199,135,243, 19,238,227,202, -208, 19, 65, 21,199,146,186,121, 49,127, 90, 81, 95, 68,195, 46,226, 98, 23, 11,252,172,168,219,199, 56,251,238,198,225,222,223, -219,219,229,237,111,189,141,242, 2, 94,127,233, 21,206,174,175, 19,122, 62,126, 24,115, 56, 73,232,246,250,120,210, 99, 52,157, -226,183, 90, 76,139, 2,163,107,206, 46, 47,243, 31,255,229,255, 25,167,215, 87,136,163,128, 48,244, 8, 66, 31,233, 7, 13, 71, -217, 67, 72,201,202, 96,133,157, 71,219,188,251,206,187,206, 39, 92, 27,218, 81,192,218,114,159, 34,207,145,214,208,142,124,234, -188,192,148, 37,189, 94,139,188, 41,198,105, 90, 16, 7, 46, 26, 54,138, 37, 37, 21,253,245, 37,138,162, 66,120, 80,102, 71, 12, - 34, 69, 50, 25,178,189,123,192,209, 97, 65,111,208,231,168,132,195,253, 17,129,180, 24, 5,190, 39,232, 8,184,179, 59, 97, 55, -119,193, 36,171, 74,178,100, 33,246, 20, 19, 93,147, 75,199,165,158,171,107,155, 81,166, 93,196, 87, 90, 67, 23,120, 93, 8,214, - 58,150,238,138, 37,209,150, 67, 99,121,237,149, 30, 63,242, 71,190,204,111,189,183,201,253,237,148,110,183,141, 46, 10,166,165, -164, 16, 10,101, 13,190, 49,148,147,140,100,146, 33,148, 15,202,227,202,203,175, 32,172, 96, 58,153,160,235,156,178, 24, 99,170, - 4, 83,103, 84, 89, 70, 58, 25, 51, 26,238, 49,220,219,162, 72, 39, 14,185, 42,192, 19,141, 90,217,143,185,112,233, 18,219,155, - 15,233,117, 35,164, 40,192, 36,108,172,182, 88, 91,109,177,180,212,163,219,237,186,155, 82, 20, 53,157,143, 34, 10, 67, 58,157, - 86,211,105,135,132, 81,139,168,221, 67, 6, 49, 65,220, 97,124,176,197,112,119,147, 40, 12,136,195,208, 21,243, 70,104, 20, 53, -221,121, 16, 6, 4, 77,118,122,187, 21, 59, 66,161,114,163,120,207,115,172,119,169,148, 75, 37,155, 5,179,204, 72,104, 11,252, -246,197,123, 26,182, 97,205, 47,164, 10,206,175,103,213,100,110, 47,222, 19, 79, 76, 24,197, 60, 91,220, 24,230, 4, 49, 26, 23, - 3, 51,226, 26,199,212, 48,107, 44,117,165,155,200,108,131, 18,130, 56,104, 83,100, 5, 31,221,217, 33,205, 43, 20,134,170, 40, -201,147,140, 65,183, 67,160, 28,107, 33, 10, 34,124, 63,160,213,138,177, 22,246,247,118,233,196, 62,189, 78,196,116, 60, 36, 43, -115,202,170,196,234,154,253,221, 29,178, 44,103,227,236, 89, 62,184,121,143,229,245, 85,130, 40, 96, 50, 73, 9,226,134,104,102, - 45,186, 40,240, 4,136,134, 99, 31,248, 94,147, 96, 89,187,191,175, 53,181, 54, 24,171,201,203, 12, 99, 12,217, 52, 65, 90,104, -183,218,120,158,143, 70,114,127,111,194,255,230, 63,255,219,252,244, 47,126,157,164,168, 92,135, 43,101,179, 8,125,250,196,214, - 54,129, 49,227,113,194,131,135,155,212,198,178, 50, 88, 99, 60, 74,184,115,251, 33,129,223, 97, 48, 88,113,160, 22,171, 49,212, -174, 17,105,238, 79,243,164,201,167,221,235, 27, 97,154,104, 14, 83,114,214,180,104,237, 58,126, 99,176, 13,111,192, 54, 97, 51, - 66, 74,119, 31,105,138,186,104,138,250,172,168, 88,107, 78,168,221,167,147, 41,201, 52, 37, 47, 74, 55,249, 53, 6,207,147,132, -126,128, 31, 56,150,130, 83,252,219,102, 42, 92, 53,201,119,117,115, 29,185,111, 85, 55, 57,245,174, 22, 85, 24, 83, 55,249, 3, -174, 83,111,181, 35, 23, 6, 19,185,209,187,231,121,127,176, 69,253, 89, 99,247, 79, 26,206,242,113,135,129,223,111, 81, 63,105, - 63,120, 10,112,198, 52, 23,106,229,248,199,174, 75,119, 35,120,109, 78, 22,117,207,243, 8,195,208,117, 3,205,137, 95, 8,199, -156,110,181,218,156, 61,123, 30, 33,157,122, 58,205,199, 76,178, 33,123,195,237, 6, 52, 16, 82, 87, 22,229,135,108,172,159,231, -133,203,111,176,181, 63,230,207,254,196,255,152,203, 47,190, 74, 85, 9,148,240,249,129,239,255, 1,226,118,196,163,205, 45,110, -223,189,207,181,235, 55,121,240, 96,155,180,208,188,243,157,143,248,246,187, 55, 89,217,120,145,180,242,153,102,134,173,237, 61, - 38,163, 3,138,228,144, 59, 55,223,225, 95,252,119,255,136, 95,252,231,255, 3, 55, 62,120,151,213,229, 30,161, 39, 72,167, 99, -183,102,176,134,197,216,194,197,149,199,241, 72,233,147, 23,245,197, 46,125, 49,157,237,241,162, 62,155,238, 28,163,101,155,143, -149,138,186, 46,185,117,231, 54, 7,251, 99,116,154,225, 91, 75, 24, 4,168, 40,100,152, 36,244,123, 3,214,215, 79,177,189,191, -207, 97, 50,166,172, 43, 66, 33,249,247,254,226, 79,240,169, 23,175, 16, 5, 30, 81,228,198, 80, 94,224, 35,253,230, 69,232,121, - 40,169,216,186,255,128,150,231,179,253,112,147, 42, 47,121,233,133,203,188,246,202, 85,190,240,153,151,105,139,154,149,126,139, - 55, 95,125,129, 87, 47,109,208,111,121, 76, 38, 83,118, 15, 18,162, 86,140, 82,130,100, 90,224,251,146,179,103, 6,196,237,128, -184, 21, 50, 28, 38,140,134, 19, 98, 95,176,220,239,146,166, 41,211,105,225, 4, 43,173, 14, 15,246,198, 12,194, 22, 71, 73, 74, - 41, 13,189, 86, 7, 95, 27, 30,140, 42, 66, 63,198, 55,134,182,181,180,125,201,160, 31, 51,202, 75,114, 51,147, 96, 53,126,232, - 25,120, 99,230,145,198, 34, 13,172, 11,197, 43, 50, 64,149, 26,124,193,126,110,153,248,240,185,207, 15,120,241,213,211, 76, 68, -143,159,249,218, 7,132, 49, 12, 2,205, 81,106, 24, 11,139,178,150,192, 90,214,122, 29,206,156, 58, 77,127,101,149,243, 87, 46, - 81, 91,215, 41,182,162,144,186, 74,240,188,138, 64, 89, 2, 9, 65,163,212, 61,125,250, 20, 97, 24,176,190,190,222, 36,134, 85, -128, 91, 39,137,160,195,217,115, 23,136, 91, 45,246,246,118,240,164, 70, 87, 83, 48, 41, 43,131, 37, 46, 94,188,204,250,250, 58, -221,110, 15,111,118,115, 4, 60,229, 0, 78,182,214, 20,101, 65, 85, 25,144, 62, 65,220,161,172, 53,233,104,159,253,173, 7,180, -227,102,220,238,249, 78,245, 30, 52,133, 60,240,231,239,251,158, 55,143, 69,150,194, 1,103, 92, 81,110,174, 69,142, 89,238, 51, -187,213,252,239,164, 88, 24,209,186,195,237, 44,181,145,197,226, 47,165, 67,166, 10,117,236,102,183, 98, 94, 80,102,230, 43,151, - 98, 38, 30,195,151, 31,175, 46,101,115, 16, 56,254, 0,225, 14, 0,238, 78,142,168, 52,186,172,240,253,136,131,225,136, 91,155, - 99,198,121,197,254, 56, 39, 43, 13, 27,167, 86, 81,194, 16, 71, 1, 81, 20, 16,199, 33,237, 56, 34,110,119,152, 76,198, 72, 97, -232,182, 92, 54,247,238,193, 33,181,182, 76,134, 71, 72,171,217, 63,216, 35,173, 53,155,135, 35,222,191,245,144, 81,154, 55, 17, -211, 26,139, 98,125,101,153, 65,187, 75,153,165, 4,190, 34, 10, 35,132,176,120, 74,146, 23,121,115,127,108,162, 88, 77, 9, 82, -163,132,196,228, 21,101,150, 83,100, 57,210,243, 24,142,167,252,229,255,228, 39,121,251,189,107,212, 72,199,243, 21, 14,215, 44, -229, 83,114, 37, 30,171, 5,149,169,201,138,140,173,237,109,246, 15, 14, 88, 93,221,192,247, 90,220,191,191,205,222,193, 33,203, - 43,203,132,145,143,165, 70, 10, 61,191,209, 47, 38,118,206,168,108,115,253,152, 49, 46,172,178,217, 95, 99,220,232,220, 54,145, -183, 24, 39, 82, 51,141, 96,109, 38, 0,124,178,168,203,249,164, 69, 24,247, 92, 21, 89, 78, 50, 77, 25,143,167,100,105, 78, 85, - 85,212,198, 77,102,102, 86,203, 32, 60,222,169,207,121, 29,205,117,229, 86,185,199, 35,249,178,170,201,138,146, 36,203,201,178, -140,186,174, 17,205, 65, 53,138, 3,218,237,118,163,122,119,202,119, 33,196,211,125,234, 31, 7,144,121,106,145, 22,207, 87,180, - 63,110,113,250,110,116, 89,143,139,234, 30, 23,216, 61, 77,120,245,248,199, 60,237,231, 89,180,193, 61,238, 77, 63, 30, 17, 47, - 20,183, 5, 65,217, 19, 95,175, 25,211,221,190,118,131, 7, 15,119,168,106,203,249, 11,231,169, 12,248,126,151, 83,171, 3,180, - 58,160,223, 63,205, 27,175,189,197,221,219,247, 41,234,154, 75,151, 46, 49, 30, 30,144,235,130, 95,248,149,159,103, 56, 60,224, -212,234, 26,113, 16,242,246,183,126,135,254, 96,137, 23, 95,124, 3, 97, 45,166,170,168,107, 77, 93,249,212, 53,156, 59,125,150, - 94, 43,166,221,110, 17,248, 30, 95,120,249, 50, 59,155,247,249,232,253,239,144,167, 19,214, 7,203,116,123,125,164,242, 88, 90, - 90,230,224,112,159, 7,155, 15, 26,159,246,243, 19,134,158,182, 30, 89,140,100,125,246,227,234, 16,154, 66,186,100, 43,132, 89, -152,144, 44,200,100, 23, 14, 4,179,235,173,219,235,211,110,119, 88, 25, 88,162, 48,162, 42, 11,118,182, 70,140,235,138,237,189, - 35, 30,153, 45,148,231,163, 34,159,184, 21,147,165, 41, 63,248,253,223,203,231,223,120,221, 17,198,102, 89,215,158, 43,228,136, -102, 95,106, 32,203, 51,222,255,206,183,185,119,243, 54, 63,248,189,159,227,203, 95,252, 18,251,195,125, 14,247,238, 67, 54,100, - 37,212,100, 71, 35,178,157,130, 86,191,195,114,203, 35,241, 44,221, 94,200,221,209,136,211,131, 46,203, 65,151, 44,201, 28,232, - 36,244,217,124,176,199,229, 75, 87,120,112,247, 33, 59,155, 35,172,241, 88, 95, 93,166,172, 74,234,218, 98, 38, 57,190, 31, 56, -161,140,128,164,180,216,225, 4, 43, 44, 90,131, 53, 57, 45,165,144, 72,214, 7, 93,254,216, 31,253, 33,142,126,234,231, 24, 30, -165,104,100, 19, 16, 97,231,251,221,185,224,170, 41,246, 3,169, 72,132, 65,214, 1,229, 81,192,118, 85, 16,158,173,240,163, 8, - 21,180,121,225,106, 23, 29, 70,220,221,203,184,218,182, 4, 82,160, 12, 4,158,160,219,246, 9,219, 1,211, 50,229,202,197, 87, -169,209, 32, 12,166,174,216,223, 31,177,178,220,162, 44, 11,140,213, 8, 63, 68,160,232,116,123, 88, 21, 18,246, 66, 76,232,115, -229, 83, 87, 8,188,128, 86,220,161, 44, 53,227, 2, 62,122,255, 35, 94,127,235, 45, 66, 63,226,253,239,252, 22,107,203, 75,132, - 34,199,151,224, 53, 60,246,193, 96,141,162, 40,153,102, 25,101,161, 27,239,174,160,168,106,164, 23, 96,144,212,198, 98,180, 38, - 77, 50, 76, 93, 57,176,140,239,187,195,180,239, 17,120,126,147,211,173,240, 61,183, 15,247,154,209,186,148,224, 9,217,240,218, -105,174,199,227,235,110, 22, 89, 42,173,125, 98, 15, 55, 7,147, 8, 39,118, 51,166,129,133,204,212,219,198, 98,106,141, 82, 94, - 67, 13,179, 78, 48, 39,103,175, 11, 3, 10, 4, 10,107, 68,147,165,173, 49, 22,188, 89, 4,177,105, 14,212,178,129, 38, 27,219, -192, 87,220, 4,208,177,209, 29, 59, 94,152,138,216,215,188,118,229, 12,143,118,199,124,112,152,145, 11,193,186, 31,144, 10, 31, -105, 13,113,153,177, 44, 90, 24,157, 97,234, 18, 37, 90, 4,126, 64,167,219, 98,253,204, 6,185,129,237,195, 9, 82,248,212, 89, - 66, 28, 10, 54,247, 71,236,235, 3, 70,211, 41, 37,206,130,231, 1,195,188, 98,156, 31,178,119, 48,228,194, 82,151, 83,107, 75, - 20,186,134, 60,197,243, 67, 87,220,154,233, 69,150,185,112,146,209,196,112, 48, 12, 24,117,143, 56,127,234, 12,166,214,206, 70, -106, 13, 81,127,137, 83,203, 43,220,188,117, 15,172,165, 50,218,133,193, 72,133, 69,159,136, 78,125,252,126,100,140,193, 10,235, -108,127, 69,197,141, 59,215, 25,143, 71,252,217, 31,255,179,244,186, 61,174,221,124, 64, 82, 20,124,229,203,159,165,215,245,156, -101,146,153,195, 97, 70,101,211,115,122, 31, 77,247,143,177,206, 90, 56, 27,183, 55, 95,203,145,113,204, 28, 7,126,194,241,244, -248, 84,102,134, 9, 23, 18,211,228,165,235,170,164, 46, 42,178, 52, 37,203,114,178,178,116,205,160, 0,223, 83,196,161,179, 53, -135, 97, 83,128,229,108, 86,225,244, 57, 8, 11,210,125,125,151, 91, 95,187,176,150,188, 36,203,220, 1,129,166, 97,242,125,159, - 40,140, 92,156,112, 51,181,154,137, 46,159,218,169, 63,109,164,254,212, 78, 93, 62,185, 83,255,228,152, 86,251,137,246,239,223, - 45,161,238, 89,202,234,197, 4,183,199,119,234,115, 88, 74, 67,121,170,203,106,222,169,207,198,239,110,167,238,254, 9,247,160, -186,157,250,140, 51,173, 60, 5, 6,178,172,100, 56, 28,209,238,116, 89, 59,125,134, 78,175,207, 96,229, 12, 47,188,250,105,182, -246, 14,169,106,205,195,123,247, 56, 58,218, 35, 43, 70, 28,236,111,163,179,140, 79,191,250, 42,177, 31,114,106,245, 20,157,214, -128, 32,232,209,234,172,208,107,183,105, 5, 49,129,244, 25,116,251,244, 90, 93,234,188, 96,208,237,115,229, 84,143, 79, 93,234, -177, 18, 75, 90,182,164, 30,237, 19,214, 37, 47,159, 63, 71,212,196,244, 73,207,195, 11, 67,231,137,173,106,142,142, 70,160,220, -133,248,180,135,245,132,146,119,225, 1, 51,230, 24,188, 96,236,201,206,254,137,184, 85, 79, 62,217,161, 31,191, 58,230,227,119, - 55,198, 20,243,221,164, 31,134, 72,229,179,189,119, 64, 24,132,116, 58, 49, 78, 84,107, 73,210,148,179,103,207,144, 38,137, 27, -253,153,154, 64,193, 79,252, 27,127,146,203,167, 55, 28, 71,191,229, 19,181, 98,194, 56,198,247, 93,218,145, 64, 32, 12,124,248, -157,107,220,188,246, 62,191,251,219,191, 73, 93,106,231, 41,174,114,198,251, 15,209,211, 67, 90,161,162,221,106,225, 9,203,209, -254, 30, 27, 43, 3, 14, 14,198,140, 43,195,195,164,164, 21, 5,116,124,133, 41,115, 86,215, 86,137,131,152,100,156, 32, 61,159, -195,221, 33, 73,166,121, 48, 42, 17, 65,155,225,222, 20, 63,106,131, 39, 73, 42,205, 97,146, 51,169,107, 74, 4,133,182,244, 2, -197,165,203,103, 81, 29,159,182, 31, 33,210,146,126,109, 16,121, 66,216,241,217,154,166,140,140,160, 34,196, 72, 15,221,136,114, -204,124, 62,108, 89, 18,150,203,161, 36, 80, 6,188,128,212, 74,118, 49, 92,125,101,192,235,175,191, 70,171,125,137,221, 3,248, -234,191,250, 22, 73, 90,162, 11, 87,154,106,171, 88,237,120,244, 98,159,193,160,199, 96,109,149,176,221,118,209,164,210, 21, 40, - 95, 9,116, 93, 19, 5, 49,117,109,248,212,235,175,115,241,202, 21, 46, 92,188,204,185,203, 87, 56,117,238, 60,221,165, 21,214, - 79,159,165,183, 52,160,210, 22, 33, 37,203,131, 21,150,151, 87, 56, 26, 39,172,174,159, 65, 55, 9,157, 23,207, 95, 96,101,121, -133,186, 9, 10,193, 42,130,208,197,162,250,158,114, 49,165, 42, 68, 27,199, 16,232,244, 7,180,186, 75, 8, 63,194, 90,193,209, -254, 38,217,248,176, 73, 89,115,157,122,232, 53,212, 56,175, 65,194,122, 46, 59,221, 83, 30,126, 35,206,156, 89,216,132,116, 69, -121,118, 63,147, 66, 28,103, 84, 72,123, 2, 36,117, 2, 7,203,113, 42,155, 20,174,163, 23, 51,203,161,144, 77,225,158,225, 97, -155, 44, 9,225, 80,199,194,226, 60,199, 85, 77, 85,214,152, 90,187,136,228,217,247, 49,203, 23, 95,176, 41,206,196,116,162, 9, -150,209,218, 5,232,140, 39, 19, 38,211, 20, 83, 90,198, 73, 77, 90,186, 48,148,181,149,101,124, 15,150,251, 45,150, 58, 33,177, - 47, 48,117,141, 23, 68,140, 39, 9,131,229, 21,162, 86, 23,235,197, 68,253,117,100,208, 37,201, 74,182,247, 15,121,116, 56,230, -219, 55,183,121,116, 88, 80, 90,136,162, 8,107, 44,169,117, 8,223, 64, 74,164,182, 76,243,156,164, 42,161,214,120, 77, 55, 89, -215, 46,168, 6, 99,168,203, 98,254,250, 54,198,146,101, 5, 73,154,204, 71,253,232,154, 31,251, 99, 63, 74, 43, 12,184,115,251, - 46,101, 85, 29,143,197,191, 27,195, 77,179, 18,156,166, 83, 30,110, 62, 98,109,109,131, 40,238,144,229, 37,155,155,155,156, 63, -123,142,192,247, 27,129, 91,141,105,240,172,117, 89, 81, 87, 21,117,179,171,174, 11, 87,120,171,162,164, 42,221,155,174,102,251, -243, 70, 40,103, 12, 88,189, 48,126,111,200,121, 77,135, 46, 61, 23, 82, 35,165, 59,120,155,218,253,187, 69,214, 32, 92, 71, 83, -166, 73, 74,150,149, 84,181, 27,167,135,190, 34,142, 34, 7, 68,106,172,108,179,157,255, 9,134, 94, 83,195,170,162, 36, 77,156, - 31,125,154,100,164,153, 91,111,168, 70, 59,209,110,187, 85,110,171, 21, 19,134,110,164, 47,149,194, 24,243, 49, 68, 57,241,252, -206,253,105,132,158,103, 21,241,167,209,225,158, 70,251,249,184,247,159,101, 85, 16,143,165,245,124,210, 73,195,226,231,204, 78, -240,166,121,161, 90, 51, 67, 0,138, 99,248,140, 56,249,115,206,212,178,179,177, 92,167,221,230,202,165,203,244, 87,214, 57, 24, - 29, 49,201, 82,146,124,151,247,239,188,207,210,218,105,170,220,178,212, 95,165, 21,196,248, 65, 64,165, 45, 81,212, 97,208,237, -208,243, 21,171,221, 46,129,167, 40,242, 2, 43, 32, 23, 22, 97,106,138, 52, 67,228, 25,121, 50,129,116, 66,232, 89,202, 68, 50, - 60,212,104, 35, 73,210,146,178,246,160, 53, 96, 98, 52,217, 96,131, 58,205, 33, 10,152,232,138,105, 86, 34,181, 70,120,146,218, - 86,104, 52,202,202,103, 62, 30,207,125,248, 62, 38,230,240,105,148,185, 39,236,139,226,164, 77,196,117, 65,112,247,254, 35,110, - 63,216, 68, 9,193, 82,236,115,102,181, 71, 43,138,232, 6,146,213,149, 37, 70,195, 67,180,129, 64, 72,250,253, 1,103, 79,173, - 59,142,119,208, 32, 64, 3,223,165,231,121, 18, 79, 72, 48,150, 27,215,174,115,237,253,235,236,239,238,209,110,199, 32, 52, 89, - 50,197, 86, 25, 58, 25,145, 7,208,238,172,227, 73,205,193,209,136, 36,171,120,255,195,187,180,123, 3,250,129, 66, 28,109, 49, - 60, 72, 56,119,113,131,210,207, 24,101, 37, 81,167, 79, 33, 36,249,225, 46,166,174, 16,190,207,168,172,249,224,209, 1, 87,250, -203,236, 28,236,177, 34,218, 68,113,135,145,153, 82, 56,222, 31, 53, 26,237, 11,250,161,207,198,233, 21,234,210,195, 63, 3,193, -248,144,205,131, 61,252, 65,196,165, 65,155,228, 48,167, 16, 53, 82,128,175, 4,161, 39,233,181, 91,116, 90, 17,203,253, 22, 23, -219, 45,206,183, 98, 58,162, 38, 14, 67,182, 38, 7,172,234, 14, 66, 30,241,207,254,217,215, 24, 13,191,134, 8, 35, 62,119,169, -195,173,135,154,116,148, 18,251,150,115,202,227,204,250, 41,194, 80, 80, 91,205,242,233,179,132,173, 14,182,200, 8,189, 0,227, -213,164,101,202,242,202, 26,237,184,205,133,115,103, 88,234,183, 89, 89,233,187,131,108, 24,209,237,245,153, 38, 83,252, 32,194, -214,110,167, 90, 87, 5,195,244, 1, 97,103,153,245,139, 47, 33,148,226,252,149,151,169,139,156,202,102,196,113,155, 32, 44,200, -178, 97,131,211, 52, 13,227, 65,161, 77, 77, 86,104, 64, 81,155,154,188,168, 9,202, 26, 79, 22,212, 86, 54, 78, 10, 87,184, 93, -241,118, 29,251,172,160, 43,213,248,209, 27,125,134, 39, 29,141,173, 9, 95,127,194,105, 51,123,173,107,109, 65, 59,145,230,236, - 26,116, 28,115,133,197, 52,187, 86,131,105,240,164, 2, 7,150, 17,158,116,171, 58, 91, 99,204, 44,156, 72, 34,240, 28,250, 66, - 59,254, 69, 61, 27, 79, 87, 37, 70, 27,180,242,176,129, 19,193, 9,137, 35,236, 89,135, 72,157,237, 81,133,144, 8, 5,182,150, - 24, 25, 98,189,138,184, 21, 17,123,150,229, 80,240,169,165,144, 78,153, 50,174, 74,246,239,221,101,237,181, 43,244,218, 93, 34, - 63, 32, 84,138, 86,232,130, 91, 70,227, 41,225,193,152,160,181,132, 12,150, 8,123,138,171, 27, 87,121,245,141,207,241,175,190, -246, 47,249,206,195,175,115,144, 24,202,230,222,166,155,172,116,163, 4,133,181, 76, 53, 8, 93, 17, 26, 67,158,106,170, 48, 71, - 8, 73,171,219,165,221,105, 81,215, 21,117,153,227,171, 38,155, 92, 11,138, 82,131,202, 41,109, 77, 90,164,148,217,148,108, 52, - 36, 59,218,227,207,253,240,247,241,214,167, 94,225,111,254, 87,255, 79,238,238,236,146,107,139, 80,158, 43,252,207,187, 71, 91, - 57, 15,129,154,173,164,182,119,119,249,169,127,241,211,252,241, 63,250, 39,185,114,241, 50, 69,161,249,245,223,248, 54, 95,249, -226,103,241, 69,133,174,167,152,186, 66, 87,204, 65, 46, 70,155,249,120,221,189,239,132,121,226, 68,100,244,236, 16,103,155,196, -190, 69, 24,215, 66, 2,155,177, 32, 27,139,174,209,115,132,235,204,147,158,103, 5, 85,169,155,245, 68, 77,224, 43,180,241,154, -181,110,229, 64, 61,139, 24, 93,117,172,233, 48,198, 64,221,124,159,198, 77,121,156,208, 78, 52,177,187,174, 75, 15,103,196, 68, -207, 59, 30,227, 55,215,182,247,113,129, 39,207, 31, 91, 47,168, 10,197, 98,177,158, 39, 12, 62,118,227,230,132, 5,224,121,133, -247,113,113,246,179,208,177,139,127,254,228,136, 95, 60,181, 51,127,218,207,227,132, 25,102,254,187,123, 59,238, 74,159, 23, 18, -224,108, 90, 2,169, 60,148,239,243,224,209, 35, 42, 60,226,126,159,246,210, 42,210,239, 83, 91, 69, 85,107,150,251,203,248, 86, -144,142,143,216, 59,216, 5,155, 19,213, 7, 28,141,129,184,195,114,120,137,131,163,140,160,213,162,208,154, 32,106, 17, 71, 62, -194,104,202,162,160,180,134,168,215,165,180, 53,247,118,199,124,180,121,200,225,209,144,113,154, 48, 74, 18,146,178, 96,156, 78, - 73,146, 12,146, 2, 47, 80,108,156, 90, 99,173,223,166, 23,122, 40, 91, 99,168, 27,181,238,179,215, 28,207, 60,188,217,143,225, - 12,204, 93, 34,246, 24,225,104, 23, 56,250,141,149,206, 88,211, 36, 86, 25,199,114,110,178,135,151,250, 61,247, 28, 8,200,171, -138, 44, 47,232, 4, 1,253,200, 39,157, 30,129,112, 10,117,109, 13,221,211,107,180,226,134,108,229,169, 38,233,200, 71,121, 65, - 35,146, 18,220,189,117,131,221, 71,247,217,121,120, 31,101, 5,253,254, 18, 73, 90,160,203, 41, 59, 15,238,177,183,117,192,203, -175, 92,160,168, 42,146, 60,229,204,169,117, 14,176,212,181, 96,227,252, 5,138,221, 17,177, 20, 4, 66,176,187, 63,228,165, 43, -231,240, 3, 24, 77, 70,248,173,152,233,184, 68,123,146,172, 50, 4,221, 30, 66, 72,198,117,141,241, 60, 90,157, 30,126,187, 67, -107,148, 81,212, 6, 93, 57,107, 76,166, 13,121,146,210,107,135,132,113,128,234,132,172,157,191,196, 32, 56,135,180,134,139, 50, -228,139,181, 65, 6, 18, 83, 23, 4, 30,132,202, 34,155,113,172, 53,154,201, 40, 33,201, 39, 72, 95, 48,214, 57,155,233, 30,213, -200, 67, 84, 6,227,213,196, 65,132,242, 11, 60,149,115,245, 84, 68,182, 26,146, 78, 39, 44,247, 87, 80, 97, 11, 63, 80,244, 6, - 61,206, 95,184, 0, 6,234, 52,193,164, 83,172,244,104,181,251,156, 59,119,137, 86, 20, 51, 30,143, 16, 88,210,116,202,185,115, -103,200,203, 18, 63, 8, 89, 89, 93,195, 98,169,203,146, 60,241, 17, 85, 65, 39, 12,200,117,194,104,239, 17,253,181,243, 12, 86, -151, 41,175, 92,101,114,184, 71, 93, 36,164, 89,197, 52,201, 56,123,102, 3,223, 23, 84, 85, 69,154, 89,144, 62,227,100, 74,173, - 33,136, 44, 97, 90, 16,245, 45,121,150, 51,158,186, 28,247, 93, 95, 17, 6,190,179, 73,122,199, 98, 55, 79, 74,148, 39, 92, 23, - 57,119,253, 29,239,203,143,239, 53, 51,127,121, 35, 94,179,110,114, 33, 27,194, 91, 93, 55,196, 56, 37,155, 68,182,102, 60,110, -102, 49,193,141,199,188,185,134,235,218,156,196,201,206,243, 90,220,205,222, 83, 18,163, 45,101,211, 13, 90,235, 10,231, 60, 44, - 70, 55, 72,217,197,215, 12, 78,188, 37,155,175, 45,149,219,227, 6,113,140, 31, 6, 88, 91,209, 22, 25,167, 60, 75,207, 19, 88, - 93,179,222,239,163,243, 18,219,118,253, 89, 16,120,228, 85,205,131,205, 29,240, 34,106, 43, 57,119,241, 10,190, 23,184, 3, 82, - 16,241,133, 31,249, 49,202,104,153,107,255,224,255,131,173, 82,132,192,117,214, 66, 56, 20,142,128,194, 88,124, 41, 49, 82, 49, -206, 43, 68,101, 16,114,138,145,146,179,167, 87,137,227, 0,172,239,210,212, 68,128,182, 10,161, 36,149,174,201,243,148, 72, 9, - 90,190,123, 27, 85, 83,140,174, 56,123,254, 10,127,235,175,253,207,249,235,127,251,239,112,237,254, 22,149, 54, 88, 36, 82,216, -147,170,245, 19, 34,168,197, 40, 53, 87, 88,106,171, 25, 77,199,252,210,175,124,149, 63,255,167,255, 28,231, 78,157,102, 50, 41, -184,118,227, 1,231, 79,247,160,204, 48,101,147,104, 87, 85, 96, 27,206,190,177,141, 24,205,204,239, 67,190,167,240, 27,193,179, -242, 84, 99,121, 4, 37,103,209,169,141, 88, 18,129, 21, 53,210, 54, 14, 30,221,220,183,106, 67,145, 23,228,137,115, 4, 76,167, - 41,105,150,147, 23, 5,121, 81,160,155,112,159,178,170,201,202, 18,148,179,239, 25, 99,221,215,243, 21, 74, 58,116,177,109, 44, -128,122,126, 13, 55,147, 79,229,116, 35, 88,219, 8,228,130,227,108, 3,207,111, 14,161,199,117,204,123, 46,234,149,103,243,215, -143, 31,116, 49,223,151, 26,251,100, 97, 63,142, 54, 60, 86,133,218,103, 6,222,139,167, 56,173,196, 83,196, 20, 60, 55,133,231, -217,133, 73,204,127,174, 39,219, 75,225, 94,236, 52,123, 28, 23,158,215, 92, 72,174,179, 56, 22,186,200,121,202,217, 28, 98, 33, -124,148,244,136,194,144, 23, 95,126, 17, 47,232, 64,208, 34, 47,157,146,114,124,180, 79,149, 85,232,209, 17, 74, 8,166,147, 17, -117, 85,208,110,133,196, 94,151,192, 15,168,165, 98, 47, 41, 40,181, 38,221,217,166, 40, 10, 48,150,162,172, 56,154, 78, 25,142, - 71, 76, 19,103, 29, 73,210, 41, 85,145, 34,132, 70, 96, 49,186, 34, 8, 66,132,133,208,143,104,133, 45,252,216,195, 23,134, 83, -145, 36,246, 52, 70,184,200, 63,165,157,176,103,177, 81,127,218,243,252,184,222,224,241,147,209, 83,119, 97, 51,139,200,236,125, - 99, 49, 86, 59, 15,105,163,126,119, 68, 63,179, 32, 48, 50,115, 33,209,139, 87,206,115,227,194,105, 30,110,238, 98, 52, 24, 45, - 72, 39, 19,218, 10,142, 38, 41, 42,136, 48, 86, 81,151, 5,237,118,203,133, 68, 8,133,240,125,100, 16,184,130,238,249,248,210, - 99,111,235, 1,223,254,230,111,163,139,156, 7,183,222,163,179,180,130,198,146,140,143,208, 89,202,206,230, 35,174, 92,121,129, -195,195, 67,242,124,204,234, 90,159,110,216, 97,100,106,192,103, 60, 62,162, 21, 74,186, 74,162, 17,100,198, 80,150, 57, 45,105, -153, 38, 41,173, 86,151,163, 36, 96,191, 46, 56,119,229, 69,206,182,186, 60,124,244,136,135,123, 59,172,118, 99,214,207, 94, 32, -155,140,217, 8, 36,133,180,148, 66, 19, 8,159,170,182, 12,211,156,190,174,137,170, 17,211,163, 9,165,178,236, 42, 65, 24,250, - 24,235, 40, 38, 97, 32,169,171,140,192,179, 20,202,130,169, 8, 60, 15, 93,213, 76, 39, 5, 74, 42,210, 86,136, 65, 51,240,218, - 76,252, 20,171, 12, 81,171, 69,187,221, 33, 43, 74,138, 81,130, 87, 39,172,246, 86,176, 43,203,180,122,107,104,235,145,101, 41, -231,206,159, 35, 27,143,156,135,222,148, 36, 85,193,218,250, 25,250, 75, 61, 52,154,178, 72, 89, 91,238,145, 76, 70,196,126,155, - 34,203,233,244,251,212,117,221,248,145, 5, 94,168,136,166, 1,170, 84,232, 60,193, 51, 32,178, 35, 14, 55, 43,162,165,117, 86, - 79,157,161, 53, 88, 37, 27,238,179, 82,150,140,146, 20,141, 64, 89,139,242, 3, 76, 90, 82, 86, 2, 99, 27,241,145, 12, 8,226, - 46, 94, 24,179,127, 52,114,152,210,158, 91,119,121, 74, 18,122, 30,158,175,240,149,196,151,194, 21,116, 65,147, 41, 48, 43,230, -199, 59,116,105,221, 74, 97,174, 19, 49,205,117,111, 4, 88,133,213, 18,109, 45, 18,131, 49, 18,101,105,174, 77,139,149,118, 30, - 64, 4,242,248, 62,166,155,123,146, 60,134,201, 24,109,209,104,132,116, 34, 48,109,192,212,198,141,125,171,122,254,122,210, 82, -162, 61,183,162,178,218,209, 13,153, 57,220,140,105,226, 61, 37,138, 26, 95, 26, 60, 37,200, 11, 77, 86, 11,188, 94, 15, 81,106, - 84, 82, 35, 70, 21,235, 23,151,233,118, 98, 98,229, 64, 56,194,151,132,237,136, 71, 91, 9,223,252,206,117,106, 25,146,231, 83, -166, 71,187, 92,185,252, 2, 71, 69,136,245, 54,176, 42,228, 7,127,248,143,208, 31, 12,248,233,159,251, 5,238,111,110,177,123, - 56, 36, 45,220,138,160,153, 81,144,152,154,105, 86, 99,164,199,161,213,100,147,130,196, 30, 17,182,125, 6, 58, 68, 97,209, 22, -194,200, 35, 8, 66,183,154,171, 53,182,214, 40, 63, 32, 43, 10,166, 69,129,242,187,148, 69,206,116,231, 62,189,165,101,254,179, -255,240, 47,241, 95,252,157,255, 55,239,223,219,162,178, 51,191,183, 70, 41,137,209,122,161,182, 88, 12,181, 11,127,121,236,158, - 95,155,138,221,195, 45,190,246,107,191,196, 79,252, 27, 63, 65, 24,132,220,122,176,131,181,154,174, 41, 17,101, 74, 90,231,212, -186,154, 7,163,104, 99,209,198, 96,172,115, 35,120, 74, 18,248, 30, 97, 24, 16, 7,126, 19,250,163,240,125,137,239,187,123, 85, - 93, 55,223,143, 52,120,181, 65,170, 10,252, 38,113, 82, 42,116,109,200,146,140, 52, 73, 25,143, 38,140,166, 41,147,172, 32, 73, -115,178,172,108,170,141, 66,200, 26, 67,137, 54, 80,107, 75, 21,106,162, 40, 32,192,161,140,133, 53,200, 6,104,236,174,205,102, -180,111,108,163,215,114,215,138,239,121,196,161,115,127, 4,202, 57,175,164,240,220, 68,201, 26, 12, 60,157,253,254, 73, 68,107, -207, 27,133, 63,173,243,123, 82,200,246,251, 67,198,254,129,227, 77,127, 31,191,164,176, 4,162,230,104,127,159,221,189, 3,132, - 23, 50, 78, 50,210,210,162, 81,244,186,203,212, 73,226,186, 74,161, 49, 82,144,219, 2, 25, 24,198,117,206,214,253,187,205,133, -145, 80,150, 37,101,153, 99,180,179, 47, 8, 93, 55, 79,181,123,169,245, 59, 62,107,253, 54,151,214, 61,250,209,128,141,193,128, -188,168,209, 40, 52, 62,155,219, 7,212,181, 96,101,125,131,229,245, 1,197,116, 66,167, 21, 80,154, 10,107,220, 13, 72, 26,225, -174,155, 63,112,148,226,241,184,221, 44,176,244,229, 2, 69,206,206,181, 20,178,249,115, 78,164, 30,245, 58, 29, 58,173, 24, 9, - 46, 46, 54, 77, 25, 44,181,240,165, 98,111,107, 31, 29,182, 24,172,172, 51, 30, 29,178,178,188,140,167,188, 6, 96, 19,224,171, -208,121,144,165,165,204,166,124,253,107,191, 74,145, 22,124,248,222,251, 76,179,148,193,198,105,116, 85, 16,248,138,225,193,132, -151,174,158,163, 40,115,178, 82,112,243, 81, 70, 29,244,241, 66,201,157,173,156, 80,149,172, 40, 31, 35, 96,181,167, 56,152, 84, -108,108,172,115,231,225, 14, 47,156, 93,166,178, 62,104, 69,161, 21,221,238, 18,171,131, 1,211, 36,165, 35, 45,178,219,166,223, -138, 72, 70, 19, 2,105,241,173,166, 37, 12, 5, 6,116,129, 52, 80,166, 83,242,105, 4,181,194, 19, 80, 22,110,119,233,251, 62, -121, 89, 98,140,166, 29, 7, 40,105,104, 69, 30,113,224,209,138, 98,194, 32,196, 40, 77,224, 57,245,108, 81,102, 20,121, 9, 56, - 56, 74,127,121,153,149,213, 85, 44,130,157,189, 67, 90,177,162, 61,232, 82,171,152,168,187,140, 85, 49,251, 71, 9,167,207,158, - 39, 47, 42, 36,150,178, 40, 9,124,159,193,202, 42,113, 43, 70, 97, 41,242,148,184, 21,162,164,165,211,142,168,203, 2, 76,133, -169, 51,242,105,206,232,208,163,183,182,140,182, 37, 66,213,248,177, 4,237,145,231, 21,166, 40, 24,141, 82,218, 6,194, 56,164, -215, 27,176,212,191, 66,111,101, 29,217, 91,229,250,251,191, 75, 39,128, 80,105,202,202, 48, 29, 79,241,149,207,249, 75,151, 24, - 77, 18,150, 7,125, 38,163, 33,221, 86,155,118, 28, 51,221,189,235,110,186,202,197,245,134, 13,250,213, 83,141, 58, 93, 54,126, -234, 5, 75,218,137,236, 6,187,232, 17,159, 5,119,208,140, 55,155,238, 92, 58,124,169,110,178,207, 79, 34,140,197, 9,135,140, -157, 11, 22, 57,161, 37,178,141,138, 90,107, 77,109,204, 19,247, 52,207,243, 48,198,144,231, 57, 66,137, 6, 70,211, 28, 26, 22, -217,243,205,228,111, 6, 35,202,179, 18, 37,125,226,184, 77,187,107,208, 3, 77, 81, 12, 89, 89, 91,193, 10,139, 31,120,132,161, -243, 60,203,160,197,222,193, 22,247,182, 14,121,241,197,148,206,133, 53,108,149,146,140, 14, 88,187,252, 42, 15,135, 71,136,176, - 75,165, 53,159,125,227,117,222,124,249, 60, 70,151, 28, 29,236,179,187,185,201,141, 59,247,185,126,119,139,237,195, 49,219,251, -135, 28, 77, 10, 74, 83,147, 43, 73,106, 45,219,147, 18,245, 96,143,151,207,159,130,162, 36, 79, 82, 78,157,241,144,109, 65,212, -106, 97, 76, 72, 41, 61, 84, 16, 82, 34, 57, 76, 74, 16,153,115, 53,148, 5,181, 53, 12,214,207,241,159,255,181,255,136,255,244, -127,247,127,230,230,230, 30,229, 66, 66,155,157, 89, 3,159, 24,177, 62,121,175, 55,192,181,155,215,249,250,215,127,133, 31,255, -147,127,138, 78,111,137,205,173, 29, 46,109,172, 49, 25,151, 28,141, 15,169,117,233,154, 35,235, 10,250,226,191,231, 44,102,206, -235,157, 71,225,188,176, 7, 77, 81, 7,129, 54, 77, 51,215,120,213,101,147, 37, 79,195, 39,168,107, 67,154, 53, 76,246,241,148, -163, 73,194,120,154,145,165, 57,101, 89, 35,165, 68, 27,199, 63,169,117,141, 53,181, 19,232, 97,231,145,181, 82,186,137,165,240, - 36, 90, 27,202,178,116, 92,129, 52,165,200,115,116, 93, 97,173,153,107,185,194, 48, 32, 8,188,121,190, 61,194,204,149,252,194, - 24, 87,212,191, 91, 21,250, 83,119,215,207, 65,141, 62, 77,249,254,244, 56,188, 79, 86,172,159, 53,114,255,189,226, 75,127,223, - 72, 84,107,144,166, 66,218,154, 60,155, 16,181,221, 9, 78, 53, 68,181,186, 76,169,202,140, 36, 29,147, 21, 5,135,163, 35,210, - 60, 33,207, 83,202,186,166,172, 29, 7, 30,163, 9,149, 36, 84,130, 94, 39,102, 99,109,157,165,150,135, 48, 21, 85,145,210, 14, - 61,214,250, 45, 62,245,226, 37,178,201, 33,201,100, 76, 85,164,196, 94, 68,187,191,198,222, 81,134,239, 11,198,201,152,190,233, -208,139,215, 81, 65, 31, 99,106,108,165,169,140,113, 35,182,127, 13, 60,224,197, 21,134, 49, 98, 65, 4,226, 20,167,179,157,209, - 92, 96, 39, 45, 82,207, 70, 81,141, 39, 83,131,239,121,124,207, 91,159,101,111,103, 31, 83,150, 8, 83, 49,157, 78, 89, 95, 89, - 98, 99,165, 71,233,119,200,234,138,201,104, 66,224,135,115,134,188, 39, 61, 36, 78, 44,165,108,205,175,124,237, 95,242,254,187, -239, 18,201,144, 7,247,182,216, 56,189,129,177,134, 44,157, 82,100, 9,189, 78,140, 39, 44, 15,182,183, 56, 24,215, 8, 60,222, -185,190,195,173,251,135, 4,181, 37, 48, 37,173, 56, 33,108,121, 68,182, 98, 16, 67,175, 19,113,116, 0,155,163,148,193, 96,157, - 44,211,236, 12,167,244, 58, 93,170, 60, 35, 48, 53,103, 87,150, 24, 7,146,225,225, 17,215,110,222, 38,192,176,178, 54,160,149, -164, 24, 36,121, 94,207,215, 17,163,225, 1, 83,233,158,235,170, 42,221, 90,192,166, 40, 79,208,235,181, 92, 54,188,130,118,187, -195, 96,169,199, 82,183,131,175, 20,166,174,201,166,123, 12,143, 14, 73,178, 4,109,192,247, 35, 78,159, 59,195,218,234, 41,172, -149,140, 38, 83, 54, 78, 95,224,124,171, 79, 77,192,206, 48,229, 96,156,226, 69,150,229,193, 10, 85,161,201,146, 28, 93, 21,172, -173, 12, 8, 67,133, 54,150,118, 43,162, 19, 7, 20,162, 34, 8, 20, 82,184, 49,225, 40, 25,179,183,179,205, 57,255, 20,237, 94, -159,108,114,196,210,250, 50, 65,232,209,234,180,168,173,139, 86, 21, 53,120,190,207,169,254, 50, 70, 42, 34,169,169,147, 67,188, -238, 42,209, 96,131,179, 47, 42, 74,173,217,125,112,139, 48, 14, 24, 30, 78, 25, 44,175, 49,154,140,233,117, 98,210, 52, 37, 79, - 39,232,202, 32,194,128, 51, 27,103,184,189,115, 27, 95, 10,124,233,246,229,202, 81,212,241,154, 8, 7, 49,115, 37,219,227,130, - 62,179, 34,205, 67, 54,102, 25,221,139, 66, 80,123, 28,218, 97,140, 65,227,212,234, 70, 59, 37,189,242,229,137,233,159,174,205, -124,165, 40,149, 60,161, 23, 17, 11, 7, 5, 99,204,124,175,142, 21, 40,233, 70,187, 66, 8,151,125, 93,107,242, 52, 71,251,190, -211, 9,248,254, 28, 95,109,102,235, 42,225, 33,132,161,174,114,124, 63,164,211,237,177,127,148,225,133, 33, 81,175, 75,191,178, - 72, 95,114,235,246, 77, 86, 90, 30,233,114,155,115,151,207,147,150,154,251,155,251, 40, 4,105,150,113,116,116,200,217,149, 62, -131, 94,155,229,142, 79,166, 45,239,223,121, 68, 16,119,145, 43, 93,122,158,135,180, 25,103,206, 12,248,252, 70,132,248,158, 23, -168,241,153,148,176, 59, 74,217, 60, 24,115,243,222, 35,222,187,179,197,195, 71,155,236,239,186, 44,137, 91,247,118,176, 18,178, - 66, 35,251, 25,203, 24, 12,146,168,213, 37,108, 53,254,127,207,105, 13, 38,105, 78, 38, 13, 81,232,147,167, 41,226, 96,135,149, -211,231,249,175,255, 79,127,157,191,244,191,248, 27,220, 63, 56,162,178, 51,162,162, 56,206, 80,255, 24,130,171,181, 80, 99,249, -141,111,252, 38,127,228, 15,127,133,151,207, 92,226,104,120,128,106, 15, 16,121, 77,100, 44, 55,110, 94, 39,203, 82,140,173, 1, -139, 18,238,185, 83, 56,139, 98, 24, 6,116,202,152,170,172, 40,130,192,113, 15, 2, 73,224,185,239, 69,107, 61,183, 38,202, 38, -225, 71, 10,217,192,107, 4,165,214,100,121, 65,146,102, 76,147,148,113,146, 48,158, 56,148,171,174, 13, 74,121,212,214, 82, 91, - 77,101,106, 7,181, 49,199, 59,243,186,174,168,202,210,165,182, 73,137, 54,150, 44,205,153, 78, 18,166, 73, 66,150,229, 13,141, - 14,103,153,246, 92,190,193, 12,156,132, 56,222,237, 91,109, 78, 10,229,158, 86, 32,221, 11, 65, 60,183, 67, 62,238,192,158, 12, - 61,249,253,134,183,124, 55,159,243,123,233,240,159,202,156,127, 86, 54,252,220, 74,244,244,209,189,149,138,176,221,161,213, 27, - 32,253,136,200,135,221,189, 33,247, 30,220,100, 52, 73,169,106, 77,217,144,133,132, 16, 8,107, 27, 15,172, 83,154, 6,202,208, -110, 71,172,245,123,116, 99,159,181,229, 30, 75,189, 22,201,104,155, 48,244,105,183, 54, 8, 60, 73, 43,244,136,219, 49, 89, 34, -233,245,150,216,219, 25,113,250,244, 57,150,215,206,114,106, 29, 46, 95,188,204,141,219, 55,201,138,140,233,116, 76,145, 38,156, - 61,115,154,196, 20, 46,161, 12,176, 74, 44, 56,208,159,167,105,176,223,125, 97,119, 77, 7,152,227,108,117, 33,205, 60,234, 85, -138,198, 6, 98,102,116, 57,195,108,226,134,116,143,203, 82,175,235,132, 42, 74,145, 21, 5,113,224, 51, 28, 39,172,172,172,241, -222,237, 77,108,216,198,147,138,193,210, 82,195, 7,112, 47, 56,223,243,145, 64,150, 36,124,244,254,187,152,178, 38,183,130,207, -124,230,115,180,186, 17,119,238,221, 99, 50, 26, 98,139, 4,107,106, 30,109,237, 83,215,138,216, 90,162,192,217,141, 38,121,141, - 80, 62,157, 56,102,127,152,112,174, 53, 96,165, 31, 35, 39, 37,202,212,180, 58, 29,118,135, 9, 37, 83,150,151,215,248,210,151, -191,194,119,190,243, 14,187,251,123, 44,247, 90,232,170, 64, 72,200,141,229,197,171,151,184,125,243, 54,125,235, 58, 47,154, 67, -149, 81, 10,227,133, 24, 83, 97,138,154,189,233, 8, 79, 9, 42, 13, 42,112,215, 71, 93, 87,248,126,200,202,202, 18,203,253, 54, -113,224, 83,155,146, 60, 47, 40,179,156, 60, 61,164,172,114,252,192,167, 29,196, 44, 45,175,209,237, 46,227,251, 49,163,113,130, -144, 1,113,103,137,218,250, 36, 89, 77,187,187,196, 81, 82,227, 55,235,137,209,120,130, 31, 6,156, 59,123,214, 69, 0,135, 30, - 43,131, 62,189,182,135, 39, 52,135,219, 35, 14,118,198,244,218, 17,237, 40, 34,240, 21, 2,152, 78, 18,162,160, 69,103,105,137, - 42, 45,144,190, 66,202, 0,161, 66,188, 72, 50, 8, 91,180,186, 75,100,121, 65, 94,150, 84,233, 16,223,243, 81,113, 76,105,192, -163,166,221,106,113,233,242,139,216,170,192,243, 34, 76, 93,178,187,121, 7, 93, 87,108,172,175, 32, 61, 71, 9,147, 86, 83,151, -185, 59, 48, 73,133,191,160,104, 87,114,166,100,127, 76, 65,108, 31,103,116,207,151,213, 79,218,214, 16,243, 53,154, 49,141,255, -191,201, 60,183,243,188, 22, 55,250,181,122,102,115,117,215,175, 53,156,200, 79,159,195,149, 22, 68,159, 90,235,185,144,238, 24, - 19,171, 26, 11,148,118,247, 86,123,172,122,158,189,238,116,109,155,233,147,243, 69,207, 0, 56,113, 28, 51,173, 45, 81,203,249, -172,247,134,123, 36,117, 74,215,239,241,240,225,144, 81, 54, 69, 70,203,220,127,180,141,231,123, 76, 39, 9,195,195, 33,253, 80, - 48, 62, 58,100,105,125,153,115,171, 27,124,116,103, 27,233, 71,236,142, 10,212,160, 69,145, 66,167,213, 33,240, 36,170, 78,177, - 54, 37,240, 60,186,171, 45,206, 47,183,120,235,226, 10,127,230,251,223,226,240,104,194,163,189, 61, 62,188,115,151, 95,123,231, - 67,110, 60,220,103, 82, 25,174, 61,220,227,197,211,107, 44, 7, 93, 20,138,216,243,104,135, 18,207, 86, 8, 83,146, 91,103,239, -155,230, 5,117, 93,209,173, 74,140,174, 88, 94, 89,227,191,250,155,127,141,191,242,159,253,109,238,109,239, 80, 90,176,162, 17, - 15, 10,187,248,148, 61,165,249, 18, 32,156,218, 59, 55, 5, 63,245,211, 63,197, 11, 87, 47,115,245,234, 85,210,194,176,118,238, - 50,155,119, 43, 94,254,244,103,249,246, 59,223,230, 96,111, 7, 41, 52,158,176,120,202,162,132, 3, 18,149, 77,214,189, 54,150, -168,210, 20, 69,229, 58,117,207, 61, 55,149,174,169,155,143,153,129,160,132,105, 10,190,133,178, 33,237, 57, 31,121, 78,146, 23, -142,223, 80, 58,144,141, 16,181, 75,221, 83, 2, 79, 9, 38,158,164, 29, 59,213,122, 28, 7,206,150, 22,249,238, 53,162, 20,218, - 24,178, 44,103, 58, 77,157,130, 62,119,152, 94, 23,173,234,205, 15,142,117,237, 32, 52,218, 88,180,117,120, 89,163, 13,198, 56, -107,226,179, 85,227,246,233, 65, 38,207,235,144,159,214, 69, 63,203, 71, 46,254, 53,133,136, 60, 45, 58,246, 89,105, 59, 79, 0, -114, 56,153, 2,180,136,141,124, 12, 75,180, 16, 38, 32,209,194,195,143, 3,186, 75, 53,135,163, 9,211, 36,229,250,141, 27,100, -121,137,193,141,200,132, 39, 49, 6, 90, 81, 27,105, 45, 85, 86, 52,234, 93, 55,130,107, 43, 73, 44, 44, 27, 75, 93, 34, 79,144, - 28,238, 81,213, 41,173,184,239,118,132, 42,100,176,113,150,222,250, 89,198, 57,140,134, 71,168, 94, 72,229, 69, 36,149, 97,146, - 37,148, 69, 65, 50, 25,177,187,191,143, 14,198,212,101, 73, 82,228,196, 75, 29,108,232,110, 16,152, 69,183,248, 39,123, 92,103, -157,207,227,165,254,137,155,168,177,104, 92, 71, 35,173,116,217,208,230,248,177, 52,104,164,180,184,193,132,235,212,103,193, 22, -198, 24, 12, 53,158,239, 17,183,218, 60,216,220,102,169,211,193,132, 30,163, 52, 67,166, 41,157,118,204, 81, 97,232,118,186,148, -101, 69,173, 53,202,147,110,156, 41, 44,158, 82,108,239, 30,208,105,247,233, 95, 93, 70,224,145, 76, 19,110,221,188,206,100, 50, - 65, 88, 75,160, 20,117,145,177, 60, 88, 98,111, 63,165, 21, 66, 86,106, 58, 81, 64,174, 43,194, 56, 98, 63,153,240,218,149, 13, -142,166, 71, 12,186, 45, 66,207,112,184,127,132, 81, 1,211,210,208, 69, 17, 72,193,189,155, 31,146,140, 15, 9,122,109,174,223, -218, 1, 33,168,140,227,151,223,186,247,128,110,183, 67,146,166,244,250, 61,138,163, 4, 83, 87,120,113,139,131,188, 32,212,150, - 72, 42,116,101,241,164,194, 87,142, 58, 83,102,150, 48, 48, 8,105,177,166, 34, 73, 70,164,147, 26,163, 75, 55,249, 51, 22,173, - 43,167, 70,143, 90,116,187, 75,180,187, 75, 8,225, 83,148,134, 44,175, 64,122,148,149,133,192, 3, 79,146,229, 37,113,220, 66, - 42,137,169, 75,186,157,152,213,181, 13,130,208,167,221, 10, 56,189,182,194,234,114,143,110,203,167,223,137,248,204,167, 95, 37, -155, 30,177,187,189,137, 41, 75,103,233,145, 2, 95,121,120, 42,196,247, 34,176, 30,202, 11,209,165,198,160,192, 86,128,165,170, -114,172,173, 65,151,232, 82, 83, 38, 37, 82, 8,114, 27, 18,183,122,248, 66,160,189,128, 36,203,105,245, 7, 20, 89, 66,183,223, - 35, 73, 18, 86,215,214, 17, 42,192,243, 5, 97,171,131, 20, 78,140, 23, 46,192,140,230,201, 86,141, 36, 67,201,197,113,185, 93, -120,157, 54, 64,151,198,190,249,248,107,221, 54, 83, 37, 39,130, 58,190, 55, 24, 99,154,131,167,105, 26, 22, 53,247, 61,195, 76, -177,174, 65,136,249, 72,119,102, 81, 43,202,146, 60,203,136,194,214,252,243,103,223,239,241, 84, 83,160,141, 43,248,181, 49,160, -205,188,161,176, 51,132,105,173,231,196,186, 48, 10,105,181, 32,142,114,188, 52, 71, 69, 33,158, 49,100, 85,194,233, 51, 27,156, - 94, 94,226,244,234,128, 92, 23,236, 62,218, 36, 27, 13,209,117, 69, 81, 20,228, 69, 73,146, 21,236, 30, 14, 89, 62,220,167,237, -197,132,158, 96,146,102,172,174,109,144, 90, 73,180,114,145,247,183,238, 19, 92, 92,166,101, 44, 45, 81,224, 55,230,187,192,186, -215,106, 29, 20,116, 67,159,193,210, 58,231,206, 46,243,198,167, 95,229,206,230, 33,215,239, 62,224,195,107,183,184,191,185, 79, - 45, 2,132, 10, 16, 54, 32, 18,138,149,126, 68,149, 85,164,181,161,210, 53, 71, 19,232,183, 35, 68,154,225,123, 30,137, 18, 12, -206,246,248,155,255,201,127,192,127,252, 55,254, 15,236, 38, 57,249,124,140, 40, 62,166,169,104, 32, 50, 74, 80, 27,248,214, 7, - 31,242,224,225, 38,175,189,250, 58, 55,110, 95, 99,249,211,159,102,227,244, 89, 30,110,110, 98, 68,192,151,255,208, 31,230, 27, -191,253,235, 20,217, 24, 99, 44,190,106,158, 79, 81,163,148, 19, 50, 86,149,110, 28, 22, 18, 37, 93,119, 94,213, 85,179,143,111, -168,128,214,137,231, 12, 2,173, 13,149,214,148,117, 77, 81,212, 20, 85, 69, 94, 22,212, 90, 83,215, 78, 97,111, 26,149,189,139, -106,117, 26,137,184, 33, 40,182, 98,151, 97, 16,197, 1,129, 31,160,164, 19, 83,231,101, 65,146,185,188,244,170,170, 80,210, 35, -240, 29, 75,160,170,106,138,162,116,171, 75,227,214, 21,149,214,232,133,162,174,222,122,229,252, 79, 62,147,244,246,156,155,252, - 83, 41,112,207,241,143,159,124,123,140, 70,247,137,121,241, 79, 39,207, 61,219,107,253,248,199,136,103, 66,108,142,163,239,154, -157, 88,131, 64,172,106, 7, 2,208,198, 1, 36, 28,251,189,161, 88,133,206,163,238, 80,177,142, 52, 20,197, 49,237, 86,204,246, -230, 67,168, 51, 54,150, 91,248, 88, 86,151,122,132,126,128,244,124,180, 21, 40, 21,224,135, 49,161, 31,186,156,103, 41,105,183, -219,180, 90, 45,218,157, 14,211, 44,113,153,196,190,143, 70, 81,105, 73, 94, 24, 38,211,156,187,247, 30,113,253,250, 45,238, 62, -216,100,235,224,144,164,206,185,187,249,128, 97, 54,101,119, 60,194, 6, 1,147, 82, 19,134, 29,210, 36,163,221,110, 19,183,219, - 78,109,219, 48, 14, 62,238,185, 21,139,110,134,185, 79,125,134,111,228, 68,110,250,113, 32,134,156,219, 52,102, 90,151,227, 8, - 91, 39, 62,156,125,222,140,169, 61,219,133,130,219,143, 10, 64, 42,143,193,234, 42, 15, 55, 55, 9,219, 29, 30,236, 13, 25,103, - 37,161,173,144, 74,161,241, 88, 30, 44,163,203,156,183,222,252, 20,237, 86, 72,208, 14,137, 91, 17, 74,122,124,253, 87,190, 78, -145, 85, 8,225,177,181,189, 73,145,167,164,211, 49, 81, 24,210, 10,125,202, 52, 33, 25,141, 25,141, 10, 70, 73, 77, 90,106,142, - 42,195,168,212, 20,198,210,233,196,232,178,160,211, 13,168,117,197,116,152,211,138, 35, 74, 35, 32,108, 17,182,122,172, 47, 15, - 56,216,188,143, 40,166, 8, 93,131, 21,164,101, 77,169, 33,106,197, 24, 43,232,119, 99, 94,121,225, 2,187, 91,155,244,186, 45, - 14,142, 18, 74, 44,163,188,160,210,134, 88, 91,148, 85,232,218,193, 48,148,148,196, 97, 64, 20, 41, 90,237, 16, 93,215, 76,199, - 99,178,116, 10,166, 70, 87, 5, 86, 87, 88, 91,227, 43,233, 34, 28,195,136, 48,238, 98,172, 71, 93, 75,106, 45, 41, 43,205,193, -112,200, 52,171,156,141,206, 42,106, 35, 40,203, 18, 79, 74, 34, 95, 17, 70, 62, 66, 10,206,159, 63,135,146,150, 44, 57, 34, 79, - 70,148,101,142,239, 41, 90,113, 68,191,215,101,125, 99,157,149,229, 21, 6,131,101,150, 87, 87, 8,162,176,193, 13, 40,138,186, - 2, 41, 48,218, 80,102, 5,186,206,169,170,146,170, 42, 16, 2,170, 34,199, 19, 22,223, 19, 40, 63,230,119,190,241, 30, 85,101, - 56,117,238, 2, 69, 94, 82,100, 41,253,126,135,100,114, 68, 85, 38, 92,184,112, 17, 33, 21,113,187, 67, 89,105, 58,157, 46, 82, -249, 36,135,123,248,194, 52, 54, 54, 7,218,240,148, 63,183,243,204, 17,174,179,208, 21,129,227, 31,204, 57, 9, 51,114,161,187, -222,102,161, 44, 51,154,156,108,118,234,199,231, 2,251,216,225, 93,158, 32,149,205,236,109,182, 1,201, 44, 2, 76,102,172,112, -107, 4, 39,163,163, 22,179, 16,102,240, 39, 7, 97,145, 98, 70, 39,147,205,148, 96,150,211,109,169,181, 97,154, 22,238,192,214, - 80,220,168, 42,116, 85,146,219,138,184, 19, 17, 74,197, 82,175, 79,167,219, 65,231, 5,211,180,102,115,103,232,188,204,177,143, -231,123, 88, 20,190, 39, 89,221, 56,195,205, 7,123, 72, 63, 38,203, 50,242, 50,103,237,212, 41, 76, 19,187,170, 76,129,103, 43, -144, 10,173, 2,132,148,248,210, 66, 40,241, 98,151, 91,223,109,183, 89,237,245, 57,181,212,227,210,202,128,171,231,207, 16,183, - 66, 30, 62,122,228, 14, 52, 81,136, 39,192, 84, 37,113, 43,102, 90, 84, 88,160, 40, 74,132,146, 14,200, 84, 22, 78,127, 80,228, -156, 90, 93, 38,140, 90,188,253,238, 53, 74,251, 20, 86,251, 51,126,121,194, 97, 86,173,116, 24, 85,105, 4,111,125,250, 77,172, -209,140, 70, 67,122,157, 14,113,167,203,215,190,254,107, 92,188,116,133,211,167, 78,177,191,183, 3, 77, 56,151, 21, 78,220,109, -141, 91,123,104,173,169,170,202, 41,213,243,146,255, 63,109,255,245, 36, 89,150,231,119, 98,159,115,206, 61, 87,185, 10,153,145, - 58,171, 42, 75,181,168, 22, 51, 61, 2,211, 24,204,130, 24, 0, 3,177,182,160, 88, 26,215, 8, 35, 31,200, 63,128,102,124, 32, - 31, 97,198, 71, 62,242,129, 15, 52,174,237, 3,105,220, 93,236,114,185, 32,176, 52, 18, 3, 16,192,204, 96, 48,221, 35, 90, 76, -139,234, 82, 89, 85, 41, 66,135,203, 43,143,224,195,185,215,221, 35, 43,179,186,122, 6,180, 50,183,136,140,242,240,136,112,191, -126,126,191,223,247,247, 21, 69, 85,179, 44, 42, 86, 69,205,170,172, 89,149, 21,203,162, 98, 90,148,204, 87, 5,243,101,193, 98, - 85,176, 88,149, 20, 69, 96,187,215,157, 65, 88,240,176, 9,123,124,219,249,159,180,198,210, 90, 71, 99, 28,214,121,140,243,225, -107, 77,112, 45,173,170,134,197,162, 96,182, 92, 49, 91,172, 88,150,193,229,207,123,144, 34,234,200,160,193,139,223, 57,135,105, -205, 26,250, 47,171,134,178,170, 41,171,230, 58, 81,238,179,189,144,224,101,129,243,159,153,134, 63, 71, 43,254, 34,232,228,243, -140, 79,254, 50,112,250,139, 72,124,155,251,108,150,201, 61,121,235, 69,242,180,235,150,183,219, 70, 44, 47,213,196, 33,113,200, -142, 51,175, 48,152, 98,202,222, 32,194,212, 21,123,145, 98, 60, 24, 50, 85, 6,235,106,116,146, 96, 68, 96,140, 70, 30,170,197, - 28, 99, 12, 87,171,154,101,219,242,233,249, 25,166,173, 73, 18,137, 38, 48,123,243, 44,103,144,164,140,242,148, 27,187,187,188, -118,247, 21,118, 6, 25,183,110,220, 32, 25, 36, 44,138, 21, 50, 78,105, 93,132,210, 3, 62,125,124, 74, 93, 25, 30,127,252, 8, -107,234, 32,197,232, 33,198, 62, 63,250,255, 31,123,245,110, 82,151, 82, 6,171,203,231,154, 52,215, 51,159,251, 56, 75,233,240, - 62, 76, 69,173,113, 72, 29,225, 60,140,119, 38,164,195, 33, 31,124,252, 4,219, 53, 17,101, 99, 24,166, 67,218,162, 98, 62,155, -161,104,105,219, 54, 92,244, 18, 60,150, 79, 62,249,132,249,178, 36, 77, 6, 84, 85, 25,154, 0,223, 50, 25, 14, 89,173,150,124, -242,201, 35,154, 85, 65, 91, 52, 44, 11, 65, 97, 60, 37, 17, 51,103,131, 36, 71, 88, 46,151, 11, 52,142,170,109,144,120,150,203, - 22, 47,106, 38, 55,246,248,217,179, 75,142,238,189,202,135,239,253,140,119, 94,185,201, 64, 52,156, 94, 76,105,100,196,170, 50, - 36,113, 30, 28,199, 4,164,145,100,118,121,140,150,150, 73, 22,113,251, 96,192, 39,231, 11, 26, 75,151,122, 5,177, 3,213,255, -253,206, 6,195,147,198, 5,104,222,123, 98, 13,210, 74, 26,105, 80,194,226, 59,158,142,215, 18,165,193,137,134, 56,181, 68,222, -135,192, 9,116,208,143, 11,197,170, 44, 73,198,158, 36, 73, 72, 7, 41,198, 26, 76,219, 80, 46,167,232, 52,227,237,251,247, 56, - 59,125, 70, 91,175, 24,101,154,166, 48, 44, 23, 83, 76, 91, 17, 43, 65, 36,198, 93, 19, 17,206, 8,165, 37,173,111,240, 88,124, - 91,226,156, 36,202, 84,231,207,175,176,149,195, 59, 67,219, 58,116, 20, 97, 76,133, 76, 6, 36, 73,194, 31,253,241,247,248,167, -191,251, 93,190,245, 75,191, 66,148, 77,184,115,235, 54,131, 60,225,252,217,199, 28,236,141,152, 95, 62, 69, 39, 9, 22, 65,109, -108, 8,215, 49, 54,152,156, 0, 73,156,172,243, 5, 84, 20,109, 10,114,183, 22,147, 29,225,104,123, 90,239,217,238,129,135,102, -113,174, 13, 16,120,231,221,174,122, 67, 25,209, 59, 40,218,224, 0,231,122,137,149, 64, 74,191,150, 85, 5,215,183,205, 98,210, -123,183,142,212,220,232,223, 67,145, 55,173,217,138, 90, 13,231,135,181,157, 66, 72,138,224, 72,183,101,200,212,155, 55, 33, 5, -194, 89,156, 13,201,144,105,150,145,102, 37, 8, 24, 13, 51, 86,117, 70,101, 29,205,106, 25, 76, 86, 76,104, 34,150,203, 2,165, - 37,131, 84,243,165, 55, 94,227,147,227, 25,109,211, 34, 85,140, 33, 98,186,170,120,118, 54, 99,255,106,201,124, 58,229,206,238, -109,206,175,166, 12,227, 29,158, 62,250,128,219,247,238,115, 53, 59, 35,145, 6, 95,175, 80,113,140,211,161, 65,210,214,116, 46, -141, 26, 8,206,141, 89, 22, 49,153, 36,220,186, 49,224,214,116,194,205,163, 29,222,122,245, 46,223,253,193,143, 57,126,246, 12, -125,239, 14, 66,106, 62,248,243,247,120,240,250,195,192, 88, 23,146,101, 25,178,218,119, 71, 3,150,101,203, 48, 41, 88,158, 60, -230,119,126,235,215,248,253,239,253,136,127,251,195,159, 97,191, 32,225, 71,116,198, 48,189, 35,219, 31,126,231,143,249, 27,191, -249, 91,124,227,107, 95,229, 7, 63,250, 33, 59,227, 33,203,162,226,183,255,230,223,228, 63,255,207,255, 11,126,249,235,239,176, -183,119,131,203,147,167,107,164,196,117,153,229,214, 90,148,220,248, 5,248,206,230,215, 88, 27, 52,252, 62,172, 16,157,247,180, -216,110, 39, 30,214, 44, 97, 66,238,206, 62, 31, 86,172,206,133,137, 38,172, 24,109,199, 78,183,120, 39, 49,214, 0, 53,173,113, - 84, 85,203, 50, 42,131,140, 18, 73,107, 12,181,105,105, 76,139,245, 14, 29,105, 76,228, 17,168, 46, 9,206, 5,111,139, 56, 32, -103,214,121, 90,107,105,109,135, 32, 56,135,250,230,219, 15,254, 81,232, 68,197,214,174,169, 51, 68,232, 40, 40,108,193,209,107, - 88, 26,185,214,103,126,145, 73,187, 23,199,191, 40, 56, 97,219,117,108,123,114,127,254,235, 47,131,214,175, 55, 0, 47,147,180, -125, 22,123,216, 46,250,190,183, 7,180, 97,223,101, 91, 75,107, 76,103,215,103, 3, 11,178,219,177,125,102, 82,143, 21,145,238, - 15,152,240, 98,206,175, 46, 41,138,101, 23, 17, 24, 28,155,138,178, 96,182, 44,176, 34,188,161,235,213,156,114,181, 96,182,152, - 83, 86, 5,117, 93,210,212, 13,222, 90,198,131,156,131,253, 67, 30,190,242, 37, 30,190,242, 22,175,221,127,157,215, 94,125,155, -219,119, 94,227,254,189,215,184,117,243, 54,123, 59, 19,226, 72, 32,124, 19, 38, 57, 15,231, 87, 83,140, 51,188,247,222,143, 56, - 63,159,242,233,227,143, 81,145,103, 52,206,194,239,226, 35,240,186,211,164,246, 76, 96,185, 9, 37, 20,155,169,123,205, 50,237, -236, 74,195, 69,221,105,208,183,159,255,222, 15,187, 35,186,244,123,117,191,109,187,219,221,250,176, 5, 41,100,183, 55,188,110, -191,216, 55, 6, 18,197,209,209, 77, 26, 99, 56,187,186,162,113,129,120,180, 40,107, 18, 45,195,155, 81,192, 87,223,121,135,155, - 71,135,164, 73,132,117,142,223,255,215,191, 79, 26, 39,204,102, 83, 22,179, 43,172, 41,241,214, 96,171,146, 85,121,193,114,117, -197,114, 89,115, 57,133, 74, 38,156, 25,199,212,121, 10, 1,153, 84, 8, 37,168,189, 9,186,231, 88,115,152,197, 88,215, 48, 57, - 58, 96, 94, 54,212,171, 6, 89, 22, 20,171,146, 69,213,114,103,119,135,123, 7, 67,198,153, 37,141, 64, 16,177, 88,150, 40, 5, -117, 85, 50,189,156, 35, 85,196,197,249,156, 44,209,100,145, 68,227, 17,214,227,157, 32,137, 34,188, 15,111,122,175, 36, 94,122, - 84,228,137, 36,248, 86,224,170, 48,197,183, 6,202, 66, 81,173, 28,202, 11, 26, 39,168, 26, 79, 20,103, 68,113,138,144, 26,231, - 21,117,235,105,156,224,244,114,134,206, 71, 28,221,186, 67, 20, 39,172, 86, 75,140,169,169,234, 21,214, 91, 30,190,250, 42,203, -233, 21,171,217,148, 88,194,124, 62,197, 24, 67,181, 90, 81,175,230,184,186, 64,218, 18, 45, 45, 66, 56,100, 36, 88,204,103, 68, - 8, 76,219,226,189,197,217, 22, 45, 21,113,148, 32,165,166,110, 42,164,109, 16,214,163,148, 70,185, 26,237, 27, 42,171,249, 79, -255,235,127,197, 31,252,225,159,177,155, 73,142,246, 6,164,195, 33,251,183,110, 99,125,139,107, 86,236,223,126,149,186,117, 72, -149,128,206, 17,201, 78, 40,132,171, 41,205,242,138, 36, 78,136,226, 4, 21,233,224,146,168, 55,159,171, 78,207, 45, 35,141,140, - 52, 74,107,148,142, 59,159,238,192, 88, 14, 1, 26, 42,124, 77,202,117,140,102,159,184, 21,166,231, 64,128,114, 62, 56,186,225, - 55,122, 97,223,235,164,101, 23,125,219, 77,118,214,118, 7,118,119,192,123,231,105, 58, 7,185,170, 40, 49,214, 32,149, 10, 81, -159,157,135, 60, 42,236,202,149, 14, 13, 10, 74,225,133, 32,210,113,208, 37,235, 32,205, 84, 42, 9,200,158, 13,133, 66,105,152, - 76, 70,212,214,241,209,211,243,192,255, 0,116,228, 25, 38,138, 36,130, 52,141,209,217,144, 85,105, 88,150, 45,247,238,191, 22, - 32,222, 72, 34,109, 48, 77,186, 88,182, 44,219,240,123,156, 60,123,134,232, 26,153, 69, 81,176, 51, 72,193, 25, 70,195, 17, 90, -107,148, 80,129,144,230, 93,183,238,114,212,157,139, 92, 93, 55, 56, 15, 73,146, 48, 24, 12, 24, 13,115, 14,118,199,152,182,225, -244,236, 28,175, 18, 62,121,118,206,253,123,247,209, 66,145,116,153,235,198, 54, 1, 85,241,130,193, 48, 71, 43, 79,170, 28, 95, -122,227, 13,254,213, 31,126,143,210,118,113,204,222,246,241,244,155,168,236,231,112,228, 30,209, 0,168,219, 32, 33,251,202, 87, -190, 74,146,100, 44,139,146,162, 40, 24, 15, 7, 52, 85,193,233,233, 41,217, 96,196,254,205,219, 92, 94, 93, 2,193,222, 21,239, - 48,206,208,154,224, 30, 90, 27, 71,211, 77,207,109,231, 38,106,187,162,105,187, 41,219,217, 78, 30,103,131, 68, 46, 76,228, 30, -227,108,215, 48, 4,182,187,117, 6,231, 76,199,175,216,248,204,219, 46,226,187,110, 2, 79,166,168,106,150,101,201,170, 44, 40, -235, 58, 24,215,244,166, 57,157,175, 71,176,143,237, 33,120, 67, 81, 53, 44, 87, 21,171, 85,197,170,108, 40,203,134,162,168, 80, -223,124, 59,216,196,250,107,148,232,141, 77,236,245,194,185, 85,248,187,201,247,243,130, 85, 62, 47,121,237,249,148, 54, 62, 39, - 56,230,243,166,248,207,203, 88,255,188,157,251,139,100, 88, 88,183, 9,185, 55,129, 32,209,154,176, 55,177,221,139, 39,248,108, - 81,143,116, 32, 49,200, 14,166, 51,173, 97,185, 90, 50,155, 77, 73,210, 4,135,167, 44, 43,102,243, 21, 6,193,229,188,160, 40, - 42,176, 6,213,161, 0,163,209,136,241,112,200,141,253, 61,222,122,253, 53,238,221,190,205,112, 48, 96, 52, 30, 98, 77,201,124, -122,206,108,113,197,179,211, 99,102,243, 75,138,229,101, 48,182,104, 45,182,173,217, 59,220,229,236,234,138, 69,217, 50, 28,238, - 49, 30,236,114, 99,255, 6,123,187,187,104, 29,100, 95,190, 11, 84, 93,103, 13,139,151,191,102,219, 67,143,191,230,250,230,159, - 67, 64, 36, 66,201,181, 76,141,173,116,164,235,132,165, 78, 32,209, 27,101,110, 93, 83, 61, 91,185, 55,251,113, 93,196,113, 28, -199, 24,107,120,255,163, 71,225,160,141, 18,118,119, 38,196,145, 66, 41,201,120, 60,225,230,205, 3, 94,123,112,155, 81,158,242, -222, 79,223,227,248,233, 51,210, 56,102, 62,189,162,169, 75, 22,179, 75,202,170, 96, 86, 76,241,179, 57, 73,229, 57,191,172, 57, -182,240,180,181,212,128, 13,249, 28,196,214,145, 72,137,115,158,253, 81,198,249,180,228,112,152,128,111, 25,237,238,114,117,181, - 64, 57,129,244,142,186, 53,120,173,144,110, 73, 22,195,238,206,132,189,221, 9,195, 81,130,146,142,197,116, 69, 26, 39, 76,139, -166,139,149,117,148,101,203,254, 48,167, 89,148,196,120, 74, 5, 42, 2, 73,216,165, 71, 34, 34, 38, 4,180,180,181,167,106, 4, -198, 72, 90, 33,153, 85,158,139,169,163,174, 5,203,165,161, 40,130, 83, 86, 8,154,208,120,169,113, 94, 82, 55,150,211,139, 41, - 34,138, 25,141,119, 17, 42, 98, 54, 95,208,182, 13, 87, 87,151, 44, 22, 11,222,120,237,117, 98, 37,168,139, 57,174, 89,210,148, - 75,164, 55,156,157, 28,243,241,227, 99,222,123,255, 35,202,213, 18,233, 44,105,172,201, 59, 57,153,180,142,139,243, 11, 76,219, -128,179,212,117,133,115,142, 52,201, 80, 82,225, 92,131, 45,150,196, 74, 99, 60, 8,215, 32,156, 97, 86,194, 63,254,239,254,128, - 91, 55,239,242,149,135,247,216,223, 25,145, 12,135,129, 88,154,106,158, 61,126, 68,146, 79,130, 76, 77,199,160, 18, 26,235,208, -194, 83, 79, 79, 81,222, 6,232, 93, 7,146, 95,159,133,222,127,140,226,104,221, 88,174,139,120, 20, 33, 58,227,142,254,235, 66, - 6, 39, 47,157,132, 98, 25,233,120,157, 19,160,250,108,117, 21, 33,149,238,180,209,157,140, 41, 10,246,176,206,249,181,124,206, -119,137,142,206,185,173, 93,252,150, 35,101,119,232,247,239, 15,217, 71,189,234,168,107, 58, 54,183,158, 0,181,206, 44, 80, 17, - 73,150,161,180, 70, 72, 73, 28,199, 44,150, 51,118,247,118, 56, 60, 60,228,244,252,130,203,249,138, 79,159,158, 80,172,230,236, -140, 18, 30,190,122,151, 36,146,232, 44, 67,198, 57,211,162,161, 54,112,112,176, 79, 30, 11, 98,217,146,105,193,120,239,128, 71, -207, 46, 89,212,142,225,104, 18,208, 15, 29, 81, 86, 53, 42,210,212,171, 5,247,111,221,192, 52, 37,145, 12,186,241, 40,214, 88, -103,200, 7, 57,113,156,116,206,102, 49,113, 28,175,205,124,172, 13, 41,100,177,142,201,135, 3,170,166,225,253,143, 62,225,228, -252,138, 7,119,239, 16, 43,133, 18, 16,105,133,177,109,112, 3,116, 30, 29,107, 98, 45, 72,132,229,245, 55,222,164,242,154, 63, -249,209,123,244,218, 5,255,162, 93,225, 86,133,247,207,125,253,242,242,146,183,223,124,155,251,247, 31,240,238,123,239,241,229, -183,191,196,249,217, 41,187, 59, 19, 62,248,232, 67,140,117,196, 89,206,238,100,196,229,229, 69,199, 30,183, 29, 84,238, 49,222, -135,253,185,221,114,158,235, 94,219,141,194,199,175, 33,251,254,245,182,221,180,239, 58,115, 27,219,125,127,120, 12,214, 14,165, -235,235,195, 19,118,242,157, 99,156,233, 87,190,198,225,108,215, 52,154, 45, 52, 96,221,120,132,102,163,172, 55,140,251,229,170, -160, 40,107,138, 50,124,237,165,240,123,207,100,126,145, 22, 93,108, 89,165,190,200,210,245,231,195,229, 47,215,178,255,101,201, -115,207, 67,239,207,175, 12, 94,202,166,124,225,138, 64,126,161,223,105,141,103,116,247,211, 58, 98,119,119,151,147,147,103,156, -156,157,227, 12, 40,161,200,178, 24,233, 53,122, 48,160,113,146, 97, 22, 82,222, 46, 46,167,104, 29,209, 84, 37,103,103,103, 84, -203, 37, 81,167,201,189,123,255, 46, 89,172,184,119,251, 22,195,201, 14,113, 58,228, 96,103,194, 40,145,140,178,140, 68, 74,198, - 3,144,218,227,117,206, 96,110,105, 91, 77, 45, 64,170,146,200, 91,124,235,144, 81, 26,156,138,164,197, 9,211, 73,125,228,139, -149, 10,207,169, 26,182, 27,159, 23,189,194,107, 66, 81,111,165,248, 2, 91,206,107,178,159, 78,250,102,157, 67, 56,219,125,175, -236, 76, 67, 4, 10,135,236,126,214,171,247,238,241,215,126,253, 91,124,240,232, 99,164, 30,113,126,242,140,182, 44,152,140, 6, - 92,205,102,252,147,127,250, 79,249,229,111,188, 77, 44,225,207,255,236, 7, 12,243, 33,143, 63,126,196, 32,203, 88,181, 53, 31, -127,252, 49, 77,181, 2, 91,177, 55,156,112,190,178, 92, 22, 32,149, 6,233, 40,164,101,132,100, 79, 72,246,156, 96,172,135, 44, -149,229,201,124,193,101,236,249,209,178,228, 77,173, 41,230, 75, 70, 89,198,188, 90, 48,153, 28, 80, 57, 88,186,150,201,193, 8, -145, 36,252,240, 39,159,242,240,225,109,242,168,225,225,173,148,189,244, 6,143,143,151, 12, 99, 13, 14,134, 89, 74, 93, 86, 40, - 39, 56,204, 19,164,112,220, 61, 28,243,228,211,115,226, 8,140,129,198,130,119, 18,229, 99,132,104,105, 61,180, 94, 81,183,134, -133,119,120,175,200, 74,203,209, 72,112,123, 71, 97,157,229,242,114, 69,101,192,171, 5, 73, 58,225,224,240, 22,113,150, 97,125, -208,249,151, 69, 77, 81,150,148,101,137,181,150, 7,119,239, 49, 72, 50,150,243, 75,202, 98,134,179, 13,214, 57, 62,249,240,152, -119,223,123,202, 69, 13,173,131,227,203,160,183,157,205, 23,252,242, 87,223, 98,127,156, 49, 24,142, 72,148, 98,186,152, 81,170, -176, 87,111,155,150, 52, 73,201,178, 28, 45,192, 10, 40,203, 2,146, 28,223,180,160, 4, 85, 19,156,212,126,245, 91,223,226, 27, - 95,121,133,233,229, 49,137,214,180, 77,201,104,156, 17,233, 4,156, 65,235,136,213,170,192,122,139,198, 99,171, 21,229,114, 70, - 26, 73, 34,181,177,195,236,209,157, 77,124,234,117,203,226, 62,251,188, 31, 66,250,224, 14,133, 39, 81, 97,247,110,173,237,242, - 7,130,226, 2, 17, 58,201, 78,130,220, 65,178, 13,116,166, 46,161,142, 4, 66, 85,200, 91, 17, 72, 84,135, 74,117,102, 51,214, - 6,212,171, 51,112,137,116, 28,188,194,149, 70,233, 4,157, 36, 68, 73, 76, 20,199,161,201, 96,147,213, 30, 37, 91, 3, 73, 36, - 58,155,227, 8, 21,107,226, 44,225,134, 61, 34,203, 50,206,207, 46,121,248,218, 3, 86,149,225,143,254,228, 93,238,220,206,249, -213, 95,249, 6,187,131, 44, 40, 40, 84,204,213,101,197,170,243, 25,176,182, 10,154,108,101, 25, 12,134, 8,103,137, 35,133, 83, - 2,103, 13,198,180, 8, 41, 41,234,146,221,253, 67, 46, 79, 46,152,151,134,195,193, 8,233,106,156,179,228,121,142, 82,146,166, -105,214, 78,162,190,155, 62,131,163,153,196, 56,135,117,130,201,120,132, 19, 18,132, 70,234, 4,248, 49,143, 30, 61,226,225,131, - 7,100,105, 28,200,150, 73,138,113, 14, 61,200,185,156,205,144, 34, 39,145,142,217,249, 51,254,167,255,195,191,203,255,237,159, -253,115,206,139, 22,107,229,115, 85,187,127,157, 94,206,157,155, 47,230,252,127,254,249, 63,231,245,215,223,224,230,205, 91,252, -238,191,248, 93,254,246,223,250,109,222,127,255, 61,190,244,165, 47, 83, 86, 13,255,252,119,127,151,255,205,255,250,127,197,227, - 79, 63,161,169,203,238,241,252, 86, 25,176,155, 48,175, 45, 39,204,254,124,235, 11,124,144,239,134, 9,221,185,237, 38,207, 95, -251,184, 93, 79, 59, 79, 29,236,250,220,235,234,159,227,133,245, 84, 56,129,113,142,214, 70, 52,205, 38,155,192, 19,174, 55,211, -161, 69, 61,145,111,109, 19,251, 82,121,215,203,164,110,235,169,254,197,123,115,241,115, 44, 72,183,229, 82,127, 81,189,249, 95, - 70,182, 38,186, 96,250,107, 18,148,231,168,221, 27,213,139,216,146,186,189,216, 89,173,135,233,250,239,243,120, 70,227, 9,111, -189,253,101,236,143,127, 68,154, 68, 68,120,218,214,115,124, 81, 82,172, 22,212, 70, 98,202, 18, 37, 5,141, 49,100,113, 76, 58, - 24,113,243,181,215, 24, 15,114,210, 56, 14,161, 13, 55,110,146,198, 17,163, 44, 39,138, 83,140, 19, 84, 5, 40,227,192,204,184, -106, 47, 57,121,214,146,165, 67,158,156,205,249,244,217, 21, 63,125,247, 61, 48, 53, 71,123,138,139,203, 25, 94, 13, 57,188,245, - 10,174,179,189,116,210, 93, 35, 0,125, 33,123,216,109, 69,196, 75,154,192, 94, 15,236,241, 47, 68, 95,164,220, 76,233, 61, 52, -239,172,195,120,137,148, 1,154, 18,194, 99,145,200,142,148,232,132,231,157,183,223,226,246,209, 13,254,213,239,125, 23, 87,149, - 72,239, 88, 21, 5,201, 96,192,217,179, 25,127,248,189,159,242,245,215, 30,112,252,233, 83, 70,163, 33, 2, 79, 50, 30,178, 59, -153,176,183,179, 67, 91,106,104, 75,126,242,209, 25,211, 74,208, 68,154,149, 9, 7,120,100, 33,151,144, 8, 79, 19, 75,206, 92, -193,188, 10,251,236, 73, 29,209,150, 53,245,110,134,181, 37,119,110,223,102, 53, 43, 56,189,184, 96, 81,215, 52,120,158,124, 50, - 71,221,144,236,236,238,240,147, 31,127,194,221,219, 3, 84, 36,136,163,156,183,223,184,195,199,207,158,114,113,177, 66,120,203, - 32,139,152,205,102,140, 82, 13,206, 34,102, 5,247,198, 25,131,124,192,233, 85,193,233,162,162,113, 21,145, 18, 76,164, 71,155, -208, 50,182,128,147, 2,107, 37,141,112, 76, 14, 50,146,212,211,182, 48, 95, 57, 6,187, 25, 7, 71, 55,104, 93,132, 65,176,187, -119,192,211,147, 19, 70,121, 68,107,195,225,139,119,124,237,171, 95,193, 52, 45, 87,231,231,204, 23,151, 92, 45, 46,184,152,205, -120,122,177,228,241, 73, 73,101, 5,181, 16, 56, 28,243, 39, 83, 46,202,154,218, 25, 70,195,156, 87, 15, 71, 12,243, 43,134, 7, - 71,212,197, 10, 25, 69, 29, 81, 12,150,179, 25,137,142, 80,145, 39, 75,227, 48, 97, 8, 1,145,198,123,199,197,229, 28,231, 28, - 73, 28, 49, 26,239, 32, 58, 41, 24, 38, 64,211, 8, 69, 83, 87, 16,103, 8,165,195,106,162,173, 56,125,250,136, 84,208,105,114, -195,196,188,205,126, 95,239,161, 59, 14,135,115,193, 85,171,143, 82, 21, 82,224,188,192,185,176,165, 21, 82,160,163, 40, 56,115, - 37,201,154,240,102, 76,208, 14, 11, 92,167, 7, 14, 16,123, 20, 43,240,225,177,149,128, 40,210,180,117,189,206,216, 14,107,206, -205,174,189,255,121, 72, 80, 50,130,110, 10,142,146,152, 56, 77, 72,179,140, 56, 73, 80,177, 94, 51,221, 5,225,239,235, 11,128, -148, 10,226, 94,206,214,189, 63, 91,195,206,193, 62,206, 88,132, 18,236,237,141,249,230, 55,190,138,243, 45,227, 73,198,141,195, - 9,195, 56,166,105, 44,142,132,214, 52, 84,141, 67,170,152,249,124, 65, 66, 68, 54,144, 88,211,118,171,136,176, 66,177,166, 97, - 60, 30,113,124,122, 65,150, 13, 56, 59, 57, 99,152, 14,120,122,177, 32, 83, 57, 59,153, 96,103, 48, 34,201,114,132,168,201,178, -156,162, 88, 5, 51, 23, 44, 82, 70,196,137, 14, 18, 76,107,192, 71,104, 36,142, 60, 32,110,226,117,134,121,206,119,255,228,123, -124,250,233, 99, 94,121,112,143, 76,167,157, 2,163, 98, 85,149, 68, 50, 40, 8,146, 56, 69,152,154,216, 21,220,221, 31,113,177, - 56, 14,121,229,126, 59, 8,106,125,106,188,148,225,228,129,239,253,249, 15,248,254, 15,127,192,183,126,233,151,249,227,239,126, -135, 63,254,147, 63,229, 55,126,253,175, 16, 39, 25,127,250,103,223,103, 48, 24,241,224,149,135,188,245,229,119,248,222,159,124, -167,103, 2,175, 79,174, 53,176,255,220, 89,183, 65, 40, 89, 95,107,155, 2,239,215, 86,232,206,250, 53,218,232,185,142,130,175, -173,178, 61, 91,214,184,215, 19, 66,183, 11,187, 16,162,115,161,115,212, 98, 99,122,180, 38,118,247,190, 8, 94,172,127, 7,245, -245, 55,239,254,163,151, 77,182,207,231,169,191,128, 83,246,133, 72,110, 47,102,184,115,157, 53,253, 18, 38, 60, 95,128,129,255, - 69, 27,130, 23, 69,182,110,119, 85,116,158,190,214,133, 93,186,177,225,214,118, 31,173,117,107,246,251,154,245,174,187,196,182, - 46,111,186,127, 92,235, 28, 77,219,114,113, 53,165, 40,150, 1, 10,158, 46,137,211, 28, 33, 19, 38,187,123,236, 76, 38,236,239, - 77,184,113,120, 64,170, 99,156,109, 57,216,223, 39,142, 34,150,139, 37, 82, 10, 78, 78,159, 98,155,146,186, 92,112,122,246,140, -217,124, 74, 93, 46,168, 86, 87,164,113, 65, 85, 60,197, 54,134,197,172, 33, 73,246, 56, 62,187,224,244,244, 17, 7,135,154,253, - 93, 65, 62, 76, 48, 64,148,228,120, 25,173,119,231,188,100,197,209, 31,116,242,186,178,241, 26,204,248,252, 69,183, 14, 38,232, -155, 4,252,203,227,112,123, 27,207,117, 66,149,216, 24,128,248, 48,225,120,239, 54,175, 73, 71, 72, 25,230, 25,111,220,187,203, - 43, 55,247, 81,174, 37,138, 34,206,231, 43,106, 15,127,246,163,119,185,115,112,128,182, 45,121,150,114,176,191, 71, 89,174,194, -190,218, 24,170,229, 18,191, 50,124, 48, 45,120,108, 61, 75,107,201,101, 68,234, 61,169, 20, 33,254,212,123, 22,206, 97,187, 3, -196,122,208,232,240, 70,179,134, 60, 17,204,174,174,104, 90,135, 74, 6, 24, 66, 52,102, 92,195,114, 94,114,235,238, 1, 73,226, - 57, 63, 94, 82, 55, 18, 82,141,165,226,230,126, 70, 26,135, 67, 35, 73,116,216,183,122,130, 23,188,143, 24,141, 71, 44,202, 10, -163, 52,211,178,162, 21, 14, 41, 29, 89,228, 73,165,199, 11,203,104, 71,163, 83, 69, 85,183, 76, 50,184,117, 24,177, 51, 26,178, -179,187, 71, 62, 74, 25,237,236,144,100, 35,118, 15,111,132,125,173,148,232, 56,198, 56, 79, 89, 85,164, 89,202,107,175, 60,192, -152,150,217,213, 37,213,114,193,229,236,146, 71, 79,142,249,201,163, 41, 79,102, 45, 83,167,168, 72,105,165,192, 8, 65,139,103, - 90, 4,227,159, 72,180,220,216, 29, 17,199, 17, 94, 8, 98, 29,138, 69,164, 52,186, 59,212,165,148,228,121, 74, 44, 69, 48,222, - 32,194, 54, 53, 77,221,176, 50,154, 89,233,185,113,120, 68, 93,149, 76, 38, 35, 6,131,140, 44,209,104, 45,185,186,188, 8,206, - 89, 94, 80,182,158, 88,107,206,158,124,140, 41,231,196, 50,200, 20,149,138,214,193, 27,170,211,236,174,213, 22,178, 11,197, 80, -178,219,155,203, 13,207, 99,157, 3, 44,144,170,219,105, 75, 73, 20, 71, 33,198, 87,134,143,253,245,187,134,234, 59, 20, 64,105, -141,142, 19, 34, 29, 82,176, 34, 29,246,248,253,125,195,249, 44, 64, 73,100,191,167,143,194,247,232, 56, 76,231,105,158,147,100, - 25, 81,146,160,226, 56,192,238, 73,152,214, 67,138, 72,248,121,189,218, 69,196, 49, 40, 25, 52,234, 82,132,253,123,164,153, 93, -205,144, 82, 18,167, 25, 82, 69,220,186,125,196,206,206,128,209, 48, 11,206,138, 34, 97,190,106,185,154,215, 28,159,206, 40,138, -134,247,222,125,151,197,197, 41,222, 86,100,249,144,120,184,203,201,180, 66, 38, 57,198,122,180, 78,104,140, 35,207, 7,120,231, -200,242, 33,243,217,148, 91, 7, 19, 82, 97, 48,109,141,247,138, 52, 31,146,143,198, 12,242,160,208, 73,210,132,241,100,180,134, -194,189,247,129,157,221,241,166,156,245, 84, 93,254,119,146,230, 60,250,232, 17,194, 11,242,193, 32, 52, 49,206, 34,156, 13, 42, - 14, 37,201,226,168,107,140, 36,217, 96,194, 31,127,255,199, 88, 23, 92, 52, 17,155,148,251,109, 10,247,243, 50,173, 62,152,167, -109, 91,150,203, 5, 95,253,242, 59,124,237,107, 95,227, 31,255,151,255, 5,247,238,221,229,205,183,222,230,254, 43,175,242,107, -191,254,235,236,239,237,113,184,191,207,135, 31,188, 79, 89,174,240, 29,169,119, 61,181,139,151,172,131,187,194,109,157, 93,243, - 42,174,185,104,250,235, 72,130,232, 72,225, 91,174,231,159,153,252,175,173,128,121, 46, 39, 99, 43, 68,198,174,161,254,110,191, -239, 54, 60, 39,183,245, 24,234, 27,111,221,251, 71, 47, 39,185,189, 56, 78,181,255,127,159,183, 83,127, 17,241,237,249,199,254, - 60,249,217,207,133,188,191,128,123,221, 47,100,114,227,125, 23,167,187,145,180, 89,107,131, 79,175, 13, 4, 5,235,194, 14, 57, - 82,138, 56,214,225,214,201,217, 98,173, 3,251,182,243,141, 55, 29, 20, 87, 87, 13,171,197,130, 68,107,118,119,119,208, 58, 33, -201,134,129, 12,163, 68, 32, 83, 93, 93, 50,159, 77, 3, 51,185, 88,177, 92, 46,104,219, 26,173, 21, 73, 98,240,118,193,225,126, -206,120,146, 48, 24, 40,134, 3, 79, 18, 21,164, 81, 67,181,152,177,186, 90,112,252,228,140,214,120,172,112,236,238, 15,201,115, -133,111, 27,110,222,190, 79,235, 35,106, 7, 94,168, 23,216, 9,189, 40,114,151,181,209,142,223,186, 96,214, 23,208, 53, 11, 76, -185, 85,212,197,122,167,254,252, 99,110, 26,183,109,149,193,214, 27,214, 19,118,115,222,108,117,193,129,117,218,167,137, 71,145, - 98,119, 50,228,238,173, 35,132,138, 56, 62,191,164,108,130,142, 84,182, 13,223,254,213, 95,198, 58,131,214,130, 79, 30,125,200, - 40,207,248,209, 15,127,204,116, 54,229,248,170, 96,190,178,232, 40,166,241,193,135, 93, 9,184, 63,220,101, 71, 39,152,214,112, - 37, 28, 75, 28,141,247,180, 30,116,224, 67,147,167, 17,121, 34,169, 86, 13, 58, 75,153, 87,150, 91,119,110,177, 42,150,236, 68, - 9,141,181,248, 68,112,112,184, 71, 44, 29,139, 69,201,147,139,130,210, 89,118,118,119,144, 74, 48, 72, 99,148,112,236,237,142, - 89,174,106,230,165,229,188,177,232, 68, 97,188, 99,190, 44,241, 14,118, 99,201, 94, 12,183, 14,134,232, 84, 17, 43, 56,186,149, -179, 51,137, 72,163,136, 97, 34,121,112,111, 76,164, 53,181,177, 24, 15,198, 75,170,214, 4, 15,124, 41,105,219, 96,242,209,180, - 13,163,201,152,225,104,128,105,107,170,114,201,229,229, 9,214, 20, 52,109,203,229,180,228, 98, 22, 76,137,250,226,231, 59,246, - 46, 66, 98,113, 20,165, 33,166,229,230,254,152, 97,150,226, 92, 64,161,158, 29,159,226,124,136,205, 77,179, 12, 33, 5,163,241, - 16,229, 29,197,170,198,138, 8,211,148,248,182,197, 71, 67, 38,135,247, 80, 82,146,231, 3,162, 72, 49, 25,230,212,213,146, 56, -137, 49,214,177, 90, 44,113, 81,140, 37, 98, 49,157,113,252,201, 7, 12,116, 8,106,137,162,144, 70, 37,213,134, 92, 41, 59, 98, - 38, 66, 4,130,220, 22,233, 77,118,187,243,112, 50,203,110,250,246, 91,169, 88,221,254, 90, 74,148,140,130,247,118,119,247, 40, -138, 16,157,165,171,140, 84, 96, 32,199, 61,100,222, 49,239, 59, 41, 93,127, 31,165, 2, 49, 47,210, 49, 58, 78,136,147, 4,157, -164,232, 52, 37,201, 50,146, 52, 67, 39, 41,145,142,137,162, 24,149,132,162,237, 5, 97, 95,175, 20, 34, 82,161, 89,232,136,115, -200, 8,162, 40, 20,124, 17,225,157,231,242,236, 2, 47, 20,181, 9,112,107,158,103,193,202, 87, 41, 36, 17,166, 5, 45, 19,172, -151, 28,159, 93,241,241, 39,143,121,245,193, 93,246,198, 25,206, 84, 60,126,118, 70, 52,220,195,197, 67,106, 23,136, 36,195,209, -136,170,105,187,129,198,144, 14, 39, 84, 85,193, 78, 38, 25,199,161,161,149, 81,204,124, 62,167,173,107, 34,173,209, 73, 76,146, - 36, 40, 41,137,147,152, 56, 78,200,243,148, 52,137,215, 40,104,120,126, 52,197,114, 21, 28, 51,133,230,227,143, 62,102, 56, 28, - 50,154,140, 72,147, 8, 76,139,146,132,115, 46, 78, 66,227,134,224, 87,127,229, 87,104,154,138,179,227, 51,202,162,222,148,242, -190,232, 10,127,125,183,238,183,253, 52,194,121, 62,159,207,121,245,254,171,188,241,198,235, 28,159, 28,243,222,123,239, 17, 39, - 41,119,238,222, 67,199, 9,206, 88, 62,250,240,125,238,223,189,205,179, 39,159, 34,241, 72, 9,113,151, 49,160,187, 8, 95,221, -133, 6, 73, 33,215,177,185,215, 98,168,251, 97,199,117,193, 47,221, 74, 39,164,169, 69, 93, 12,117,119,139,212, 70,121,209,173, -129, 66,147, 26,194,123,162,245,215, 69,248,188,147,105,246,134, 75,108,197, 97,111, 36,154, 27,249,177,232,220,248, 62,191,168, - 35, 62,103, 42, 22, 47,156,212, 95,154,205,126,237, 49,174, 55, 4,159, 87,208, 95,148,204,246, 69,253,199,159,191,125,238,253, -187, 14, 41, 76,234,157,182,176,211,169,247,250, 66,119,109, 82, 15, 68,185,245,212, 30,105, 84, 96,189, 5,249,131, 7,235,130, - 55,112, 85, 20, 68, 66,160,165,164,105, 29,151,243,101, 64, 1, 76,195,213,229, 57,243,217, 28, 65, 8,115,240,206, 34,165,224, -240, 96,159,253,253, 61, 18, 45,144,206, 16, 73,207,225,193, 1, 73, 28,209, 54, 5,203,233, 41,237,162,102,246,108,206,236,252, -140, 40,242,164,131,152, 87,223,120, 72,146,142, 80,164, 84,133, 96,119,255, 46,103,151, 11,108,199,236, 21,235,247,132,223,172, - 22, 94,128,166,108, 19,229,182,187,192,207, 48,223, 63, 51,169,111,138,250,139, 16,152,107, 25,235, 66,210,191, 85,186, 69,230, -250, 13,187, 22, 43,116, 82, 15,239, 5, 13,129,165,172, 35,201,237, 91,183,185,119,247, 46, 7,187, 59,248,170, 96,122,121,201, -151,222,122,141,243,139, 83,150,203, 25, 59,227, 17,207, 30, 63,230, 7,223,255,128, 73,158,114,121, 81, 48,119,158,101,107,185, - 61, 25,177, 35, 66, 44,227,194, 91,158, 85, 5, 53,158, 2,135,118,130,129, 8, 19, 82,229, 12, 75, 25,118,177,123,163, 36, 4, - 67, 88,137,215, 9,101, 91,115,176, 59, 64, 69,142,105,211,208, 74, 77, 89,148,188,122,123,128,162,162,105, 60, 79,174, 60,143, -206, 23,236,238,238,177, 51,204, 48,197, 18,219,212,236,236, 12,145, 2, 92, 99,200,148,197,213, 45, 17,144,197,154,129,214,200, -198,210,122,199,180,178, 52,181,101,152, 27,226,216,115,208, 93, 15,198, 22,212,109,203,254,225, 33,217, 96, 4, 82,177, 90, 21, - 28, 28,222,160,172,202,206, 44,195,114,243,230, 77,100,164,130,110, 28, 75, 89, 44,152,207, 46, 48,166, 32, 75, 83,198,249, 16, - 87,149,196,206,242,224,112,200,157,253,148,166,168, 66, 3,235,187,169,214,123, 68, 99, 56, 28, 37,236, 12,243,144,124, 38, 20, -198,194,116, 54, 95,239,148, 17,130,209,100, 12,198, 82, 44, 43,234,214,226,154, 10,211, 52, 76, 11,203,222,209, 3,188,247,232, - 36, 38,203, 82,134,131, 24,211, 84, 8, 41, 89,150, 37,182,105,209,217,152,211,203, 25,255,238, 15,126,143,221, 44, 34, 85, 16, - 71, 97,178,141,244,102, 50, 15, 83,247,182, 55,194, 70, 18,182,109,244, 18,174,101, 7, 88,132, 0,165, 4,206, 25,116,164, 73, - 98,189, 81,171, 16,138,190,236,208, 67,213,253, 28,191, 38,198,234,112,232,198,122, 93,124,251,247,125, 20,233,176, 43,215, 93, - 58, 96, 28,119, 83,122, 70,156,164, 68,113,130,142, 99, 84, 28,135,162,173, 20, 68,170,243,183,149, 8,185, 33,177, 6, 72, 95, -130, 80,120,165,130,132, 76,134, 70,188, 94,149,172,150, 5,113,154, 97,157, 32, 78, 82,148, 14,150,161,193, 56, 5,118,198,187, -228,105,196,197,229, 21, 79, 78,206,112, 2, 94,127,120,159,135, 15,142,120,251,205, 7,164,163,125, 30, 29, 79, 57,155, 87,236, - 31,221, 33,207, 7, 88,235, 88,174, 10,132,240,148,197,130,225,238, 33,231,231,167,220,221, 31,177, 63, 80,100,113,130,208, 41, - 77,211,226,156,165, 44, 75,234,170,194,180,109, 72, 25, 83,225, 57, 22, 34, 88, 60,103,105,194, 32, 31, 16,199,233, 90,119, 63, -155, 87,184,214,225,173,231,211,199, 79, 56,188,113, 64,158,198,220,186,113,192,108,122,134,214, 26,135, 64, 71, 26,215,182,100, -113,204, 32,205,185,115,243, 6,171,178,226,242,106, 22,194,182,214,147,224,231, 24,169,116,235, 79,107, 29,182,177,252,210, 47, -125,147,123,119,239,242,143,255,241,127,197,227, 39, 79,104,109,144, 26,126,248,254,123,124,250,241,135,129,220,154,166,156,157, - 30,163, 4,221,173,111, 28,187, 92,129, 62,182,204,119,241,173,136,107,131, 71, 95,228, 69,119, 93,134, 34,222,165, 8,110,173, -140, 34,213,249, 37,200, 77,193,142,148, 90,127,236,111,235,244, 65, 41,215,206,137, 61,178,173,186,226,223,223,119,219, 39, 37, - 92,143, 42,192,239,189,124,233, 51,112,195,231, 26,202,188,124, 82, 23, 47, 41, 22,215, 27,134,173,136, 68,196,181,207,229, 22, -100,177,109,108, 35, 94,246, 74,110,237,180,253,103,194, 98,182, 37,121,159,229,196, 93,255,188,123,209,214,147,122, 7,193,111, - 49,224,133, 8, 19, 99,172, 35,226, 56, 10,209,125, 81, 68,172,187, 3,165, 79,172,179,126,205,126,188,188, 56,167, 44,150, 44, -230, 11,180,210, 84,181, 9, 69,202, 54, 20,197,138, 52,137,137,227, 12, 80,212,109, 77, 26, 71, 8, 23, 12, 70,166, 87, 51,242, -124,194,193,193, 29, 6,195, 93,178, 60, 99,181,152,130,169,176,165,163, 89, 90,246,246,115,118,246,115,110,220, 62, 34,206,134, - 76, 23, 13,171,210, 16,235, 9,163,201, 30, 23,151, 23,212,214,224,187,245,128, 92, 79,210,221,115, 45,215,244, 1,132,112,168, -126, 2,223, 58,244,228,182,124,177,187, 48,251, 11, 56, 82,146, 40,146,221, 84, 37,187,238, 52, 28, 56,253,243, 19, 58, 87, 21, - 2, 19,186,207,163,238, 66,143,162, 64, 10, 12, 31,101,184,111,164,214, 23,175,232,166, 72, 39,100, 96,147,118, 77,216,209,225, - 1, 59,195,140,119,222,126,133,111,127,235,155,156, 95,156,115,117,117, 65, 42, 36,171,233,156,239,253,232,103,204, 86, 13,198, -194,121,109, 41, 61,164, 42, 34,106, 26, 82, 28,214,195,204, 25,140,135, 88, 40,108,119,144, 87,206, 82,226,176, 74, 96,100,176, -237, 84,214, 49, 25, 36,204,231, 21,249,120,204,233, 98,137,141, 64,197, 96,156, 97, 94, 24, 82, 5, 89,234,201, 82,141,109, 29, -138,136,162,114,124,116,124,197,194, 88,238, 62,184, 75,170, 35, 46, 79, 47,144,214,178, 59,208,228, 90, 18,203, 62, 68, 36, 2, - 4,113, 12, 6, 71,150, 69, 28,238, 13, 2, 51, 89,133,169,106, 50,158,112,227,198, 1,121, 62,160,110, 45,187,251, 7,160, 20, -141, 13,146,156, 36,209,232, 88,177,179, 51,217,188,158, 2,218,170,164,173, 42,188, 51, 84,229, 42, 28, 20,206,225,218,154,195, - 73,198,171,119, 14,130, 55,248,172, 64,116,196,159,200,123, 18,224,238,254,144,195, 73,206,206, 56, 39,142,130,157,238,104, 50, -225,209, 39,143,209,157,255,126, 20,135,169,166,173, 91,102,179, 5, 77,221, 2,142,162, 44,153, 47, 91,226,124,130,140, 99,156, - 53, 12, 7, 41,216,150, 88, 43, 90,235,168,234, 22,103, 44, 69,235,249,111,254,233,255,155,167, 79,159,113,184,191,199,100,144, -161, 35,209, 29,134,106, 51,137,116,236,118,213, 49,221,233,246,229,219,230, 71,253,199,222, 9, 81, 42, 21,118,237, 61,217, 78, -200,245,185, 19,206,177,238, 49,214, 14,112,161,153,149, 29,116, 31,162,124, 59,104, 95,116,166, 49, 82, 33,186, 41, 93, 70, 49, - 82,107, 84,172, 81, 81, 68,148,164, 1,170,215,157,116, 45,214,235,162, 30, 88,248,155,223,161,255,253, 69,231, 39, 47,149,134, - 40, 56, 80,246, 97, 34,229, 98,133,107,131, 94,188,172, 27,140, 11,146,168,166,173,241, 30,110,221,190, 19, 12,146,202, 5,103, - 23,151,156, 95,205,104, 77,195,104,148,144,196, 30,173, 21, 98,116,131, 21, 41,232, 1,113,146,161, 35, 69,211,212,196,113,198, -124,177, 36,141,195, 20, 94,172, 10,114, 45, 57, 26,165,184,182, 66,165, 89,224,176, 36,193,124,198, 57, 31, 8,141,214, 6,153, - 91,107,137,227, 56, 68,133, 70,225, 26,150, 74,145,198, 9,177,214, 32, 53,117, 93, 81,215, 13, 87, 23,151,216,186,100,111,111, - 72,150,107,170,186,130, 14,137,144,162, 95,117,165,188,250,234, 43,224, 28,183,143,110, 16, 9,193,201,233, 69,144,120,193,117, -247, 44,191, 5,116, 75,209, 7,135, 2,112,121,121,197,235, 15,223,224,173, 55,222,226,252,228,132,147,167,159,208,150,115, 78, -158,126,196,197,217, 41,121,150, 33,145,236,238,238, 82, 22, 5, 69, 89,116,158, 7, 91,245,198,187,245,227,173, 37,189,157,132, - 45, 24,214,116, 65, 49, 93,100,110,104, 2,194,153, 26,154,196,222,210,216,175,207,216,222,222,184,175,113,242,154, 33,219, 54, -200,212,203,132,251,141,169,188,118,102,198,145, 10,105,109,113, 24, 50,251,226,190,222,169, 63,175, 37, 95,135,140,138,151, 77, -235, 98,187, 18,188,116,127,254, 34,173,185, 20, 34,100, 20,119,255,109,191,193,250,212,162,205,147,202,102, 79,225,251, 2,190, -185,255,250,141,233,183,229, 87,207,181, 1, 66, 92, 43,238,222,191,200, 55, 47,176, 25,233,204, 2,174, 21,245,206,246,207, 90, - 11,248, 32,105,211,161,219,143, 34,133,142,163,174,112, 69,244,215,193,134, 61,105,169,170,130,233,236,146,201,120,200,112, 48, -228,252,244,138,186, 49,136, 72, 34, 53,196, 73,130, 49,193, 53, 46,203, 50, 34,105, 49,117, 65, 44, 61, 69, 93,144, 15, 71,140, -247, 14,113, 2,148,114, 20,203,115,134, 3, 65, 85, 20, 88, 11, 71,183,111, 32,164, 96, 85,150, 60, 61, 62, 35,202, 71,196,131, - 9,141,113, 36,137,160, 46, 23, 20,101,129, 23,221, 68,176,214,138,139,117, 71,170,164, 32,146,116, 30,197, 93,167, 41, 67,214, -111,223, 45,246,176,144,142,228, 86,193, 86, 36,177, 34,214,253, 45,132,170, 36,113,184,197,177,234, 62, 87, 36, 90,145,232,168, -187, 41,226, 72,174, 63,198, 58, 60, 86, 28, 73,146, 88,145,198,225,190,186,235,100,131,219,156,193, 89,211,173, 17,100, 96,224, -182, 37,135,187, 35, 92, 85,241,225, 7, 31, 48, 26,231,232,170,229, 39,223,255, 25,159,206,150, 44,188, 96, 86, 58,206,157, 39, -209, 26,107, 77,152,138, 71, 99,170,142,153, 90,122,207,220, 57,140,135,214,123,172, 12,200,128,235, 94, 71, 39,160,109, 29,177, - 15,214,176,101,211, 48,216, 25,241,233,197,140,189,221, 29,110,238, 31,176,147,165, 76,167, 43, 22,133, 99,188,187,199, 56, 83, -228, 84,104,219, 50,173, 28,159, 44, 42,126,118,114,133, 74, 99, 94,123,112, 7,105, 61,173,105, 88, 20, 53, 66, 10, 98, 21,225, - 45,104,237,176,190,225,246,173,140, 84,123, 60, 45,249, 40,163,168, 13, 66, 4, 19, 22,239, 21, 89,150,113,124,122, 70,213, 90, - 80, 17,135, 71, 71,196,113,140, 20,158,178, 44,153, 77,167, 68,145,196, 25,131,244, 14, 83,215, 72, 15,137, 78,112, 62,104,140, -145, 48,222,233,246,162, 82, 49,189, 90, 48,208,146,221, 44,129,178, 97,172, 4,123,105,196,173,131, 1,195, 92, 17,107,201, 48, -209, 88,111, 73,243,140,167,199,167, 88, 75, 72,145,114, 45,121,170,209, 42, 97,185,172, 16,222, 83,155,150,162,113, 24,227, 89, - 22, 21,147,221, 61,202,213,156,209, 32,195,152, 22, 47,228, 90, 91,123, 57,157,242,255,252,127,253, 46,171,218, 80, 89,137,245, -130, 27,251,187, 12, 34, 31,228,116, 34, 92, 7,107,219,213,174,217, 19,114, 35,169, 92, 23,248, 45,203, 85,223,249,185, 43,165, -214, 73, 91,170,135,209, 59,243,154, 62, 21,173,127, 12,223,125, 45, 76,223,138, 40, 14,136,156, 95, 15, 34,114,227,233,160, 58, -136, 92, 42,100,191,111,143,162,181, 78, 94, 40,137,212,186,147,182,133, 9,221,211, 57,206,173, 35,194,131, 43,159, 16, 34,152, - 47, 65, 40,142, 82,133,221,186,144,204, 47, 46, 73,100, 20,224,238, 44, 70, 70,129,245,223, 90,195,141,155, 71, 65,251,220, 54, -120,231, 56, 59, 95,112,113,185,160, 44, 86, 33,154, 89, 0, 34,230, 95,253,233,123, 28,188,242, 38, 86, 68,140,135, 3, 34, 1, - 90, 41, 80,193, 94, 56,236,214,106, 84, 28, 51,202,114, 30,222,220, 97,156, 41,166,171,130, 85,177, 98, 50,158, 80, 85, 53,174, -147,178, 54, 77, 75, 89,213, 24,227,184,186,152, 81,148, 53, 85,211, 6,149,141, 16,224, 2, 65,211,135, 49, 19,165, 35,218,178, - 98,126,113,206,238,206,128,108,156,112,113, 53, 39, 77, 6, 8,111,209,202,179,183,183, 67,164, 53,123,123,187,236,140,134, 76, -180,228,230,254, 14,187,163, 17, 79,159,157, 81, 54, 77,112,170,148, 93,202,221, 26,129,239,124, 53,182,248,116, 94, 8, 86,203, -130, 95,255,214,175,241,218,253,251,252,232,207,190,195, 36,245,236, 14,194,117, 80,150, 21, 81, 20,147,166, 35,134,147, 29, 78, - 78, 78,240,180,235, 97,213,227,240,210,111,209,243,186,167,200,155, 80,212,157,199, 88,191, 14,200,146,235, 60,130,205,138,104, -157, 83,208, 87,154,126, 5,185,110, 60,187,234,191,101, 71, 46,186,161,170, 91,130,118,215, 93, 55, 52,169,240, 49,142,194, 64, - 25,175,207,207,184, 43,234,234,122, 81,255,204,199,159, 59,125, 63,183,103,127, 41, 41,238, 5,147,252,207,209,165,191, 92, 30, -247,115,224,247,191,128,244,173,103, 45,250, 32, 8,188, 54,169,183,207,105, 9,251, 8,197, 48,169,235,245,238, 68,119,147,195, - 6,210, 15,146, 3,231, 28,117, 93, 50,157, 94, 48,200, 19,154,186,101, 85, 84,136, 40, 66,167, 49,168, 16,242, 96, 93, 48,231, - 79, 18, 77,154, 68,184,182, 13, 5, 51, 5, 29,123,246,246, 70,236,239,143,200, 50,197,229,217, 41,229,170, 64,160,136, 68,194, -251,239, 62,101,185,108,152, 45,174,208,131,132,201,222, 93,156,159,224,172, 65, 43,193,116,122, 73, 89,215, 88,161,240, 94,110, -144,144,190,179, 84, 98,189,227, 81, 81,208,211,134,207,229, 90, 54,164,186, 29, 78, 20, 5,163, 29, 29, 73,146, 14,173,136,117, -180, 70, 46,250,206,241, 90, 97,215, 42, 88,147,198, 58, 20,244,245,247,108, 16,143,117, 83,208, 55, 0,235, 70, 73, 5, 56, 12, - 66,214, 61, 96,141, 33,141, 53,194,135,136,213,178, 40,104,138, 42,168, 4,134, 41, 63,250,211, 63,229,114,186,196,196,146,121, - 27,214, 32, 18, 23,118,102,137, 98,110, 44,211,170,102,110, 12,165,247,180,157,126, 95, 69, 33,190,210,109,173,107,156,216,200, - 80, 76,107,208, 82, 97,140, 37,213, 41,177,212, 60, 59,189, 32, 79,115,226, 40,102,144,101,120,111, 40,150, 75,238,221,190,137, - 19, 37,113,214,144,226, 17, 6, 22,181,227,241, 85,201, 39,151, 51, 38,135,123, 28, 29,236,144, 38, 14,233, 13,174, 14,197,183, -169, 91,118,247, 82,100,162,185,156,149, 44, 11,195,124,209,176, 90,121,148,116,156,157, 94, 49,155,206,112, 82,112,239,149, 87, -137,147, 60, 24,191,212, 77,103,218, 35,193,193,217,217, 57,251,187,251,129, 8, 38,163, 53,161,203,121,143, 84,221,138, 68, 10, -146, 52,197, 58, 71, 81, 20, 20,101,133,146, 14,165,130, 10, 97,255, 96,194,141,131, 17,194,215,196,202,146, 37, 10,233, 3,188, -217, 24, 67,150, 5, 27,226, 40, 82,184, 62,235,221,121,156, 13,111,211,197, 98, 30, 10, 25, 17,173,151,140, 38, 59,140,242,156, - 60, 75,104,219, 38, 52,205,206,113,114,122,198, 7,159, 60,230,227,103, 39,172, 42,139, 84, 17,139,233, 37,119,143,246,152,228, - 9,186, 75,176,146, 82,109,246,234, 29,105, 78, 72,113, 77,122,219, 23,253,254,125,216,195,242,189,131,228,134,104, 23, 2, 52, -100,151,158,230, 1,209,105,201, 3,209,174,103,208,247,198, 52,172,237, 93,251,251,171,222,221, 78,200,141,193,205,218,159, 62, -236,224,133,220,216,191, 34,229,122, 24, 90,219, 41, 75,177, 97, 65,119, 13, 10,170,187,111, 71,234,107,234,154,229,213,140, 44, - 73, 41,203,138, 36, 77, 3, 91, 95, 74,210, 36, 99,114,112,192,167, 31, 61,194,182, 22,124,196, 98, 97,120,244,201, 51, 30,125, -252, 9,109, 85,161,188,228,211,143, 79,248,238,159,127,196,215,126,233, 87,208,113, 74, 93,148, 12, 6, 25,170,115, 37, 59,187, -184,100, 52, 24,144,166,225, 53,204, 99, 69, 84, 94, 33, 77, 73,182,179,195,222,222, 62,109,211, 82,108, 77,236, 61,175, 96,144, - 15, 40,203,154,198, 24,156,247, 76,167, 83, 22,139, 69,231,215,177,226,244,114,198,162,168,152, 47, 11,148,210, 44,231, 75,210, - 44,231,147, 39, 1,233,201,146,152, 65, 26, 35,156,101, 50, 26,144,101, 57,249, 96,200,238,206,132,157, 76, 48, 76, 20,187,227, - 33, 7,251, 59, 60,121,118,194,162,108,240,196, 93,193, 19,235, 90, 30, 86,139,190, 27, 70,195, 0,115,122,114,202,195, 87, 95, -229,205,215, 31, 50,189, 60,229,244,228, 41, 89,170,137,162, 4,169, 52, 77,109,209, 58,230,224, 96,159,229, 98, 70, 89,172,214, -138,134,126, 54,236,253, 51,172,237, 76,102,140,233, 36,124,110, 29,205,218, 79,224, 61,129,178, 47,216,155, 85, 99,255,120,242, -185,113,124, 11,250, 94,175, 23, 58,187,224,174,217,236,149, 74, 97, 66,239,208,225,126, 50,143, 59,219,228,174, 6, 69, 74,110, - 36,109,127, 89,233,216,231, 69,175,254, 34,137,108,219,240,254, 95, 36, 22,213,255,130,236,247, 95,188, 29,248,249,125,198,243, - 13, 77,150,101, 72, 41, 41,203, 37,163,193, 14, 96,169,170,146,209, 48, 9,161, 39, 70,160,181,166,105, 27, 90,211, 34,243, 12, -161, 99,116,156, 98,205,156, 68, 75,166,151,207, 88, 46,207, 57,216,223, 71,170,140,182, 81, 20,171, 25,153, 16,220,186,243, 42, -109,179, 36, 25,120,222,120,243, 75,156, 79, 45,229,170,232,118, 61,253,133, 33,187,195,214,227, 4,215,248, 13, 82,244,126,217, -161, 11,220,112,144,196,218, 34,215,251,206, 86, 87,136, 64, 58,234, 67, 44, 58,153,154,220, 34,126,244, 23,241,122, 47, 37,122, -107,206,254,107,106,253,184, 27, 22,252, 6,218,239,191,207, 57,143, 49,158, 6,131,244, 62,216, 71,122, 79, 26, 37,220, 60, 60, -100, 57,187, 34,114, 57,167,207, 30,243,224,214,109,138,249, 21, 63,248,209,247,241,222,176,127, 52,100, 49,109,168,219, 26, 33, - 36,147, 46,246,178,150,142, 10, 48,210,227,145,108, 98,223,183,152,172, 91,116,194,126, 81,100,133,167,192,227, 90, 67,174, 34, -218,233,130,131,253, 67, 46,139, 21, 31, 60, 57, 97,127,144,115,255,246, 77,134,121, 66, 49,191,224,170,178, 12, 70,187,180,118, -197,157,125,193, 32, 83,184, 83,195,167, 21,156,175, 12,255,250,199,143,120,117, 55,227,245,163, 29, 84,234,137, 92,137,173, 44, -137, 4, 83,183,148,117, 75, 28,199, 12, 82, 69,154,198, 12, 6, 57, 66, 73,210, 60, 99, 48, 24, 98,132,101,182, 88,160, 84, 72, -120, 18, 30,164, 8,123, 75, 33, 60,105,154,208, 84,213,186,144, 69, 58, 66,106, 21,156, 7,173, 9,154,106,225, 89, 44,230,157, -209,143, 38,203, 98,138,217, 28, 33, 60,123,147, 28,169, 21, 10,139,136, 36,117, 89, 82, 44, 83,166, 40,188,240, 52,214, 48, 30, -237, 83, 87, 37,105, 18, 81,139, 64,164, 44,138,146, 36,202,104,186, 16, 24,215, 57,113, 41, 9, 90, 4,217,152, 86,193, 17, 80, -197,154,162, 88,241,241,147,167,252,249,207, 62,226,228, 98, 78, 58,156,160, 59, 88,251,211,147, 51,110,238,189,134,246,144, 2, -198, 89, 4, 10,213, 21,112,107,109,135, 50,200, 46, 87, 32, 88,186,186,174, 97,145, 34,234, 98, 82, 85,183, 46,114, 93,184, 87, - 55, 89,119,205, 66,104,230, 85,215, 16,136,117,178,155,186, 70, 80,242, 91,228,225,235, 7, 85, 47, 73,235,215, 3,235,207,165, -236, 52,240, 93,172,106,111,155,172,228, 90,246, 41,232,201,126, 97, 42,239,211, 12, 69,159,207,238,109,112,153, 20, 2,157,198, -104, 99,104,170, 6,128,166,110,185,115,255, 62,197,108,129,148, 1, 97, 88,213, 13,195,241, 8,173, 35, 30,127,114,204,222,110, -198, 56, 77,249,233, 15,223, 39,209, 57,182,110, 24,236,236, 83, 10,168,234, 10,111, 13,168,208,136, 15, 70, 67,202,114,202, 96, -178, 75, 93, 87,232,189, 4,239, 13,151,151,151, 72,169, 24, 15, 71,236,239,239,119, 41,130,102, 61, 16,149,101,201,238,222, 30, - 23, 87,151, 24,235, 80, 81,140, 20, 4,115,159,198,146,101, 41,205,249, 21,198, 89, 26,107, 65, 68,252,244,167, 31, 49,222, 31, -243,250, 27,183,144,190,166,105, 42, 90, 87, 51,159,207,145, 82,179,183,223, 32, 5, 12, 6, 49,119,212, 4,173, 32,146,142, 72, -252, 38,255,247,127,249,239,248,240,116, 70,233,195,107, 29, 38, 89,123,109,106,119, 29,161,206, 11,207,127,251, 79,255, 9, 95, -255,202,151,248,229, 95,253, 53, 62,120,239,199, 20,149, 97, 55, 19,172, 86, 75,146, 76,208, 52, 21, 85, 85,240,240,225, 67, 78, - 79,159,134,148, 60,194,115,239,187, 29,125,112,147, 13,200,109, 47, 35,179,107, 73, 89, 71,196, 92,251, 34,116,106, 30, 28,194, -201,205,235,127, 77,250,214,101, 97,172,125, 59,122,172,161, 27, 42,122,214,123,247,239,174,141, 92,123, 27,244, 10, 16,221, 25, -113, 73,217, 5, 16,123,241,217, 73,253,250, 78, 93,188,208, 6,246, 69, 12,118, 33, 94,126,223, 23,147,240, 94,190,123,223,232, -247, 94,180,207,223,182,178,245, 47, 44,234, 47,139,125,221,206, 63,126, 81, 59,176,113,149,219, 4,186, 24,227,104,140,237,118, -234,225, 77, 25, 69, 17, 73, 28,135, 73,189,155, 54,183, 39,117, 16,215, 67, 98,188,229,226,226, 28,103,234, 46,240, 33,194, 9, - 73, 54, 24,210, 90,139, 55,130,229,170,198, 58, 72,211,132,189,189, 29,156,113,204,103, 43,156, 49, 28, 30,222,232, 88,198, 57, -120,197,173,155,247,185,184, 88, 50,159,150,124,245, 43, 95,230,232,104,143, 56, 22, 60,120,240, 10,251,251,183,168,154,208,186, - 90, 23,236, 70,151,139, 25,243,213, 2,219, 17,206,100,207,210, 84,226, 58,251,178,131,119, 2,228, 30, 72,184, 27,248,189,251, - 92, 9,226, 72,160, 35,129,238,160,248, 13,116,174, 58, 72, 94, 6, 70,171,222,124,174,181, 90,195,245,122,107,103,174, 35,217, -133,147,116, 80,126, 47, 19,140, 58,146, 72, 96,234,117,217,201, 65, 26,118,184,187,203,193,206,152,213,108, 74, 91,149,232, 72, - 82, 21, 43,206,159, 62,229,241,167, 39,120, 37,152,215,150,171, 69, 67,227, 33, 79, 83,110,103, 9, 30, 75,233, 60,133, 3, 35, - 4,206, 75, 4,221,129, 44,197, 90,110,178, 33,116,208, 65,124, 42,120, 62, 11,104,133,160,116, 14, 39, 5,141,115, 28,221,187, -205,213,124, 78, 89, 86,228,131, 12,180, 96, 48,158,112,113, 53,103,144, 12, 24, 36, 3, 80, 13,135, 7, 67, 82, 4,170,134,178, - 53, 84, 30, 46, 11,203,179,171, 2,161,130, 4, 74,105,129, 23, 30,231, 64, 43,141,173, 90, 48, 22,225, 61, 69,177,164,172, 86, - 88,223,178,172, 22, 44, 86, 11,156,179,116, 52, 66,164,240, 44,230, 87,148,229, 2,227, 90,140,173, 81,194,227,109,141,146,142, -178, 92,208, 52,101,240, 63,183,129,113,108,141, 9, 28,146, 78, 58,228,157, 69, 11, 21, 98, 67,141,167, 92, 21,172,230, 43,138, -101,133,105, 44,137,214,100,121, 70,156, 68,221,110, 47,102,181, 12,147,141,245,134, 52, 77, 72,147, 44, 76, 52, 54,120,233,123, - 33, 25, 12, 39,120, 20, 89,158,133,251, 58, 71, 89,213, 56, 20,211,101,193,191,249,131, 63,228,124, 94,224,164, 38, 78, 51,170, -186, 66, 71, 18,211,212,220, 60,186, 73,172, 4,105, 28, 93, 35, 94,110, 27,205, 8, 37,215, 40,139,144, 98, 61,197,247,178,164, -245, 68, 45, 55,251,240, 72,235,110, 39,222, 77,227, 29, 74, 21,166,172,160,113,143,186,199, 9,239,145,237,159,191, 77,198,219, -178,216, 22, 98, 75,108, 21,236,147, 67, 40,226,150, 4, 84,201,181, 33,231, 38,178,186,155,137,122,187, 90,252, 90, 85, 2, 96, -234,134,166,170,104,155, 6,103, 60, 85, 85,225,188, 39, 31, 14, 24, 76,118,184, 60, 63, 91,159,105, 42, 82,196,105,198,159,124, -255,207,105, 91,195, 95,255, 15,126,137,193, 32, 67,107,197,178,178,188,242,198,219,236,221, 56, 2, 33,104,154,154,209,112,208, -253, 30,125,184,146, 39,138, 19, 18, 5, 95,121,245,136,221, 97, 66, 60,154, 48, 26,141, 72,146, 4,231,108,176,135,117,225,156, - 76,210,132, 56, 78,214, 62, 2,190,243, 21,216,158, 32,173,247, 68, 58,102,190, 92,118,215, 85,201,147,199, 79,121,245,213,215, -217,217, 25, 50, 26,196,216,182, 34, 86,132,189,190,142,137,227, 20,157, 36,196, 89, 26,166, 82, 21, 38,246, 97, 18,115, 99, 50, -102,113,126,193,229,114,137, 17, 33,208,197,111,177,224,221, 86, 38, 59, 8,230,243, 25,247,239,223,227,245,135,175,114,113,118, -198,114,190,192, 54, 53,131, 65,142,247,130, 56, 13,202,132,253,131, 3,158, 61, 59,166,174,106,132,183, 93, 77,112,157,227, 92, -128,219,173,181, 97,213,177,150,150,109,138,180,184,230,200, 41,186,179, 51, 12, 76,194,135, 72,171,237,198,111,123, 15,188,217, -177,247,141,227,117,226,151,128,117, 96, 81,212, 21,244,168,147, 83,171,206,173,175,103,195,191, 20,126,223, 38,202,189, 28, 78, -231, 11, 23,234,107, 63,227,231,232,223,123,226,202,139,153,245, 98, 93, 52, 95, 56,169, 11,126,174, 77,236,243, 83,123,111, 14, -240, 60, 81,110,147,212,102, 2,251,189, 51,172,233,119,234,113,172,215, 58,245,235, 69,253,122,140,163,119,142,166, 46, 40, 87, - 11, 76,219,146,164, 3,134,147, 93, 90, 15,117, 99,104,107,240,196,164,217,136,180,115,153, 59,216, 59,192, 26, 65,156, 12,184, -121,251, 30, 73, 58,164, 42, 27,210, 56, 67, 71, 49, 31,124,240, 33, 69, 81,243,202, 43,247, 25,141, 19,238,222, 61, 34, 77, 70, -193, 70,180, 40, 64,118, 46,114,109,205,124,126,197,213,124,134,239, 73, 44,162, 47,210,172, 25,158, 61,219,178,255,183,146,116, - 23,230,214,126, 72,110,164, 24,129,165,185,197,242,236, 97, 71,169, 66,177, 87, 91,123,119,181,217,191, 71, 29, 99, 55,138,250, -239,103, 35,249, 80, 1,242,143,162,240,245,190,251, 12, 94,202,208,122,193,100, 52, 65, 1,139,203, 11,202,229,140, 44,137,240, -166,229,236,228, 41,243,203, 41,139, 85,201, 89,105, 56, 89, 90,148, 23, 40, 31,138, 94,166, 34,166, 85, 67,131,192, 0,134,158, -215,225,215, 74,128,151,129, 48,253,212,238, 36, 88,225,177,128,145,176,108,106,156, 51, 28,238, 12,105,203,138,229,114, 69,150, -107,118,247,119, 40,202, 18, 97, 20,203,105,197,248,112,130,243, 5, 67,229, 25, 9, 9,141,193,120,207,194, 43, 26, 39,185, 90, -213, 76,203, 6,226, 24,149, 38,120, 25, 19,197, 67,172,241, 44, 22, 13, 77,109, 2, 59, 91,121, 60, 6, 99, 27,164, 80, 52, 69, - 77,177, 88,177,156,205, 40,150, 11,218,182, 10, 50, 73, 83,211, 26,131,242, 30, 83,215, 44,103, 51,202,213,138,186, 42,105,170, -154,213, 98,133, 20, 18, 37,161,173,235, 16,207,187, 92,134,130,107, 28,179, 89, 69, 85, 25,146, 36,172, 65,156,181, 68,145,194, -122, 24,140,242,192,187,136, 4, 82, 40,164,140,152,207,103, 24,103,136, 99,205,100,180, 67, 83, 7, 57,157,117, 6,144, 36,201, - 0,165,131,212, 75, 69, 33, 94,178,108, 13,151,203,130,127,252,255,248, 39, 44,107,131,210,113, 96, 97, 75, 73,146,164,120,103, -105,155, 22,132,228,254,237, 27,196,194, 6,194,153,138,214, 41,107,125,184,139,236,174,195, 0, 73,234, 77, 52,235, 11,224,119, -239,253,250,190, 98,171,240,211,187,187,173,253, 51,228,150,118, 93,117, 59,211, 45,232,116, 27, 70,237, 11,122, 47, 57,146, 91, - 60,159,109,134,253, 26,126, 15,197,194, 91, 27,110,158,181,195,220, 6,249,220, 56, 85, 90,235, 16,214, 17, 9,137, 49, 14, 25, -105,178,209,136, 56,205, 72,178, 12,235, 28, 85, 29,144,145,193, 48,200, 11,223,122,227, 21,254,202,111,188,195, 91,111, 61,228, -246,157,219, 32, 20,139,162, 97,184,179,199,104,111,159,214, 89,134,131, 1,182,109,113,214, 19,199, 1, 77,212, 90, 32, 34,141, -111, 43,190,250,224, 6, 90, 88,230,125, 70,120, 29,162, 64, 71,227, 17,163,221, 29,146, 52, 13, 67,137,119, 84,117, 69,221, 54, - 33,202,119, 48, 8, 73,109, 90, 17, 71, 81, 72, 32,140, 53, 66,107,230,211, 25,171,249,138,170, 44,113,214,114,116,107,143, 36, - 17,100,113,216, 13,143, 6,121,119,142, 10,246, 15,143,152, 21, 21,147,157, 29,164, 15,182,193,121, 18, 49, 78, 52, 55, 70, 49, -103,103, 23, 76, 87, 21,109,103,142,217, 35,146,193, 90, 54,164, 30,122, 66, 19, 57,159,205,248, 43,191,254,235,236, 78,118,248, -211, 63,253, 83, 38,195,148, 52,209, 68,145, 6, 33, 25, 12,135,161, 57,145,154,213, 98,138, 86, 46,156,137, 91,210, 50, 37,195, -234,210,173,147, 43, 55,254, 29,120,223, 69, 19, 75, 18,173, 73,147,152, 44, 13,171,133, 36,214,235, 53,101, 18,199,235,218, 17, -190,166,137,147, 40,220, 71,107, 98, 29,135, 33, 81,111,166,112,181,182,237,238,206,234,109,191,134,238, 28, 70,108,154, 72,245, -181, 55,238,252,163,237,240,142,235,201,107,226,223, 91, 81,255,108,179,240,121,137,108,254, 11,233,207,191,232,164,254, 69, 18, -224,124,231, 63, 78, 47,105,187, 86,212,131,164,205,190,180,168,235,206,124, 70,109,180,218,126, 99,161, 26, 32,170, 37,197,114, -134, 53,142,170, 6, 71, 20,220,179,100,140,105, 5,117, 11, 42,210, 24,107,217,219,221, 99,152,143, 80, 50,165, 50, 30, 84,140, -115, 1, 42, 30,142,114,210, 76,210,154, 5, 71, 55, 15,201,146, 9,210, 43, 38,195, 93, 46,206, 47,130, 53,104,101,184,113,116, -135,203,217, 28,124,203,114,113,197,170, 44,176,221, 14, 74,138,142, 1,223, 65,221,253,197, 43,183, 58, 75,185, 38,110,200, 13, - 99,179, 99, 13,175,239,187, 53,201, 92, 43,250, 91, 59,250,232, 57,137,135,236, 80,129,117,243,176, 70, 11,250,199, 13, 69,189, -135,233,251, 55, 77,211, 52,164,249, 14,222, 56,154, 98,197,163,247,127,198,238,100,200,199, 31,189,207,217,233, 51,234,170,228, -228,233, 5,113, 62,228,227, 69,205,210,121,134, 82,147,248,160, 64, 88, 24, 67, 37,160, 21,146,186,151, 48, 10,143, 23,238,243, -215, 70,253,250,161, 31,222,125,152, 6,113,221, 10,162,106, 72,140,225, 27,111,190, 66, 53,159, 83, 86, 37,137, 86,236,141, 39, -156,157,156, 49, 30,143,136,227,132, 97, 62, 66,120,131,181, 43, 6,169, 68, 59, 71,217, 58,140, 3,135,166,176,150,243,178,230, -108,217,114, 85, 26,158, 76, 75,150, 22, 84,150, 5, 91, 82,231,200, 19,141, 22, 2, 87,183,148,133, 5, 43, 41,151, 21,171,121, - 65, 93, 53, 33, 93, 76,202,160,117,246,130,186,172, 89, 94,206, 88,205,150, 84,203,138,170,172, 41, 87, 85, 88,205, 88,131,240, -142,213,114,201,106,185, 36, 79,147,142,223,144, 48, 24,164,120, 90,100,231,220, 37,149,196, 57, 65, 89, 89,198,147, 1, 89,170, -145,157, 36, 80,201,136,198,154,192,191,144,162, 91, 7,164,120, 92,167, 92, 80, 32, 34,116,156,162,162, 8,143,164,106, 90, 42, -227,249,189,127,247, 93,222,253,240, 99,140, 15,236, 96,211, 6, 27,214, 88,107,218,214, 32,101, 68, 81, 55, 60,188,123,196,120, - 16,161,132, 92, 23,237, 72,117,140,223, 40, 90, 75,222,122, 72,114,219,113, 46,138,116,103,204,210,249,190, 71,113, 88, 87,116, -147,105, 88, 5,109, 79,221,126, 51,145,119, 19,251,102,231, 46, 55, 72, 78,103,122,211,189, 89, 58,214,181,216,144,158,164,186, - 38,165,245,130,245,190, 21,239,176,109,139,183,174,115,167,237, 88,246, 29, 33, 88,116, 86,168,222,134, 16, 35,219,180,212,171, - 18,211, 26, 16,146,124, 56,162,237,214, 23,113,150,145,164, 9, 73,150, 81, 20, 43,218,166, 14,182,179, 29, 58,230,132, 69,233, - 4,165, 83, 22,139, 10, 84,194,193,157,187, 44,171,154, 72, 41,156, 9, 73,111, 30, 69,235, 12, 69,177, 12, 49,205, 77,201,151, -239, 29,176, 55, 74, 25,239, 31,132,248,230, 52, 93, 15, 42,171,229, 18, 41, 4,105,150,145,231, 57,249,206,152,193,104,136,177, -109,144, 85, 90,195,116,122, 21,164,111,132,220,111,169, 53, 82, 72,180, 16, 68, 66, 50,155, 94,113,231,222, 13,242,129, 38,142, - 4,206,212,104, 29,118,244,222, 11,134,163, 17,197,170, 64, 9,193,104, 50, 92,203, 13,181,130,131,157, 33,135,131,148,147,227, - 83,206, 86, 13, 70, 0, 62,234,106,150,223,210,175, 7, 40,123, 54,155,114,239,246, 93,190,250,165,175,240,244,241, 19,102,231, - 79, 72,226, 64,132, 12,205,234, 24,239, 5, 7, 7, 7, 44,103, 83, 98,229,136, 59, 2,112,239, 67, 18, 69, 29,177, 18,137, 19, -162,155,220,123,219,216,112,189,103,137, 38, 79,117,200, 74,207, 50,134, 89, 74,158,167, 12,178,148, 44, 77, 72,179,152,180, 43, -246, 89,150,132, 91,247,239, 60,217,106, 2,180, 70,119, 63, 79,178,221, 60,116,151,153,236, 24,246, 93,237,246, 93,163,105,189, - 11, 59,245, 23,249,183,255,251,180,109,253, 76, 17,126,206, 26,246,179,197,217, 93, 91, 84,191,200, 74,246,243,246,237, 47,179, -182,253,188, 44,245,107,237,196,150,117,223, 47,180, 90,127,193,186, 65,118,221,121,154, 13,136,227,140,186,108, 67, 32, 70,212, - 34,164,198, 52,142,157,201, 62, 66, 85, 44,139,146,157,221, 49, 58,138, 65,104,170,122,133, 65,242,225,199, 79, 25,164, 17, 89, -236,241,110,137, 16, 3,178,161,231,193,221, 27, 80,167, 44,151,176, 88, 8,134,163, 29, 46,167,167,212,149,229,236,120,198, 98, -118, 73,158,245, 90, 86,215,217,101,138,142, 61, 42,131,223,250,115,174, 70,235,110,164, 35,138,136, 53,138,209, 65,212,242,229, - 90,255,235, 22,194,215,205, 32,174, 57,209, 93, 11,124,225, 57,169, 97,120,147,172,191,151, 0,229,230,249, 0,131, 70,196,138, -103,143, 62,228,232, 96, 31,233, 93,103,168,114,202,124, 90,178, 90, 89,202,133,161,180, 14,131, 32,209, 9, 67, 41,185, 50, 13, - 75, 1, 13,146,198, 7,120,174,239,230,123,133, 76, 80, 62,189,120, 53,227,164, 71,248, 16, 89, 27, 9, 80, 14,146, 72,113,235, -112,143,175,191,122,155, 47,191,114,159, 27,187,187,188,127,231,136,223,253,189,239, 80, 92,206,160,108, 57,186,181,139,142,225, -241,163, 51,238,222, 60, 34, 29,239, 16, 31, 90,226,178,101,148,165,232,203,138,143,206, 27, 46,140,101,129,192, 18,216,247,171, - 38, 76,149,103,101, 75, 94, 54,220, 27, 15, 80, 74,211, 24,137,240,193,207,189,108, 91, 34, 21, 14,253,166,241, 36, 14,242, 97, - 66,150,140,113, 2,150,197,146,229,229, 12, 87, 26, 76, 21,252, 5,134,163, 8,148, 67,106,201,106,182,100,126, 57, 71,134,161, -136,170, 40,177, 86,146, 13,146, 80,124,157, 37, 73, 36,214, 58,188,133,214, 4,111,239,217,116, 65,154, 0, 62, 33,213, 80, 20, -117,128, 47,163, 64, 18, 91, 46, 23,228,233,168,123, 62, 55, 19,176,119,225, 61,221,180,150, 85,213,114,190, 88,241,231, 63,125, - 23,165, 19,106, 99, 72,117,152,112, 80,193,206, 84, 72,137, 74, 18, 22,101,205, 79,222,255,144,155,191,252, 38, 82, 71,221,164, - 18,109,236, 55, 5,200, 40, 48,171,123, 28, 83, 74,185,190,194,164, 80,107, 89,154, 68,173,127, 23,219,187,153,245,122,206,206, -124,219, 58,177,182,152, 21,235,216, 84,183, 33, 13,111, 37, 56, 95, 31,128, 54,123,208, 94,133,115,205,157,179,135,226,187,201, -182,143, 63,238, 35, 13,189,181,235, 68, 54,225, 67, 35,133, 11,129, 34, 74, 40,154,170,238, 60, 35, 4,113,102,105, 76, 75, 22, -141, 66,163, 33, 33, 27, 13,184,157,189, 66, 57, 91, 80, 45, 11, 34, 29,209,182, 21, 85, 45,104,188,192,203,136, 52,141, 57, 95, - 45, 88, 45,151,236,238,238,129, 53, 84,214,128,147,196,217,128,243,171,115,146, 36, 93,175, 19, 86,101,197, 66,128,107,131,199, -123,164, 53, 59,187,187, 56,107,169,234, 26,169, 36,199,207,158,145,164, 9,105, 26,147, 13,114,118,118,199,200,104, 31,211,182, -232, 72,210, 84, 53,210, 0,109, 67,177,152,225,108,141, 84,158,209, 40,101, 60,202,195,107, 97, 45, 58,137,104, 10, 75, 81, 20, -196, 81,204,104,156,224,141, 97, 24, 71, 44,230, 87, 12, 6, 9,201,112,132, 21,130, 49,129, 80,252, 87,223, 9,147,248,213, 63, -251,183,188,123, 85, 98,187,213, 34,120,108,119,238,132,233,213, 83,181, 13,255,228,191,251,103,124,243, 43,239,240,237,111,255, - 53,254,175,255,231, 63,101, 52, 26, 32, 84,132,169, 91, 22,243, 25, 90,167, 32, 20,247, 31, 60, 96,117,169,112,182,197,117,233, -109,198,134,204,246,162,168, 17, 85, 13,117,219,177,223, 93,231, 36, 39, 58, 94, 74,194, 40, 75, 25, 14, 7, 12,242, 60, 32, 22, - 81, 88,171, 4,141,187, 95,219,203,186, 46,196,106,157,242,215,203,229, 58,100,184,105, 26,138,178,164,138, 2, 82,212,182,110, -147, 0,103,196,218, 89,207,246, 10,144, 46,211, 32, 10,184, 69,119, 82,247, 31,187,176, 15,255, 28, 12,254,178, 80,151,237, 41, -253, 69, 59,244, 23, 21,112,215,127,191,247,207,177,233, 61, 10,217, 29,246, 27,226,193,245, 2,240,242,130, 43,253,117, 1,250, -243,141,128, 23, 47, 46,252,189,127,238,181,157,120,160, 55,172, 53, 18,215, 27,137, 77,119,191,230, 31,248,231, 67, 1,187, 92, - 52,233, 72,243, 28,165,115, 68, 84, 49, 26, 4, 95,232,214, 57, 20, 10, 99,194,139,147,196, 17,229,114, 69, 51,217,101,229, 74, -100, 20,113,180, 55,230,201,227, 39,120, 99, 41,234, 21,220, 72,192, 90, 98,169,153, 62,187,224, 96,148,147,140, 71, 44, 76,197, - 64, 75,116,154,226, 23,103,192, 5,162, 58, 3, 57, 96,181, 92, 97,141, 71, 70, 97,218,183, 42, 92,252, 17, 91,246,184, 46,120, - 92, 7,217, 94, 32, 67, 9, 1,194,129,144,221,107,228, 29,253, 96, 27, 26,150, 30,170,116, 72, 25, 24,162, 82, 8,112,129,108, -231, 44,221,222, 62, 60,134, 20, 30,229,192, 11,187,158,134,214,175, 67, 39, 5,233,137,124, 65,250, 35, 49, 86, 32,163, 1, 55, - 14,111,241,147, 31,255,148,163,253, 29,246, 39, 41,174, 46,120,242,201, 19, 76, 93, 49,159,149,184, 70, 32, 99,205, 85,217, 34, -128, 55,246,198,136, 69, 73,107, 60,158,136,185,107,215, 57,205,107, 83,170,245,235,221, 59,144, 57,188,112, 29, 33,185, 47, 26, - 10,132, 15, 16,190,128,123,147,140,111,189,113,159,119,222,120,149, 27,187,227, 32,129,241, 6,229,167,188,243,230, 33,131,252, - 87,249,215,223,253, 49,103,211, 2, 61, 76,240, 10,246,239,222,231,221,247, 63, 69,137,154,175,127,237, 30,122, 92,227,210,146, -175, 14, 18,142, 38, 21,239, 63, 91,240,116, 5, 23, 22, 26,239, 49,194,118, 90, 39,199,194,194,123,211, 2, 45, 4,105, 36,200, - 19, 69,170, 51,118, 85, 8, 14,169,155, 22,231, 36, 67, 3, 3,167, 48,101, 69,219, 56, 22, 87, 37,203,185,193, 89, 71, 28, 69, - 32, 45,174, 67, 74,234,170,133, 38,164, 63,201, 36,162,114, 6, 29, 7, 79,148, 98, 86,134,164,168,214,145, 15, 50, 86,109, 73, -154,107,242, 97,152,214,151,203,130,189,189, 49,158, 24, 39, 20,101, 83, 4,251, 83,165,214,141, 79,181, 92, 17,235, 20,161, 98, -132,148, 56,223,144,167, 57,202, 75, 86,181,226,227, 89,193,127,246, 95,255,183,140, 4,248,182,162,168, 43, 6,233, 17, 74, 43, -150,171,130,225, 56,101, 56, 24, 80,215, 53,249,104,200,251,207, 46,121,120, 81,240,214,221, 61,116, 20, 8,104, 50,138,131, 79, - 11, 97, 53,161, 58,233, 87, 39, 74,223,242,189,160,211,148,111,229, 28,116,230, 30, 30,143, 13,139,152,245,245,168, 59, 29,126, - 79,150, 12, 38, 52, 98,235,204,146, 32,251,218,238, 63, 67,150,245,190, 35,196,121,186,120,225,112,177,245,208,104,136,250, 36, -144,248,250,130, 64,167,149, 18, 29, 33,202, 6,217,148, 80, 10, 99,195, 85,107,172, 35,137, 98,180, 80,172,102,115,162, 52, 65, - 43,181,241,161, 39,172,177,146, 52, 65, 39, 49,222, 24,218, 89,139,214, 57,117, 91,179,179, 51, 97, 60,202,120,116,118,140, 83, - 17,173, 11,153,230,216, 10,163,131,127,254,206,104,128,115, 26, 91, 89, 82,173, 57, 43, 10,234,170,101,160, 75,146, 44,167,170, -106,242,225,128, 85, 85,146, 36, 41,163,241,136,187,175,188,130,177, 45,243,171, 43,102,207, 78, 16, 34, 88,193,142,198, 99, 70, - 59,123, 8,239,152,205,166,140, 35,133,111,198, 84,139,130,103, 10,106, 41, 65, 68, 88, 31, 81, 55, 21,122,144,211, 58, 79, 91, - 54,228,106, 78,178,179,139, 23, 10,167,192,182,142,101, 81, 33,149,102,144,229, 36,120, 42,233, 73,148,226,219,226, 45,202, 98, -197,255,225,159,125,135, 39,181,193, 19, 3, 10, 41,236,230, 28,239,182,182,143, 30,127,194, 31,124,247,143,248,157,191,254, 55, -184,251,202, 87,184,188,248,152, 27,169,100,119,119,159,106,185,160, 25,236, 97, 76,176,202, 29,169, 91, 56, 51,195,183, 21,214, - 6, 84,109, 89,183, 68, 17, 40,233,145,222,225,173,166,109, 67, 82,102,164, 36, 89,162, 24,100, 49,227,241,144,241,104,192,120, -152,175,157,246, 88,175,127, 68, 40,238, 91,231,110,127, 51, 46,240,105,172,181,212, 77, 67,209,161, 41, 66,214,225,108,165,164, - 49,225,122,108,109,200, 87,112,141, 65, 43,133, 48,110,237,230,167,190,254,198,198, 81,238, 69,240,250,139, 12,102, 54,112,189, -255, 92,146,220,207,131,193, 63, 15,241,252,121,246,179,127,209, 9,154,151,248,213,251, 13, 94, 30, 66, 70,186,232,213,222,120, -166,237,188,223, 63, 11,191,135,253, 71,188, 5,251, 93, 67, 1,156,199,121,139,247,146,139,243, 75,138,178, 8,251,158, 40,200, - 94,234,218,178,170, 12,198,181,100,121,202,206,206,152, 68,107, 76,219,146, 37, 49,113, 20, 49,189,188, 34,142, 4,216,138, 65, -174,144,222,226, 90, 56, 59, 89,112,117,213,112,243,193, 67, 86,101,141,105, 27,164, 16,204,166, 51, 22,203, 5,117, 85,114,126, -121, 65, 99, 61, 6,137,113,116,242,155, 16, 80, 33, 59,200, 80, 74,185,153, 82,253, 38,213,202, 95,179,135,117,207, 57,244,185, -107,107,139,107,100,196,160,240,236,186, 82,191, 54,106,112, 29,227,211,246, 18, 17, 31, 90, 38,199,115,174,117,189, 35,159, 21, - 88, 43,200,210, 17,166,181,156,158,156, 96,154,130,203,243, 99, 30,127,252, 33, 39,199,207,152, 47,106,206, 46,106,132, 21, 40, -161,168,187, 1, 92,227,104, 90,195, 10,207,212, 57, 42, 33, 94,218, 10, 74, 31,138,118, 39, 26,238,250,223,110,157,128,101, 32, - 60,175,223,220,227, 63,252,173,111,241,119,191,253, 75,188,117,231,144,161,242,200,182, 4,111,131,231,181, 7,103, 28, 59, 59, -123, 60,124,237, 21,202,114,206,244, 98, 69, 83, 73,226, 76,178,179, 63,224,217,217, 57,109, 43, 56,186,121, 19,161, 12,222,213, - 56,215,146, 15, 98,242, 84, 99, 26, 67,219,134,215,196, 57,133,240, 9, 30,129, 21, 22,131,163,114,142,162, 53, 44, 74,195,172, -106, 89, 89, 71, 41, 21,141,138, 40,156,167, 17, 18,163, 52, 87,101,205,229,170,102, 94, 57,226,124,136,113, 4, 91,217,186,233, - 26,227,136,114, 97,144, 22,234,218,209, 52, 80,149,142, 68,128,183,129, 60, 24,117,123,186,214, 90,150,149,197, 19,194, 87,202, -162, 37,137, 37, 89,150, 32, 4,152,182, 97, 54,155,177,191,179,135,183,134, 97,158,163, 85, 68,211,180, 32, 4,249, 96,200,170, - 40,216,217, 61, 0, 4, 79,159, 29,243,127,252, 63,253,167,188,251,254,199,140,119,119, 73,179,132,209, 48,167,109, 61, 58, 78, -200, 7, 3,154,182,237,154, 75,168,170, 26, 21,197,204,166, 87,188,253,218,125,146, 40, 88,121,170, 72,175, 9,150, 74,199,107, -130,154,120,126, 29,180, 37, 43, 90,239,215,183,228,112,162,131,197,165,220,184, 29,174,207, 7,185,165,248,232, 36,102,162,111, - 70,197, 70,119,124,221, 53,132,235,182,201,235,253,252, 86, 56, 84, 7,185,111, 95,143, 82,201,117,155,176,150,208,245, 9,110, - 81,212,145, 26,131,193, 73,164, 53,198, 89,144,130,108, 56, 88,191,247,164, 82,172, 86, 43, 78,159, 29, 35,133,100, 60, 26, 19, - 39, 25, 69, 89, 49,155, 45,184,186,154,113, 54, 45,240,233,132,253,163,219,180, 85,129,169,235,144,190,151,166, 72, 41, 89, 46, -171, 64,128,139, 61, 55, 15,198,236, 14,115, 50, 25,145,229, 41, 73,158,226,241,232, 56, 34, 73, 98,156,119,204,166, 83,148, 20, -140,199, 99, 38, 7, 7, 8, 88, 59,206, 77, 47, 47, 89,204,231, 56, 28,227,193,144, 60,205,137,210,140,101, 85, 7,111,130,179, - 75,178,113,198, 32, 19,100, 17, 20,117,203,106,177, 96, 24, 43, 38,147, 29,178,201, 1,214,219, 78, 19,223,224,189, 39, 75, 19, - 86,171, 37,249, 32, 71,120, 79, 20, 75, 14,111, 28, 32,154,134,159,126,116, 76, 73, 32,177,110, 56, 13, 91, 13,151,243, 84,171, -130, 95,250,250, 55,185,123,235, 22,223,249,206,191, 37,207,195,170,167, 88, 53,180, 86, 48,222,221, 69,120,195,120, 16, 51,200, - 35, 6,185, 38,213,154, 88, 39, 72, 21,246,245,194,247,246,217,116,117,193, 16, 69,138,225, 32, 15,153, 12,147, 49, 59,227, 17, - 59,147,112, 27,141, 71, 12, 70, 3,242,193,128,193, 32, 15,235,138, 65, 70, 62,200,201,178,140, 52,207,200,243,192,143, 72,211, -164,115, 42, 85,107,204,218,247, 12,249, 46, 17, 46,216,105,247,126, 40,126, 77,118, 53, 93,100,184,250,218,235, 47,103,191,191, -136,176,246,124, 38,250, 53, 11,208, 95,208,191,253,139,134,181,252, 34, 69,253,229,172,121, 54,123,175, 95,164,168,219, 23, 23, -245, 36,214, 36, 73, 16,252,199,113,132, 86,209,214, 78,253,250,239, 99,156, 67,120,193,229,213,148,233,213, 37, 58, 86,193,196, - 70,105,154,214, 81, 59,199, 96,148,161,227,136, 52, 77, 48, 77,205,106, 49, 35,141, 53,179,171, 5,109, 29, 52,216, 59,147,140, -201, 48,195,181,158,166,240, 20, 5, 24, 50,188, 76,248,232,209,199, 68, 82, 16, 75,201,249,217, 5, 79,159, 30,131, 20,228,163, - 9,201, 96,196,108,185,162,237,119,174, 98,195,102,239,167,228,222,216,163,223, 25,186,245,222,153, 53, 11,244,229, 24,201,245, -204,164,237, 52,190,207,198,186, 94, 15, 60,216, 32,254, 91,200,136,144, 97,122, 70, 33,133,230,234,106, 70, 83, 55,156,159, 62, -163,169,150, 44,166,103,148,203, 25,243,217,146,227,147, 26,169, 52, 89, 28, 83,148, 13, 86,134,233,165, 53,142, 86,120,230,194, - 51, 23,159,137,128,120,238,183,239, 34, 21, 67,246,107,176, 6,197, 17, 11,199,131,189, 17,255,224, 55,190,202,223,251,171,191, -196,173, 97, 76,108, 43,148,173,137, 68,112, 23, 20, 74, 6,211, 41, 23,252,183, 5, 16,107,199,131,123,251,180,171, 21,167,199, - 51, 78,206, 79,217,191,117, 64, 54, 9, 54,168,243,101,201,238,222, 33,113, 42,240,194,146,197, 17, 90, 88,118,135, 9,137,244, -120,227,240, 70,224,136,194,206, 95, 58,144, 27,189,188, 71, 82, 75, 88,121, 88, 90,207,210, 56,230,173,229,108, 81,115,177,170, -104,162,152,165,243,204,107,131,147, 49, 68, 49,198, 67,221, 56, 86,149, 65,199,113, 88,241, 56,137, 78, 18,148, 86,152,214,130, - 3,219,130, 64, 5,197,135,131, 36,143,209,177, 68, 68,144, 36, 81, 32, 85,105,201,104,148,146,196,154,186, 92,241,236,201,105, -240, 44,136,100,144,222, 9, 79,221,148,232, 56, 38, 78,114,172,145,232, 56, 99,182,188,228, 95,255,139,255,142,199, 63,253, 8, - 12,156,172,106, 38, 71,135, 72, 83, 3, 81,120,175,180, 38, 56,135, 57,199, 96, 48,160,110, 26,242,241, 46,103, 23, 87,236,141, -135,220, 60,220, 35, 18, 30,221, 21,229,224,191,174,215,133, 58,138,244,122, 79,222,107, 51,123, 38,188,236, 12,104,122,109,123, -176,155,141, 58,253,123,180,214, 61, 59,231, 59,125, 58, 27, 45,185,216,192,239,107,131,171,107,158, 86, 27,139, 48,209, 25,104, -109,127,237,218,217, 35,174,147,105,233, 88,241,162,107,164,232, 96, 99, 31,112,123,164, 82,152,166,165,109,218,224,145,144,231, -200, 40,194,225,195,254,123, 43,144, 74, 9,133,105, 13,214, 24,166, 87, 51,132,144,164,249,128, 52, 27,176,152, 23,156, 79, 75, -106,145,242,214,151,223, 65,250, 16, 63,171,162,152,198, 58, 26, 99, 80,113,130,247, 22, 45, 61, 55, 15, 38,208,148,228, 73,196, -108,181, 2,160,109, 67,130,161,148, 50,144,126,147, 4, 41, 37,171,213,146,213, 98, 65, 62, 26, 49, 24,141, 40, 86, 43,170,170, - 34,207,115,108,107, 89,205,151, 52,117,205,213,108,202, 98, 89, 80, 20, 21,198, 56,226, 44, 38, 75, 96,152,105,154,214,162,148, - 98,146,105, 34,157,144, 79,118,195,207,136, 19,144, 34, 64,254, 81,112,221,180,192,120, 56,192, 75, 79, 28, 9,238,239,238,115, -242,244,152,143,174,230, 52,107,212,217, 95, 43,234,194,195,106,177,224,222,221,123,188,249,218, 67, 62,250,232, 3,140,105, 88, - 45, 86, 44,230, 5,198,194,100,103, 23, 4, 36,137, 96,127,111, 72,162,233,148, 58, 81, 87, 30, 58,210,174,117, 52,214, 82, 53, - 45,117,221,160,164,100, 52, 28,132, 66, 62, 30, 49,233,138,250,100, 60,102, 48, 30,145, 13, 6, 93,176, 79, 74,156, 38,235,143, -113,154, 4, 5, 65,154,144,164,241,186,160,247,196, 78,235, 66,142, 72,107, 66,150,122,211,134,143,182, 31,158, 58,195, 52,227, - 58,181,150, 53,168,175,189,113,247, 31,189, 60, 28,101, 91,175, 44,126,110, 81,255, 60, 15,247,151, 73,201, 94,148,228, 37,197, -203,154,136,191,228,164,254,146,162,126,173, 17,176, 97,199,211,135,186, 60, 95,212,123,214,109, 31,232, 18, 38,117, 77,220,153, - 89,188,184, 89, 8,172, 85,129,228,252,226,140, 44, 11,100, 8,225, 32,210, 9, 45,130, 56,209,100,105,202, 32,207,169,203,146, - 44,137,185,113,176,143,244,146, 60, 77, 41,171, 21,163, 97, 26, 96, 70, 23,209,148,146,233,172,194, 43,205,227,167,199,216,166, -230,254,205, 3,180, 55,152,186,198, 57, 71, 60, 24, 48,217, 59, 96,182, 44,185,154, 47,131,180, 70, 10,164,244, 29,171, 93,173, -147,173, 16,215, 53,227,207,251, 48,110,199,229,174, 3, 89,174,197,209,190, 36, 12, 81, 60,159,211,190,113,254,195,139, 78,139, -187,206,211,233, 14, 75,141, 20, 17, 55, 14,111,113,113, 49, 11, 18, 60, 60, 79, 31,189,207,217,179, 79, 80, 52,216,182, 70,250, -176, 16,118, 46, 98,222, 26, 86, 56, 86,214, 35, 68, 68,237, 29, 13, 80,116, 50,180,207,187,106,188,144,184,206,186, 83, 4, 96, -153,195, 44,230,183,191,245, 37,254,193,111,253, 50,175, 31,140, 81, 77, 65,134, 71,121,215,201, 1,117,215, 4,132,189,173, 64, - 7,215, 51, 28, 74, 84, 20,243,199,196, 81,197,112, 28, 51,157,151, 92,205, 91,162, 44,227,214,157,155,156,156, 94,208,212, 17, -249, 32, 37, 77, 83,132,177, 68,190,229, 96,103,200,120,160, 25,231, 2,229, 29,109, 27,236, 64,125,183,138, 16, 34, 90,123,132, - 91, 60, 94,132, 74,239, 59,239,112, 11, 52,198, 49, 91,213,204,202,134,202,194,162,110,169,157,199,199, 41, 70,199, 24,165,144, -177, 70,200,132,218, 88, 86,166,101,217, 24,100,172,145, 42,193,155, 64,248,145,145, 98, 94, 52,140, 38, 25,214,182,228, 73, 68, -150, 4, 31,243,166, 49, 40,105, 81,194, 81, 44,151,120,219, 34, 33,144,132,178, 12, 25, 9,100, 36, 25, 12, 71,196,113, 78, 81, - 52, 40, 37,121,250,236, 67,142, 63,253, 9,186,108,168, 11,207,133,241,232, 81, 78,130,197,185,224,177, 30,236, 95,195, 1,106, -173, 37,210, 17,179, 85,195,238,193, 17, 39,199, 79,153, 12, 50,246,118, 39,168, 14,214,150, 74,135,194,183, 21,226, 34, 35, 5, -178,119, 68,148, 91,156, 13,127,205,225,146, 45,216,189,247,144,223, 86,230,172, 37, 34, 66, 96,251,221,159, 16,244,237,109,111, -247,138,216, 50, 24,233, 25,239,221,215, 55,232,230,166,225,239, 19,199,214, 19,125,127, 31,221, 59, 82,186, 77,202,156, 8,112, -109, 20,105, 78,143, 79,136,147, 52, 72,223,186,124,243,225,206,206, 90, 75,239, 17, 72, 25, 81, 22,171, 64, 46,109, 91,140,241, - 92, 94, 6,183, 55, 37, 52,151,203,154,167, 87, 43, 86, 85,203,237,163, 27, 28,236,239, 34, 85, 76,146,229,196,137,198, 11, 65, - 81,150, 12,243,140, 97, 28,113,180, 63, 38,194,224,132, 39, 31, 13,201, 6,249,218,116,198, 57,135, 82,129, 16, 24,199, 26,188, -103,181, 88, 96,219,150,253,163, 35,246, 14, 14,194, 74, 70, 74,172,179, 88, 31,138,147,105, 12, 23, 87, 83,142,143, 79,137,243, -132, 97, 22,145, 72, 75,221, 26,164, 20,236,228, 9,145,142,217,187,113,135, 59,119,110, 81, 55, 53, 85,211,160,147,132,217,114, -193,209,237, 91,124,244,232, 17,187, 7,187,164, 90, 18,123, 67, 38,224,112,127,151, 31,191,255, 9,231,203, 58, 16,231,158,155, - 57,164, 16, 56,239,168,203,138,175,189,243, 14, 59,147, 9,223,253,195,127,199, 48,203,137,181,166,110, 90,146, 52,103, 56, 28, - 34,148,231,206,237,125,148, 12, 6, 94, 81, 71, 62,177, 93, 45,104,140,165,106, 13,101,213, 4, 52, 73, 10,198,131,156,221,241, -136,157,241,128,201, 36, 20,246,193, 56, 60,103,186, 75,232,139,186,155,210,186,251, 92,111,110, 58,234, 72,194, 98, 29,113,109, -218, 0,197,215,117, 75, 85, 55, 84,117, 19,138,186,219,202,117,119,118,109,132, 99,157,187, 94,212, 63, 11,195,251,207,132,113, - 60,191, 83, 23,226, 5, 6, 34, 95, 0,134,255,252,148,176,151, 59,205,125, 30, 10,240,153, 72,208, 45, 77,235,118,151,253, 34, -247,186, 77, 96,137,197,174, 19,218,174,179,223,123, 2,151,238,164, 7,189,129,126, 18,235,181,164,237,249,223, 47, 68,138,186, - 96,104, 32, 36, 87,211, 11,132,112, 12,242, 12, 44, 33,110,178, 49, 56,231, 73,146, 12,103, 61,197,106,133,179,150,213,114,129, - 18, 17,145,142,153, 45,151, 24,103,104,154,150,217,108,133,179, 10,215,237,156,188, 11,110, 95,195, 68,160,133, 5,103,153, 46, - 86,144,100,168, 56,101,190, 44, 40,234, 38,236,231,186, 9,189,135, 27,149,138,214, 83,250, 90,126,243,188, 84,103, 45,249,218, -112, 31,214,207,161,216, 50, 74,190,166,217,189, 62,169, 32,196, 22, 87,129, 77,250,219, 86,120,139,243,221,132,132, 70,136,152, -241,104,151, 36, 78, 40,150, 51,126,252,231,223,163,232, 38,116,225, 60,203, 85,197,249,101,193,233,172,101, 89, 55, 92, 88, 75, - 33, 5, 70,132, 64, 12, 25, 73, 42,107,177,128,245,242,243,209, 29,161, 9,243,169, 39,245,142,175, 63, 56,226, 31,254,206,183, -249,230, 43,135, 36,109,129,180, 14, 37, 68,231, 3, 45, 16, 74,135, 38, 64, 70,225,220, 23, 50,164,106, 9,129,148, 45, 74,148, - 44,174, 30,131, 95,160,226,154, 52, 78,152, 78, 11,170,194, 51, 25, 31,176, 51,217,227,252,242,156,214, 56,156, 9,161, 37, 73, -172,105,235, 21, 82,181, 8, 95,177,191,175,217,223,141, 49,141,165,105, 61,222,107,188, 83, 93, 49,233,184, 40,190,215,176,250, -206, 73,171, 51,176, 8, 76,200, 16, 60,129,160,180,134,105, 85,113, 89,150, 44,157, 97, 89, 55,168, 52, 69,101, 41,243,182,161, - 0, 22, 77,139,149, 10,225, 29,198, 91,172,146,120, 45, 72,179,148, 44,137, 72,165,164,173, 91,164,138,209, 17, 40,225,112,182, - 13,114, 27, 15,145,148,224, 45,163,241,160, 43, 58,154,209,120, 7,132,162, 88, 21,148,197,140,247,222,251, 51, 82,213,146, 3, -139,171,134,165,133, 69, 93,179,179, 51, 38, 82, 33,137,205, 58, 71, 28, 39, 20, 69,129, 82,138, 36, 73, 67,147,214, 26,188,135, -249,124,206,195, 87,239,147,165,113, 88, 35, 69, 27,232, 61,142,147,107,222,236, 27,200, 61, 90, 59,122,169,158, 25,184, 37,173, - 93, 55,169,114,147,221,208,231, 13,248,174, 8,175, 29,225, 58,207,246,245, 84, 46,187,235,122, 75, 82,212,135,181,176,157,161, - 32,214,105, 23, 29, 73,179, 43,244,221,180, 30, 6,130,126,242,234,245,247,106, 61,185, 75,169,104,235, 38, 64,175,157, 70,220, - 58,199,104,103,167,123,235,201,245,251, 55, 82,138,197,114, 65,154,100,193, 10, 53, 78, 89, 44,151,184,214,114,124, 62,231,120, - 86,112,118,121,197,120,144, 33, 37,212,181, 33,203, 7,228,121,198,222,254, 46, 58,142,201,146,148, 81, 22, 19, 43, 75,158, 75, -136, 21,113,150,130, 82, 65,123,222, 37,177,233, 40,162,109, 67, 20,114, 93,215,157, 44, 78,211,148, 37, 42,138,200, 71, 35,242, - 60, 99,180, 59, 98,180, 51, 38, 75, 98, 92,107, 88,204, 87,156, 95, 78,137,210,152, 60, 22,196, 88,202,166,193,154,150, 97, 34, - 73,210,140,124,188,139, 20,150,253,131,125,242,225,144,233,108,218,161, 19, 57,117, 83,227, 20,140,210,148,196,131,163, 37, 27, -166,164, 66,240,189,159,126,204,202,186,205, 74,102, 91, 3,142, 96, 58,159,241,246, 91,111,241,240,213, 87,249,225,247,191, 79, -172, 37,251,187, 99, 16,160,227,140,157,221, 3, 26,211,112,243,198, 14,137, 10,129, 78,222, 11,156,181,212,109, 67,221, 24,170, - 38, 24, 68, 21,101, 69, 89, 85, 72, 33, 24,228, 25, 59,221, 46,125, 60, 26, 48, 24,229,100,121, 78,156,166,161,145,238, 86, 63, - 33, 38,248,250,231, 66,117,122,246,238,154,180, 38,248,234, 87, 85, 77, 89, 55,148,101, 77, 81,134,162,222,116, 33, 99, 97,181, - 27,112,248, 32,175, 11,133,254,133, 69,125,155,184,246,249,182,175,219, 83,176,120, 41, 81,238,139, 78,210,219, 69,253,101, 83, - 60,159, 99, 46,243,115,101,108,226,197,191,219, 53, 6,124,167, 83,183,182,247,126,247,157, 69,172,127,161,164, 45,142, 67, 12, -235,139,224,247,237, 29,177,237, 94,128,203,203, 75,138, 98,201, 32, 13, 54,163,109,235, 89,150, 45, 66, 40, 60,138,186,106, 89, - 46,139,238, 32,130,186,174,200,134, 35, 44,146,195, 27,183, 65, 70, 44,150, 5, 81, 20,227,165,196,106, 65, 62, 26, 80,213, 43, -134,131,132,233,213, 5, 94, 69,156,207,150,120,157,240,232,211,167,148, 77, 75,221,182,120, 92, 87,204, 33,234,108, 48,101,111, -185, 41,196,245,195,174,243,168, 94, 23,235,181, 95,113,111, 82, 33,182,178, 2, 84, 39,177, 16,235,255,183,125,152,137, 53,195, -152,107, 1, 62,215,205,132,130, 30,216,122, 65,158,237, 32,124,196,227,199, 79,120,247, 39, 63,230,242,226, 24, 33, 12,159,126, -242, 9,171,210,240,232,211, 25,211,101,203,101,225,152, 89,104,181, 98,230, 60, 37,158,214, 65, 75, 8,101,105, 58, 71, 38,225, -163,112,144,190,108,167, 46, 5,202, 27,118,180,228,239,252,202,151,249,251,191,241, 13,118, 35,131,106,139, 78,142,163, 59, 29, -178,216, 2,235,187,181,133,216,124,238,112, 72,101,169, 86,151,212,229, 12,137,197,154,154, 97,230, 25,229, 9,171, 89,205,197, -217,156,225, 48, 99,103, 63,163,109, 29, 42, 74,120,242,236,148,221,253, 27,168, 88, 99,109,203, 32,141,136,104, 72,148,229,198, -206,144,157, 60, 11,236,116, 99,214, 86,185,194,135, 5,133,184,110,199,116,237,249, 12,245, 61,200,137,156, 12, 19,166,241,158, - 40,137,169,141, 97,182, 92, 82, 11, 71, 35, 5,173,146, 16,135, 32,145,210, 57,174,154,150,133,113,180, 94, 49, 30, 12,184, 58, -155, 81, 23,150, 85,213, 32,112,220,186,117,136,192, 82, 21, 5,109,109,176,173, 65,210,146,101, 57,145, 78,209,201,128,193, 96, - 66, 81,172, 48,166,230,217,147, 15,144,174, 68,171,128,187,148, 69, 67,181,106,153,149, 13,141,138,216,223,221, 9, 33, 50, 74, - 81,148, 21,131,193, 32,196,160, 74, 65,158,196,148,171,130,210,120,146,225,152, 36,137,121,112,239,230, 90, 42, 41,187,137, 89, -117,230, 45,219, 94,239,107,127,109,177,217,185,139, 45, 19,155,190,152,175, 39,233,109, 11, 79,217,161, 75,157,161,202,186,136, -247,239, 3,185,109, 11,218, 77, 88,207, 79,253,215, 10,124,103, 1, 26, 76, 32,144,244, 90,122,177,134,222,173,177,235, 92,113, - 0, 99, 3, 68,238,141, 5, 47,152, 47, 22, 65,151, 94,148, 72, 41, 25,100, 89,152,240,197, 6,253, 82, 42,162,109, 26,154,186, -161, 40, 74,162, 40,102, 58, 95, 80, 46, 87, 44,234,150,103, 87, 43,222,251,232, 19, 30,220,191,141,105,107, 26, 99, 41,139,138, - 98, 49, 71, 42,137,214, 49, 89,154, 49,204, 51,246,247, 50,118, 15, 50,198,251,187,164,195, 33,233, 32, 39,138,117,151,100, 23, -214, 29,233, 96, 16,204,127,122,148,161, 27,124, 86,203, 37,214, 26,210,209, 40,216, 97, 75, 72, 84,132,118,146,114, 89,178, 40, - 43,106,107, 73,148, 39,139, 60, 78, 10,172, 53, 76,178, 24,173, 99,210,209, 14,174, 45, 41,202, 21,198,182, 28,221,190, 69,211, -214,216,182, 37,142, 35, 78, 79, 78,217, 25,239,161,163, 8,167, 44,210, 27,246,134, 35, 30, 63, 62,225,227,211, 25,117,207,125, - 88, 43, 13,194, 25,108,130,223, 43,223,252,218, 55,240,198,240,225,207,126, 76,150, 42,242, 65, 70, 85, 27,146,116,132,214, 9, -187,147,148, 36, 10,164, 56,107, 61,109,107,168,234,154,162,170, 67, 65,175, 91,138,178,166,172,106,132, 16, 12,178,148,241, 32, - 99, 60, 76,201,243,140, 52, 75, 73,178,148, 40,209,248,174,177, 20,124,150, 60,222,155,209,120,191, 89,253,214, 85, 77, 89,214, - 44, 87, 37,171,238, 86, 84, 21,101, 55,169, 27, 99, 55, 60,164,158,100,215,185, 44,254, 66, 69,253,179, 19,243,117,246,251,203, -138,249, 47, 60,169,123,126,238, 78,253,249, 72,214,151,237,210,175,155,222,124,241,162, 30, 44, 1,251, 61,133,235, 36, 61,215, -119,234, 61,252,254,178,162,190,153,212,219,110,183,238, 41,170, 21,197,114, 65,158,166, 36, 58,193, 26,129,136, 82, 76, 11, 82, -165,168, 40, 33, 73, 51,100,164, 25,141,134, 12,134, 41,113, 58, 64,168, 1,113, 54,226,252,242, 18,112,100,105,204,172, 42, 16, -121,198,178,170,120,118,252, 12,239, 13,101, 85, 82,123,137,204,134,140, 39,251,200,206,201,201, 24,211, 37, 7,133, 20, 34,169, - 20,146,254, 96,234,139, 53,215, 76,126,158,123, 21,175,113, 39,174,235,123,123, 56,241,185,100,196, 23,185, 3,250,205, 30,221, -247, 16,146, 11,120,188,113, 30, 68,140,115, 2,137,102, 60, 24,241,228,241, 35,254,224,247,255, 29,195, 97, 68,237, 20,239,126, -120, 73,227, 35, 22, 70,115,101, 97,137, 96,225, 61,166,155,152,133, 87, 24,160,149, 14,167,232, 92,227,228,231, 22,245,196, 59, -238, 78, 50,254,147,191,245,109,126,249,213,155,228,182, 64, 57,139,148, 26,131,196,171,142, 84,133, 15,147,105,247,121,159, 92, -231,188,195, 43,176, 24,156,171, 40, 86, 83,112, 45,194,129,179, 2,218, 22,105, 11,246,119, 98,226,196,241,248,233, 49,159, 60, -185, 96, 52, 76, 25,142, 39, 60, 62,185, 96, 81, 89, 84,148,178, 51,158,144,233,132,213,229, 2,217,134,195,110,156,123, 14,247, - 19,172,179, 84, 45, 52, 46,216,246,110, 55, 24,189,145,164,151,157,102, 21,127, 61,119,218,175,135, 62,172,243, 12,242, 28,165, - 37, 86,120,140, 20, 24, 15,171,170,165,244,224,135, 3, 78,139,154,194,130, 5, 6,217,144,200, 43,170,162,165,105, 29, 89,170, - 25,143, 51, 36,142,186, 42,104, 27, 67, 93, 25,178, 84, 48,217,217, 65, 69, 3,164,204,201,242, 33,239,189,247, 46,222, 87,152, -106, 74,222,189, 30,149,247,212,101, 67, 59,109,104,157,228, 89,211, 18, 73,207,100, 52, 98, 48, 24,144,164, 25, 89,150,145, 36, - 9, 81, 20,177,147,197,140,135, 67,244,112,151,171, 85, 77, 85, 44, 41,230,151,188,241,240, 65, 48,198,233, 34, 46,183,145, 34, - 47, 8,251,114, 17, 84, 2, 61, 4,190,137,212,220,216, 21,203,126, 42,222, 26, 78,188,115,107, 13,250,118,228,235, 38,110,120, -195,182, 23,235, 4, 57,185, 5,189,111,116,239,125,197, 21,126,179,170,242,226,250,185,233, 59,147,170,186,109,176,198,172,127, -158,117, 14,111, 93,247,119, 70, 52,198, 16,197,154,166,170,113,214,173,221, 45,123,157, 78,175,119,143,181,230,242,234, 10,165, -162,144,130,231,225,242,244,140,202,120,254,205,119,191,199, 79, 62,252,144,251,119,238,176,191, 55,161,170, 91,172,245, 20,139, - 25,203,213,146,147,179, 83,180, 78, 73,180,226,198,126,206, 96, 32,186,252,247,173, 4, 60, 21, 28, 9,171,162,160,109,106,128, - 96,136, 19,199,120, 31, 92,239,178, 44, 99, 54,155, 82,153,134,193,120,136, 23, 14, 97, 12,178,113, 76,175, 22, 28,159, 93,178, -170,107,134,169, 34,143, 5,198,121,154,186,102,119,152, 48, 24,141,184,117,239, 21,246,247,194,164,111,186,216,215,253,189, 61, -202,213, 18,173, 20,139,171, 41, 58,203,136, 70, 3,148,179,164,194, 33, 34, 73,150,164,252,217, 15,222,231,194,184, 77,155,219, -123, 13,200,128,148,204,102, 83,190,246,229,119,120,237,238, 93,254,228,143,126, 15,173,109, 87,212, 45,142,132,209, 96, 76,170, - 61, 55,246, 6, 56,219,224,172,163,110, 29,101, 29,138,120,213, 89, 57, 23, 85, 77, 81, 86, 72,130,115,229,120,152, 49, 26,164, -228,121, 78,146, 5,195, 37,169,187, 8, 93, 1,146,141, 20,173, 87, 61,244,132,106,239,125,240, 71,105, 91,234,178,102,181, 42, - 88, 45, 75,138, 85,201,178,168, 88, 85, 53, 85, 93,135,130,238, 54,196,100,231, 58,141,150, 15, 36, 58,245,206,235,119,174, 69, -175, 94, 15,116, 17,159,137, 47,101,219,156,254,218,156, 32,215,182,250,222,139,173, 13,235,154, 37,242,210, 91, 15,249,246, 42, - 67,249,115,246,233, 47,211,171,111,119, 63,159,151, 17,223, 67, 49, 82,108, 88, 47, 65,209,228, 67, 81, 95, 79,235,207, 77,234, -157, 77,172,238,118,234,105, 28,135, 20, 50, 29, 12, 46, 94,180, 83,239, 25,140,166,219,213, 71,145, 98, 58,189, 2, 79,208,119, - 14, 71,180, 22, 34, 29,129, 80, 12,199, 99,226, 36,166,105,234,110, 93,231,152, 95,205,248,232,201,199,156,159, 60, 98,185, 92, - 16,105,195,238, 88,241,214,155,111,242,215,126,227, 87,249,181, 95,122,135,191,247,183,254, 58,223,252,198, 87, 24, 14, 51,140, -128,116, 48,192, 70, 57,101,219, 48, 91, 76,193, 27, 36, 62, 24,132, 8,181, 62,216,182,237,126,251,116,187, 80,112,221, 53,168, - 28,191,117, 41, 62,247,156,111,103,173,111, 51,227,157,219,252, 63,107, 93,136,163,117, 93,214,113,215, 56,245,187, 33,231,194, - 68,124,235,214, 3, 46, 47,102, 28, 63,125,198, 31,255,201, 31, 51,159,205,240, 66,240,195,159, 29, 51, 43, 59,200,214, 58, 74, -231,169,240, 24,194, 20,218, 19, 97, 92, 23,194,210,235,142, 55,235,132,144, 22, 37,144, 33, 34, 50,228,188,145, 8,193, 47,191, -122,147,255,249,223,251, 45,142,134, 49, 73, 0,236, 1,137,237, 82,184,164,236,104,124,129, 30,209,177, 81, 3,153,176,117, 22, -227, 4,214,169,224,246,102,166,180,213, 12, 5,120,235,169,170, 6,211,152, 46,115,186, 34, 77, 44, 71,251, 3,238,223,220,231, -147, 39,167,156, 93, 92,240,198,219, 95,225, 98, 86,114, 57, 47,248,244,217,148, 69,233,120,112,239, 62,213,106,133, 55, 13,131, - 44, 38, 17,158,221, 97,198,173,189, 29, 34,227, 40,171, 96, 70,225,133, 15,156, 32,185, 53,137,174,189,162,251, 38, 74,108, 49, - 69,229, 58,156,102,119,188, 19,156,213,144,200, 46,165,172,169, 13,181,245, 44, 26,131,139, 36,181,113,204, 87, 21, 94, 39, 8, -157,176, 59,152,176, 92, 85,224, 26,118, 38, 9, 90,120, 76,221, 18,233, 24,132, 33,201, 50,188,143, 81, 42,230,238,157, 91,184, -118,201,236,234, 49,131, 52,236,184, 17,158,178,169,168,235,138,213,178,161, 50, 80, 26,203,210,133,247,198, 32,141, 25,164, 25, - 66, 72,140,135,124, 52,102, 58,155,162,227,132,166,106,113,214,177,123, 48,225, 63,251,191,252,151,124,227, 43,111,113,239,240, - 8,105, 93,128,252,117,104, 84, 69,183,110,113,178, 19,149, 90,191, 14,197, 8,201,108, 42,228,152,139,237, 66,189,149, 63,220, - 29,192, 27, 23,184, 45, 72,191,135,196,165,216, 56,145,110, 69, 59,175,175,183,109, 51,172,222, 11,197,119,187, 82,228,150,187, -156, 8,137,108,221,227,211, 17,163,188,115, 88,179,113,184,236,211, 35,101,164,120,118,124,130, 71,146,166, 57,109,107,201,243, - 60, 88,144,122,183, 78,185, 84,221,153,190, 88, 46,113, 22,150,171,130,203,203, 41,171, 85, 9, 14, 62,250,240, 17, 73,146,178, -183,183, 31, 32,248,170, 0,231,201, 7, 17,214, 54, 92, 94,206,168,171,138, 97, 46, 57, 60,200, 2, 60, 28,233,110,221, 19,172, -120, 35,173,136,242,152,178, 44,169,150, 5,210,123,116,164,200, 39, 35, 84,162,105,218, 0,199,207,102, 83, 50, 21,119, 46,126, - 14,215, 84,204, 47,230,124,242,244,156,214, 90, 6,169, 34,214, 2,103, 91,218,186, 98,144, 13, 25, 77,118,120,248,250,235,100, -131,140, 36,201,208, 58, 97, 50,153,208,214, 53,131, 60, 65, 71, 2,215, 58,202,166,101, 52, 25, 33, 59,194, 88,217,180, 40, 36, -139,217,146,159,126,114,134, 1,156, 10,207,171,236,207, 8, 9,109, 83, 51,201,199,124,237, 75,239,112,117,118,206,197,197, 9, -105,154,162,162,152,162,168,217, 63,216, 67,107,201,254,222, 24, 65, 11,174,161, 53,193,216,171,174,107,170,186,161,108, 12,171, -178,162, 40, 67, 83,147,167, 89,128,222,135, 89, 55,169,119,141,105,172,215,198, 69, 98,107,168,233,189, 64,250,143,222,134,215, -188,109, 26,170,170,162, 40, 66, 49, 95, 22, 69, 87,212, 27,234,186,193, 88,115,109,167,238,125,112,185,180,107,248,253,245,151, - 79,234,159, 45,220,215,139,187,120,238,223,235,251,111, 89, 29,246,111,166,141,239,204, 11,138,186,184, 94,224,175,237,108,127, -142,164,237, 69,208,251,203, 26,130,235, 80,229, 38, 86,118, 19,237,234,215,197,204, 62, 63,169,119,217,232,155,148, 54,221, 37, -146,169,245,110,233, 58, 9,135,181, 89,191,237,166,163, 16,130, 16,118,243,211,217, 34,236, 98,116,208, 85,206, 87, 5,101, 93, -113,113,117,201,229,229, 5, 85, 93,178, 92, 46,168,234, 2,233, 96,231,104,143, 91, 7, 57, 55,111,222,227,224,112,192,193,110, -202,254,222, 77,138,171, 11, 14,246,198,212,245,138,221, 27, 7,236, 29, 30,240,213,111,254, 50,183,110,221,230, 63,254,135,255, - 75, 94,121,237, 53, 62,254,232,125,102,211,203,144, 84,118,237, 0,219, 72,181,251,104,193,141, 9,141,251,140,105,140,223,126, -158, 62,115,115,107, 40,168, 47,210,174, 99,111,134,228,174, 80,192,141, 11,171, 13,103,125,247,220,122,188, 11,154,253,131,195, -187,120, 98,148,138,200, 58,137,199,157,251,175,240,198,151,190,202,183,126,245,215,248,242, 55,127,141,183,191,242, 85,246, 15, -247,113,120,150,171, 5,198,154,112,224,118,246, 31, 78,110, 77,168,107,242,254,150, 21, 83, 55,197, 70,120, 70,145,226, 55,191, -254, 38,255,209,111,124,157,180, 45,193, 6,197,131, 35,200,237,124,111,204, 67,104, 72, 60, 2,235,193, 56,176, 34,240, 33, 12, - 14,235, 34,108,171, 80,180,216,230, 10,225,151, 8, 7,214,122,106, 83,227, 8,127, 59, 40,132,243, 72, 87, 35,221,130,189,189, - 29,188,181, 28, 63, 61, 14,222,219, 81,204,241,217, 37,109, 71,198,210,145,102,188,123,192,229,197,146,114, 85,147, 73,201, 56, -106,121,237,214,152,189,221, 29, 48, 53,109, 99, 54, 41,131,221, 11, 26,118,236, 91,174,144, 91, 77,122, 15,211, 59,231, 48,173, - 97,111, 50, 33,145, 18, 25, 76, 43,240, 54, 88,142, 90, 2,247, 34, 85,193,230,179,245,130,227,217, 28, 23, 41,198,183,142,168, -156,224,244,120,193,252,170,226,242, 34, 52,189, 81, 44, 25, 14, 7, 56, 39,201,243,148, 36, 22, 60,123,250, 65, 48, 77,242, 30, -132,198, 59,131, 51, 45,173,113, 20,214, 81, 20, 65, 90,247,204, 58,180,142, 56,220,217, 97,152,101,232, 36, 11,110,105, 73,130, -206, 82,218,166,229,112, 48, 1,103, 57,157,158,179,106, 27,174, 78, 78,249,141,175,255, 18, 31,254,244,167,100,147, 1, 42, 13, - 4,203, 8, 29,146,232,226,224,210,168,163,112, 77, 9, 21,133,228,180,238,128, 53,157, 17,140,232,162, 92,233,200,118,190,103, -163,119,206,250,253,254, 27,217, 5, 34,172,165,106,215,226,188, 59,182,122,199,186,239,249, 61,221,107, 67, 87,208, 55,112, 97, - 23,131,172, 2,252,207, 86, 68, 56, 29,140,106,140,233,114,186,101,167, 99, 14,242,174,214,132,166,179,105, 44,243,197,138, 72, - 71, 12,242,180, 99, 80,136, 53,122, 36,149, 12,178,206,162, 66, 8,201,233,217,148,139,139, 75, 22, 87, 51,148,208, 68,233,136, -100, 48,100,185,156, 82,151, 69, 88, 33,217,138, 72, 43,156, 15, 70, 63, 55,246,134,220,186, 49, 10, 32,136,247, 52, 69, 69,181, - 92,225,189, 69,106,137, 74, 53,233,112, 64, 83,214, 36, 58,194,180, 45, 50,137,208,195,140, 56,139, 65,120,114, 29, 97, 87, 13, - 73,150,227,101,139,240, 13,139,139, 57,239,127,114, 78,107, 76,104,248,148,195,182, 21, 88,207,104,178,203,254,225, 33,247, 30, -220, 69, 8,193,213,197,148,159,189,251, 62,211,171, 41,105,150, 16,199,138, 65,158, 96,140,103, 62,157,178, 55,153, 16,233,136, -198,122,126,246,238,251,148,171,130,221,201,152,159,188,255,152,105,211, 98,132,196,163,136,186,247,179,235,164,140, 87, 23, 87, -252,230,111,252, 22,131, 36,227,207,255,252, 7, 76, 38, 99,240,130,170, 44,217, 59, 56, 64,169,136,253,189, 29,180, 52,224,170, - 32,125,171, 44,117, 21,136,123, 85, 99, 88,149, 53, 69, 89,227,189, 39,207, 50, 70,163, 1,163,225,128, 44,203,200,210,140, 56, -137, 55,150,196,244, 1, 91,158,107,122,159, 94,175,110, 29,182,181,180,117, 77, 85,133, 9,125,177, 42, 88,116, 69,189,172, 90, -234,166, 89, 15, 68,126, 27, 13,222,178, 78,127, 97, 81,255, 5, 44,226,190,112, 94,218,207, 99,176, 95,203, 96, 23,159,255,125, - 95, 4,206,255,162,172,249,231, 19,219,252, 75, 38,245,182,155,212,251,162,174,227, 0,193,111, 34,239,212, 53, 34,225,166,168, -187,110,215, 17,164, 58,214, 56,156, 19,172,138,138,178,108,153,205,195,126, 60,210, 49,117, 99,113, 94,128, 8,241,158,113,156, -146,229, 67, 34, 52,175,127,245, 29,108,219,242, 55,255,246,127,200,239,252,253,191,207, 98,190,224,127,251,191,251,223,243,233, -167,143,249, 91,255,131,255, 17, 71,119, 31,224,100,194,173,135,111,211, 24, 73,217, 10,246, 15,110, 50,187,186,228,221,159,254, -136,243,211,227,181, 46, 93,108, 21, 55,216,138,170,191,150, 34,180, 41,234,107,215,163,173,143,125,193,118, 61, 17,176,155,186, -109,183,223,177,207,221,204, 86, 54,125,107,109,144,156,173,111,150,241,120,143, 91,183, 31,144, 12,119, 66, 34, 85,156,114,116, -235, 54, 22, 73,148,230,232,116,192,104, 56,196, 59,203,100, 56,224,238,157, 59,236,239,238, 51,159, 47, 40,202,114,253, 6,121, -145,132, 67,118,251,231,144,216, 37,144,222,113, 99, 24,243,119,127,253, 27,124,243,193, 45,100, 83,226,156, 9, 97, 13, 34,120, -109,123,225,215, 36,168,158,132,226,131, 56, 2,219, 49,246,173,131,214, 90,156,151, 56,235,240,118, 5,110,137,164, 5, 47,105, - 27, 67, 99,218, 53, 19, 90, 74,137,243, 14, 33, 3,233, 70,216,150, 65, 44,216, 31,167, 68,222, 18,235,136, 52,207, 17, 58,165, -169, 44,243,105,205,249,180,100,114,112, 68,148,196, 52,109, 77, 26, 89, 82,109, 24, 15, 26,238,221, 24,177,151,231, 68, 54,162, -105, 77,199,128,119, 29, 20,223,111,220,221,154, 64,215,163, 19,158,144, 64,102,140,193,182, 13, 7,147, 33,137,142,176,117,133, -213,138,182,107,140, 18, 4,153, 80,104, 4,227,241,136,139,229,146,211,170,226,195,179, 41,199,243,146,218,198, 72, 57,224, 98, -218,176,170, 37,195,161,102, 56, 28,226,240, 28, 29,237,179,156, 95,160, 68, 96,201, 71,145, 14,178,177,174,169,109,219,160,141, -175, 43,199,162,114,156, 88, 79, 99, 44, 89,154,113,120,120, 20,214, 3, 2,154,178,164, 88, 44, 40,102, 51,234,162,226,217,201, - 41,203,186,230,198,209, 1,143,222,251,136,183, 30, 62,228,149,251, 55, 72, 6,113,136, 16,150, 42, 24,187, 8,129,151, 30, 33, - 20, 74,110,133,189,108,179,202, 59,132,110,163, 39,239, 96,230,206, 66,185, 15, 96, 17, 82,118, 95,223, 36,111,120,191,217,175, -111,136,118,155,104, 86,177,101,170,116, 77, 35,210, 77,249,190,183,153, 93,107,215,253,166,239,148,162,187,190, 66, 33, 95,203, - 75, 17, 56, 33,136,227,152,217,116, 78, 20,133,108,123,231, 12,195,209,168, 11,164, 81,235,159,225,156, 67, 71,154,166,105, 89, - 44,150, 44,203,134,171,249,138,170,117, 60, 62,185, 96,120,120,147,175,253,210,183,120,118,242,140, 31,255,248,199,120, 4,139, -229,156,198,184, 80, 64,234,154,166, 90,176, 51,202,152,140,114,218,166, 97,122,126,137,109,219,160,217,238,154,148, 72,199, 68, - 82, 82, 45, 87, 40,165, 48,222,162,226,160,172,137, 98,205,124,122,133, 48, 14,165, 21, 82,123,168, 27, 22,151, 43,126,246,209, - 83,140,179,228,153, 66, 71, 30,107,130,207,198,112, 56,230,232,230, 13, 14, 15,246, 16, 29,188, 92,148, 21,214, 11,102,243, 37, - 77,211,160, 84, 68,172, 83, 78,143, 79, 24, 79,198,164, 73, 66, 85, 22,148,171, 10,225, 61,113,146,114,118, 49,231,195,167,231, -212, 66,225, 93, 63,212,249, 53,116, 82, 85, 53,175,220,123,192,221, 91, 55,249,248,163,247,112,182,237,224,113, 65,217,212, 28, - 30, 30,146,104,193, 40, 87,224,106,154,214, 82,213,142,166, 9, 59,245, 48,169, 55,235,162,158,165, 41,227, 65,206,104,152,145, -103, 41, 89,150,146,164,155, 73,221,109,203, 24,217, 10,252,114, 46,188, 47,140,195,152,150,182, 14,251,244,213,178,100,177, 90, -177,234,224,247,178,110,214,122,125,215, 55,139,215,102,210, 23, 20,245,159, 71,114,187,246,181,151,166,157,125,126,148,233, 23, -241,101, 23, 47, 48,188,249,133,204,107,254, 2, 82,184, 23, 21,117,179, 93,140,140,187, 94,212,181, 38,214,155,164,156,104, 43, - 52,226,179, 22,170, 54,216,251,117,143,227,189, 36,207,134,104,157,226, 61,212, 77,203,213, 98,197,120,178,139,113,240, 43,191, -242, 87, 56,216,191,193, 87,191,250, 53,254,193,127,255, 63,230,233,147, 99,254, 39,255,179,255, 5,113,164,185,113,235, 46,127, -229,219,127,149,223,251, 87,191,199,127,240,219,127,135,143, 63,254, 16, 21,103,140,118,118,249,244,241, 19,118, 15,239, 48,189, -154, 81, 27,193,206,104,194,124,122,201,187, 63,249, 17,151, 23,167,155,215, 76,200,235, 42,109,191, 97,166, 59,215,177,210,183, - 98, 5,221,122,250,118,107, 51,153, 96, 40,211, 21,114,107, 55,249,194,214,127,182,168, 91,183,126, 46, 91, 23,138,122,211, 61, - 23,206, 9,132,212,188,245,246, 87, 80, 81, 66, 89, 85,100,105,194, 48,207, 41,203,114, 93, 88,151,171, 21,145,148,148,171,144, - 92,167,149,226, 96,111,159,195,253, 3,116, 20,115,126,113, 30,246,143,207, 71,225,110,101, 20, 71, 64,236,225,141,163, 29,254, -246,175,125,141,163, 76,162,155, 21,206, 27, 44, 65,182,212, 90,139,237,242,148,122,131, 28,211, 27, 62, 32,214,176,187,113, 62, - 56, 96,121, 48,206,225,109, 77, 36,106, 34, 89, 35, 9,127, 87,211,218, 48, 49,109, 17,181,220, 58,226,213,161,176,104, 97,145, -174,102,156, 41,178, 68,177,183,183, 75,219,180, 56,211, 53, 25, 81,194,207, 62,121,198,217,172, 36,201, 50,116, 28,116,173,180, - 11,148,179,140,146,152,123, 71,135,220,220,223, 37,137, 5, 96,130, 87,124,191,142, 34, 48,167,197,246,254,189,223, 47, 10,104, - 27, 67,219,180,236,140,134,104, 37,105,156, 9, 57,221, 82,144, 33, 73, 61,236, 77, 38,160, 35,174,230, 75, 60, 17, 86, 4,249, - 92, 81, 86,104, 45,112, 2,230,141,101,148, 68,228, 89,204,112,152, 48, 28,104,112, 21,194,219, 46, 79,160,139, 57,197,227,189, -196, 89, 69, 83, 67, 83, 90,202,178,229,204, 9, 26,235,216,219, 63,100,111,111,151,166, 88,113,121,122,194, 39, 31,125,200,163, - 15, 62,224,217,179,103, 28, 63,125, 70, 89, 55,236,222,184,193,141,155,183,216,223, 61,224,207,254,244,207,248, 7,127,255,191, -135,212,157,123,161, 80, 72,165,145, 90, 35, 84,184,118,162, 72, 95, 75, 72,243,157,217,139,138,130, 74, 98,173, 15,151,172,237, -144,215,174, 12,106,243,218,173, 35, 94,251, 32, 24,250,221,122, 39,135,148,114, 75,230,198, 38,216,101,155, 97,175,122, 35, 27, -185,241,141,247,219,241,218, 33, 27, 1, 41,187,230,215,224, 58, 20,198,110,229,197,199,113,194,108, 58,235,200,106,129, 57,159, - 15, 6,235, 34,209, 19, 85,141,177, 36,113,140, 49,134,147,139, 57, 69,213, 96, 17, 60, 57,155,113, 81,212,252,143,255,147,127, -200,223,250,187,191,131,115,150, 63,250,227, 63,230,253, 15,222,231,106, 58,103, 85, 6,242,215,249,201, 51,254,205,191,252,151, -252,246,223,248,171, 40, 60, 77, 85,162,148, 98,180, 31,248, 58, 77, 85,135,134, 77, 71, 20,179, 25, 89,158,177,106, 74, 84,172, -187,176,157,144,146,103,139, 26,107, 13, 58,145,248,186,102,113,177,226,167, 31, 60,161,197,145,106,143, 18, 38, 20, 85, 33,153, - 12, 39, 28, 30,238,179,183,187,139,114, 14,103,161,106, 12,131,193, 8,235, 61,243,249, 18,107, 29,123,187,187, 92, 94,156, 51, - 24,134, 0,153,213,178,160, 92, 21,220,188,121,147,209, 32,103,185,156,243,227,247, 30,227, 34, 77,217,174,219,162,160,180,233, -138, 97,177, 92,241,215,126,243,219, 20,139, 57, 31,190,247, 30,131, 36, 97,119,103,194,170,172,184,121,243, 22,182,173,216,219, -201,145, 88, 76,107,168, 42, 67,213,116, 59,245,237, 73,221,121,178, 36, 9, 59,245, 97,190, 46,234,113, 26,100,160, 72, 21,222, -115,142,141,166,183, 91, 89,210,241,138,108,107, 48, 77, 67, 93, 85, 84, 69,197,114, 85,176, 88,149, 44, 87, 21,171,162,162,106, - 26,154, 14,153,235,109,101,183,139,122, 95,111,162,151, 21, 56,239,253,103, 10, 99,159, 82,118,237,176,124,193,196, 43, 68, 23, -153,249, 5, 9,114,159,181,145,125,225,204,245, 66,111,250,127,191, 94,245,254,165, 9, 93,107,246,247,115, 65, 31, 47, 66, 44, -158,143,122,237, 45, 39,165,216, 4,222, 11,161,216,217,221,231,238,189, 7, 12,134, 57,171,170,225,149,215,191,204, 31,125,247, -123,188,246,250,155,204,231, 11,102,179, 5, 81, 52, 98, 85,150, 88,167,200,178, 49, 79,158, 62, 1, 98,154, 86, 80, 55, 45,195, -241,144,103,199, 79,185,115,231, 22, 77, 93, 48, 28,143,112,117,129, 86,154, 98, 85, 96, 59,251,192,237,125,185,235,157,238, 58, - 91, 93, 33, 61,162,219,131, 95, 95, 83,132, 93,244,117,169,161,219, 34,195,247,236,226, 77, 12,166, 18,178,131,248,197,139,215, - 17,194,175,253,245,189, 11, 51,204,151, 30,188,142,142, 18,138,229,130,189,221, 9,243,233,148,179,233, 37, 55,142,142,144, 78, - 48, 93, 45, 57,152,140,184,156,206,137, 4, 36,121,222, 73, 14, 29,123,227, 49, 95,125,235, 77,226, 88,243,211,247,223,227,114, - 54, 11, 26,238, 45,102,152, 39, 76,109,210,195, 59,119,110,242, 43, 15,239,145,215,225,144, 41,180, 71,216, 24, 44, 91,161, 52, -221,245,219, 49,143,187,127,117,186,104,214, 36, 21, 7, 24,161,112,109,141, 50, 75,210,212,134,184,211,174, 65, 82, 74,163, 59, - 40,213, 99,177,174, 69, 10,133,195,224,186,225, 76, 9, 79, 26, 11,156, 93, 97,219,130,182, 45,185, 59, 30, 82,196,158, 85,233, -145, 89, 10,201, 33, 23,179,146, 79, 47, 90, 46,230,138, 73,230,120,243,238,125, 6, 89,132, 51, 37,101,125,201,209, 48,102, 50, - 28,242,229, 87, 15,120,124, 94,112,124,185,226,248,252,138, 85,229, 8, 63, 93, 5, 93,125,183,104,241,128,241,224,112, 92,174, -106,204,147, 83,246, 39, 67,114, 98, 98,215,160,144, 36,145, 98,156, 15,200,118, 38,188,251,228,113, 64,149,157, 35, 19,154, 44, -210, 40, 95,144,250,134, 47,191,181,203, 43,247,239,114, 56, 62,228, 75,111,190,202, 71, 31,252,128,182, 89,146, 68, 30,173, 36, - 74, 4,232,218, 11,143,148, 81, 55,161,118,146, 35,225,209,194,179,171, 37,151, 77,104,254,222,125,239, 3, 98, 87,161,157,103, -152,229, 28, 29,222, 32,210, 17,251,251, 71,236,220,184,197,206,209, 17, 63,254,233, 79,121,248,165,175,240,179, 31, 52,124,255, -221,247,121,231, 75,175, 16,171,176, 47, 55,222,161,101, 40,240, 1,105,233,214,102, 34,218,188, 63,215,171, 55,185,198,120,194, -244,173,186,140,110,143,232,165,112,222, 7,200,190,143,215,148, 98,189,162,147,219,197,187, 63,159,252,214,154,177,227,114,160, -212,134, 20,231, 55, 52,163, 53, 42,224, 59,200, 94, 10,188, 11,131, 67,158,231,129,231,208, 65,174,189, 13,168,148,146, 44,203, -216,217,157,112,113,121, 73,219, 10,174,174, 2,239, 96,178, 59,193, 90, 3,182, 69,202, 16, 11,237,140,101, 50, 30,113,184,191, -199,201,233, 5, 69,177, 98, 48,204,249,244,211, 51,206, 78, 79,121,248,240, 30,127,251,239,252, 29,190,254,245,111,112,113,122, -202,163, 71, 31,243,228,228,132, 39,143, 31, 35,219, 18, 81,173,184,186, 90,113,235,230, 46,105,158,179,152, 94,113,254,244, 41, -147,253,125,178,193, 8,188,167, 93, 46,137,148,162, 44, 11,132,132,186,109, 72, 71, 3,132,115,164,131, 12,147, 44,169,170, 10, -124,220,165,167, 89,154,182, 70, 68,129,231, 17, 69, 10,111, 36, 90,118,217,238,121,190, 38, 15,226, 61,203,229,146, 40,245,148, -101,197,120, 52, 33,142,162,192,137, 73, 98, 76,211, 2,130, 85, 81, 2, 48, 24,228,156, 29, 63,227,254,173, 61, 94,187, 53,226, - 86,126,139, 63,248,225,187, 52,221,107,209,111, 65,188,128,247, 63,254,128,227,139, 11, 30, 60,124,139, 63,253,206,119,194,218, -209,181,224, 90,234,186, 34,209, 49,117,235,136,116,183, 19, 23,254, 51,174,167,225,124,117, 91, 94, 28,215, 87,147,206,187,160, -162,233,190,223,187,109, 36,180,187,218,156,197,123, 27, 16, 98, 99,105,219,118,157, 20,218,135,137, 57,203,154,171,132,191, 30, -241,189,253,179,163, 95, 36,140,229, 69,193, 42, 47, 50,150,233, 3,224,123,227, 1,190, 64,129,190,254, 57,215,152,245, 63, 47, -204,229, 47,107, 78,243,252, 54, 65, 8,241, 25,147, 26,241, 60, 27,252, 57, 51,150,231,131, 97,174, 61, 55,235, 53,175, 8, 49, -247, 93,131,160,148,226,198,141, 67,230,139, 25,111,191,253, 54,143, 30, 31,179,191,127,192,197,197, 21,247,238,191,194,241,201, - 15,112, 62, 34, 31,228,156,157,158,179, 51,222,225,123, 63,248, 14,166,170,136,145, 76, 47, 47, 25, 13, 50,190,247,131, 31,241, -237,111,255, 58,190, 94, 50, 72, 19,202,171, 99,200, 14,120,252,233, 39, 68, 50,152,163,208,133, 95,108, 38, 56, 16,206,175,109, - 15, 63,155,208,183,213,196,188,128,155,192,115,126,253, 97,130,144, 68, 93,244,234, 70,238, 38,175,175, 34, 16, 97,191,236, 61, - 2,201,100, 52,224,254,253,123, 40, 33,217, 29, 13, 40,231, 23,180,229,138, 91, 7,187, 44,102,151,212,173, 37,137, 34,188,109, -152,207,166, 72, 4,109, 93,146,101, 57,141,177,224, 28,210,121, 30,220,190,203,104, 56,230,195,143, 31,241,225, 39,143,104,172, -217,106,182, 60, 18,193,195,123, 55,121,120,243, 8, 83, 20,148,210,224, 98, 48, 78, 18,137, 22,233,237, 58,155, 56,138, 20,180, - 33, 79,185, 55,215, 88,251,135, 91,183, 70, 58,188,135,210, 58,164,111, 73,109,133,214, 10, 5,216,110,130,147, 74, 32,108,119, -104, 3, 66,152, 64,228,235,210,157,172,143,176, 34, 76,141, 66, 88, 34, 97, 16,110,142,171, 10, 38,145, 38, 31, 71,136,180, 97, - 52,202,185,127,231,128,227,147, 25, 74,197,120,235,248,193,123, 83,178, 20,190,252,214, 17,227, 97,206,108,118, 73,108, 13,185, - 18,140,110,141,120,245,104,151,233,242,128,199,103, 51, 62, 61,157, 50,171, 90,106,211,239,246, 93, 55,181, 75, 28,138, 22,199, -180,110, 40,206,174, 24,166,154, 56,209,164,105,136,164,188,164, 97,246,244, 99,166,182,198, 37, 2,221,128,112, 45, 19,223,242, -218, 97,196,175,188,121,196,183,190,246, 22,175, 61,124, 72, 97, 99,222,251,224,103,180,213,146, 44,238,174, 47, 28, 86,216,144, - 52, 37, 66, 26,152,151, 10, 25, 39, 68, 73, 66, 54,202, 73, 23, 21,183, 60, 8, 34, 78,143, 79,248,251,127,239,119,120,245,230, - 46, 67,173, 16,196, 8, 33,153, 47,231, 44, 86, 21, 66, 41,170,162,228,173,215, 95,199, 57,203,175,254,198,111,240,189, 31,255, -140, 47,191,245, 6,194,139,110,103, 30,209, 26,131,142,130,102, 90,118,175,161,135, 77,163,217, 49,220,189,236,243,209,123, 91, -152,141, 84, 64, 70, 97,186,234,137,106,219,166, 53,125,184, 81,191, 37,247,107,214,124,119,136,175, 97,125,133,112,226, 51, 10, -144,254, 12, 88,243, 87, 92, 80,143, 56, 31, 46, 47,239, 29, 82, 69, 36, 89,142, 80, 65, 3,238,125,103,246,226, 66,113,216,217, -153, 80, 86, 37,206,121,180,142, 57, 62, 62, 33,201, 83, 84, 36,105,171,134, 36, 77, 16, 14,180, 10,215,229,209,193, 14, 23, 7, -187,124,244,193, 35, 18, 1, 89, 36, 57,126,252, 9, 23, 39,183,241,206, 16, 73, 73,158,102,252,218,175,252, 10, 42,141,209, 73, -204,201,227,167,252,232,143,191,203,179,227,115,110, 30, 78, 24,236,236, 34, 35,201,124,122,197, 98, 54,131,217, 50,172, 33,177, -100,105,130, 7, 10, 91,135, 54,216,117, 90,106,103,200,119, 38, 44, 31,207,113,182, 5,103,112,198, 80,214, 37,121, 50, 36, 73, - 34,188, 11, 77,246, 32,201,145, 82,146,166, 89,144,247, 17, 8,130, 73, 18, 83,181, 13,145,138, 88,206,230, 68,163, 1, 56, 23, -188,244, 9, 57, 19,117,211,208, 90,139,113, 6, 47, 5, 81,172,184,181, 63,102,120,231, 62,231,243, 25, 63,249,248,113,112,250, -239,206, 67, 47, 28,149,169,249, 55,127,248,111,249,143,254,230,239,112,243,246, 61,102,231,159,144,229, 17,222, 41, 86,203, 37, -123,123,183,104, 26, 67,166,123,251,104,183,110,236,232,149, 48, 91, 14,154,155,146,176,149, 23,210,147,227, 88, 51,228, 94, 88, -248,189,181, 56, 99,177,157,221,107,107,108, 32,105,183,129,179,178,134,220, 63, 11, 71,110,194,132,224,231, 23,245,207,155,132, - 95, 84,148,175,199,111,109,166,251,231,139,251,243,133,250,218,228, 45,252,181,204,244, 23, 62,254, 47,184,103,255, 34,233,110, -219, 19,183,248,130, 51,189,223,218,109,188,124, 95, 47,174,117,119,224, 16,210, 81, 54, 5,231,151,167, 12,242,224, 98,116,124, -252, 3, 94,127,243, 29, 62,126,124,204,120,178, 23,228, 21, 94,178,127,176,199,217,217, 41,111,222, 61,160, 88, 92,112,117,242, -140, 73, 26,243,244,209, 71,220, 58,188,201,191,184,248,125,226, 36,161, 46,150,120,239, 88,206, 47, 57,216,185,201,217,217,146, - 97,150, 6,136, 7,137,247,118,141,129, 8,191,209, 54,111,192, 23,255,156, 57,126, 56,228,250, 46,244,133,207,187,236,229, 66, - 2,239, 21, 72,143,242,138,176,214, 12, 4,182,117, 66,149,151, 24, 47, 17, 74,224,172, 65,122,207,151,222,122, 3,103, 26,116, - 28,179, 90, 46, 56,216,159,176, 90,206,153, 47,231,193, 29,171, 92,146,143,198,156,159, 95, 48, 24,228, 36,177,198,251, 17,197, - 98, 73, 18, 39, 24, 91, 17,199, 17,198,122, 38,249,144, 55, 94,125, 13,165, 20,239,125,244, 1,198,154, 16,175,137,231,181,195, - 67, 14,243,140,243,249, 5, 11,229, 73,116,132,116, 26,209, 42, 18,229,137,132, 33,114,161,240, 6,105, 34,157,124,209,135,192, -144, 8,164, 11,158,244,190, 99, 72, 89,231,104,156, 70,216,146, 52,181,193, 13,202,248, 80,247, 9,211,136,138, 52,222,128,117, - 33,133, 11,103,182, 36, 17, 6, 39, 4,109, 7,225,250, 72, 32,173, 71, 88,131,107, 13, 73,156,208,174, 78,209,104, 36,154,251, -227, 12, 34,207,178, 48, 20,177,227,100,190,226,217,119,150,236, 79, 50,190,252,198, 61, 50, 97, 17,174,166, 88, 94, 16, 11,197, -158, 20,140,111,229,252,242, 91,247, 57,155,175,120,118,118,201,229,116,201,116, 89,177,106, 44, 69,235, 48, 91, 23,180,195, 83, -120, 71, 43, 4,133,179, 68,174, 65,182, 33,162, 21,227,209, 30,142, 98,193, 48, 81,188,243,234,136, 95,255,210, 93,222,121,235, - 45,110,220,124,200,201,101,205, 7, 31,125,159,197,226,140, 60, 81, 8,215, 34,108,159, 8, 72,135, 4, 5, 3, 38, 25, 41, 84, - 18,145,142, 6,236, 8,141,138, 52,135,171, 21, 89,165,248,254,233,156, 63,255,243, 31,242,224,230, 95, 37, 31, 78, 88,172, 12, - 79,159,158, 48, 28, 15,112, 58, 34,206, 98,154,186, 32, 75,198, 24, 44,231,151, 51,190,246,229,111, 80,183,130, 60, 82,232, 88, - 99,165, 12, 57,211,221, 36, 36, 68,180,150,161,209, 5,174,244, 9, 94, 33,178,178,251,189,100,136,174,164, 99,119,179,118,124, -243,159,145,217,250,237,227, 98,155,167,210, 93, 55,222,153,181, 2,193,175,163, 49, 55, 42,141,254,190,178,147, 84, 72,225,214, -252, 27,225,253,154,148, 43,132, 88, 75,251,154,166,193, 59, 11, 98, 19, 4,115,116,116,131,211,211,243,176, 30,116,142,199, 79, -158,112,239,238,109,156,183,180, 77,211, 21, 9,143, 18,144, 72,184,181,191,195,155, 15,238,240,233,227,239,241,214, 43,247,177, -197,130, 15,127,242, 99,110,223, 62, 34,214, 41,231,199,199, 8,231, 73, 92,198,124, 53, 35, 31, 14,121,229,225, 91,204,167,115, -156,247, 20,179, 25,131,221, 33, 81,172, 56, 61, 62,167,174, 13,247,111,221,198, 53, 43, 76,221, 18,231, 57,210,134,226, 43,122, -199, 51,111, 81, 81, 20,194, 79,154, 6,109, 12, 77,219, 4, 68,193, 59,172,109, 81, 42,236,170, 27,221,172, 35,118,173, 13, 69, -125,177, 92,117,196,216, 37,227,225, 16, 25, 65, 30, 71, 96, 13,109,211,172,207, 44,183,101,227,221, 75, 53,165,179, 36,190,225, -111,254,230,175,243,254,227,255, 42,172,208, 92,151,117, 65,120,190,255,236,135,223,231,239,254,246,223,225,181,215,223,228,247, - 63,254, 41,187,109, 78, 20, 15,169,202, 50,168, 65,154, 22,134,241,181,236, 19, 41,122,191, 14,121, 13,145,124, 17,198,188, 46, -184,130,117,212,174,240,108, 18,250, 58,146,156, 91, 59,153,118, 69,189,237,110,221, 42,206, 90,187, 62,203, 55, 76, 40,177,101, -209,249, 5, 38,245,151,197,149,126,145,168,211, 53, 60,189,229, 36,246,178,233,252, 51, 19,252,115, 59,251, 23, 53, 0,127,145, -233,252,101, 5,125, 77, 14,123, 30, 73, 23, 27,239,243,207,112, 4, 60,159,129, 61, 94,244,183,121,191,121, 1, 5,253, 1, 34, -186, 83,221,178, 88,204,201,210,140,197,124,206,106,177, 32,137, 99, 86,171, 21,101, 89, 34,133,100,181, 92,114,243,198, 17, 79, - 62,125,196,235, 55,119, 81,190,225,236,217, 39, 76,134, 57, 63,254,225, 15, 57,252,107,223,230,244,244, 18,107, 96, 54,189,194, -185,166,115, 28,115, 44,103, 51,148, 11,198, 32,219,171, 2,255, 18,155,220, 30, 33, 89, 79,224, 91, 48, 97,255,247,250,173, 11, - 41, 16,130,122, 33, 98, 32,248,133, 14,182, 43,244,125,174,122, 31,101,137,192,162, 49,214, 65, 20, 49, 30,100,236, 78, 70,204, -167, 23, 92, 25,195,222,222, 94,216, 67, 35,137,163, 32,149, 73,135,195,224,154, 21,167,156,156,156,177, 90, 45, 24,230, 3,132, - 16,212,109, 3, 29,113,200, 90,194,238, 84, 73, 30,190,250, 16, 29,107,222,253,217,187, 56,107,120,112,243, 22, 15, 38, 3, 90, - 87, 83, 43, 71,137, 67,123, 73, 92, 91, 98,111,168,165, 69, 41,223,177, 84,131,214, 55, 4,238, 72,148,181, 8,225,145, 77, 27, -230, 56,185, 81,121, 24,235,176,222, 16,217,146,209,126, 10,174, 10,111, 97,231,183, 5, 77, 29,138, 17,225, 76,224, 40,244,146, - 22,101,193, 10, 31,164,126, 74,117, 6, 60,174,203,187,143, 16, 30, 6,145,192,154, 18,100, 77,219, 46,240, 78,162,180,102,252, -230,109,158,157, 38,172, 86, 48, 24,236,242,123,223,249,144,209, 64,241,229, 55,111, 49, 24,140,112, 85,129, 45, 87,204, 46,159, -177, 60,125,198, 96, 50,225,141, 93, 77, 51,217,165,176, 17,165,129,243, 89,201,249,108,193,162,172,104,154,150, 36,146,164, 78, -161,107, 79, 36, 29,185, 18, 12,116,204, 80, 71,136,129,101, 56, 84,188,122,119,196, 43,247,238,113,235,224, 6,183, 14, 15,216, -191,117,155, 63,251,240, 17, 79,166,115,116, 57, 37, 81, 14,111,204,250,192,235,255,126,185,222,103, 43,148,208,168,200, 19,231, - 25,101,227, 65, 9,170,203, 57,222,199,196,194,177, 90, 45, 89, 46, 11,236,206, 46,198, 7,121,102, 20, 39,100, 58, 34,201, 18, -150,243, 25, 46, 15,129, 50,117, 83,115,114, 62,195,189,246, 10,174,147,234,201, 40,184,119,121, 23,166, 93,215,217,110, 6,168, - 60,236,208,125, 71,138,236, 97,245, 62, 64,197, 91,215,161,224, 98,189, 59,151, 62, 16, 28,165,148, 27,103, 69, 64,250, 14,218, -127,206,200, 70,136, 45, 34, 84,215,244,175,225,120,239,215, 83,125,223, 89,123,215,201, 45,165, 66,168, 14, 57, 91,115,124, 66, - 99, 34,163, 8, 45, 4,222,152,245,225,239,187,117,218,141, 27, 55, 56, 62, 57, 37,138, 98,164,144,156,159, 95,112,120,176,191, - 38,251,246,219,134, 52, 86, 12,243,152, 27,251,187,188,249,250,171,204, 93,204,189,187,119,137,133,103,118,126, 78, 60, 24,178, -191,179,195,217,201, 49, 35, 59, 97, 48, 25,211,182, 45, 34, 10,141,151,247, 48,222,219,193,123, 67,146,231,220,123,248, 26, 77, -213, 98,235, 10,239, 97,177, 90,146, 88, 67, 58, 25,132, 21,153, 49,168, 72,161, 85, 4,141, 33, 73, 34,108,211,160,140, 13, 48, -189, 8,102, 51,206, 74, 44,182, 75,120,244, 84,117, 29,164,125,109,139, 23,130, 69,177,226,106,182,192,186,128,252,214, 77, 13, - 46, 20, 62, 29, 69,100,113, 28,100,154,198,130,148,129,223,227, 45, 74,107,146, 44,227,232, 96,151,252,198, 17,227, 60,165, 92, - 53,244,158, 90,253, 81,118,113,113,201,187,239,191,199,131,251,247,137,243,140,186,110,208, 4,228, 96,190, 88, 96, 14,242,206, - 75, 94,116,150,192,178, 35, 93,138,142, 47,242, 25, 28,119, 99, 7,117,125,225,189, 46,250,219, 81,215,189,106,200,154,237,130, -110, 3,105,110, 93,212,221,186, 78,189,216,146,123,243,239,232,139, 58,191,109,195,224, 61,124,203, 11, 32,113,177, 69, 76,186, -166,105,247,108,197,169,242,194,157,253, 54, 61, 63,232,213,197, 90, 63,187,173, 5,253,188,232,213,207, 51,191,241,226,197,223, -217,203,185,232,211,119,156,219, 42,210,174,139, 78,164, 43,150, 91, 28, 3, 33,122, 48,230,165,127,139, 16, 2,215,191,121,197, - 38, 30, 86, 10, 9,182,165,169,107,202, 85,193,211,143, 31, 49,201, 19, 86,203, 75,156,111,152,207, 47, 56,216, 25,113,118,242, - 9, 7,163,155,252,236,131,255, 47, 85,253, 14, 41,158,199,143, 62, 98, 48, 28,112,242,248, 19,174,102,223,162,188,188, 98,249, -244, 9, 77, 49,133,213,105,144,121,181, 37,170,158,209, 10, 75, 83,214, 33,209, 71,117, 69,187,143,146,220,138,109,124,222,116, - 72, 73,191, 49,148, 17, 27, 66, 93, 56,168,196,218, 52, 70,116, 65, 25, 10,137, 70, 16, 17, 58, 88, 37, 21, 74, 40,116, 7, 91, - 43, 41,187,162, 30,220,236,172,243,140, 7, 49,245,252,140,129,214, 76, 43,139,109, 29,151,103,231, 28,221, 56,164, 44, 11,234, -170, 64, 71,146,197,213, 5,243,229,130, 76,199,164,122, 64,107, 44, 85,211, 96,157, 71,201, 16, 4, 18, 71, 10, 99,131, 72, 93, -171,132, 7,119, 30,208, 46, 87, 92, 93,158,176, 63,212,172,204,170, 27, 71,195,225, 44,112, 88, 97,176, 17,120, 37,240,145,192, - 9, 27, 14,116,103, 17,222,160,108,180,158,218,193, 62,151,246,183,185,166,134, 56, 38,145, 68,168,240,220, 40, 17, 97,188,197, - 71, 96,171,118,157,235,173,132, 70, 58,137,112,193, 96,169,238, 7, 54,239,193,182,161,121,232, 44,195,109,219,160,132,198,137, - 8, 17, 37, 24,231,186, 92, 97,137,198,227,150,167,220, 31,198,136,113,130,136, 29, 55, 14, 94,227, 71, 31, 61,227,191,249,131, -159,241,246, 43,135,164,206,176, 59,136,153,236,238,147, 68,193, 53,207, 90, 71, 83,172,216,207, 34,108, 36, 24,103,150, 91, 34, -194,140, 38,148, 85, 96,233, 71, 64, 18, 57,178,200,145, 68, 53,251, 59, 57,131, 76, 51, 24,230,220,188,117,192,120,146,147,100, -251, 72,189,131, 31, 30,242,232,233, 25,167,159,126, 8,205,130,178,184, 36,157,140, 66,177,140,100, 8,254, 80,225, 26,178, 62, -188, 86, 1,100,247,228, 73, 76,107, 20,205, 32,162,172, 64, 69, 51,204,170, 96,146,104,166, 39,103, 92, 29, 79,185,127,120, 27, -225,107, 4, 21, 24, 24,231, 57,190,109, 72,117,196,106, 89,176,179,191, 79, 18, 55,204,202,150,147,249,146, 52,206,137, 37, 68, -174, 5, 37,113,113, 26,136,110,184, 96,197,185,245,250, 41, 25,225, 59,221,250,218,104, 70, 8, 84,164, 59, 69, 71,192,116, 69, -159, 85,237,183,172, 96,251,179,161, 91, 21,246,252,141, 30, 82,239,237,164,125,159,124,232, 2,119,162, 71, 9,144,178,243, 82, -232,179, 46, 66,211,128, 20,200, 36,134,214,116, 69, 45, 52, 71,189,221,172,148, 2, 21, 71,152,214, 32, 68,248,221, 28, 30,169, - 20,119,238,221,230,244,236, 28, 37, 34,202,162, 97, 54, 43,200,243,172, 35,246,129,140,163,255, 31,107,231,217, 35, 89,146, 94, -231, 39,204, 53,233,203,118, 87,251,158,153,229,206, 82, 67,129, 2, 41,174, 0,126, 89,254, 0, 9,144,126,182, 8,154,221, 89, -106,199,187,158, 54,213,229,211, 93, 27, 70, 31, 34,238,205,204,106, 55, 43,237, 0, 5,244, 20,186,203,100,221,138,120,205, 57, -207, 33, 69, 50, 28, 85,140,167, 67, 14, 78,142, 57,218,123,132, 28, 14, 40,150,151,248, 85,205,129, 78, 88,173,231, 40,237,104, -138, 18, 45, 53,214,120,246,166, 99,178,196,209,214, 45, 73,166, 65,196, 66, 69, 75,146, 73, 78, 50, 74,113,237, 0,125, 48,237, -139,120, 76,139, 18, 18, 95, 53, 65, 29,230, 27,132,111,208, 13,216,198,115,189, 88,178, 46, 86,204,102, 99, 70,217,128,170, 89, - 96,189, 64,165, 25,251, 7, 7, 97,215,236, 12, 22,201,197,197, 53, 6,133, 74,242, 32, 24,116, 14,169,160,105, 67,129,147, 9, -135,114,109, 88,109, 38, 41, 94, 10,108, 83, 65, 85,179,242,154, 86, 42,102,153,226,175, 30,158,112,254,213,243,240,123,142, 11, -241,184, 78, 96,156,225,223, 62,255, 87, 62,249,239,255,131,147,135,159,114,245,243,215,204, 38, 5,215, 55, 23,228,147,156, 85, - 49, 4, 63,140,182, 70, 13, 50, 32, 94,149, 16,104, 33,208,194,247,206,162,224, 47, 17,193,238,186,109, 43,101, 51,189,243,236, - 90,133,165,143,171, 42, 31, 18,223,108, 15, 60,139, 34, 93,103, 99,200, 81,231,101,241,111, 52,146,219,247,154,254,165,227,235, -219, 59,117,239,119, 7, 13,239,203, 78,191,189, 23,247,189,134,233,255, 95,228,246,151,218,167,223, 14, 45,233,157,132, 91,222, -236,247,141,226,111,119,234,239, 10,200,145,114,183, 0,112,214, 5, 10, 92, 81,113,116,112,196,197,217,107, 38,163, 1,215, 23, -231,140,135, 3,230, 55,151,220,125,244,132,114,189,228,250,250,156, 44, 81,156,190,122,198,253, 59, 39,156,190,252,137,249,229, - 37, 26,199,247, 95,126,129,175, 43,174,127,254, 30, 95,175, 16,245,154,166, 42,177,150, 88,213,111, 56,225,155,239,211,191,231, -245, 20, 59,180,185,174,211,238,172, 92,206,197, 3,138,160,238, 15,220, 30,143, 87,126,131,123,239,244,214,221,222,144, 77,146, -159, 82, 2, 83,175, 81,126,134,173, 27, 18,160, 92,205,153,237, 77,105,202,146,155,171,107,148, 78, 89,175,214, 24, 27,112,164, -206, 85, 28,223,185,203,213,245, 77,232,194,132,196,251,224,111, 22, 66, 81, 46,214,225, 82,140, 35,173, 39,143, 31, 99,235, 53, - 69, 81, 34,124,136, 14, 13,236,116,139, 54,161, 51, 40, 68,131,214,157,189,184,139, 91, 13,157,181, 82, 46, 6,125,185, 29, 26, -225,142,152, 84, 38, 28,230, 97,111, 41,164,198,118,101,158, 8, 74, 91, 31, 49,111,225, 53,151, 72,153, 32,101,139, 84, 33, 28, -198,251, 77, 84,157,113,174,127, 70,124,204,212, 14, 95,115, 44,162,226,170, 68, 75,133, 16, 22,111, 75,164,183, 40,175,200, 82, -201, 63,252,230, 33,147, 92, 34,244,128,155, 69,201,179,159,151,224, 44,199,211,140,163, 81,194,131,253, 17,123,195, 28, 47, 18, - 28,208, 82,224,189, 5,229,152, 78, 4, 16, 72, 85,169,134, 68, 89,198,131,148,201, 56,101,111, 54,227,254,253,251, 76,166, 51, - 90,227, 73,210, 9, 94, 40,190,251,241, 75,170,245, 53,216, 37,195,180, 69,232,113,188,124,130,224, 76,117,163,202,142,199,174, - 18, 16, 10,229, 19,132,213,100,153, 38,111, 37,217,176,101,124,247, 16,245,172, 38,183,142,124, 24,232,121,235,170,164,172,215, -172,150, 11, 70,119,198,164,105, 74, 85,213,100, 89, 32,206, 57, 23,200,105, 66, 42,126,248,249, 37,247,143,255,154,134,240,179, -208, 74, 98,125,139,240,250,205,137, 98, 7,143,233, 85,237, 27, 10, 29,221, 51, 42, 4,214,155,254,176, 18, 91,222,243,119,165, - 73,110,176,195,113, 57,222,235,130, 58,130,162,221,141, 38, 20, 98, 11,231, 33,250,173, 76, 80,234,107,100, 95, 56,135,202, 58, - 16, 19,227,199,143,193, 82,200, 96, 77, 28,140,134,220,149,119,120,241,243, 43,188,247,188,124,249,138,227,227, 67,246, 15, 14, - 34, 27,220, 33,132,103, 52, 30,161,179,156,241,116,159,209,221,187, 60,126,252,148,139, 83,137,169,214, 52,206, 51,217,219,227, -234,250, 18, 33, 4, 55,151, 87, 28, 28, 28,113,115,125,201,157, 7, 67,202,186,100,224, 71,136, 68,134,108,129,173,213,163, 16, -130, 52,203, 67,224,114, 20,184, 73,209, 77, 50, 60,222, 88,108,107,208, 73, 70,213, 86,156, 95, 92,208, 52, 13,206, 26, 4, 81, -131,224, 61, 90, 4, 34,156, 49, 13,206,180,148,141,165,181, 6,148, 98,177,152,179,184, 58,103,156, 73, 82,173,169,235, 10,103, -108, 88, 87, 52, 13, 89,146, 80, 52, 21,137, 82, 76, 6, 67, 26, 19,108,199,179,201, 24, 83, 87,252,227,223,255, 23,254,227,199, - 83,230, 85, 29, 9,147, 61,144,156, 47,190,250,130,197, 63,253, 19, 39, 39, 39, 60,255,250,143,232,196, 50, 73, 20, 77, 93,115, -117,125, 67,243,224, 24,239, 69, 23,252, 23,169,154, 50,230,104,108, 66,131,250,181,249,123,118,182,254, 45, 19,223,221,168,235, - 24,165,106, 67,215,110,141,197,110,197, 91,127,232, 63,253,161, 49,250,251, 20,231,191, 68,161,190, 43, 16,217,126,200,253, 95, - 72,177,206, 95,236,227,236,196, 33,238,248, 0,253, 95,228,107, 20,183,118, 48, 97,252,100, 41,214, 5,179,241,132, 97,150,240, -211,203,103, 28,156, 60,228,230,234,146, 71,247,159,242,252,187,239,120,122,231,144,225, 48,163, 88,223,176, 55,155,112,113,241, -130, 59,251, 83, 92,187,230,250,244, 5,163, 68,115,254,252, 57,162,109,120,249,221,215, 20,151,175,176,179, 67,202,170,192, 20, - 77,175,118, 15,138, 99,191,133,171,220, 21, 36,190,115,213, 17,167, 38,155, 46, 94, 6,187,151,148,120,103,250, 7,209, 56,131, -178, 18, 47,193, 57, 17,223,108,188,220,229,142,232, 80, 74, 79, 91,174, 41, 22,151, 20,203, 5,249, 96,130, 18, 83,234, 34,120, - 81,199,147, 25,243,197, 10, 17, 73,125,121,146, 49,153, 78,169,170,130,182,174, 66, 20,165,177, 8,149,144,102, 57,109, 99, 2, - 2, 87, 64,150,104, 4,142, 84, 13,152,205,102, 92,158,189, 38, 79, 20,180, 6,161, 4,173,105,144, 74, 4,101,176,119,164, 73, -160,176, 73, 17,194, 48,148,148,224,235, 48, 86,147, 30, 41, 93,159, 57,191, 1,125,138, 24, 69,105,248,245, 71,247,208, 82, 96, - 35,173,174, 43,106, 36, 14, 37,125,111, 11,236,236, 85,170,213,241, 99, 5,216, 77,247,172,133,139, 60,142,136,165, 8, 10,225, -232,201,237, 10, 76, 25,166,213, 33,239, 28,144,210,163,125, 13, 86,144,139,150,223,126,114, 68,105, 20,167, 67,205,252,112,194, -217,162,228,231,179, 75,150, 45,156, 94,157,115, 48,204, 24,103, 34,250,234,161,109, 29,163, 97,194,120,152, 98,218, 18, 79,232, -196,108,219,130,202, 64, 15,200,198,251,136,100, 76, 81, 43,132, 72, 89,175, 27,230,203, 83,174,111,206, 80,162, 33,147, 6,172, - 67,144,224,172, 15,204,118,228, 6,203, 42, 58, 54,122,160, 38,122, 23, 10,198, 60, 79,105,189,166,182, 65, 40,116, 84,214, 52, -175, 46, 67,100,107,174, 89,212,107,238, 29, 30, 49,191,153,135,142, 84, 6,218, 64, 85,215,148, 77,205,120, 60,101, 54,155, 33, -181,228,244,234,146,207,191,125,198,103,191,126, 10,137,100,164, 28,137,112,224, 37, 66,167, 17,241, 76,100, 13, 56,164,151, 72, -173,183,194,135,182, 14,230,174,240, 20,201, 45, 1,172,232, 33,159, 27,135,144,220, 28,206, 91, 80, 43, 47,101, 24,242,137, 46, -248, 58, 20, 58,222,219,126, 29,215,141,253, 3, 17, 80,246,254,116,175,162,192, 88,138, 80,160, 90,135, 51,166,215, 61, 8,165, -194, 86,117, 11, 83,223,182, 45, 74,107, 14,143,143,120,249,242, 37, 30,207,233,235,215, 8, 41, 57, 60, 60, 68,225,209,198,209, -164, 25, 22,197,116,255, 0,148, 38, 31, 14, 24,140, 39, 44,173, 69, 8,205,195,199, 15,131, 86,164,105,194,115, 96, 91,188,179, - 76,247,246, 25, 78,166, 24, 95,163,253,102, 61,231,108,232, 29,149,212,225, 87,220,250,157,134, 79,106,141,183, 6, 15,100,105, - 74, 34, 37,171,186,230,230,242, 10, 1,225,242,118, 41,120,195, 40,207, 24, 14, 50,242, 44,165,174, 26,156,183,220, 44, 87,209, - 50, 40, 16,206,146,231, 41,131, 52, 76, 95,150, 55,107,134,131, 65, 16,152,121, 79,166, 36,149,179,248,186, 70, 9,205,217,217, - 41,185,148,100, 90,163,128, 7,135,251,252,245,147,251,252,219,215, 63, 80,223, 58,210, 23,203, 21, 95,124,243, 53, 79,143,142, - 73, 6, 35,140,107, 88, 44,150, 40,157,176,200, 37,243,197,138,201, 40, 3,239,122,160, 83,215, 4,116, 69,235,110,170,229,219, -111,247,157,145,123, 28,199,191,237, 66,183,182,179, 17,219, 24,218,226,223, 41,198,126,227, 82,191,109, 69,219,254, 71,183, 57, -235,183,187,116,241,150,209,252, 59,139, 4,255, 97,139,219, 27,159,243,255,225,226,220,254, 58,223,120, 49,197,251, 69,119,111, -223, 80,248, 91,170,185,219,175, 9, 59,123,146,247,126,125, 93, 7,183,165, 12,247, 24, 90,211,226,173,101,113,115, 5,182, 33, -213,130,171,139,107,154,163,187,212,213, 10,103, 42,246,166, 51,230, 55,151, 60,152,229,188,124,249, 2,211, 20,248,118, 69, 57, -191, 64,154,154,243,151, 47, 17,198,177,184,188,128,182,192, 86, 75,240,142,117,177,238,187, 17,231,123,157,100, 47, 23,216,134, - 92,109, 48,213,193,167,219,117,230, 93,122,144,234,213,238, 49,241, 74,200, 64, 83,179, 29, 41,207,210, 24,135,199,145,110,169, - 58,117, 28, 85,117,194,186,208,117,120, 52, 13,213,106,142,111,214,180,180, 56,103,200,211,132, 60,145, 72, 28,214,180, 12,178, -140,245,186, 32, 85,146, 98,185, 64, 40, 73, 34, 65,102, 9,109,162, 89, 23, 53,165, 13,234,208,245,170,160,108, 26,116,154,147, -104,141,113,146,131,131,163, 16,126,225, 26, 76,219, 96,155, 22,239,131, 55, 91,250, 20,239, 29,117,171,240, 46, 12,206,100,180, - 30,117,151, 38,120,148, 14,218,128,206,235, 45,162, 14,195, 57, 75, 91,213, 76, 70, 31, 33, 69, 64,199,134, 75, 61,240,106,125, - 79, 84, 12,235, 22,143,235,125,198,206,219,184,161,234,132,136,225, 96,240, 46, 20, 68, 2,143, 82, 93, 1, 40, 67, 39,227, 92, - 4, 49,135,177,177,210,138, 84,117, 81,165, 14,231, 42,132,107,201,132,100,239, 40,101,209,122, 30,204, 38,156, 78, 18, 94, 94, -172, 88,213,130,186, 82,164,171, 5,182,109,201,147,132, 81,150,177,186, 94,115, 57, 47, 80, 2,164, 76,194, 56, 90, 56,100,166, -217, 31, 28,224,146, 9,175,231,107, 50,221,224,141,227,102,126,142,144, 53, 74, 5,244,176, 21, 97,156,109,241,104, 45,122,251, -235, 78,170, 99, 12,132, 23, 66,162, 85,130, 80, 26, 33, 82,172,132,214, 11, 74, 60,119,239,223,163, 92,183,168,241,136,162, 42, - 57, 78, 52, 69, 85,146, 38, 65, 40,102,140, 65, 39, 9, 58,181, 12, 6,195,128,204, 52,150,147, 59, 71, 36,105,202,231, 95,255, -192,201,195,199,228,195, 1,178, 41, 73, 50,209,163,113,149,146,155,217,148,183, 81,184, 22,198,222, 97,226, 18, 87, 98, 29, 80, -198,111, 39, 81,110,159, 27,162, 23,252,117,127,238, 45, 82, 81,188,230,133,140,107,187, 77, 48, 12, 46,124, 14,108,252,123, 46, -174, 26, 69, 32,198, 9,223,237,234,163, 55,222,249, 72,179, 11,197,166,143,188,131,109,171,166,237,192, 37,125,177, 28,136,126, -143,159, 60,142,204,125,248,241,167,159, 72,210,148,189,189,125,156, 51,212,198,179,172, 45,227,189,187, 52, 50,163,174, 42, 38, -179,125,234,198, 4, 44,233,186,228,206,201, 9, 87, 23, 23, 12,242, 1,211,201,148, 27, 4,167, 23, 55,220,123,120, 72,154,133, - 51,171, 11,111,234, 9,146,209, 69,227,227, 58,206,123,143, 55,109,111,117,117,214, 50,200,114, 92, 83,210, 20, 21,151,151,151, - 56,167,130, 19,195, 91, 18,173, 34,226, 88,160,117, 74,221,180,212,109,205,205,124,201,170,172, 73,179,140, 65,158,161, 49,164, - 74, 98,234,154,170, 44, 56,216,223,199,182, 13, 94, 73,218,182,162, 42, 10,154,178,162,170, 91,158,189,120,205, 32,207, 24,102, - 57,197,106,193, 64,122, 62,125,116,194, 87, 63, 62,167,174,154,158,186,232,227,239,243, 31,254,248, 57,159,253,207,255,197,221, - 7, 15,248,254,219, 47, 72,135, 21,117, 94,114,113,102,121,254,226,140, 79,127,245,164,127, 60,182, 51, 0,164,216,141,247,221, -209, 90,253, 25,140,182,205,197, 30, 47,243, 91,124,144,247,221, 47,219, 91,118,253, 46,171,218,219,178,198,111, 95,248, 31,186, -200,223, 45,110,123,123, 2,220,187,198,254,239,178,197,189, 79, 0,247, 86, 17, 94,119, 40,255, 2,193,222,198, 59,176, 27, 5, -251, 46, 84,237,135,194,101,118, 57,211, 91, 57,206, 66,210,180, 45,197,122,197,252,250,138, 52,203,105,202, 53, 77, 85, 80,174, - 87,216,182,161,169,215, 12,210, 28, 83,215,152, 90,211, 84, 21,197,170, 32, 85,142, 76,183, 12,114,197,249,249, 57,123,123,146, -178,106, 73,146,140,211,211, 87, 8,185, 31, 30,134,232,135,237, 66, 77,132,163,127,223,110,221,226,145, 94,198,113,249, 46,198, - 87,198,162,168, 59,156,164,220, 68, 5,134,157,160,236, 31,190, 16,126,211, 6,116,168,181, 40,173, 66, 52,103,236,208,113, 2, -173, 60, 10,203,245,229, 37,152, 18,169, 21,249,168, 65,120,199,104,118, 68, 83, 23, 40, 5,203,197, 53, 74, 40,234,170, 33,201, - 18, 50,157, 83,196, 27, 51, 28,132,129,180, 50, 26, 13,153,207, 23,228,105, 66,107, 27, 90, 27, 32, 42,163,201,148,117, 89,161, -124, 67,158,165, 36, 89, 66,219, 84,168, 84,163,148,192,154,182,215, 7,180,214,160,108, 80,105,219, 72,246, 18, 2,234,218,199, - 12,117, 21, 82,144, 98,101,222, 54, 53,153, 20, 28,204,114,164,111, 81, 74, 97,141,136, 5,142,195, 69,165,123,208,105, 4, 16, -141,139,227,212,144,228,234,251, 50,193,119, 56,208,110, 84, 26,211,187,122, 74, 84,212, 37, 40,161,130,160, 47, 73, 3, 84, 38, -238,134, 37, 32,125,224,127,163, 66,103, 58, 83, 45,251,153,228,193, 40,229,179, 71,143, 40, 93,206,207,175,175,104, 76,141, 66, -177,156,175, 72,146,140,225,100,134,109, 91,156,177,180,181,161, 40,215,180,198, 34,179,150,233,186, 65,103, 5, 89, 38, 57, 63, -127,133,162, 1, 12, 89, 18,214, 28, 66, 37, 32, 19,172,209,160,194,247,215,253,186,134, 58, 94,246, 92,134, 16,160, 34, 17, 90, -163, 85,134, 64,147,225, 25,142,114, 70, 66,210,150,142,187,143, 31, 50, 60, 60,166, 82, 50,250,185, 37, 69, 85, 49,172,234,144, - 76, 40, 36, 77,211, 50,153,104,132,212, 44,150, 43,244,133,102,186,127,128, 74, 71,252,233,155,103,148,235, 3,254,234,225, 33, - 2, 71,150, 6,176,137,142, 89,229,157, 85, 77,244,226, 77,181,217,143,239,172, 4,217,217,153,203,109, 20,246, 54, 41,206,135, -117, 73,127,176,198,238, 43, 14,102,122, 17,169,144, 91,129, 82,253,199,140,231, 70,180,254,137, 24,244, 18,186,244,216,217, 27, - 11,194,135,120,223,206,188, 20,207, 38,105, 68, 88,175, 25,211, 39, 46, 90, 60, 58, 85, 60,253,228, 99, 94,190,120, 73, 99, 90, - 94,189, 62,163,110, 90,246,102, 7,220,172, 27, 26, 82, 70,163, 41,190,117, 44,230,215, 32, 4, 39,247,238,243,195,247,223,113, -250,250,140, 79, 63,253,132,229, 98,137,115, 33, 55, 60,205, 6,188,124,125,198,175, 42,208, 3, 69,154,110,242, 60,148,210, 72, -233,113,241, 2,239,194,133,132,214,193,110,102, 29, 74,120, 18,173, 73,210,148,122, 49,103, 57,159,115,254,250, 2,185,119,191, - 15,183,113,214,162,133, 66, 42, 77,107, 60, 22,199,171,179,115,170,198,177, 88, 44,200, 7, 57,195, 44, 65,227,184,119,112, 66, - 85,174, 67,252, 46, 14,219,182,120, 31,166,134,235,117,136,116, 45, 91,207,233,213,146, 39, 31,125,138, 49,142,225,112,194,226, -230,156,167,247,142,153, 12,114,174,171,134, 91,230, 51,126,122,241,156,162,173, 57,188,119,159, 47,190,248, 19,117, 85, 81, 23, - 37, 2,207,235,243,107, 62,254,248, 81,152,192, 73,185,123,119,137,109,207,248, 27,179,245,173, 80, 43,241,166,183,106, 59,233, - 52, 22,136,187,232,109,215,123,218, 63,212,132,246,150,182, 55,216,222, 31,176,144,237,236,198,223, 33,164,123, 43,221,109,231, -255, 63,172,178,127,219,110,254,109, 35,227, 15, 5,186,236,252,123,241,238,170,169,243, 16,238, 92,208, 91, 72,191,119, 1,122, -186,185,219, 47, 25,141,116, 35,248, 0, 56, 81,125, 23, 38,165,164, 44, 66,122,219,253, 39, 79, 41,150, 55,224, 12,235,197,156, -193, 32,101,121,115,197,112, 48, 98,113,125,131,244, 67,234,162,101,117, 83, 49, 26,230,204, 23,175,152,206,198, 92, 95,174, 73, -235,148,239,159,189,230,228,222,148,124, 48,101, 93,102,100,121, 0, 89,236,132,115,138, 55,189,142,221, 51,231,162,143, 57, 48, -196, 5, 82,111,228,239,178,227,229,139, 78, 64, 24,154, 10, 41, 36, 22,130,133, 41,178,238,187, 12,122,105, 36, 74,134, 28,107, -165, 84, 44, 44, 36, 9,160, 83, 40,218,154, 73,166,201,178, 12,108, 67,185,190,198,122, 71, 58, 58, 96, 56, 24,160,181, 36, 79, - 51,112, 3,164, 18,172,203,134,166, 42, 80, 73,142,109, 91, 6, 89, 78, 89,213,220, 92, 95, 49, 26,229, 97, 45, 80, 24, 60,142, -186,110,201,243, 33,149,243, 92, 92, 47, 72,148,100,152,106, 6,169, 98, 58, 26,162,147, 64, 58, 75, 34,160,196, 89, 29,198,163, - 34,116,115, 74, 73,156,179, 32, 44, 74,105,180, 22, 49,123, 62, 28,228, 90, 37, 28, 79, 82, 6,105,200, 23,111,157, 3,161,227, -248,204, 96, 93, 11, 94,245,137,127,155,103,105,115,113,171, 56,194,115,193,114,143, 19, 97, 60,188,161,253,133,169,138,150, 33, - 16, 69,136,168,184, 85, 10,165, 18,180, 78,251,231,207, 25,131,183, 38, 74,113, 36,194,121,116, 83,129,179, 12, 85, 67,226, 20, -159,221, 29,208, 38,147,120, 8, 30,147,232, 64,226, 90,175,214, 76, 38, 99,188,131,197,124,206,197,213, 57,143, 31,159, 48, 25, -229,184,182, 96, 93, 86, 72, 95, 35, 68,141,179, 38,230,199,131, 67, 97, 93, 80,146,135, 61, 35,177,112,233,138,153,205,159, 65, - 69,248, 76, 20,120, 73, 65,146, 42, 50, 36,114,109,145,249,128, 50, 11,132,191, 59, 7,119, 25,231, 99,202,186, 66,103, 57,117, -211, 34,171,154, 89,228,124,183,198, 4,128,211,222, 30,147,201,140,253,189,125,206,206, 47,248,246,219, 31,152, 95, 95,130, 23, - 60,190,127,135, 3, 21, 28, 4,206,249,224, 25,223, 66,179,118,209,194,157, 2,222, 58,183, 51,181,146, 66,246,200,118, 27,139, -174,254, 32,222, 58, 76, 58, 1,176,148,170,239,180, 2, 59, 62,248,205,195,103,218,196,175,122, 21, 38, 86, 62,242, 26,112,193, - 50, 8,190,167, 82,246, 22, 60, 37,250,181, 79,167, 83, 9,157,190, 71, 8, 23, 98, 97,189, 38,213, 73,252, 91, 14,161, 82,144, -146,199, 79,159,112,117,121,205,124,190,224,217,243,231, 92, 47, 74,174, 10, 79, 54, 59, 98, 94, 52, 60,126,112,159,166, 46, 57, - 61,187,224,227,143, 62, 65, 75, 73,146,167,252,248,253, 15, 76,166, 83, 22,139, 37,199,119,238, 83, 87, 13, 74,231,124,241,229, - 51,126,247,187,207,240,126,213, 39,147,120,231, 66,216,139, 12,209,180, 97, 20,110,251, 24, 92, 39, 37,182,173, 81, 8, 92,107, -169,214, 5,231,103,231,180,117, 69, 46,130,213,179,181, 6,225, 58,124,171,162,170, 91,206,111,174,185,188, 89,134,220,112,239, - 24,141,134, 92,157,157,242,240,238, 17, 82,120,188,181,164, 73,130,183, 21, 78, 56,108, 3, 42,213,212,198,112,122,126,197, 55, -207, 78,145,195, 25,217,112,128, 74, 51,234,186, 65, 10, 24,106, 73,162,211, 55,218, 92, 47,161,172,107,254,240,199,255,224, 31, -254,246,111, 25,205,246, 89, 45,151,164, 82, 50, 24,142, 49, 46, 52, 76,233,214,221, 35,227,219,238,157,182, 61, 78,167,231,186, -227, 92, 95, 60,184, 45, 4,247,155, 59,245,120,137,119, 29,186,219, 85,201,191, 43,200,108,123,236,175,127,145,231,252, 29, 59, -243,219,234,247,219, 29,240,159, 19,193,250, 54, 81, 93, 63,222,126,163,243,125,119, 71,252,190, 53, 66,191, 54,120,151, 53,111, -171,186,242, 59,246,131, 15,239,224,111, 95,234,111, 47,110,216,216, 32, 98,231,213,237, 28, 87,171, 21, 90, 4,149,108, 91,149, -164, 42,167,170, 10,142, 15, 15, 88, 46, 22,220, 59,184,195,233,179,151, 52,163, 49,206, 8,156, 85, 97,164, 53,212, 12, 71,119, - 40,202,215, 28,222, 57,193,122,195, 71,159, 62, 97,189,170,241, 85,194,104, 10, 69, 85,243,253,179,111, 99,117, 29,191, 47, 47, -222,254, 2,136,240, 32, 18,253,231,194,196,252, 61,185,177,248,109,132,118,155, 2, 74, 18, 15,199, 14, 59,235, 28,222, 5,212, -110,107,226,197,216,161, 58,145, 88, 41,144,195, 33,180, 41, 22,207,186,168,152, 76, 70,224, 26,230, 55, 23,136,178,230,240,206, - 3,172,177, 56, 41,104,234, 10, 15,180,198,145, 38,138,214,182,161,147,104,215, 64,216,131,183, 54,236,247,243, 60,165,172,154, - 32,216, 65,176,183,119,196,243,235, 27, 42,235, 89,151, 13, 73, 9, 87,203, 50,192, 54,178,132,113,166, 24,164, 58,224, 87,195, -214, 53,174, 74,194, 84, 66, 73,223,139, 97, 68, 20,231,133, 98,204,115,239,100,136, 32,236,243, 93,228,192, 91,103,113,222,108, -186, 47,239,240,222, 68,123, 81, 80,222,122,111,227,243,227,122,172,171,144,160,147,104, 28,217, 74,209,235,158,147, 52, 73, 72, -146, 20,173, 21, 74, 71,229,182,232,216,244, 97,143,235, 44,200,122,137, 3, 26, 20, 75, 47,240,164, 72,227, 72,156, 65,214, 37, - 42, 90,148,146, 52, 39,145, 13,179,125, 73,122,178, 23,145,169, 32,213, 61, 90,115,140,107, 45,174,109,240,141,192, 9, 69, 93, -121, 90,239, 17, 54,160,113,133, 22, 52,182, 6, 74, 18,173,208, 62,199,123,221,123,168,119,138,122, 73,191,103, 23, 66, 5, 90, - 91, 28,183, 6, 86,178,227,244,250,138,102,152, 80,181, 53,199, 22,206, 95,189,198,198,174, 90, 39, 58,144,208, 70, 99,180,210, -177, 75, 12,151,104, 85, 86, 44,174,111,184,127,247,132,182,108, 40, 43,203, 87, 63,156,114,113, 83,241,217,227, 41, 15, 14, 71, -164,121,138, 74, 37, 50, 6,180,120,182,216,239, 91,150,219,141, 55, 61,218,151,162, 75,100,251,236,184,109, 95,186,221, 76, 72, - 69, 4,196, 16, 62,159,143,135,122, 28,151,247, 21,244, 54,106,214,198,247, 59,136,232,174,222, 93,209,243,230,183,153,160,194, -133, 0, 26, 66,193, 25,156, 6,146, 44, 77, 55,184,100,224,248,248,152,201,120,194,243, 23,175,248,241,217,115,174,234,132,189, - 7,191, 70,249,132,213,106,201,195,251,119,121,121,250,138, 23, 47,126,230,238,241, 33,175, 78, 95,133,108,240,241,136,214, 58, - 94,159, 95, 48, 26,206,152,238,221,229,230,250, 25,175,207, 23,220, 57, 74,241, 62,140,224, 93,219, 6, 20,177, 78,194,100, 66, - 8,124,235,240,198,198, 72, 91,141,183, 45,222,134,223, 15,219, 26, 94,189,120,201,193,225, 1, 23,101,137,101,218, 23, 69,206, - 5,177,221,243, 87,175,153,175, 87,120, 21, 38, 53,195,225,128,170, 44, 25, 13, 6, 28,236,207,112,198,160,113, 8,103,112,222, - 96,188,195,122,112, 62,197,120,207,179,103, 63,243,167,111,126,230,240,163,207,112, 72,156,144, 84,198, 50, 30, 12,152, 74,141, - 78,146,216,180,108,203,133, 67, 36,235,239, 63,255, 3,191,253,251,191,231,233,199,159,240,167,127,253,103,152,132,159,213,124, -177,226,252,236,130, 71,119,199,187, 23,130,216,118,103,177,181, 23,183, 59, 35,116,209, 77,112,252,230, 57,232,166, 52,221,159, -157,117, 49,193,210, 97,157,141, 54, 54,215,167, 95,190,237, 50,239,223,196,230,255,181,247,219, 8, 81,113,107,111,252,230,212, -222,111,117,120,219,250,247, 55,162, 78,125, 64,223,201,237, 76,225, 91, 31,243, 93, 2,188,157, 34, 65, 8, 92, 63, 6,143,196, - 39,215,133,109,244, 31,181, 55,246,203,173, 69,113,223,144,118,163,227,248, 11,189,179,199,232,188,102, 62,170,127,125,176, 13, - 56,100,200,172,246,193,143, 42, 98,116,159,187, 29, 2, 19,171,230,136,240,221,161,226,117,163,153, 78,152, 38, 17, 17, 90, 96, -209, 66, 96, 99,182,179,151, 18,153,104,218,170,160, 92,173,240, 6, 84, 54, 96, 93, 87, 60,202,135,204, 87, 43,134,105,194,157, -195,125,188, 82,124,244,201,175,201, 71, 3,158,124,244,119, 12, 7, 35, 38,179,187,220,220,120,178,116,192,183,223,125, 73, 81, -173,152, 30,222,225,186,146, 72,165, 73, 7, 73, 88,211,181,126, 39,200,226,109, 21, 74,119, 41,123, 39,227,229, 19,121,229, 90, -198,221,169,136, 62,106,177,197, 62, 8,145,174, 68, 4,172, 36, 4, 86, 56, 39, 67,232,139,216,222, 47, 57,132, 15, 41, 83,131, -193, 8,161,160,117, 13, 82, 67,109,192, 85, 5, 50,205,104,150, 55, 20, 73,202,104,186, 79, 85,149,193,110, 36, 37,121,158,176, - 46, 43,154,186,198, 24, 79,146,230,172,203,154,182,105,177, 46, 4,135,212,117,217, 99,187,171, 98,197,222,100, 66, 34,101,216, - 99,199, 3,188,118, 17, 30, 99,106, 46,215,225,199,175, 54, 56,110,116,196,197, 38, 74,144, 42, 72,164, 32,145,138, 68,202, 40, - 58, 12,202,131,255,116, 50, 70,197,143, 7,193,255,220,122,139,117, 2,225,117,175, 43,232,126,209,125, 23, 93, 25,133, 69, 29, -111,223,187,208, 9, 74,233, 16, 42,252,158, 41, 29, 98,114,181,146,164,105, 74,154,102, 33,226, 87, 42,148, 20,225,112, 18, 18, -231,130, 96, 79,120,143,245, 50, 90,226,170, 16, 32,100, 37,206,107,140,113, 33, 81, 80, 73,180, 81, 40,111,113,190,198,218,150, - 52,211, 72, 26, 82,175,208, 36, 1, 6, 20,231,196, 6,131, 21, 22,164, 11,108,245, 54,184, 31,140, 15,107, 11, 37, 99,138,157, -143, 59,243, 62, 17, 15,140, 13, 0, 24, 29, 35, 75, 59, 90,130,142, 33, 41,198,122, 26,227, 88, 87, 13,151,101,201,124, 85, 32, -135, 67,180, 74,162,143, 89, 49,222,155,177, 92,174,163,226, 95,209,180,134,166,109, 25,140,198,212,109,131,175, 29,147,189, 41, - 66, 75,234,186,225,206,201, 93,206, 47,175, 24,207, 14, 40,141,227,219,179,138,203,210,242, 87,143, 79,152, 8,144,202, 5, 62, - 59, 46, 70, 68,235, 45, 75, 42,125, 20,102, 47,156, 19,190, 91,137,199, 2,192,111,124,206, 91,183,130, 23,187,205,132,239,246, -224,116,152,225,221, 24, 99,188, 11,235,139, 40, 34, 12, 77,182,219,156, 87, 91,172, 14,239, 58,156,236, 38,174,213, 69,214,133, -212, 58,128, 75, 92, 92, 11,233, 36,132,218,160, 17,110,133,118, 53, 90,194,209,157,123,124,115, 90, 51, 62, 60, 98, 56,154,208, - 24,139, 78, 19,170,166,225,232,232,152,249,245, 53,119,142,142,130,166, 79, 10,174,174,230, 76,166, 51,170,170, 70, 39, 18,148, - 37,205, 39,252,235,191,127,199,239,126,247,183,228,153, 35,145, 30,169,116,127,174, 58,103,195,121,166, 36,206,152, 16, 63, 28, -163,102, 49, 53,184,146,245,186,226,114,225,121,250,233,223,241,252, 15,127, 8, 49,162,198,161,132, 32, 27, 12,144,105,202,213, -197, 57, 66,133,241,125, 85, 55, 36, 2,172,169,248,232,193, 9,218, 6,168,143,151, 32, 48, 56,211, 68, 43,170,199, 91,131, 18, -154, 31, 95, 94, 97,213, 40,196,202, 42, 29, 92, 64, 77,129,222,159,112,113,117,202,205, 98, 78,174, 4,141,245, 88, 17, 0,174, -194,133, 2,252,252,234,154, 31,158,189,224,183,255,237, 31,249,252,159,255, 55,131,209,136,225, 48,167, 44, 75,138,162,194,203, - 67,132,168, 99,213, 70, 95,232, 7, 12,114,247, 99,140, 23,177,117,145,123,224,226, 3, 20,138,187, 96, 31,234,154,199,112,198, -110,132,113, 49, 47,195,211, 7,101,185, 91,157,250, 91,167,194, 91,119,169,222, 30, 31,221, 6,144,236,198,165,190,125, 92,251, - 78,159,122, 47, 22,136,106, 65, 41,222,184,208,183,133,109,239, 26,225,187, 45,129,217, 54,101, 78,110,137, 28,250,113,178, 8, - 29, 98,247,142, 91, 8,144,254, 79, 59,123,245,126, 26,176, 29,133, 71, 15, 9,233, 42,186,109,212,235, 46, 60, 96, 3,116,121, -171, 27, 96,187, 11,192,199,113, 13,253,232, 70,197,213, 68,162,147,240, 3,173, 91,134,249,132,100, 50,129,100,200,104, 60,102, - 58, 25,147, 13, 7,204,246,247,184, 60, 59, 99,152,103,220, 20, 75,218,243, 20,127,182, 64,103, 11,134,131, 17, 45,130,123,143, - 30, 81,123,199,143,167,103,124,247,226,146, 23,207,159, 51,202, 83,108, 71, 50,243,219,131,248,183,241, 18,194,251,109,247,160, -121,143,242, 2,235, 29,214, 73,148, 10,151,159, 86,162, 47, 82,136, 63,227,110,231, 39, 69, 60,156,148,192, 74,129,243,114, 3, -247, 17, 18, 97, 3,165,172,105,107, 50,169, 16, 50,163, 53, 13,169,151, 24,235, 16, 85,133,210, 9,166, 92, 83, 74,133,206, 71, -120, 47,153,207,231, 36, 73, 74, 91,215, 28, 29, 30,240,226,244,140,182, 46, 73,132, 96, 81, 22,232, 36,197, 52, 53, 74, 72,140, - 51, 36, 82, 35,188, 96, 60,200, 25, 15, 50,138,170,236,213,201, 34,166,183,201, 29, 42,160,136, 86,118, 79,107,160,197, 81,198, - 87, 68, 9,129,242, 54,136,201,226, 75,165,164,103,144,228, 1, 68,227, 84, 28,177,182,113, 32, 34,241,214, 99,108, 19,148,230, - 59,207,120, 24,251,123, 97,131,127,221,171,254, 98,113,222, 96, 76,131,140, 84, 52, 45, 53, 90,167, 36, 93, 26,160, 78,194,234, - 70, 8,116,236,208,132, 4,175, 85,220,211, 59, 26, 15,141,115,216,166,196,183, 14,107, 36, 94,232,160, 52, 23, 30,161, 12,169, -206, 72,108, 66, 98,147,200, 29, 8, 69,152,183, 81,216, 40,227,239,144, 80,120,229,176, 54, 52,134,218,233, 48, 61,113,129, 4, -230, 84,152,104, 56, 7,202, 7, 85, 54, 50,142,162,241,125,170, 93,168,120,219, 48,150,118, 33, 32,167,117,146, 85,221,114,185, - 88,115, 83, 86,228,249, 8,173, 83,198,227, 49,121,158, 7, 63, 48,208, 70,240,207,104, 56, 10,147,152,225,128,203,171, 75, 30, - 60,120,136,117,150, 85,177, 2, 9,198, 56, 70,227, 9, 15, 7, 15, 67, 76,102, 89, 82, 25,195,245, 10,116, 50,224,233,189, 61, -246,180, 10, 46,137, 36, 64, 67,136,132,175,238,128,246,110, 51,177, 19, 91, 97,232,242,125, 33, 87,126,119,197,215,189,223,221, -178,209,245,218, 32,231, 17,214, 69,245,122,156,106,225,251,120, 74,239,216,106, 90,182, 2,152,226, 25,231, 35, 68,199,119,205, -186, 16, 36, 34, 6,216, 8, 1, 82,163, 51,137,198, 96,188,193,225,248,249,245, 37,201,228,152,195,187,143, 48,166,101, 60, 72, - 88,175,215,193,125, 33, 36,101, 21, 38, 97,135, 71,199,204,151, 75,214,235,130,217,108,143, 52, 75, 64, 88,170,122, 73, 54, 24, -176, 88,102,156,190, 94,243,209, 71, 19, 28, 5, 74,201, 30,153,221,227,238,149,138,186,156,216,202, 8,129,240, 6, 91, 21, 92, - 94,206, 25,239,159, 48,189,255, 49,230,247,191, 15,130, 74, 2,245, 49, 75, 83,172,247, 20, 77, 69, 83, 53, 12,135, 25,185, 86, -184,166,226,254,157, 3, 6,137,198,182, 13, 65, 70, 27,146, 17,133, 13,197,181,181,150,170, 53, 44, 87, 37,231, 55, 5, 39,143, -127,205,122,177, 38, 63, 60, 36, 4,175, 58,138,186,165, 50,130,182,110, 56, 24, 15,185, 92, 21, 88,215,177,247,195,143,218,120, -193,191,252,251,231,252,205,175,126,197,131, 71, 15,177, 66,132,100, 73,211,176, 90, 23, 81, 51,179,157, 81, 34, 98,140,238,174, -181,217, 89, 27, 59,239,192,115,247,206, 5, 54,129,219,140,215,183, 21,239,125,135,110,108, 79,143, 51,221,191,119,191,220,206, - 22, 59,117,255, 94,219,218,135,130, 88,222,166, 60,247,209, 30,196, 22, 56,198,251,219, 29,191,127,167,199,253,151,236,166,223, - 53,174,239,152,243,183, 91, 81,225,119, 29,232,111, 13, 94,121, 75,126,248,135,119,229,187,182,132,183,125,253,226,214, 40,178, -183, 66,196, 0,148, 4,129, 78, 51,146,209,148, 44, 27,130, 74,193, 11,202,117,193, 15, 47,126,102,111,127,159, 69, 93, 5,196, -232, 32, 67,143,199, 20,235, 53, 63, 93, 92,114, 61,191,225,242,122,193,229,249, 5, 90, 65, 85, 44, 56,191,153,211, 10, 73,227, - 4,222, 90,158, 62,188,207,193,116,220,135,113,250, 15,112,112,195,247, 19, 5, 99,182,123,240, 4,214, 10,148, 52,104,165,112, - 58,172, 15,116,244,245,122,191, 97,197,135, 51,103, 3, 16,234,169,125, 17,216, 35,226, 5, 89,172, 87,168, 44, 97, 52,206, 33, - 9,123,105,178, 33,109, 83, 69,139,148,199, 53, 21, 78,138,176,215,138, 99,179,253,233,148,117,177, 98, 50, 72,105,141, 99, 93, -148,172,151,215,100,249, 40,178,191, 85,200, 37,182, 45, 66,104,134,131,140,167, 79, 30,241,249, 23, 95,246, 19, 29, 33,192,198, -226, 80,197, 61,148,218, 98,252,203, 32, 60, 14,172,250,152,114, 38, 58, 81,148,240,161, 72, 18,158,225,104,208, 79, 52,140, 49, -155,196, 59, 65, 64,117,182,237, 86,114,150,232, 93, 15, 74,235,168,150, 22, 8,169,163,144, 44, 92,172, 82, 6,177,162,214, 9, - 90,105, 18,157,144,232, 4,173,117,124, 83,253, 72,222,198, 36, 61, 29, 87, 42,253, 68,192, 89,156, 53,180,141,195,152,144, 21, -222, 90,131,245, 45, 82,213, 56,149, 98,146,140, 70,102,148, 74,145,103,121,128,149,100,158, 84, 91,146, 52,137, 62,115,133,194, -225,164,194,235, 12,188, 64,182, 45,109, 27, 62, 79, 39, 28,148, 82,208, 8, 19,199,173, 65,244,212, 37,254, 89, 7,202,121,116, - 18, 52, 36,141,245,212,222,177,108, 28, 23,139,146,103,167, 87,100,227, 61,172, 23,140, 38, 19,234,186, 9,221,139, 49,104, 29, -114,189,165,144, 44,151,203,222, 79, 62,157,206,168,235,154,182,109,153,238, 79, 25, 14,198,220,212, 55, 44,151, 75, 14, 15,143, -112,206, 83, 22, 37, 39, 39, 83,180,146, 60,123,117,201,235,243, 75, 30,221, 63,228,227, 39, 39,100, 64,146, 4,225,166,247, 54, - 90,205, 84,116, 36,116, 35,250, 93,157,141, 82,234, 23,179, 50,188,140,226,210,109,162,156, 16, 97, 28, 31,117, 56, 98,135, 26, -231,223, 0, 64,117,105, 98,157, 38,201,197, 17,174,236, 53, 1, 27, 52,170, 80, 93,100, 72,240, 70,106, 9, 36, 41,173, 28,112, -181,110, 89,154, 20,135,100, 62,191,161,174,107, 70,163, 17,214, 90,150,203, 37,247,238,221, 99, 49,159,243,234,213, 43,158, 60, -121,194,124,177,192,123,207,245,245,117, 72, 93, 43, 10,238,220, 57,166, 42, 13,195,225,148,203,171, 53,147,137,228,232, 48, 69, -138,224, 51,199,111,105, 39, 60, 32, 66,245, 47,189, 0,211,224, 45,212,141,229,122,177,228,232,248,136,215,243,171, 48, 1, 49, -150,170,174, 73, 7, 41, 69, 81,160, 7, 37,139,197,146,233,100,204, 48,203, 48, 85,193,193,254, 30,163,193, 96, 3,232,145, 58, -156, 97, 86,128,149,224, 4,222,107, 46, 22,107,254,244,205, 15,236, 29, 28, 51, 28,142, 56, 60, 56, 36, 77,115,148,240,164, 73, -138,244,130,139,179,115,134, 89,198,127,254,205,175,248,253, 87,223,114,186, 88, 99,253, 86,216,148,135,103, 47,158,179, 40,214, -252,230,179,207,248,241,155,175, 88, 23, 5, 77,211,112,113,113, 25,184,242,183,226,169,251, 6,212,237, 70, 80,119, 23,186, 53, -129, 55,225,227,212,214,217,205,174,220,185, 16,199,109,141,161,109, 91,218, 72,145, 51,214,246, 73,152,239, 8,149,190,117, 87, -109,218, 88,253, 33, 96,204,219,118, 71,155,110,188, 63,194,241, 59,157,243, 38,218,113,219,235,221,113, 31,186, 11,227,189,152, -217, 63,211,155,222, 95,168, 78,188, 49, 98,239,230,254,127,206,165,254,198,238,226, 29, 47,232,109, 29,221,219,191,151,141,162, -118, 91, 53,217,237, 26,149, 18, 24, 37,105, 16,248, 52,231,193,147,143,184, 46,106,214,203,146,159,207,207,249,227,183,223,176, - 90, 46, 88, 45,230,148,101, 17,148,202,214,177, 55, 25, 81, 85, 53,101,107,153,142,198, 28,239, 79,208, 89,134, 72, 20,121, 62, -162, 89, 87, 56,107,169,234, 10, 41, 39, 65,212, 18,181, 64,126, 75,141,251,198,234, 99, 75, 56, 24,183, 29,225,253, 54, 92, 32, - 97, 84, 20,242,146,141,243,113, 84,173,250, 52, 73,181,245, 58,116, 10,121, 29, 45, 64, 46,124,195,164,194, 97,109, 19,213,187, -138,253,217, 4,103, 91,202,216,177,180, 85, 9,222,224, 90, 71,109, 26,176, 6, 45,114,234,166,198,122,199,226,230,134,217,254, - 1,169, 20,180,165,229,206,193,140, 87,103,151, 28, 29, 29,225,240,212,109, 69,219, 88,154,198,227,165,100,111, 56, 96,150,165, -172,171, 58,216,153,122,225, 74,120, 51,132,108,116, 29, 15,115,189, 85, 12, 42,235,123,100,174,117, 93, 87,226,201,114,205,104, -152,199,177,142,192,218,184, 31, 99, 35,136,243, 4,225, 80, 63,150,139,110, 14, 41, 33, 17, 73, 0, 90, 8,221, 11,141,132, 82, - 64,210,115,247,149,212, 81,164,167,118, 46,116,173, 59, 5,174,194, 73,143, 49, 46,136,247,180, 68,182,209,148,232, 67, 29,104, -234,160,236,111,113, 72, 21,244,201,165,107, 81, 73, 75,150, 91,188, 36, 16,251,202, 1,123,147, 17,195, 65,206, 72, 8, 68,119, -177, 11, 21,133, 79, 1,235,217,217,150,164, 76,104, 90, 3,214, 0,170,239, 54, 60, 6, 47, 20, 78,132, 85,130,212, 30,229, 2, -189,203, 90,168,173, 99,101, 44,175,174,214, 44, 74,135, 17, 41,139,139, 75, 30, 63,121,130,144, 10, 99, 12, 82, 74,140, 49, 52, - 77,195,112, 56,164, 40, 75,246,102,123,140,199, 99, 94,159,159,145,231,195,254,239,172,150, 5,147,241,140,225,112, 72,221, 52, - 92, 94, 93, 50,157,132,248,206,233,116,140,243,240,227,179,107,148, 82, 92, 44, 95, 50, 47, 26,126,243,241, 3,166, 35, 77,166, -187,192, 29, 25,215, 8, 81,108,134,220, 4,247,136,110,106,248,238,243, 80, 68,129,155,235,222,215,117,112,241,121,216, 30,163, -211,175,191,194,104,192,111,249,145,118, 0, 57,125,162, 99,164,221, 69, 90, 29, 66, 32,124, 64,203, 74,165, 17, 46, 92, 30, 66, - 73,108,208,243, 35,172,199, 24, 88, 84,130, 87,215, 13, 87,107,152,237, 77, 98,112,139,160,109, 42, 4, 97, 7,191, 94,173,152, - 78, 38,188,122,245,138, 97,204,161, 48,214,161,117,184, 60, 7,131, 1,203,197,146,225,104,194,108,118,192,106,117,195,151, 95, - 62,231,191,254,246,215, 12,210, 48,153,147,189, 10,208,245, 92,251,141, 10,205, 97, 26,203,205, 77, 73,209, 88, 10, 87, 96, 92, - 84,235, 91, 71,221,180,216, 84,147,102, 42, 10, 86, 13,166,109, 57,127,189,224,201,189,187, 76, 71, 67,188,179, 84,145, 25,223, - 56, 75,213,182,225, 59,117, 33, 53, 50, 73,115,190,251,233, 53,167,151, 75,238, 63,189,143, 78, 18,154,186, 70,107, 77, 58, 28, - 32, 77,131,113,150,239,191,254,154,189, 60,227,233,189, 59,156,157, 95,112, 62, 95, 5,145,175,146,241,103, 15,139, 98,197,255, -249,242, 43,254,230, 87, 79,249,238,235,175,185,186,158,227,157,225,112,111,188,147,133,238,183, 38, 20,221,125,105, 99,202, 90, - 72, 88,107, 49,109, 27, 8,128,113, 60, 79,252, 59,206,110,186,116, 99, 44, 77,221,208, 52, 45,117,211,246, 43, 38, 99,108, 88, - 95, 58,222,107,239,190, 45,148,251,191, 3, 0, 97,118, 36, 17, 24,195, 73,139, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, + 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, 0, 0, 8, 90,206, 70, 0, 0, 10, 79,105, 67, 67, 80, 80,104, +111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83,233, 22, 61,247, +222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161,217, 21, 81,193, + 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136,138,202,251,225, +123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, 12,169, 66, 30, + 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, 60, 43, 34,192, + 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116,145, 56, 75, 8, +128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39, +127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0,172,207, 86,138, + 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, 0, 8, 12, 0, + 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, 42, 0, 0,120, +153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, 64, 46,194,121, +153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, 14, 95, 45,234, +191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128,109,254,162, 37, +238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144,185,217,217,229, +228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, 36,129, 50, 93, +129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34,196, 73, 98,185, + 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, 3, 62,223, 53, + 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, 40, 8, 3,128, +104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63,199, 8, 0, 0, + 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, 16, 66, 10,100, +128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46,194, 85,184, 14, + 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, 23,153,133,248, + 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, 2, 57,135, 92, + 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70,162, 11,208,100, +116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, 24, 7, 51,196, +108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99,207,177,119, 4, + 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132, + 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16,123,136, 67,196, + 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, 26, 35,147,201, +218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64,113,164,248, 83, +226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, 90, 66,173,161, +182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175,232,116,186, 17, +221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, 24, 7, 24,103, + 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42,124, 21,145,202, + 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, 70, 85, 51, 83, +227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89,253,137, 6, 89, +195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53,196, 38,177,205, +217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227,152,113,248,156, +116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151,150, 88,171, 72, +171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143,206, 5,157,231, + 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158,190, 94,128,158, + 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12,206, 24, 60,197, + 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, 70,141, 70, 15, +140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41,166, 59, 76, 59, + 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44,182,168,182,184, +101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187,173,187,167, 17, +167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, 97,103, 98, 23, +103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, 20, 58, 86, 58, +222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83,155,211, 71,103, + 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93,225,122,210,245, +157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, 67,224, 81,229, +209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165,119,170,247, 97, +239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, 95,133,223, 67, +127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, 63, 58,219,101, +246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152,206,145,206,105, + 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, 49,151, 53,119, +209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55,186, 52,186, 63, +198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157,226, 11,227,123, + 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, 16, 42,168, 22, +140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, 77,122,146,236, +145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, 50, 61, 58,189, + 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, 47, 30,149, 7, +201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, 57,150,171,158, + 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230,189,172,106, 57, +178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126,189, 38,122, 77, +107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, 97,250,134,157, + 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171,196,185,100,207, +102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, 69,219, 47,151, +205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54,238,210,221,181, + 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102,213,101,251, 73, +251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215,185,212,213, 29, +210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, 68,121,228,233, +247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, 83,154,251, 91, + 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233,130,211,147,103, +242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225,210, 69,255,139, +231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147,211, 79,199,187, +156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214,213,158, 57, 61, +221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95,244, 64,237, 65, +217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145,245,143, 15, 67, + 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23,254,162,254,203, +174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175,219,198,194,198, + 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104,249,177,245, 83, +208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, + 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, + 7,218, 10, 27, 9, 53, 42,196,130,109, 57, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,189,105,180, 37,215, 85, 38,248,237, 19, + 17,247,222, 55,228, 44,101,106,176, 44, 41, 37,207,198, 42, 59,101, 83,109, 48,100,225,116, 81,134,130,102, 74,177, 76,131, 89, + 76, 82, 23, 61,153,234,182,164,234,162, 23, 85,171, 48, 88, 89, 84, 27,186,193,221,206,130, 98, 85, 1, 13,229,196, 5, 52,189, + 0,151,210, 32,176, 13,229, 65,216,198,224, 73, 82, 58, 45, 91, 67, 42,199,151,249,222,157, 34,206,217,253,227, 12,113,206,137, + 19,247,222,151,202, 76, 41,237,216, 90,111, 41,223,123,247,221, 27,195,137,243,237,253,237,111,239, 13,116,214, 89,103,157,117, +214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89, +103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214,217, 21,177, +236, 10,127, 30,153,175, 1,128,189, 66,224, 90,102, 12, 1,148,230,231,157,117,214, 89,103,157,117,214,217, 85, 96, 4, 64, 8, + 65,183,255,243,131,119,252,206, 39,127,225,187,158,249,219, 95,252,238,211, 63,247,131,175,249,131, 94, 46,246,121,175,233,172, +179,206, 58,235,172,179,206,158,231,145, 58, 1,232,253,228,155, 95,242,142, 95,248,190,151,190,117, 79, 57, 90,185,118,235,202, +210, 27,190,254, 69, 47,249,198,151, 94,123,224, 67,159,125,250,233,179,235,211, 47, 0,224, 14,220, 59,235,172,179,206, 58,235, +236,249, 13,234, 2,192,242, 55,223,178,244,189,255,112,119,245,202,209,201, 51, 40,207,158, 70, 53,154,224,197, 47,190,121,199, +247,125,227,109,223,241,249, 39,206,102,143, 60,121,254, 83, 0, 70, 29,176,119,214, 89,103,157,117,214,217,243, 59, 82,239,127, +228,248,249,167,119,109,235,189,234, 27,110,219,122, 29, 87, 12,121,225, 60,170, 11, 23,176, 99,247,238,252, 45,111,124,249, 55, + 75, 85,189,232, 67,159,121,250, 19, 0, 78,119,192,222, 89,103,157,117,214, 89,103,207, 79, 80, 7, 0, 98,198,133, 63,250,204, +218, 39, 79,140,228,174, 55,189,108,251,139, 7, 89,142,114, 52,130, 60,119, 6,232, 47,227, 77,223,240,242,151,189,234,230,109, +251,255,252,111,159, 60,190, 62,174,142,117,183,168,179,206, 58,235,172,179,206, 22,143,158,175,244,231, 13, 0,108, 3,240,130, +111,188,125,203, 15,255,230, 91,246,254,248,205, 75,249, 96, 56, 44,129, 44,131,184,225, 22, 12,110,186, 9,143, 61,121,250,252, + 61,191,252,208,207,127,224,147, 79,188, 27,192, 5,243,247,252,124,190,152,204,188, 15,192, 14,243,237, 49, 34,250,170,118, 74, +190,214,206,183,179,206, 58,235,172, 3,245,180, 9, 0, 91, 1,236,185,110,107,254,157,255,241,135,111,251,167,223,120,221,202, +117,227,145, 4,160, 64,123, 94,128,165, 23,222,138, 41, 43,252, 47,191,254,225,255,240,127,254,193,167,127, 26,192,151,205,241, + 62,107, 96,103,230,189, 0,246, 46,248,242,179, 68,244,240,130,239,251, 32,128, 3,230,219,251,137,232,129,175,114, 80,255,170, + 56, 95,227,156, 28, 48, 14,202, 62,239, 87, 15, 3, 56, 6,224, 8, 17,157,189, 4,159, 19,191, 63, 46,245, 26,108,124,230,161, +253,155, 91,235,247, 62,244, 48, 58,235,172,179,171,214,242,103, 1,202, 10,192,150, 93,171,197,215,237, 90,201,119, 41, 38, 10, + 60, 5, 2,136,136,216,254,132,236,207,221,111,115, 0,203,165,228,209, 79,253,209, 51,127,242,139,223,117,211,119,189,126,247, +202,246,105,201,192,217,211, 24, 47,175,162,216,181, 7,255,199, 61,251,223,186,239,246, 61, 47,121,219,123,254,226,237,231,214, +167, 31,186, 68,192,126, 16,192, 59, 55,177, 25, 3,192, 17, 0, 71,137,232,112,183,108,190,106, 88,134,131,230,171, 13,244,172, +195,242, 30,102, 62,108, 28,151,103, 3,238,251, 0, 60,120, 17,127,119, 20,192,155,174,200, 90, 63,180,191, 94,235,247, 62,116, +197,214, 58, 31,218, 31,178, 62,247, 62,212,177, 62,157,117,118,133, 64,157, 0,208, 74, 63,219,247,179,111,190,249,231,222,114, +199,238,253,219,150,138,158, 34,161, 1, 91, 8,253, 69, 4,202,179,224,123, 8, 1,202,178,250,123,210,191, 83, 32, 46,153, 84, +149,231, 16,222,251, 84,178,132, 26, 17,126,248, 77,175,252,250, 87,223,126,237,251,126,236, 93, 71,127,230,227, 95, 56,249,235, + 0, 38,184,242, 84,252, 65, 0, 7,153,249, 32,128,187, 46, 69,228,214,217,115,106, 31,223,228,235,239, 6,112,128,153,239,186, +216,168,249, 42, 50,189,214, 15,237,215,107,253,222,135,174,196, 90,127,167,231, 68,221, 15,224,129,110,137,118,214,217,149,139, +212,175, 61,244, 29,183,190,235, 39, 95,127,227, 27,166, 67, 5, 86,132, 76,144, 14,224,153,244, 23, 4, 72,145,134, 94, 6, 32, + 72,199,246,138,129, 12, 32, 34, 29,239, 51,144, 17, 81, 46, 40, 51, 17,177, 6,117, 6,192, 12, 69,132,201,112,138, 87,221,188, +251,218, 7,127,238,123,126,249, 39,223,253,103, 47,250,237, 63,253,194,207, 3, 56,121,137,162,118, 27, 9, 97, 78,180,230,127, +255, 32, 51,191,169, 3,246,175, 26,123,216, 68,167, 15, 19,209, 81, 19,201,239, 48,247,250,110,111, 13,236, 5,240, 94,102,190, +243, 18,221,251,195,208,244,254, 60,187,148,235,108,243,107,253,208,254, 55, 93, 33, 96,239,172,179,206,158,139, 72,189, 95,136, +189,255,248,101, 59, 94,203, 27, 37,202,241, 4, 80, 74,131,180, 99,214,109, 60, 79, 53,238,102, 2, 98,215,110, 3,238, 10, 36, + 0, 40,195,226, 19,224, 16, 94, 40, 13,252, 66, 0, 18, 90,159, 79,192,116, 82, 98, 91,175, 39,254,159,123,191,237,167, 94,251, +146,235,190,238,159,253,234,135,239,157,148,242,147,151, 2,216,137,104, 38,181,105,162,243,119,162,166,105,247,153,205,190,139, + 38,174,110, 59, 12,224,112, 42,242, 54,160,125, 4,192, 17,102,126,143,185,223, 22,216, 47,213,189, 63, 98,157,136, 43,101,116, +239, 67,179,215,186,142,206,187,181,222, 89,103, 87,169,137,139,248,155,108, 90,170,211,191,243, 55, 39, 63, 66, 98,130,149,158, +196,202, 18,176, 60, 96,243,165,234,127,247, 21, 6, 98, 10,200, 18,212, 95,214, 32,175, 20,160, 20, 92, 84, 14, 0,152, 2,106, + 12,168, 17,192, 99, 0, 19,253, 61, 79,205,235, 25,204, 10,165, 84,168, 38, 18, 63,245,189,175, 61,240,224,161,239,253,253, 91, +246,108,253, 30, 3,251,226,114, 94, 36, 34, 58, 2,157,211,244,163,149,131,221,242,185,170,237, 77, 68,116,207, 34, 84, 58, 17, +221, 19, 69,212,247,125,181, 94, 20,186,247,161,110,173,119,214,217,215, 88,164, 14, 6, 78,223,247, 7,199,127,230,143,254,246, +212,247,188,236,186,165,155, 9, 16,138, 89,153,109, 1,138, 53,100, 15,167, 74,188,250,133, 91, 94,254, 19,223,116,251,222, 65, + 62, 16, 74, 41, 32,203,116,108,173, 20,120,186, 14,202, 8,226,166, 59, 32,174,189, 29,180,245, 58,208, 96, 43, 80, 77,160, 54, + 78,130, 47, 60, 5,117,242, 11, 64, 53, 2,104, 9, 12, 9,201,128, 90,159,226, 13,175,124,225, 11,223,127,232,123,127,237, 31, +221,255,159,178, 47, 62,181,246, 62,212,226,189,203, 5,236,199,152,249,136, 23,177,237,187, 20,239,155, 80, 68, 63,124,137,148, +214,190,234,249,162,202,205, 46,197,123, 92,137,243,141,142,115,161,247,187,136, 8,249, 48,106,193,217, 14,102,222,247,213,154, + 91,167,123, 31, 58,198,135,246, 95,212, 90,231, 67,251,155,247,247, 10, 80,247,145,208,238,138,125,110,103,157,125, 53,128,186, + 4,176, 1,224,179,127,254,216,250,187,254,252,177,245, 37,164,155,216,236,122,243,171,118,255,216,247,220,121,235,245,203,162, + 39, 42,197,154,122, 31,143,193,147, 13, 64,110, 32,123,241, 27,144,223,249, 3,200,110,253,251,173, 20, 2,159, 57,142,234,177, + 15, 64,126,233,195,160,172, 7, 48,131, 9,152, 14,167,120,241, 13,187,182,253,254,191,252,175,127,229,141,111,127,239,153, 83, +107,227, 63,197,165,203,177,183,217, 37, 81,228, 26, 96,187,219, 68, 64,251, 18,191, 63,134,154, 26, 62,219,242, 30,239,244,254, +246, 8, 17, 29,246,222,247,110, 68,138,110,243,158, 15, 44,162,222,103,230,187, 77, 52,186,119,179,199,117, 57,206,119,198,185, +222,103,222,215,223,204,159,141, 82,124,150,197, 0,190,227,171,124,111, 88,120,173, 27, 32,111,191,191,135,246,215,247, 55, 2, + 90, 62,180,255,193,132,227,112, 55, 31,218,127,160,229,227,238, 55,199,118,192,124,237,107,115, 58,102,125,110,103,157,117,160, + 94,155, 2, 48, 6, 80, 65, 55,133, 49, 89,111, 87,243,206, 68,120,249, 3,223,247,226,127,241,246,253,183,236,151, 83, 96, 42, + 37,184,156,128,199, 67,160,154, 0, 57,163,255,109,255, 12,249,157,111,153, 31, 53,236,188, 5,197,206, 31,131,184,238, 85,168, + 62,246,171,128,144, 26,242,137, 48, 29,150,120,213,139,174,191,230, 93,255,100,255,161, 31,122,231,159,124, 15,128,199, 47, 51, +168,251, 27,249, 69,109, 18,204,124, 0,192,123,231,128,194, 94, 19, 21,222, 61, 67,109,109,107,171, 1,224,168, 41,209,122,207, +140,168,106, 47,116,105,214, 62, 67, 39,183,129,239,123,208, 78,183,218,227, 58,200,204,111,186,130,231,155, 58,215, 7,191, 6, +128,245,185,180,133,214,186, 1,223,197,239,239,161,253,119, 69,181,240, 7, 90, 94,191,119,198,113,221,141,197,202,244,236,231, +222,103,196,126, 93, 13,126,103, 29,168,183, 61,203,208, 51,208, 75,139,189,230,255,217,205,215, 12,190,227, 61,111,121,233, 3, +223,250,226,107, 94, 52, 25, 41, 72, 89, 2,147, 17, 80,149, 0, 49,168, 0,250,223,253,243,200, 94,249,237,238,205,206,143, 38, +120,255, 39,143,227,253,159, 58,142, 51,235, 35, 20, 25,225,101, 55,236,196,119,222,121, 59, 94,115,219,245,250,141,111,122, 45, +168,183, 5,229,135,254, 13,208,203,245, 33, 8, 66,181, 62,193, 15,190,241,149,175,254,205, 15,124,238,199,222,255,177,227,239, +192,101, 42,119, 51,128,119, 48,138, 8, 55,251, 30, 7,205, 6, 24, 71,128, 71,189,141,211,143,118,246,162, 86,218, 63, 60,103, + 3,126,175,183, 17, 30,241, 34,203,125,209,113,223,205,204,199, 90, 26,197,188, 51, 1,232,254,123, 29,244, 34,163,247, 62, 71, +231,187, 35, 2,244,179,222,241,237,189,140,207,202,129, 57,145,251,179, 89, 87,151, 60,253,242,172,142, 73, 71,222,115,215,186, + 17,213,109,254,254,134, 0,123,212, 91,167, 59, 60,150,160,141, 41, 56,155, 96, 20,142, 69,199,184,215,220,175,189,254,154,225, + 67,251,239,236,234,223, 59,235, 64,125,190, 89,202,123,219,155, 95,185,243,167, 14,223,245,146,123, 95,176,186,180, 52,218,144, + 96, 57, 1,202,137,249,164, 12, 84,109,160,248,134, 31, 15, 0,253,191, 60,242, 20,222,254, 91, 31,196,177, 83, 23, 48,232, 23, + 40,114, 1,193,192,167,190,124, 6,191,251, 87,159,195,119,220,121, 27,254,183,131,111,192,114,191,128,216,243, 82,228,175,188, + 11,213, 39,126, 29,216,178, 7, 0,235, 36, 58, 19,254,229, 91, 95,255,227,255,249,227,199,127,151, 25,127, 11,157, 34,184,212, +128,254,158, 8, 52, 14,111,242, 61,246,154,247,240, 55,163,123, 18,185,221, 7,162,232,214,126,246,157, 51,222,254, 62, 15,128, +239,137, 65,193,124,246,123,189,205,245, 62,102, 14,168,110, 67,185,223, 29,109,206,119, 69,121,116,255,216, 14, 60, 71,231,123, +159,247,126,247, 27, 17, 99,124,175, 46,135, 29,188, 12,192,155,140,112, 77, 58,226, 8,116, 58,226,138,130,144, 1,244,185,107, +221,116,170,107,222,223,123, 31,106,222,223, 48,154, 15,238,175, 85,227, 27, 26,222,174,169,195,116,239, 67, 15,204, 97, 7, 30, + 0,112,100, 86,244,205,135,246,219,136,222,255,220, 55,161,179,206, 58, 80,159, 11,232,183,190,237, 91,110,252, 87,239,124,243, + 45,255, 77,174,114, 12, 39, 37, 32,167,128,172,116, 30,157, 0,176, 4, 93,115, 19,242,215,189,213,253,241, 35, 79,159,197, 91, +127,229,253,120,102, 84, 97,121,101, 9,101,150,161, 40, 50,244, 50, 66,198, 61,144,172,240,190,143, 60,138, 76, 8,252,236, 15, +236,215, 17,251,237,255, 0,242,243,127, 2,200,117, 32, 95, 2, 8,168,166, 37, 94,125,219,238,235, 94,247,178,235,190,245, 35, +159,121,250,179,208, 41,130,133,163,117,102,190,111, 78,132, 22, 3,216, 61, 23, 33,180,122, 79, 20, 93,182,214, 58, 19,209, 81, + 67,111,219,136,116, 31, 51,223, 61, 39, 31,126,148,136,238,106,121,191, 99,204,124, 63,234,110,102,182, 6,251, 72, 2, 44,237, + 6,157,172,195,247,142,237,227,207,225,249, 30,107,123,191,203, 17,229,154,245,113,209, 14,221, 28,134, 37,101,123,205,253,184, +143,153, 47,105,251, 93, 62,180,127,243,107,189, 9,212,233,251,219,146,183,166,123, 31, 58,202,135,246,135,247,247,208,254,187, + 47,182, 99,221, 44,192,143, 94,119,216,228,213,237,186, 63,192,135,246,239,237,162,245,206, 58, 80,111, 7,116,218,185,146,191, +241,221, 7,111,251,133,239,127,213, 53,119, 76,198,192,132, 74, 64,105,170, 29,133,112,175,228,114,138,252,197,223, 4, 90,189, +198,189,193,253,191,245, 97, 60,242,149, 53, 96,219, 42,214,214, 43,128, 36, 50, 2,150, 51,194, 53, 43, 57,118, 44,229,216,182, +109, 21,191,255,209, 71,176,255, 21, 55,227,192, 29,183, 2, 89,142,108,239, 55,161,250,228,191, 7, 93,123, 11,192, 10,138, 8, +189,165, 30,190,127,255, 75, 14,124,228, 51, 79,255, 59, 0,103,176, 57, 10,126,209, 54,154,135,113, 17,181,197, 94,111,113,119, +234,243,192,135,136, 30, 54,173, 73,239,243, 54,220, 89,155,224, 61,115,222,239, 40, 51, 63,140,144, 10,181,199, 23,183, 74,125, + 96,214,241,121,199,118,247,115,116,190, 15, 92, 41,138,218,156,203, 59,163, 40,253, 82,128,186,237, 43,239, 71,154,126, 15,122, +183, 54,153,121,111,155, 14,226, 34,108,115,107, 61, 1,232, 70,105, 30,222,223, 57, 66, 52,186,247,161,135,249,208,254,205,172, +231, 75, 98,198,161,240,215,253, 65,116, 53,247,157,125, 21,219,197,212,119, 91, 81,220,234, 27,110,219,242, 79, 63,252,223,189, +226,119,191,255,101, 59,239, 24, 14, 37, 36,164, 6,116, 1, 32, 35, 80, 70,160,156, 64,153, 0,229, 4,113,195, 43,221,155,124, +241,196, 57,252,241, 39, 31, 7,150,151,116,153,155, 16, 64,150, 65, 66,224,194, 68,226,139, 39,135, 56,246,204, 16, 37, 19, 84, +150,225, 3,159,254, 82,125, 0,215,220, 14, 30,157, 7, 80,153,163, 97,160, 82,120,233, 11,118,222, 6,224,122, 92,190, 65, 53, + 7, 77, 20,185, 89,138,215,223, 0,207,110, 2, 20,142, 70,159,221, 10, 16, 11,210,180,109, 2,165, 3, 17,192, 46,114,124, 71, +158,163,243, 61,118,165,250,239,155, 20,130,223,171,253,236, 60,231,105,142,157,133, 86,111,223, 70, 68,119, 18,209, 93, 68,244, +128,247,117, 23, 17,237, 52,175,241, 65,242,110,227,120, 93, 73, 59,104, 34,234, 29,115,239,239,226, 17,247,162,235,249, 82,219, +145, 5,216,145,206, 58,251,154,140,212, 45,221,126,195,143,254,253,107,255,197,187,191,227,230,159, 40, 84,134,225, 84, 1, 25, + 3,172, 64, 12,144, 34,112, 70,134,122,215,127, 66,121, 15, 98,199, 11,221, 27, 29, 63,121, 30,163, 97, 9,108,237,215,126,130, +141,173,133, 0,152,113,110,189, 68, 57,173,240,130,109, 57, 46,140,203,250, 32,182,236, 1,144, 1,147, 33,104,105, 11, 24, 12, + 84, 21,110,221,179,101,119,191,151, 93, 55,153,202,207,110,242,188,238,159,241, 59, 95,116,179, 3,158,250,123, 19,209,226,129, + 22, 96,197, 2,209,117, 16, 53,182, 8,200, 22,101, 14,142,205, 56,199, 77,189, 87,124,108, 87,240,124,175,136,130,217, 56,110, +113,206,251,254,103, 83,155,110,254,118,145,102, 55, 15, 48,243, 81,132, 41,142,119,206,113,164, 46,223, 90,111,182,137,189,184, +251,171,163,230, 32,226,191, 20,138,116,195, 28,204, 82,204, 31,136,216,144,206, 58,235, 64,221, 70,191, 91, 6,217,235,255,245, +183,191,224,208, 61,251,174,253,134,233, 20, 24, 23,186,229, 43, 75, 6,149, 10,189,158,192,154,148,106, 9, 66, 32,207, 92, 5, + 59, 1, 0, 87,238,205,118,111, 91, 70,214, 43, 32, 21, 76,191,120, 54,160,110,254,207, 4,100, 2, 27,195, 18, 95, 26,143,209, +191,195, 59, 84,150, 0,151, 64, 53, 6,196, 86, 16, 43,176, 82,216,185, 82, 44,111, 91,238,237,120,102, 58,218, 20, 3,177, 72, +206,210,228, 85,239, 67, 61,158,243, 65,204, 22,175,161,101, 35,217,107, 70,150, 94,140,237,152, 17, 1, 62, 27,187,168, 77,218, +188,118,223, 21, 62,223,203, 14,234, 6,208, 31,140,206,227,158, 43, 57,161,207,164, 35,238, 71, 77,151,239,101,230,131,177, 48, +112,211,239,187, 64, 62,218,228,221,103,173,245,240,254,214,181,230,151,106, 61, 47, 2,228,182,180,237,190, 46,250,238,172,179, +205,129,186,165,178,139,151,238, 25,252,192,111,125,255,173, 15,188,102,247,242,238,209, 84, 1,253, 92, 3,122,169,144,151, 10, +189,165, 12,255,252, 3, 79,124,234,230,237,189,237, 63,177,239,218,155,199, 12,144,141,214,203, 18,234,212,163, 16, 55,189, 22, + 0,240,178, 27,119,225,235, 95,180, 27,127,249,217,147, 64,158,107, 16, 23, 6,208,109, 95, 56,165,255,118,124,102, 3, 47,186, +174,126,110,249,252,147,192,228, 60,120,178, 29,100, 38,198,176,178, 78, 1, 4, 46, 3,253,110,162, 39,120,155,236, 34,226,181, +212,230,181,153,249,214,207,133,157,189, 4,175,189,154,206,119, 17, 64,191,255, 57, 26,185,235,119,177,195,149,186,142,116,239, + 67, 15,152,136,186, 94,235,161,176,237, 57,189,191, 38, 50,239,250, 20,116,214,217, 69,128,186,165,219,119,223,245,247,118,190, +253,151,190,237, 5,255,227,117,131,162, 55, 84, 4, 90,214, 33, 56, 79, 21, 6,138, 49,238, 1,255,195, 31,126,233, 15, 15,127, +248,153,223,251,181,187,110,185,151,216, 48,239,153, 81,191,231, 2,124,226,111,221, 27, 11, 65,248,233,239,190, 19,223,246,153, +255, 15, 24,151, 64,191,103,166,187, 25, 80, 87, 0, 88, 1,235, 67,188,250,229, 55,226,135,190,249, 21,238,111,213, 51,159, 5, +115, 9,146, 83,253, 66,102, 8, 98,156, 89, 31,143,206, 15,167, 23, 46, 99,244,244,128,233,110,102,237, 32, 54, 47,246,153, 85, +131,123, 41, 1,247,249, 98, 87,219,249,198,128,126,248, 82,170,207, 55,185,222,206, 70,226, 70, 91,202,117,165,128,125,145,181, +126, 69,239,175,137,208,227, 62, 5,135, 13,131,115, 44, 69,231, 27,230,225,157,232,172,179,175,113, 80, 39, 0,148,103,244,226, +119,252,163, 27,126,233,237,255,213,117,223, 90, 85,192, 48, 23,160,190, 0, 43, 6,143, 36, 86,114,194,241, 73, 53,254,145,223, +252,226,175, 62,244,133,243,191, 5, 64, 61,190, 86,158, 0,241, 75,217, 69,234, 0, 6,203,144,199, 63,132,252,236,113,208,142, + 91, 0, 0,111,126,245, 45, 56,252, 79,254, 1,222,246,107, 31,196,240,220, 4, 24,244,129, 76,231,211, 49, 45,129,225, 8,175, +121,233, 30,252,238,219,191, 29, 43,131, 66, 31, 85, 57,130,252,204,251, 64,189, 62, 64, 18, 96, 5, 86, 18, 16, 2,143, 61,125, +238,228,120, 42, 79,226,242, 9,229, 0,157,115, 62,224,109,178,155,142,190,158, 43,144,120,142,236,170, 57, 95, 51,141, 45, 6, +244,123,158,227,195,122, 46, 29,185, 69,214,250,225, 69, 75,204, 46,145,221, 29, 1,122,215, 41,174,179,206, 60, 19,115, 64,125, +247, 59,191,237,198, 95,185,247, 27,174,251,214,113, 5,148,203, 57,104, 41, 3, 43, 0, 67,137,149, 65,134, 63,123,114,227,196, +254,119,127,238,103, 30,250,194,249,255, 11,192,113, 0, 79,124,254,212,248,243, 16, 4, 72, 35,122,202,132,166,216,171,117,148, + 31,122, 87,240, 33, 63,241,198, 87,224,175,126,254,251,240,182,127,252,117,184,117,103, 31, 3, 46,177, 42, 36, 94,255,162,107, +240,203, 63,249, 45,248,139,119, 28,196,173,123,182,185,215, 87, 31,251, 85,240,185,227, 64,209, 7, 27, 17, 30, 42, 9, 8,194, +231,191,114,246, 75,208,115,214,213,243,236, 58,207,107,139,121,181, 30,223,129,171,244,124,219, 0,253,238,231, 25,160, 63, 95, +237,185,188,191,190,106,254,129, 5, 1,125,111,119,203, 58,235, 34,117, 0, 55,237,232,237,255,145,175,219,249,198,233, 88, 1, +171, 5,168, 71,224, 41, 35, 27, 87,232,175,100,248,141, 79,157,254,220,127,255,187,199,255,245,249,145,252, 32,128,211,208,131, + 94, 6,127,241,216,133,143, 62,117,161,252,209,107,150,139, 92, 50,215, 69,112, 75,203, 80,143,255, 5,170, 15,255, 34,242,111, +120,155,251,156, 87,221,124, 13,222,245,163,223,132,159,255,161, 10, 79,159,217, 64,175,200,113,195,206,149,198,241,200,207,252, + 1,170,191,249, 13, 96,176,172,189, 14,145,129,165, 2, 73,133,114, 60,193,251, 62,248,216,135,161,251,209, 95, 78, 80,191,152, + 13, 34,160, 80,153,121,199,115,221, 10, 52,178, 99,222,241, 45,164, 14, 54,245,219, 87,235,249, 94, 77,128,126,177, 34,198,203, +185,214,195,251,123,104,255,142, 43, 56, 48,101,223, 69, 92,143,171,194,177,236,172,179,203, 29,169,231,183,236,236,191,104, 71, + 63, 67,165,180,186,157,135, 18,189,169, 4,245, 9,111,127,255,151,143,190,245, 55, 30,251,159,207,143,228, 7, 0,156, 0,176, + 6, 96, 10,160,124,242,220,244,163,239,251,236,217, 79, 22, 57,192, 99, 9,128, 65, 2,186, 94,125,121, 11,228,223,252, 7,148, + 71,127, 26, 60, 60, 21,124,224,160,200,113,203,158,109, 77, 64, 47, 71,144, 31,121, 55,170, 15,190, 3,212,239,129,178, 76,231, +235,139, 62, 80, 86, 40, 4,240, 95, 62,255,212,211,127,249,153, 19, 71,161,123,191, 95, 22, 80,143, 70,124,110,102, 83,137,203, +196,238,126,158,173, 3,255,248,118,152,182,173,207,102,163,124,190,159,239, 85, 1,232,166,117,111,236,124, 93,153,207,214,109, + 96,219,214,250,213,115,127,117, 75,217, 46, 82,239,172, 3,117, 0,217,103, 78,140,190,240,149,169,172,150,151, 51, 44,151, 18, +203, 25,176,158, 41,254,193,247, 30,251,237, 95,120,240,169,127, 1,224, 83, 0, 78,153, 8, 93,163,183, 30,242,114,226,151,254, +252,196,145,181, 82, 34, 47, 37, 80, 42,173,154, 51, 77,105,176,178, 5,234,177, 63,198,244,125,111,133,252,187,247,129,207, 63, +145,126, 32, 55, 78, 66, 61,118, 20,211,223,251, 81, 84,159,248,183,192, 96, 0,100,185,110, 54, 67, 4, 18, 5,104, 92, 2, 25, +227,103,127,231, 19,191, 7,224, 81,243,249,151, 28,212,189,186,101,223, 22, 42, 47, 50,101, 72,254,134,124,223,156, 72,247, 74, +219, 17,132,185,219,251, 22,184, 22,247, 93,197,231,219, 6,232, 15, 99,118, 29,247, 92,167,143,153,239,243,190, 14, 68,215,108, +179,235,205, 23,119,157,197,165,169, 83, 95, 4, 8,103,174,117,186,247,161,230,253,213,138,244,103,203, 22, 97, 1,182,232,236, +162, 17,184, 57,143, 78, 32,215,217,215,148,205,164,223, 79,175, 87, 31,251,254,223,254,226, 3,111,251,166, 61, 7,119, 45,231, +219, 62,123,106,252,149,255,251, 67,207,252,225,223, 61, 57,252,127, 1, 60, 5,224,156,137,206,125, 16,149, 0, 70,143,158, 28, +255,241, 59,254,244,233, 3,135,190,253,166, 55, 85,235, 21,144, 11, 80, 63,171, 37,108,203, 91,129,106, 13,229,135,126, 14,212, + 91, 5,237,122, 41,196,206,219,128,124, 0,168, 18,234,220,227,224,147,127, 7,140,207, 1, 69, 1,172,108,243,158, 86, 0, 74, +128, 39,132,222,170,192,191, 63,250,249,207,252,231,191,126,226,183,161,169,247,242, 50, 68,231, 7,208,156, 47,110, 85,183,139, +218, 61, 8,123,175, 63,104,198,140, 30, 93,224,243, 15, 26,176,188, 44,130, 36,163,178,126,192,219, 0, 15, 48,243,123, 82, 17, +171, 87,242,181,227,106, 61,223, 25,128,254,166,103,153, 38,216, 27,129,200,253, 94, 84,187,207,244, 58, 56, 60,175,214,220, 27, +163,235, 95,227,203,222, 26,215, 68,231,139,174,245,230,253,213, 99, 85,143, 46,240, 25, 7,141,115,240, 64, 11,168, 31,156,209, +152,230,136,119,223,238,230, 67,251,143,180, 40,222, 83,165,137,157,117,246, 53, 13,234, 37,128, 51,127,117,236,194,191,251,171, + 99, 23, 30, 4,176, 5, 58,111,254, 52, 52,213,190,110, 94, 19,183, 21,179,243,214,159,254, 55, 31,120,234, 93,175,190,105,249, +214,183,220,177,235,246,209,249, 41,104,107, 15,232, 11,221,105, 14, 12, 20, 5,168, 40,180,130,253,244,167, 80, 61,243,176,123, + 59, 18, 57,144,247,128,149,213,232,105, 5, 48,149, 96,181,132, 65,191,135,135, 31, 57,113,246,127,250,183, 31, 57,100,162,244, + 17, 46, 98, 66, 27,207,104,141, 54, 11,180, 54,179,201,154,110,105,247,160,158,108,101,129,238,168,217,248, 31,142,192,193,110, +176,251, 60,128,184,156,118, 24,225,152,204,187, 77,164,121,216, 59,182, 3,168,213,199,199,204,102,191,239,106, 59, 95,115, 94, + 41,202,248,189,155, 88, 10, 71, 46,162,118,253,128,113,152,236,168,208, 84,239,247,120, 84, 46,160,219, 0, 95, 18, 7,135, 15, +237,191,184,181, 30,229,204, 77,119,184,230,253, 61,180,255, 98,239,175,237, 11,111, 29,153,143,155, 97, 44,113,202, 33, 72, 21, +153,215, 29, 70, 61,238,213, 54,204,241, 85,242, 71,112,101,219,210,118,214,217,243, 18,212,165, 1,238,202,128,184, 48, 63,155, +152, 47,137,246,161, 41, 21,128,117,197,252,233,255,246,119,190,248,179,187, 86,242,119,252,195,219,183,221, 56, 94,155, 2, 91, + 10,208, 32,171,235,215, 53,130, 3,189,193,236, 58, 52, 6,160, 24,152, 72,168,243, 83, 44, 93,191, 7,159,125,234,236,250, 93, + 15,252,249, 3,107, 27,229, 7, 61, 39,227,114,219,195, 6,208, 55, 45, 90, 34,162,195, 94, 3,155, 29,254, 70,255, 92, 47, 4, + 19,173,223,101,162,155,189, 45,145,167, 31,185,221,133, 57,212,230,243,249,124, 19,182,217,136,238,232,179,248,172,189, 88, 60, + 15,125,248, 10, 56,116,179,215,122,139,194,220, 76, 65,187, 36,247,151,238,125,232, 44, 31,218,127, 63,194,113,174,169,198, 54, + 15, 24,150,192,127,221,221, 51,174,231, 61,230,216, 58, 80,239,236,107,194,196, 28, 24,173,160,243,229,103,161, 39,159,157, 3, + 48, 52, 63,231, 57,127, 59, 1,176,118,126, 36, 31,250,238,195, 95,248, 95,127,227, 19,167, 63, 55,232, 9, 20,231, 75,168,181, + 18, 24, 43,247, 46, 4, 2, 81,226,203,252, 7, 9, 96,170,192,231, 43,208,217, 9,150,118,108,199, 67,199,214,158,254,214,159, + 57,250, 51,199, 78,172,255, 39,115,108, 67, 92, 62,213,251, 81,179,185,222,101, 6,113, 60,155,254,223,135,161, 91,110, 30,198, + 98, 53,200, 71,204,198,116,249, 39, 90,233,161, 48,119,206,249,172,163,208, 99, 79, 31,190,218,207,247, 57, 0,200,251,177,184, +184,242, 8,116, 58,224,158, 43, 92, 57, 80,175,245,123, 31,186,115, 94,201,152,233, 50,119, 73,238,175,121,175,219, 34,118,168, +237, 51,239,194,108,225,160, 94,167, 23, 57,222,181,179,206,174, 86,163,203,252,254, 25,128,101,227, 41,191,226, 71, 94,191,251, +199,255,213,155,111,252,206, 27,183,245,242,106,194,168,114, 2, 6, 25, 40, 23, 58,114, 23,222,225, 48, 3, 18,224, 74, 1, 99, +137,172, 84, 40, 10,194,121, 9,252,220, 7,207,252,217,255,254,135,143,189,167,148,234, 99,168, 75,233,170,171,241, 6, 24, 42, + 56,142, 18,143, 65, 79, 55, 59,250, 28, 30,151,165, 75,253, 70, 31, 71, 23,156, 6,119,213,157,239,115,116,223,247,162,169, 77, +120, 24,154,110, 63,123, 85,158,151, 86,155,167,239,239,156,124,251, 37,250,188, 99, 0, 30,238,102,166,119,214,129,250,229, 5, +246, 1,128,109, 0,174,123,225,206,254,183,220,253,134,221,223,245,195,251,174,121,221, 11,182, 20, 5,152,192,204, 80, 68, 80, +222,209, 8, 6, 4,179, 46, 93, 35,224,244, 88,170,255,248,169, 51,159,126,207,135,159,249,195,191,249,242,198, 31, 1,248,138, + 97, 14, 70, 87, 43,160,119,214, 89,103,157,117,214,217,213, 6,234,246,115,122, 0, 86, 0,108, 5,112,221,206,213,252,239,189, +238,150,213,215,125,223, 29, 59, 95,123,199,141,203,215,239,232,103, 43, 43, 57,245,114, 65,162, 82,224,161, 84,211,181,169, 26, + 62,242,204,232,228,145, 79,158,249,235,191, 60,182,254,209, 39,207, 77, 31, 6,240, 4,128,243,208, 57,244,203, 86,147,222, 89, +103,157,117,214, 89,103, 29,168,207,254, 44, 1,160, 15, 77,201, 47, 67, 43,234,119, 2,216,179,220, 23,187, 6,185,216, 90,100, +212,171, 20, 87,227,138, 47, 12, 39,242, 52, 51,158,129,166,216,207, 67,231,205, 55, 48, 95,168,215, 89,103,157,117,214, 89,103, + 29,168, 95, 65,112, 47, 76,244,110,191,114,184,233,235,128,137,192, 75,243, 53, 53, 64, 94,117, 96,222, 89,103,157,117,214, 89, +103,207, 31, 80,143, 63,223,130,188,253,191, 15,234,236,253,191, 3,242,206, 58,235,172,179,206, 58,123, 30,131,250,172,227,233, + 64,188,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172, +179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, + 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,236, 50, 25,245, 86,119, 48, 0, 16, 17, +116,191, 23,219,255, 69,255,155, 26,237,105,108,131, 55,129,102,239,154,250,111,137, 8,204, 0, 17,192,204,230,253,227,215,153, +239,204,103,219,191,169,251,206,144,251, 55, 71,127, 35,132,208,191,101,175,217, 28, 9,243, 61, 64,222,123,212, 31,173, 39,194, +249, 39,101,103,183, 55, 78,133,253, 99,139, 14,135,220, 59, 39,174,232,130, 23,222,204,144,103,112,243,189, 40,124, 93,219,123, + 18,145,158, 71, 79,109, 47,240,222,151,128, 76,100, 96,102,247,153, 48,215, 79,144,112,231,102,175,159,190, 78,128, 32, 97,238, +139,242,206,221, 92, 51,161,144,101,194,188, 7, 65, 49,160,226, 38,190, 20,223,103,123,238, 0, 9,129, 60,203, 80,150,149, 62, + 38,119, 27, 9, 4,130, 16, 4, 34, 97,214, 6, 67,228,132, 34,239, 99, 60,154, 64, 41,165, 15,135,204, 25,154,255, 11, 33,244, + 26, 18, 18,130, 72,255,220,126,217,215,233, 69, 9,102,225,238, 3, 17,233, 53, 69,245,202, 17, 68, 96, 40,184,153, 65,100,214, +143, 18, 40,138, 2,211,178, 52,199, 95, 66,136, 12,138, 21, 88, 41, 40,239,139,153,161,152,145,103, 25, 20, 51, 88,169,250,115, +216, 30, 47, 39,158, 51, 66,170,255, 18,179,183,102,163,181, 64, 11,172,189,212, 90, 97,102,243,220, 1,194, 27,127,236,175, 5, +251, 21, 30, 71,248,127,127,207, 80,138,189,207,108,126,110,253,123,110,156,159,253, 25,145,192,246,237,219, 64, 68,144, 82, 97, +237,252, 26,148, 82,245,177, 49,167, 30, 89,247, 70,222, 33, 53,206, 55,213,218, 42,120, 54, 24,225,191,227,223, 53, 62, 59,190, + 62,245,103, 40, 86,193, 1, 6,215,213, 91,247,246, 61,236,185, 9,179, 70,236, 30,167, 84,165,215, 10,244, 20,203,248, 58,232, +141, 92,129, 89,130,153, 16,142,189,148,201,251, 29,158,191, 2,113,189, 19,177,208,107,208,237,169,156, 62,247, 54,179, 31, 79, +138, 27,127, 67,246, 89,186,220, 0, 71,100,206,195, 46,218,112, 83, 18,124,137, 63, 11, 8,251,162,186,139,171,241, 10,172,230, +189, 73, 56,130,124,241, 79, 7, 88,239,149,121,184, 25,144,123, 40,155,215,219,190, 72, 4,223, 19,197, 27, 16, 69,191,243, 55, +161,112, 49, 9,225,223,216,122, 1,219,159,107,204, 50, 64, 79, 77, 16,243, 23, 5,145,208, 15,136, 1, 50, 50,199,196, 6,222, +221, 57,154,247,176,199, 37,132,104,189, 70,201, 31, 11,106, 5,173, 69, 55, 82, 31,192, 45,104,251,224,219,230, 4, 36,223,143, +194,159,233, 51,166,166, 99, 96,127, 39, 8, 2,158,243, 35,234,215,178,210,191,215, 27, 7, 5, 27, 24,145,208,175,133,183,217, +129, 33,165,132, 16, 2, 82, 41, 16,132,118, 16, 68,180, 41, 70,231,154, 9, 1,134,118, 50,136, 8,121, 33,156,243,199,138,220, + 6,197, 0, 88, 73,235,175, 65,112,166, 31, 14, 33, 52, 96,219,115, 32,242, 46,156,113, 24, 72,152,177,189, 6,176,173, 67, 97, +128, 30, 68, 32,101,214,187,121, 63,138, 94,235,214,165, 93,207,208,142, 72,150, 21,168,170,202, 57, 4, 89,150,129,132, 0, 87, + 10, 62, 84,217,107,108,223, 27, 74,185, 53,103,215,185,118, 88, 18,119,187, 94,176,141,103,222,130, 36,115,232,120,211, 44, 84, +167,250, 28,156,115, 98, 16, 89,248, 27,172,231,244,196, 27,176,118, 82,244,217,213,224,175,143, 65, 8,104, 32, 49, 87, 64, 63, +195,193, 71, 39, 29,121,255,190,185,199,211,108,124, 36, 8, 85, 85,161, 40, 10,244, 7, 61,172, 84,203, 24, 14,135, 80,204,238, +152,106, 39, 30,225,166, 69,245, 14,192,201,205, 55, 1,236, 4, 16,147,219, 71,252, 45,141, 18,129,136, 3,114, 14,159, 49,187, +214, 27,255,142,252, 52,119, 15, 9,222,121,152,231,209,237, 83,236, 57, 81,153,187, 62,202, 56,154, 2, 84, 95, 96,174, 63, 81, + 31,148,104, 58, 62, 12,180, 97,169,117,160, 89,213,199,228,175, 41,237, 91,112,114,255,109,183,244,107,174, 20,160, 55,247,116, +170, 29,148,103, 97,236,240,136,163,123,154, 58, 99, 29,156,184, 21,226,157,187,221, 11, 24, 53,198, 61,219, 43,147, 55, 65,153, + 3, 96, 14, 31, 64,189,140,154,145, 55,188, 40, 27, 13,176,175,189,249, 58, 34,135, 57,121,246, 54, 27,182, 27,142,141,186,237, +118,234, 69,198, 76, 92, 3,148,219,123, 8,201,216,217,109, 80,222, 58,167, 48,218,111, 33, 26,234, 7,217, 46,110, 31, 40,105, +193,197,196,115, 54, 90, 11,170, 51,162,249,214, 13,197,121,157, 97, 52, 31,191, 86,144, 8,158, 47,231,248,136,122,211, 96,165, +191,183,215,131,201, 91,120,190, 99,102, 0, 68,218, 40,139,205,235, 21, 65,136,204, 29,181,200,132, 91,240, 58, 58,101,183, 96, +117,244,205,238,190,104,112,211,224,206,138, 33, 33,161,252,141,218,128,142,254,252, 12,101, 85,194, 71, 11, 65,169,181,138, 0, +208,235,107, 45,220,181, 35, 34,176, 57, 39,123,141,252,245,224,175,103,114, 0, 97,247, 91,189, 70,133, 32,148,101,137,162,200, + 33,149, 12, 34, 90, 86, 42,120, 47,165,148,119,188,139, 82, 58,212,186,190, 82,207, 95, 27,152,167,126, 23, 58,134,222,170,169, + 61, 4,143, 9,171,159, 23, 29, 97, 83,116,157, 20, 0,225,156, 20,123, 13, 26,123, 42,249,142, 87, 91,180, 88,191, 63, 43, 13, +201, 89,175,128, 98, 96,105,105, 9, 69, 81, 96, 56, 28, 98, 58,157,134, 15,115, 43, 72,144, 99,237,194,232,208,115,102, 45,192, + 71,142,168, 3, 47, 21,130,179,125, 31, 65, 66,131,171,183, 56,136, 73, 71,230,177, 83,192,145, 67, 76,245,251,198,192, 79, 76, + 46,138,183, 81,186,195, 15,235, 68,112,130,194, 97, 54,123,172,208,191,119, 0, 33, 67,208,225, 57, 43,142,168,225,152, 94, 12, + 32, 19, 35,201,246, 94,110, 64,119,247,141, 98,122, 85,175,233,139, 5,244, 96,253, 48,106, 64, 33,239, 71, 62,190,248, 14,162, + 69, 51, 10, 89, 96,231,152,138, 26, 19, 23,243, 42, 4,124,250, 68,239,119, 10,164, 65, 61,166, 65,200,219, 24,107,148, 99,142, + 35,243,217,116,161,207,114,251, 52,157,125,127,246, 60, 65, 23,113,120, 84,150,240,168,120, 10, 64,158, 2,240, 50,206,101,243, + 16,136,218,247, 70,138,192, 46,112,110, 41,160,159,231, 70, 64, 30,149, 62,107, 79,110, 80,237,132, 77,131,121, 68,132,180, 30, +151, 5,224, 89, 17, 63,123, 81,174,141,212,172,195,100,169,111,187,177, 43,102, 8, 33,116, 68, 46, 37,178, 44, 11,162,100, 27, +253, 82, 12, 56, 36,244, 86, 69, 38,130, 53, 0,207,164, 35, 61,159, 98, 39, 34, 32, 51,199,165,148,159, 60,177, 8, 13, 41, 43, +183,102, 40,113,145,125,234,152,124,234, 61, 90, 15,254,250, 38,147,122, 72, 51, 33,220, 88, 70, 89,150,161, 42, 43,119,205,132, +208,235, 82, 41,233,162, 32, 21,208,141,245,245, 14, 29,133, 89, 27, 18,181, 4,218,225, 6, 73, 66, 4, 14, 78, 0,194, 20, 62, +199,241, 80, 5,170,147, 10,205, 3,178, 15,171, 23, 1, 58, 32, 19, 62, 37,108,163,118,225, 40, 93,125, 15,244,187,251,207,119, +189, 46, 40,216, 67,244,181, 82,173,155,231,104, 56,194,120, 60,193,242,210,146,142, 66,242, 28, 75, 75, 75, 32, 33, 48, 25,143, + 29,235, 96,239,119,176,151, 49, 7, 32, 22, 48,123,194,166, 96,234, 96,193, 50,124, 22,228,125, 0,246,119, 91,197, 74,191, 46, +136, 98,252, 44, 13,213, 25, 74,110, 18, 18,100,118,111,206,204,243,192, 92,179, 91,198,145,209,159, 89,239, 3,204,170, 94, 27, + 44,235,251, 25,165, 72,124,135,197, 94,115,197,213,124,144,242, 93, 14,111, 55,180,174, 79, 0, 0, 32, 0, 73, 68, 65, 84,239, +155,149, 16,154, 23,177, 83, 2,196, 47, 39,160,251,235,221,165, 60,136, 46,217,251, 54,206,141, 91,168,246,248, 92, 91, 48,179, + 94,183,155,204,221,122, 59,185,117, 50,253, 67,204,253,168, 36,240,164,133,119, 35,185,246,172,227,123,226,232, 6, 47,202,117, + 0,230, 45, 76,231,201, 8,114,185,208, 24,132,236, 67, 36, 32,220,193,182, 81,208, 13,118,135,154, 17,118,224, 93,219,168, 27, + 92, 3,122, 76, 81,123,153, 5, 63,255,203, 51,252,167, 89, 0, 26, 71,227, 51,129, 54, 62,254, 89,249,241,248,250,121,212,253, +172, 60,127,112, 93,218, 34, 61,151, 91, 55, 15,183, 1, 95, 86, 74,211,158,142,126, 34,143,114,212, 14, 35, 19,160, 12,197,108, +157, 5, 65, 4, 22,153,142,100,221,161, 8, 48,235,124, 53, 75,128,136, 77,110, 94, 59, 16,236,229,221,107, 90,145,155,231, 29, +252, 59, 62,105, 17, 48, 51,173,121,232,134,158,129,195,205,220, 57,120,181,211, 2,232,115,148, 74,154,124, 47,160, 20, 60,138, +154, 19, 27, 39, 45,240,208,198,172, 67, 2,200,253, 72,218, 7,222,232,243,194,245,225,165,168,216, 37,164, 32,168, 62, 55,110, +210,108, 81, 90, 7,206,105,240,129,157, 57,157, 6,176, 65, 64,124, 94,241,181,137, 99,147, 48,237,192, 80,138, 33,160, 48, 28, + 14,177,125,251,118,167, 85, 88, 26, 12, 0, 6,166,211,137,102,118,136, 64,126, 36,225, 40, 77, 74, 78,137,106, 48, 81, 92,179, +128,196, 84,131,172, 97,233,124,135, 60, 0,141, 84,142,157, 17,210,251, 49,237,110,157, 8,239,115,236,103, 40,161,188,247, 99, +199,118, 1,181, 99,164,217, 77,119,128,115,162, 59, 54,247, 93, 69,193, 22, 69, 65,149, 57, 87,166, 25,239,196, 11,229,196,103, +129,253,229,206,165,251,193, 74, 20, 77,206,202, 6,180, 30, 39,181, 60, 95,230,225, 89, 44,227,192, 28,176, 37, 62,208, 51,217, +200,116,113,198,206,173, 31,162,228,222,151,135, 81, 78, 45, 26, 83, 6,193,195,168,157,147, 84,187, 59,110,242, 41,132, 38,120, +199,148,180, 32,161,189, 94, 75,237,250, 15, 15,207,167, 41, 45,133,204,224,134,216, 77,152,200, 62,184,201, 45, 81,114,107,196, + 27,209,109,243,168,238, 36, 8,207,163,234,253,168,156, 82,140,195,108,166, 64,204, 89, 16, 41, 17, 96,173, 57,104, 1,127,227, +249,177,239,236,176,247,124,184, 13,180,222,244,200,172, 25,106,220,108, 29,173,147,183,217,250,209,159, 91,111, 74, 65, 26, 64, + 36,179, 30,237,251,249,192,210, 30,209, 82,152, 27,228, 26,128,219,238, 65, 13,214,236, 57,158, 42,120, 55,101, 4, 75,150,126, +174,164, 4, 67, 26, 42, 77,255,157,146, 58,226,210,128,174,188,252,100,155, 3,181,104,116, 78, 51, 35, 5, 74,109,164,209,166, +154,118,222, 40, 65, 81,133,105,176, 24,228,201, 3, 15, 14, 88, 26, 56, 96,119,209,124, 38, 32, 64, 80, 81,176,228,221,250,136, +106,231, 86,102,194,143, 64,167,211, 41,152, 25,101, 85,129, 25,216,178,101, 21,103,207,150, 94, 78,146, 12,181,202,128, 16,176, + 7,192,190,254, 2, 65, 54, 46, 4, 44,110,110,204,254,115,217, 10, 70,212, 30, 96,128,195,245,230, 3,163,141,248,225,114,255, + 28,105, 96, 80,167, 43,163,103,202,166,200, 50, 81, 59, 48,142, 35,177,194, 85,165, 92, 32,211, 78,161,123,108,138,221,115, 69, + 27,240, 54, 29,204,103, 67,207, 95,202, 8, 61, 22,114,194,207,255,115,184, 23,182, 57, 27,254,177,199, 14, 79, 35,237, 73, 45, + 44,128,151, 26,113,175,143,252, 10,248,226,189, 69, 19,248,158,230, 68,127, 41, 52,229,227,250, 30,229,241,102,226,148,145,230, +160,153,211,121,118,120,155, 62, 37, 46, 20, 81, 83, 80,230, 40,243, 54,213,183, 31,233, 19, 55,189,158,132,248,171,241,190,204, +193, 67, 90, 11, 79, 16,230,215,103,128,120,176,161, 50,205,166,195, 83,209,240, 28, 38,101, 94,116,239, 31,243,166, 41,255, 56, +234, 78,129, 68, 27,128,120,155,145,151,217,180, 72, 17, 56,167,181,216, 75, 36,222,223,219,231, 60,160,142,243,181,174, 70,193, +167,219,237,123, 8, 1, 82, 10, 51,106, 38,102, 68,233, 62,123, 76, 30,168,112, 2, 36,185,214,103, 36,116, 16,194, 59,102, 70, +205, 68, 72, 41, 27, 2, 50, 77, 37,207,185,239, 52,159,102,111,103, 35, 40, 25, 69,251,142,182,160,136,130,159, 25,195,121,233, + 52,127,243,178,231,203,188, 80, 4, 22, 30, 51, 65, 73, 43, 8,172,213,236,179,175,139, 8,171, 88,146, 14,144,214, 47, 16, 17, +138, 60,119,223, 95,179,107, 23, 78,157, 62, 13, 41,165,183, 47, 81, 82, 43, 96,117, 14,100,153,166, 84,148, 75,233, 61,135,136, +106, 17, 29,107, 54,177,166,198,117, 74,201,230,200, 93,190,221, 87,189, 91,188,132, 8, 85,239, 20, 69,246,236, 3,124, 74,228, +166, 60,118,188, 86,202,135,153, 71,114, 78, 78,234,122, 42, 21, 75, 17, 56,208,161,132,142,161, 10, 46, 12,207,212, 47,180,131, +251,165, 6,250, 58,229,195, 73,231, 53,229, 12,115, 35, 72, 69,144,186,240,127,231,239, 21,126,218, 55, 20,179,209,204,208, 63, +245,121,202,165, 81, 22,207,223,215,123, 6,207, 23, 4,176, 19,202, 37,220, 75, 67,155, 91,177, 65, 40, 2,160, 96, 67, 20,134, +183,142,115,222, 54, 79,101,127,238,131, 13,113, 24, 65, 6, 30, 80, 76, 51, 44,144,131,118,212,189, 87,158, 21,208,237, 20, 58, + 19,109,212,122, 3, 44,219,162,114, 63, 7,207, 88, 88, 5,159, 42, 93,139, 83, 4,201,197,217, 86, 74, 71, 17, 16,209,226,224, +159,100, 2, 8,201,133,237, 23, 15, 32,222, 52,108, 57,153,253,121,228,237, 6,251,154, 16,158,150,220,172, 26, 19, 73,133, 4, + 5, 45, 38, 37,163, 88,128,229,234,104,188,107, 33, 90,114, 89,202,219,248, 68,189, 18,130, 28,112,211,115,112,127,207, 66,111, +228,108,162,162,121,105, 26,106,163,217,169, 93, 33,238,235, 2,146, 64, 77, 77, 26,142,224,174,103,204, 26, 4,212, 98,228, 24, +113, 4,236, 46, 2,138, 64,177,205,148,170, 85,241,204, 58,165, 98,193,118, 22,237, 42, 4,185,244, 69,251,198,204,168,170, 10, +131,193, 0, 68, 2,211,105, 9, 33, 8,211,233, 20, 91,182,108,193,218,218, 90, 8, 30, 81, 62,191,177,241,123, 41, 21, 54,107, + 87,153,168,138,137, 27,229,103,193, 62, 21,129,113, 64,229,115,147,125,115, 64, 78,181,104,212,127,102,157,104,212,110,216,202, +127, 56,125, 6,193, 87, 67,168,186,172, 45,206,173, 71,223,187,245, 79,106,102, 42,145, 1, 64,122,229,155, 20,209, 16,162,198, + 6,226,205, 1,117, 12,162,151, 42,199, 93,151,132, 82,210,113,143,215, 93,252,218, 24,116, 83,107,133,227,188,183,171,194,178, +169,105, 0,170, 89, 77,225,222, 43, 19,224,186, 78,112,161, 12, 64, 45, 52,181,247,187, 13, 3,189,252,183,249,144, 28, 94,164, +237,111,142, 60, 47,159, 76,205, 50, 14, 75,121,199,209, 52, 69, 98,161,152,154, 74, 41,203,173,163,144, 44, 95,139, 84,132, 65, +206,148, 67, 37,169, 32,145,124,125, 43, 5, 30, 69,174,238, 33, 76,228, 76,156,114,157, 90, 34,109, 44, 64,211, 99, 70,142, 59, + 5,214,137,243,104,165,216,103,212,175, 39, 63, 51, 12, 42,130, 40,149,146,185,229, 68, 14, 22,161,138,211,122,253, 86,193, 30, + 70,110,156,160,236,227,252, 29,121,121, 65,118,255,142,246,230, 40, 69, 68,152, 25,198,183,121,211, 9,138,223,239,107,160,148, +114,117,233,246,111,109, 14, 61,174,253, 13, 63,214,143,208, 69, 3,208,230,173, 3, 74,106, 9,234,115,173,129,212,139,196, 34, +167,108,158,195, 17,246,135, 72, 28,143, 86,193,205, 4,118,219,179,192,239, 59, 97, 21,243,179, 54,242,250, 56, 69, 67, 52, 23, + 59, 13,227,201, 4, 75,131, 37,172, 44, 47, 99, 56, 26, 66, 8,129,178, 44,177,178,178,130,141,141, 97,227, 92,131,205,218, 3, +113,112, 51,202, 21, 68, 80,190,115,173,162,210,181,196, 26, 13,246, 64, 31,232,226,168,219,171, 60, 1, 71,149, 60,246,250, 68, +207, 56,155,181, 30,234,153,244,102, 79,243,210,185,113,206,163,113,173,145,174, 86,162,102,254,124, 86, 66,122,145, 28,185,191, +135,251,162, 73, 53, 99, 45,181,189,175,171,208, 73, 69,193,158,158,167,205,129,104, 68,225,137,235, 51, 47, 93,102, 75,124,155, +191,227,228,251,251, 66,249,246,135, 64,120, 94,161,106,222,151, 54, 58, 73, 53, 25,191,220,145, 60, 9,170,206,170,208,107,102, +168,174,109, 14,114,204,179, 34,218, 68, 34,208, 47, 17,139, 35,246,216, 91, 74, 46, 24, 74,231,186,252,252,175, 5, 58, 39,194, + 99,110,148, 19, 36,243,203,228, 69,206,220,210,152,102, 78, 51,152, 36, 85,159,106, 92, 67,115,156, 11,106, 97, 37,136,103, 59, + 14, 52,163,153,205,156, 90,102, 49, 35,101, 72, 17, 21, 29, 31, 34, 27,119,144, 60, 79,182,246,166,235, 8,210,169,163,253, 8, +201, 81,156, 81,238, 51, 46,133,156,177,190, 56, 69,109,121,145, 11, 37,122, 18,136, 68,105, 23,121,231,104, 35, 1, 63,170,179, + 15,161, 10, 24, 9, 32,238,207,144,162,153, 23, 1,115,138,156,169,148,106,156, 40, 93,165, 82, 71,190, 28, 53,182, 73,169,111, +195,205,186,237,121,243,233,234, 32, 87,205, 60,195, 81, 18,144,210, 54,218,145,206,113, 72,231, 96, 99, 42, 94,181,198,146, 74, + 74,140,199, 35,112, 95, 55, 62, 34, 18,144, 74, 34,207, 50, 44, 47, 47, 97, 52, 26,153,231,183,241,192, 65,248,249,107, 86,181, +200,207, 83, 0, 7,155,178,168,115,205, 65, 90,206,103, 2,189,189,135, 41,140,214,226, 38, 79,245,103,115,114,111,112,202,247, +160, 9,148, 10, 74, 43,245,207,172,172, 94, 5,247,149, 27, 28,170,140, 72, 42,246,122, 18,132,101,133, 92,119, 92,242,210,160, + 33, 61, 31,151,210,205,218, 75, 82,224,200, 73,165,254,124,234, 62,249, 30, 70,112, 45,184,233, 44, 44,234, 32,164,211,113,222, +239, 4,205,208,227, 40,253, 60, 43, 14, 88, 46,246,174,161, 34, 64,139, 30,226,158, 44,169,205, 65,121, 1,204,252,138, 43, 40, +209, 2, 70,140, 60, 4,227,168, 30, 51,200,164, 80, 64,109,183,229,101, 45,120, 6, 13, 79, 18,205, 86,102, 1,100,208,213,172, +133,186, 9,212,168,162,217,120, 37, 80,184, 51, 26,245,214, 41,182, 33, 86,185,206, 4,240, 54,197, 58, 45, 16,137, 83, 58,109, + 16, 95,171, 54,154,156,102,136,170, 82, 12, 6, 40,113, 41, 90,232,245, 20,253, 59,135, 99,104, 80,182,118,195,168, 21,204, 42, +202,219, 82, 45,182,243,128,149,147,174, 49,205, 0,201,212,226,111,209, 25, 8,145,206,179, 69, 90, 0, 36,202,192, 92,255, 68, + 83,210,231,180, 38,198, 97,136,115, 95,179,238,255,162, 57,243, 48,229, 33, 2,175,157,104,142, 51, 96, 54,145, 90,252,155, 86, +158,135,209, 26,183, 36,148,185,225, 28, 53,158, 4, 39,150,211,224, 47,188,158, 6,204,170,118,140,144,254, 91,191,251, 92,125, +190, 28,168,234,253,104,158,136,156,104,174,223,239, 67, 86, 21,164,148, 24,244,251,186,179,159, 82,238, 90, 9,211,127,161,215, + 43,176,101,235, 54, 8,202,176,115,231, 14,156, 57,123, 22,231,207, 95, 0, 88, 66,144,192,133,225, 58,136, 8,213,180,132, 82, +181,198,194,138,205,132, 18, 33,141, 75,158,176,204, 11, 46, 72, 80,163,174, 61,153, 91,142, 58,214,197,251,131,253, 60,246,115, +231, 30,195,213,230, 21,197,255,106,211, 59, 89,102,201, 15,232,131,117, 28,172, 53,242,170, 38, 22,163,207,219,214,220,102,254, + 62,222,255, 93,160, 23, 97, 69, 10,208, 83, 34,183, 69, 24,187,176,143, 69,219,126,231, 57,243, 8, 3, 69,182,187,120,178, 50, + 39, 85,237,225, 87,165,242, 66,199,154,174,165,171,111,102, 78,145, 95,233, 71,139,228,229,210, 41,168, 75, 67, 83,241, 9,143, +146,246,246,135,152,146,231,116,191,157,217,185, 30,207,235, 75,169,189,131, 28,161,109,163, 41, 40,240,120,125, 49, 29,154,210, +128,153, 45, 87,227,102, 50,190, 3, 48,235, 6, 52,162,124, 74, 68,245, 41, 49,134,207, 24, 48,207, 84,192, 7,215,131,102, 83, +242, 62, 27, 67,152,211,176,100,193, 84, 1,181,230,130, 82, 64, 17, 58,142, 8,250, 32,176,151, 7,197, 66, 34,133,153,139,159, +107,142,146, 90,245, 13, 17,224, 10,209,160,250,124, 49,160, 48, 17,171,226,122, 99, 97,197, 51, 29, 30,255,129,110, 3,116, 63, + 50,247,157, 28,159,153, 8, 34,123,226,166, 16, 53,225,240,164, 64, 63, 37,114,243,113,161, 6,212, 52,221,202,169,243, 35,160, +232, 21, 40,138, 1,178, 76,171,212,101, 37,161,164, 68,158,103,238, 51,157,152,109,177,204,105, 99, 99,180,223, 75,169,144,231, + 57,152, 37,170,178, 68, 94,244, 32,136, 48,153, 78,177,235,154,107, 0, 16,178, 76,119,163, 19, 89,129, 23,190,224, 38, 92,119, +253,245,248,202,147, 79, 98, 60, 30,226,228,169, 83, 56,117,250, 52,150,150,151,177,188,180, 21,121, 70, 88, 94, 93, 69,127,105, + 9, 85, 89, 2,138,177,188,178,140,141,245, 13,172,173,157,195,112,180,129,241,120, 92,231,190, 81,183, 76, 22,130,116,245, 67, +162,220, 43,208,201,216,253, 16, 34, 0,115, 63,122,247, 59,212, 49, 24, 97,156,224,165, 72, 92, 23,179,176, 17, 72,168,131, 16, + 94, 84,174, 16,118,166,243,247, 32,170, 43, 62,226, 14,105, 30,187, 41,156,182,138, 27, 65, 86, 27, 88,207,162,185, 23,165,238, +147,142,113, 45, 36, 72,138,117,219,156,129,133, 89, 1,209,210,213,141,189,246,227,246,249,179, 44,158,168,197,115, 77,134, 2, +141,102, 76,126, 87,200,214, 22,207,126,131,153,182, 61,209,246,238,245,188, 11, 90,217,113, 45, 59,111,120, 51,197,239,137,206, + 56,169,238,104, 49, 96,251, 96,232, 55,122, 8,162,111, 15, 96,107,239,140,147,117,218,238,115, 61,202, 61, 19, 89,240,128, 36, + 65,145, 19,169,128,248, 88, 91,132,109,141,221, 45,161,124,143,181, 3,254, 57,199, 14, 78,107,165, 0,205,246, 98, 69, 84, 54, +213, 38,182, 75,229,100,121, 86,204,157,200, 49,251,157,212, 40,200,117,135, 93,186,234,197, 26,230,185, 83,249,102,110, 21,219, + 48, 68,150, 37, 1,115, 30,205, 29, 80,220,153,201,193,123, 15,189,136,155,178,248,255,142,162,121, 97,114,200,182, 13,174,205, +161,171,202, 68,113, 82, 66, 74, 21,156, 95,171,243, 37,218,218,252,166,154,196, 80, 16,149, 55,192, 95, 40,147, 22, 19, 72,213, + 27,183,109,108,179, 40,205,102, 63,240, 16,216, 29, 35,225, 34, 35,225,162, 96, 16,161,146,166,202,129,253, 46,104,228, 20,219, + 58,183, 62, 59, 95,190,120,228,166,175, 77, 86,228, 80, 92, 33,163, 12,215, 92,123, 29,182,108,221,134,167,159,250, 10,134,195, + 33, 50, 34, 20,189, 30,174,187,254, 6, 84,149,196,169,147, 39, 48,153, 76,177,178,117, 21,163,141, 33, 84, 37,145,231, 57,134, +163, 33,138, 94,134, 34,235, 65, 26,205, 4,152,177,180,188,140, 44, 47,192, 74, 97, 84, 78,177,101,117, 5,107,103,206, 98, 99, + 56, 68, 85, 86, 40,171, 18, 43, 43, 75,200, 51,194,250,250, 8,211,105, 21,212,174,219, 60, 57,251,209, 45, 39,174,121,156,139, +247, 41,122, 54,106,105,239,254, 48,235,186,125,178, 41, 16,192,233, 28, 26,165,136,174, 91,153,108,191,222,156, 1, 36, 35,140, +152,177, 78,226,178,187, 5,104,244,121,249,243, 77, 1,250, 12,241,227, 60, 16,231,132,120, 50, 21,132,181,150,234,207, 18,159, + 11,225, 1,107,170,181,179,128,237,187,224, 71,232, 51,169,118,149, 37, 18, 43,254,141,170, 65,157, 32, 28,197, 66, 43, 59,119, +115, 88, 23, 57,231,161,138,163, 91, 90, 44,226,246,163, 93,191, 1,140, 15,218,201,252,112, 27, 21, 29,129,173, 77, 13, 8, 18, +161,151,220, 2,198,241,103,166,234,218, 27, 2,187, 68, 78, 62, 88, 76,169, 94,231,168,157,135,100, 77,249, 12,186,188,221, 83, +165,153,175,167, 86,218,191,217, 86, 51,149,191,141,155,191,112,152,154,116, 63,171,187,135, 49, 82,204,108,122,177, 54,179,241, + 97,186, 69,175,244,204,163, 81,237,103,113,171,216,196,203, 55, 83, 93, 55,111,235,200,253, 13,193, 23,255,137,168,129,139,136, + 58,227,217,115, 82, 74, 71,134,101, 85, 66, 73, 9, 54,249,172,178,172, 22, 16, 9,205,136,210,163,200,220,143, 80,173,247, 30, + 59, 32, 74, 41, 8, 97,159, 1,145,188,142,109, 52,232,124, 80,231,232,245,222,251, 82, 68,243,122,175, 15,157, 2, 14,214, 71, + 74,125,220, 14, 0,233,215,248,105,132,224,122, 10,129,222,210, 50,110,186,225,133, 56,123,246, 36, 46, 92,184,128,233,100,162, + 95, 35,114,220,124,203,205, 24,141, 70,232,247, 10, 76,171, 10,196,192,211, 39,158, 66, 53, 41, 77,174,218,164, 21,115, 1,150, +202,116, 56, 4,122,253, 62,148,172, 0, 18,232,245, 7,174, 7, 61, 25,165,115,175, 63,192,198,198, 16,189,158, 64, 47, 39,172, +175, 15,113,230,220,133,160,241,144, 31,113, 7,209,247,140,225, 48,141, 0,199,190, 86, 41,212,237,119, 1, 40,233, 82, 87, 65, +122,164,109, 0, 79, 4,234,129, 51,205, 34, 20,102,113,248, 94, 94, 94, 42, 44, 51, 86,179, 35,239,152,250,190, 88, 80,111, 99, + 5, 22, 97,161, 26, 63,143,246,191, 36,240,207,144,237, 16, 55, 3, 89,183, 47,138,217,170,118, 55, 11,193,246, 20,136,250,190, + 36,121, 79, 37,194, 15, 39,246,162,119, 89,179, 2,110,138,140,167,126,159, 11,230, 94,135,173,182, 26,234,128,222,110, 14,123, + 75, 71,161,190,160,141,103, 40,212, 35,170, 63,142,136, 83,221,223, 26,116, 59,133,169, 8, 66,179, 41,129, 19,205, 81, 43,223, +152,164,239, 83, 96,110, 85,175,130, 68,250,239, 98,229,255,140,220,125,107, 74,128, 98,214, 40,108,153,153, 26,112,129,182,134, + 38, 13,202,221,143,220, 60,225,155,185,191, 58,168, 13,203, 32,125, 16,106, 52,114,242, 4, 57,212,104,230,225,171,184,169, 45, + 93, 56, 99, 48,136,151,175, 22, 28, 62, 44,222,250, 16, 81, 55, 54, 27,157,147,151, 91, 39,138, 41, 77, 97,162,174,218,181, 22, +166, 85,236, 34,170,223,152, 6,247, 91,234,214, 14, 68,216,235,216,130,161, 15,230,246,251, 44,203, 54,151,134, 8,142,165, 25, + 93,205, 18, 11,217,141, 71, 49, 59, 6,208,246, 29,128, 81,182, 47, 47, 45, 97, 60, 30, 59, 7,167, 57, 4,164, 89, 51,223,222, +137,204,167, 47, 57, 29,237,120,215,163,215,239, 97,231,174,107,177, 49,186,128,243, 23,214, 81,244, 10, 76,167, 35, 32, 47,112, +231,190,215,225,145, 71, 30,193,198,133, 53, 76, 39, 99,147, 39, 39,108,223,182, 21,211, 92,215,187, 87, 85,133,201,100, 10, 89, + 85,200,243, 2, 69,145, 67, 41,133,170,146,134, 1, 81, 40,167, 19, 61, 84, 38,207, 33,242, 2,204,140,201,116,138,229, 45, 43, + 96, 41, 81,202, 10,253,193, 50,182,109, 21,216,216, 88,199,180, 44,155, 44,160,151,131, 79, 13,139, 73,149,207,113,114, 16,139, +107, 18, 1,169, 52,175,154,177,116,141,194,220,118, 53,163, 39,126, 83,164,167,230, 50, 35, 76,161,179, 70,220,174, 28,159,231, + 76,110, 54,175,158, 90,195, 41,112,159,215, 83,193,229,200, 93,119,165, 40,122, 79,237,193, 28, 6,197,169,227, 83, 11, 14, 97, +113, 76,141,237, 8, 76,113,137,165,104,167, 8, 72,213, 41, 55,119,191,132, 71,209, 71,186,166,149, 93,123, 2, 76,242,133, 30, +141, 28,249,162,158, 21, 47,184,217, 36, 6,168,196,130,181, 89, 66,180, 20, 96,198, 57,239, 25, 25,187,185,138,125,119, 45,226, + 8, 61,170,229,110,116,156, 75,177, 9,109, 76, 3,165, 83, 20,109,239,145,140,204, 83, 57,240, 72,232, 21,215, 57,115,242,239, + 3,229, 31, 16,140,211,164, 0,168, 98,145, 77, 76, 41,205,123,128,181,247,158, 22, 68, 50, 43,237,249,206, 25,223, 89,119, 64, + 84,176, 26,206, 24,180,125,135,199,122,212,118, 68,107,252, 26, 11,152,129, 16, 71,233, 93, 77,177, 4, 67, 65, 73, 9, 65, 5, +198,227,113, 99,188,104,144, 1,165, 4,160, 6, 53,231,126, 36, 78,141,118,182, 41,225, 79, 27, 56,199,235,112,214, 38,218,168, +217,245,206, 55, 30, 23, 27, 15,206,177,159, 93, 85,186,151,120,175,215,115,130, 53,203,104,196,247, 43,238,253, 30, 56, 6,115, + 55,133,144,213, 16,148,185, 25, 4,123,110,184, 17,219,182,239,128, 42, 75,244,151, 6, 56,125,234, 36, 78,158,120, 18,149, 82, +184,233,166, 91,113,238,220, 25,156,122,230, 25,211,147,159,221,253,117,211,251,160,167,235,217,161, 60,138, 25,229,116, 90,207, + 3, 96,219,177,139, 80,244,251,238, 88,150,151,151,161,192, 96, 2,166,147, 18,170,172,251,170, 91,253,192,112, 56,196,198,112, +216,140,214, 61, 13, 70, 64,205,155,159,197,244,189, 11, 24, 76,115, 35,191, 42,192, 70,125, 25, 98,118,160, 22,111, 58,157, 74, + 22, 94,111,235,224, 4,128,163, 92, 13, 94, 19,212, 69,232, 35, 80,203,232,218,121,249,106,155,255,158, 23,181,207,162,206, 23, +117, 98,147,145,190, 15,220,146,219,127, 55,219,223, 9,153, 51,154, 13,142,245,250,247,232,251,148,170,126, 22,168, 11,229,158, +137,184, 2,136,144,193,111,147, 64, 68, 9, 80,167, 25,165, 80,158,119,217,230, 25, 45, 76,161,167,114,207,240, 58, 52, 49, 47, + 68, 69, 11, 33,154,127,223, 18, 57,207,141,128, 61,246, 32,200, 79, 71,140,113, 80, 38, 7,175, 77,237, 44,161, 29, 53,157,151, +182,168, 60,213,193,104,230,226,138, 19,213, 45, 32, 95, 51,105,148,160,224,169,209,105,173, 57,128, 36,245, 80,241,220,252,151, + 31,241,107, 74,221, 23,237,164, 59, 18, 2,105,239,187, 89,255, 77, 30,128,192, 13, 72,166,148,232,204,246,164, 71,230, 84,212, +100,138,126,137,236,112, 22,191, 27, 94,125,254, 82, 85,102,147,215,117,234,186, 86,157, 90,175, 65, 28,149, 91,103,194, 94,107, +155, 99, 79, 53,191, 72, 69,232,228, 13,144,177, 77,126,226,102, 49,156,160,198, 83,160,238, 3,191, 82,108, 64,154,107, 48,135, +214,165,216,233,121,246,254, 75, 41,161,148,116, 78,136, 16, 2, 83,211,229,141,221, 96, 22, 63,175,137, 0,204,201,164, 85,170, +170, 92,128,142,167, 90,245, 47,204,241,228, 57,182,109,221,134, 91,247,222,134,193, 96, 25,131,165, 1, 78, 60,253, 20, 30,125, +236, 11, 40,178, 30, 20, 41, 84,147,137,115, 26, 54, 54, 54, 32, 85, 13,206, 68, 2,215,238,217, 3,176,194,112, 99, 8, 41, 43, +148,229, 24,204,140,170, 98,243, 90,125,156,121,150,185, 97, 51, 34, 39, 44,245,151,161,148,194,116, 90,162,223,239, 97,108, 62, +199, 58, 67,214, 97, 40,138,220,213,206,175,111,108,232,117, 98,102, 26,184,177,166,155, 0,117,176,242,242,233,186,233, 12, 27, +186, 85, 63, 71,250,247,118,223,103,165, 18,205,103,108, 10, 69,185,176,211, 42,252,253,213,227,162, 73, 59,122,149, 26,147,108, +176,153,185,160,177,163,153,114,242,103,129,124,208,103,221, 58,235,188,185,177, 39,109,123,147, 5, 99,231, 76, 51,230, 8, 79, + 41, 84,223, 47,216,230,213,119,220,103,237, 21, 13, 80, 23, 10,196,134,149, 19,222, 84, 32, 22,105,125,145,247, 86,249, 44,224, + 12,242,205,137, 81,156,126,116, 74, 11,135,242,209,185, 69, 19, 95, 73, 16, 88,182,139,238, 82, 27,158,238,216,232,149,166,113, +186, 29, 45,181, 37,159,185,121,189,103, 57, 55,177,242,189,173,156,173,161, 21,152,145,123,111,188, 95,196, 34,180, 70,226,145, +168, 45,206,145, 39,187,236,250, 20,125,227, 33,244, 65, 53, 92, 56,254,239, 99,149,122,243,231, 28, 53,186,240,156, 48,168,128, +166,111, 52, 62, 98, 53,119, 68,100, 42, 58,246,175,179,136,105,110,255,139,133,217,132,237,207,184,166,183, 66,183,198,213, 90, + 75,165, 55,128, 76,228, 24,141, 70,179, 31, 80, 3,226,126,207,120,127,206,187, 79,175,199,235,217,205, 96, 23, 34, 41,254,201, +132,128,200, 50, 23, 81, 11, 33,160,108,215, 54, 23,117,144,139,194,253,233,101,254, 38,107,163,114,165,180, 40, 81,121, 19,240, +132,161,214,245,151,118,196,164, 84,110,243,213, 51,228,189,110,113,169, 53,221,210,162, 56,207, 51, 55,109, 47, 29,117, 69,221, + 1, 9,200,243, 2,253,229,101,220,126,219,139,112,231,107,246,225,111, 62,253,105, 28,251,226, 35, 24,110,140, 48,218,184,128, +109,219,183, 99, 60, 45,177,126,238, 28, 88, 49,178, 44, 67,158,231,232,245,122,168, 42,137, 74, 86, 16, 69,129, 91,111,185, 13, +143,127,249, 56,170,201, 4, 96, 29,185, 47,175,108,197,100, 50,129,148, 99,167,254,182,253,229, 45, 19, 40, 43,137,141,106, 8, +197, 10, 69, 94, 96, 99, 56,212, 3,101, 0,140,199, 99,157,142,145, 18,172, 74,148,213, 4, 36, 8, 69, 94, 96,117,101, 5, 82, + 74,140,198, 67, 76,203, 82,143, 56,246,148,241, 1,232,206,112, 12,227, 74,132, 90, 5,175,163,102,106,201,113,177, 25,247,155, +106, 24,100,157, 74,165, 24, 97, 31, 71, 68, 35, 64,163, 62,143,180, 24,117,158, 42, 75, 94,164, 79,124,204, 32, 8, 33,194,104, +152,128,103, 59,112,220,245,157, 88,176, 11,104,124,140,186, 73,209,162, 14, 4,207,222, 43, 84,214,118,148, 96,146, 30,230,213, + 68, 10,205, 97, 43,242, 86,106,186,126,235,122,168, 73, 20,189,206,234, 88, 22,180, 62, 5,210,245,223,137,232,218,118, 5, 74, +213,141,219,135, 92,248,227, 50, 61, 96,110,228,254,231, 48, 6,126,190,171, 17, 45, 49,146,117,227,201,247, 77, 68,243,169, 38, + 52, 49,197,238,159,103,131,114, 79,249, 20,212,156, 23,239, 60,242,228,124,236,134, 10,175, 1,129,245,132,190, 56, 18,143,231, +102,195,163, 46,235, 40, 91,255,159,163,205, 56, 4,123, 27,157, 7, 57,122, 15,208,253, 46, 81,254, 64, 20, 34, 57, 7,216,163, +218,111, 50,204,150,205,149,219,206,102, 16, 16,148,213,237,108,179,204, 3, 45,225, 40,127,145, 9, 39, 78,178, 17,169,141, 36, + 4, 17,178, 44,199,116, 90,182,108, 66,129,130, 84,211,251,240, 65, 92, 36,115,229,126,196, 18,211,231,182, 35, 27, 88,183,210, +141, 21,250,194,143, 26, 44, 3, 96,162, 53,233, 54, 46,114,244,185, 85,240, 91,128,102, 86,102,144,142,116,199,106,239,113,150, +233,173, 65, 71,231,202,115,188, 40, 56,214,102,183,255,166,183, 92,143,203, 37, 19, 33, 10, 23, 97,206,139,112,242, 60,195,234, +214,109,120,197,215,221, 1, 86, 10,143, 62,250, 40,142,125,241, 49,244,139, 2,227,241, 58,182,108,221,138,147, 39, 79,129, 85, +165, 91, 16,147, 66, 85, 85, 46, 69, 0, 48,242,140,112,205, 53,215,226,196,147, 79,160, 26,143, 92, 75, 90,102,198,133, 11,235, + 88, 94, 94,130,204, 11,244, 5,161,172,166, 90,201,239, 34, 89,129,190,113, 14,184,210,215,108,208, 31, 96, 60,158, 56,182, 66, + 41, 5,145,153,238,174,102, 47,153,150, 19, 0,132, 60,207,177,188,188,140,162,172, 48, 28,142,180, 99,196, 94,160, 20, 5, 22, + 1, 85,143,186,150, 92,255,191,110, 38,196,110,127,178,162,235,184, 30, 94,233,230, 51,115,134, 72,180, 52,158, 11, 6, 55,169, + 80, 90,227,118,191,217,247,143,230, 2,120, 42, 10,142,208, 51,104, 85,123,177,179,208,217, 15, 56,204,247, 23, 53,145,213, 78, +200,163, 69,130, 12, 75,185,103,102, 75,136,154, 42,217,177,150,109, 57,116, 45,219, 68, 60,172,157, 90,196, 69,126, 94, 63, 79, +229,153,253, 82,179,160,108, 42,174, 85,143, 65, 45,234,125, 28,143, 27,108, 19,215, 53,242,201,190,104, 45,154, 86, 70, 20,181, + 50,228,197, 0, 60,229,225,197, 53,224, 46, 21,192, 97, 57, 91,235,240,153,152,129,246, 0, 57,142,210,131,247,143,157,142, 69, + 38,186,165, 40,117,159,106,247,218,228, 58,237,157, 21,129,113,172, 78,231,160,213,168, 47, 80,170, 75,208, 66,192,108,206,204, +214, 27,158, 5, 98, 74,180,129,109, 83,189,214, 15,175, 10,115, 78,222,133,180,160,234, 55,209, 8,253, 22,145, 84,148,147,160, + 32, 95,238,242, 76,200,130,145,176, 89,150,185,104,218, 54,149, 17,182, 70,219, 92, 15, 37,165, 99, 63,152,117,244,181,190, 49, + 12,168,117,255,129,179,223, 8, 19, 81,219,254,231, 58,159, 43, 2, 10,157,188, 89,245, 62, 44, 50,128,204, 58, 36, 30,117,239, + 55, 13,170,167, 79,121,180,166, 5,123,165, 29, 0,231, 12, 64, 71,115, 76,250,124,166,101,233, 6,207,104, 5,184, 50,159,167, +207, 93,136,204, 68,231, 85, 99, 98,149, 93, 92,126,148, 94,111,214, 20,148, 47,214, 77, 75,194,205, 78, 74,235,180, 55,129,193, + 47,153, 36, 33,144,137, 12, 69,209,195,214,173, 91,176,117,117, 21,103,214,206,225,201, 39,159,196,182,109,219,112,250,244, 51, +216,178,186, 3,167, 78,157, 48,145,177,206,239,103, 89,142,213,213, 1,134,195, 33,170,170, 2, 43, 5, 2,227,244,201,147,144, + 82, 66, 74, 14,162, 39, 2, 99, 50, 30,163,215,235, 97, 60, 26, 1, 66,207,108, 7, 3,101, 89,130, 1,140, 39,154, 94,207,139, + 2,178,146,152, 76,198,200,243,220, 57, 15,186,179,153, 10,156,230,162,215,115, 99, 83,101,197,200,179, 28,131, 65, 31, 85, 85, + 98, 58,173, 66,173, 78, 60,132,205, 11,102, 2, 69,124, 48,226,214,220,195, 25, 45, 99, 53,251, 4, 48,137,186,132,133,169, 14, +213,102, 85, 34, 40, 6, 11, 61, 17,174,238,115, 26, 29,231,140, 58,243, 89,245,235,177,136,206, 31,206, 82,167,107, 56,232, 92, +249,108,205,103,126, 23,101,149, 93,211, 36, 65, 65,208,196, 51, 89,128, 40,200, 97, 10,238, 93,195,211, 72,234,165,132,219, 95, +131,162,147, 89,236,130,135, 15,121, 76,107, 59,112,226,196, 40,208, 89,253,211, 19, 3, 69, 90, 7,148,196, 96,153,200,199,199, +109, 25,133,201,129,198,173, 23,231,150,137, 69,109, 89, 27, 83,216, 18,162,188, 89,204,197, 76,109, 0, 66,229,123,156,187, 15, + 26, 55,204, 25,196,210, 42,128, 75,228,173,221, 67, 17,229, 89,244,166,222, 44, 81,179,249,100,215,216,213,175,151,244,157, 25, + 15,160,173, 40,204,149,102,120,109, 42,195,205,156,188,232,130,163, 92, 61, 39, 71, 25,218,185,220,238,129, 49,249,199, 44, 19, +141,241,157, 49,160,251,237,128,133,208,147,228,132, 71,125,219,210, 47, 65,117,100,238,162,117,207, 65,204,242,204,229,241, 89, + 74,100,134,226,182, 51,186,139, 94, 79, 43,155,189,155, 85, 83,223,113,196, 45,220,121,251, 52,186,115, 42,188,214,179, 86,247, +110,153,133,156,106,167, 68,153, 41,117,182, 78, 62,188,207, 20, 44, 87,255, 26,187,123,107,118, 4,169, 24,178,146,230,248,109, +173,172, 61,150,220, 29,183, 61, 86,169,234, 72,213, 78, 91,179, 78,160, 50,244,246,116, 90,214,158, 22,199,194,182, 56, 45,195, +174,242,196,181,158, 86, 30,171, 19,205, 14,176,142, 86,158,231,216,123,251,237,232, 45,173,224, 75, 95,126, 28,167, 78,158,192, +181,187,175,199,147, 79,124, 9,131,254, 10, 78,157,122, 26, 74, 73,244,251, 75, 24,111,108, 56, 80, 56,127,254, 2,250,189, 30, +144, 3, 37, 51,148,172,160,220,189,171,117, 3, 74, 74,144,153,182,167,148,132, 98, 5,161,172,208, 76, 95,223, 94,191, 15,101, +156, 3,191, 83,216,116, 58, 69,158,229, 64, 6,228, 69,129,178,156,152,241,195,122,132,176,156, 76, 0, 0, 69, 81, 96,121,121, + 25, 85, 85,161,172,166, 40,122, 5,132,200, 48, 25, 79,157,195, 27,107,114,148,109, 6,195, 62,251, 83, 87, 21, 6,130, 68,110, +178,118, 53,216, 10,211, 63,134,235,114,180,232, 30, 53, 20,236,182, 91,137,155,221,194,238,115,109,247,191, 69,107,212, 23,165, +180, 29, 59,203,113, 63,147, 56, 33,179,201,207,176,169, 70, 65,237,129, 88,203,247, 46,170,159,243,201,161, 56,184,222, 83,107, + 2,143,107,106, 32, 40,229,225, 40, 90,247,186, 73,154,115, 23,173,204, 42,187, 20, 95,138,225,200,147, 84, 9, 99,102, 68,234, +192, 53, 74,216,250,141, 92, 90,129, 10,212,218,244, 37,110, 39, 43, 76, 65,191, 95,119,158,106, 64, 51, 19,208, 57,110,149, 74, +141,252,120,234,243, 23, 22, 93, 52, 46, 93, 84,231,222,162, 9, 72, 93,163,100,105, 85,130,130,247,163,116,251, 80,212, 96,204, + 1, 88,219, 77,222, 82,133,245,207,211,109, 71,189,169,204,141,252, 91,184, 9,212, 84, 44,192, 30,181,196,141,133, 30,118,152, +171,215,119,248, 94,126,222,136, 3, 10, 62,188,230, 34,202,185,146,169,219,102, 23,165, 91, 80,112,157,224, 40,131,237,106,207, +166, 7,124, 16,105, 19,233,114, 93,195, 12, 9,165, 35,237,210, 94, 77, 34, 44, 45, 47,227,228,137,103,220,195,228,231,206,131, + 13, 72,216, 40,189,174,211, 38, 15,168, 97, 34,113,255, 34, 5, 93,235,204,207,133, 16,110,128, 10, 9,161,115,167,150,114,247, + 20,206, 14,252,149,153,161, 77, 4,150, 18, 48,243,182,167,211,210,148,155,217,218,113,129, 60, 23,174, 63,188,191, 54,108,218, + 65,152,158,213, 41, 85,189,206,137, 75,227,112, 41,111,225,206, 82,179,155,235,129,218, 73, 68,164, 33,136,245, 50,153, 16,184, +117,239,237,232, 47,175,226,228,201,147,232,229, 5, 94,117,199, 62, 40, 6,100, 89,226,153,147, 79,162,151,231,224, 44,195,100, + 52, 10,186,138, 73, 41,181,144,205, 48, 64, 34, 43,160,170, 10, 89,150,105, 86,201, 31,185, 74, 4, 5, 66,111,176,172,255, 93, +149, 40, 39, 19,172,172, 46, 67, 64, 96, 60, 25,233,153,104, 74, 65,136,204,173,225, 34,215,130, 56,150,140,170, 44, 81,228,125, +221,199, 64, 73,231,208,234,235, 63,197,100, 92, 97,121,105, 9, 91, 86,183, 98, 99, 56,132,200, 25,253,173,125,108,108, 12, 53, + 27, 16,213,152,199,193,149, 86,192, 27,221,135,107, 23,171,188, 70, 98,225,172,123,215,232,204, 50,105, 66,206,204,123, 55,247, + 40,147, 34,177, 14,153, 89, 91,172, 24, 2,222,144,146, 5, 4,105,169,243,106,203,179,183,142,146,230,139,115, 22,106,108,185, +184,247,228,182,153,233, 77,178,212,237,222,241, 76, 7, 77,165,103,137,252,134, 9,136,132,107,186,239,238,231,172,254,245,236, +167,213, 98, 13,130, 47,148,155, 11,104,113, 57, 23, 55,235,171, 27,121,224, 68, 27,203, 32,135, 28, 71,172,222,223,103, 34,155, +155,159,105, 91, 60,141, 14,114,179,102,167,123,125,234, 9,180, 41,240,158,149,167,111,115, 54,154,215, 8,110, 83, 15,166,113, + 69,229, 68,212, 50, 48,156, 34, 79,110,222, 76, 97,219,131,157, 92,227, 31, 77, 21, 5, 42,247, 68, 30, 61,160,253,124, 58,206, + 87,205,182,122,177, 28, 12,100,169,193,156, 26, 93,194, 98,165,124, 51,239, 31,181, 76, 13,132,110, 53,120,198,249,114,151,198, + 49, 96, 1, 15, 28, 45,165,197,145, 67, 88,153, 8, 46,203, 50, 80, 38, 92,148, 27,136, 71,161,188,185,217,214,161, 64, 0,148, +142, 29,240,163,118,123,236,230,123,155,179,118, 53,232,230,225,205,132, 64,229, 4,113,222,196, 56,171, 13,176,105, 3,239,125, +204, 34,130,146,140,145, 41,187, 99,199,124,228,166,140, 75,131,108,158, 91,253, 0, 67,202, 42, 0,121, 63,130,242,193, 54,207, +115,148,101, 9, 33,180,216,144,167, 83, 93,199,110, 29,144, 57,148,108,208, 92,136, 85, 82, 44, 40,132,192,206, 93,187,113,203, +222,219,241,201, 79,124, 12, 82, 86,168,138, 30, 46,172,157,197,218,133,243, 56,117,234, 25, 92,184,112, 1,114, 58, 69, 37, 37, +150, 6, 3, 71,133,219,180,128, 77,125,104, 48, 38,244,251, 61,227,140,100, 65, 90,104,203,182,237,216,178,109, 59, 46,172,157, +195,116, 50, 69,191,223,195,202,234, 42,134, 27,235,152, 12, 55, 32,217,143,162, 44,187, 66,168,170,210,137,241,202,178,194,104, + 60,114, 64,175, 83, 71,112, 66,180,140, 8,163,209, 8,227,201, 4, 91, 86, 87, 49, 26,141, 48, 45, 75,172,110, 89,197,198,250, +134, 46, 11,180,209,180,138,244, 55, 13,253, 18,153,153, 58, 70,112,202,178,158, 13,239, 82,112, 97,122,102,241,188, 55,195,163, +251,106,125, 11,210, 37,145, 11, 7, 62,104, 31,129, 74,244,108,180,236, 51, 0,221, 54,122,201, 22,136,210,227,244, 15, 45,126, + 94,113,151,195, 84,132, 73,209, 72,106, 4,253, 24,210,137,249,184, 60,215,234,106,172,234, 62,118, 74,152,234, 48,140,182, 94, +123, 3,207, 20,187,165, 4, 12,179,166,126,165,218,157, 34, 49,216,197,159, 90, 99,251, 40,147,168,169,146, 22,161, 90,219,113, + 52, 68,120, 45, 12, 65, 35,255, 61,107,129,180,148,147,181,169,232, 83, 63, 15, 5,112,222,199,199,253,211,125, 53,123, 80,210, + 71,141,217,214, 33, 11, 16,215,145,195,205,133, 78,245,206,166,168,123, 89, 29, 97, 83,203,184, 80,138,166, 53,213, 78, 65, 29, +161,249, 41, 13,225,126,174,255, 70, 53,242,249,225, 48, 9,242, 38, 81,133, 10, 95,221,223, 59, 82,158, 10,106,212,114, 19, 1, +148,193,169,182,179, 44,115,155, 55,152, 92, 11, 69, 97, 26,199, 56,129,151, 75, 98, 19,178,158,128,146, 10, 36,181, 3, 81,150, +186,123, 28,136,176,186,101, 21, 39, 78,158,114, 20, 46,137, 76,139,190, 88,186,188, 56,121,212,187,109,159, 42,132,208, 78,132, + 23,221,219,124,177,205,121,199,138,247,128, 7, 17, 2,204, 58,234, 22, 36,220,100,184,122,246,183,105, 12, 67, 4,134, 4,105, +217, 61,148, 0, 0, 32, 0, 73, 68, 65, 84,179, 4, 43,194,116, 42, 49,157, 78,131,242,179, 44,203, 65, 36,130,220,126, 61,108, + 7,201,180, 72,156, 95,180,206, 73,105,202,216,166, 6,208,103,122,207,220,172, 49,182,234,121,197,172,175,185, 5,243, 76,160, +215, 91,194, 75, 95,254, 50,144, 16, 56,125,250, 52,198, 27, 27, 40,250, 3,172,174,108,193,241,227,143,162,232,245, 32,167, 19, + 92, 88, 63, 15, 29,172, 50,138, 60,119,205,111,124,117,182, 19, 65, 66, 90,132,173, 5,154, 36,112,237,158, 27,176,188,188, 5, +143, 31,127, 4, 82, 74, 83, 70,166,157,171, 45,171,171, 88, 95, 63,111,202,239,178,160, 58, 33,207,245, 28,172,105, 57,213,215, +156, 1, 18, 57,242,188, 64, 37,167,250,153, 34, 93,162, 84, 85, 21, 64,186, 37,173,173, 56,232,247, 6,200, 68,142,201,100,130, +162,215,195,112, 99,104,174,165,242,234,203,125, 71,220,148,187, 41,127,176,139, 46,143, 19, 44,131,176,209,245, 1, 64, 56, 91, +222, 69,135, 20, 63,103,145,179,237,141, 0, 37,161, 2,161, 30, 75,121,209,202,243, 88, 0, 26, 71,236,177,144, 13,112,213,169, + 23, 15,242, 34,142,206,155, 37, 53,245,176,161, 90, 21,191, 72,185,154, 95,138, 27, 54,145, 9,203,206,244,135,164,234,204, 45, +206,121,251,194,156,224,109, 86,196,205, 36,160, 12, 23,150,207,124, 45,181, 71,169,254, 4, 34,155,215, 86,172,130, 7, 55,174, + 71,180,148,187,253, 59, 71,123, 11, 43, 96, 18,237,194,180, 84,105, 52,183,231,242, 27,181,222, 11, 12, 96, 9,242, 74,162,217, +177,104, 86,195,154, 89,142, 79,152,195,175, 61, 95,138, 58, 63,197, 27,122, 76,173, 16,137,122, 50,226,140,146,160, 76,164, 71, +124, 54, 38, 49,129,131,114,171,164, 2, 22, 97,123,206,160,142,155,163, 97,143, 22,196,195,246,211,141, 27, 87, 15, 13, 81,104, +150,124,212,226, 61, 33,200, 8,155,226,129, 38,228, 29, 55, 65,100,122, 15, 21,158,234,189, 22,163, 9, 16,101,158, 90,188, 89, +190, 3, 34, 84,149, 52, 68,177, 57, 54,179, 49,138, 76, 64, 86, 18,176,194, 48, 19,101, 50, 24,164,226, 30,235,245, 84,176,160, +225,140,191,134,132, 8,153,149,136, 53,128, 41, 55,203,178, 44, 0, 39, 59, 0, 71,112, 77,225,107,218,221,180, 16, 85, 58,122, + 27, 14, 71,158,136,205,143,126,235,156, 56, 25, 1,149, 95,162, 22, 56, 22, 45, 83,189,252,200, 29,208,165,102,101, 57, 53, 27, + 49, 71,121,224, 52, 67, 85,107, 32, 4,136,101,192,174, 80, 47,195,173,183,221,142,141,225, 8,146, 21, 50, 18,216,177,107, 23, +158,120,242,113, 60,115,226, 9,236,216,182, 11,103,206,159,197,116,184,129,213,229, 85,140,167, 99,148,211,210, 85, 36,212,173, +132,181,163, 40,165, 66,175, 87, 32,203,122, 24,143,199,102,100,169, 94,148,121, 81,160, 95, 20,248,210,241, 71, 32, 77,243, 25, + 39,218, 2,112,254,194, 58,182,110,221, 6, 41, 75, 76, 39,165,187,166, 85, 85, 97, 58,157,122,233, 20,211, 1, 80,100,152, 78, +167, 88, 90, 26,160,172, 42,148,211, 18,138,165, 3,224,202,208,255, 66, 8, 93,102,199, 10,121, 81, 96, 58,213,236, 0, 0,115, +140, 97, 63, 1,183,167,186,107,232,139, 88,163,225, 43, 62, 31,236,179,125,241,238,198,225,191,253,158, 2, 28, 21,107,217, 52, +205,179,177, 84, 67, 36, 95, 32,151,214, 85, 93,162,136,221,166,175,145,102,144,252, 53,109,239,253, 98,169, 5,110,143,182,147, + 88,169, 34,161,156,152,175,157,162,249, 9, 97,101,244, 59,236,221,175, 60, 73, 49,207,113,190,125,229,182,175,210, 12,250,165, + 35, 82,211,183,204, 80, 39,132,249, 70,167,254, 36,110,140, 55, 93,244,142,167, 0,125,174,224, 45, 86, 82, 35,209,115,152,211, +142, 6,205, 57,166,148,196, 32,158,204, 21,151, 42,164, 18, 2,233, 72, 58,236, 74, 22,214,121, 54, 21,179, 49, 77,228, 71,224, +190,114,179, 49,182,211, 91, 23, 28,229,199,109,222,212, 43, 29,112,145,186,223, 18, 54,164,223,211, 37, 20,113, 84, 23, 55,105, +169, 61,215, 26,172,200, 43,101,243, 35, 74,247,247,174, 92,205,245, 78,243,142, 89,243, 86, 4, 32,207,114, 84,178,210, 27,188, +249,204, 65,175,143,245,245,117,115, 46,153, 99, 10,164,148, 46,164,136, 53, 3,190,194,221, 2, 57,188,122, 98, 27, 77,101, 46, +146, 12, 71,195, 90,150,129,189,156, 59,153,243, 84, 82,214, 14,177, 23,109,143,199, 83, 87,126,230,179, 54,126, 26, 2,224, 70, +221,123,220,241,173, 45,141,227, 43,149,235,252, 94,157,103,150, 81, 47,114, 87, 58,132,102, 89,167,237,161, 94,179, 8, 2,189, + 94, 31,123, 95,244, 98,156, 61,119, 22, 85, 37,113,205,174, 93, 56,185,118, 14, 79, 62,113, 22,219,182,239,196,120, 99,172, 35, +231,201,196,229,123, 43,211,205, 77, 8,125,205,164,148,193,136, 82,219, 45,174,172, 42, 8, 33,176,178,117, 43,136,129,201,120, + 12,102,133,175,124,249,113, 93,214,231,250,171,235,251, 82,153,127,143, 70, 99, 76,167, 19,128,165, 43,197,179,108,153, 52,215, +153,140, 94, 64, 86, 18, 89,158, 97, 56, 28,161, 40, 10, 23,117,235,155,171, 29, 52, 9, 35,192, 52,117,250,106,170,211, 24,101, + 85,162, 87,100, 32, 20, 96, 8,140, 70,227,186,148,216, 85, 34,133, 67, 93,156, 48, 53,161,216, 34, 79,239,225,230,170,183, 0, +122,188, 15,248,213, 40,181, 35, 39,112,177, 33,122, 91,215,195,246,156,190,161,150, 55,137,234, 76, 94, 43, 88,166,246,161, 44, + 51,254,158,105, 17, 32, 15,251,110, 52,223,128,162, 8,221,171,110, 66,221, 96,134, 82, 84,123, 35,229,219, 28, 19, 93,127,172, +221, 59,236,254,231, 57,219, 65, 87, 55,204, 22,184,165, 26,169,196,165, 89,109,185,232,192, 17,160,104,238,185, 95, 70,151,138, +132, 41, 93,254,214,234,112,208, 38,135,194,208,108,106, 93, 64, 36, 80,185,197,187,180,128,134,150,233,104,177, 23, 25,121,100, + 12,191,140,208, 23,140,161, 49,249,204,239,166, 22,151,146, 53, 42,174, 0,221, 33,204,166, 61,152,163, 49,155,228, 58,189,133, +148, 61, 2,113, 70,157, 31,138,203, 22,163,102, 19,137,228, 85,170, 25, 77,252,160,204, 27,225,222,164,222, 41, 96, 29,252, 40, +221, 31,157,202,141, 50,176,248, 88,235,156,183,242,202,181,242, 44,195,120, 60,110, 60,220,245,189, 70, 50, 2,137,175, 69,155, + 82, 53, 30, 42,195, 17, 29, 78,129, 32, 78,122, 66, 68, 5,134, 66, 89, 42,140, 70,211, 32,143, 27,207, 18,175,163,125, 56,186, +190, 57,218,148, 22,138,128,178, 44,115,244,187, 75,241, 11, 1, 65, 10,178,242, 53, 22,156, 22, 35,153, 42, 41,237, 12,144, 59, +238,213,109, 91,193,172,176,103,207,245,120,252,248, 23,241,228,151,191, 4,202,122, 88,221,186,130, 83,167, 79, 64, 78, 75,244, +138, 28,171,203, 43, 56,183,182,102,202,211,148,139,206, 53,253,174,188,212, 14, 25,182, 93,239, 53, 34, 19, 88, 95, 59,103,132, +135,153,115,248,170,138,157,152,202,137, 15,205,161, 78,167, 19, 35,122, 84,200,243, 12, 66,228,186,138,160,170,220,181,200,178, + 12,147,201,196,177, 78, 89,166,239,243,160,223, 71, 89, 85,174,244, 77, 86, 58, 61, 82,150,165,158, 4,103,174,167, 84, 82,195, +174,172,208,239,247, 48,157,150, 16,164,244,254,175,200,211,172, 42,132,115,213,185, 65,163, 7, 20,188,231,168,192, 23,222, 17, +183, 4,241,179,132,142,254, 30,129, 77,229,214, 83,253,219,227, 14,115,201,181,119, 49, 62,196, 28,153,124, 82,239, 17,149,171, +181,159, 71,172,243, 73,186, 35,112,189, 96,189,125,137,144,215, 1,142,151, 70, 21,109,159, 21,141,128,246,193,156,163,160,142, +208, 44,115,203,219, 4,101,126,148,108,129, 52, 89, 62, 22,137,221,218,202,212,124, 17,153, 5,242,121,109, 83, 83, 32,236,211, + 40, 23, 43,178, 32,177, 9,192,159,241,247,173,141,255,136, 90,111, 88,220, 9,174,118, 36,216,109,242, 49,181,147, 26,238, 80, + 71, 79, 8,114,218,126,147,151,230,104, 63,246,147,250, 30, 45,230,137,205, 26,148, 57, 57, 97, 85,237,200,121, 78,139,240, 27, +201, 96,134, 87, 79,173,222,123, 88, 47,223, 46, 34,105,110, 16,112, 52,125,138,174,138, 35, 75, 71, 55, 67,132,211,177,152,145, +247, 10, 72, 51, 62, 84,100,153, 86, 75,155,118,159,204,161, 96,143, 41,214, 35,192,245, 12,119, 77, 14, 93,157,122,189,129, 83, +156, 79,180, 39, 96,202,204,217,136, 97,172,226,221,174,181, 26,216,133,163, 92, 43, 41, 49,153, 84, 40, 75,217, 0,116, 95,112, +230,250,217,219, 18, 58,175, 86,223, 2,188, 52,162, 64, 87,154,136,122,248, 8,161,102, 87,180, 70, 82,153, 94,251, 89,221,144, + 72,232, 99,203,122, 64, 85, 1, 74,250, 78, 56,194,201, 99, 84,151,101,101, 89, 6, 5,133, 27, 95,112, 19, 94,120,243,205,248, +242,151,191,130,115,103, 79, 98,125,125, 13,229,100,130,169,172,112,227, 13, 47,212, 12, 10, 79, 49, 28,143,144,231, 61,236,216, +185, 3, 27,235, 23,208, 43, 10,228,133,237,240, 87, 59,192,131, 65,207, 12,102,169,160,148,190,182,182,191, 59,152, 33, 12,115, +211,235,245, 48, 24,232,137,107,182,199,186, 5,248,149, 45, 91,177,117,219, 86, 44, 13, 6, 56,123,230, 20,206,159, 59, 3, 34, +175, 28,206,116,157,179,215,206, 62,139,189, 94, 15,163,241, 8,121,150, 67, 73,133,113, 57,118,227,160,165,172,116,137, 33,169, + 32, 29,167,204, 51,160, 69,143,230,121,147, 18,131, 94,129,241,100, 18, 86, 87,180,116, 90,164,196, 16, 23,157, 18, 17,222, 60, +110, 14, 0, 41,126,206, 93, 10,208, 50, 2, 64,163,131,220, 66,221,228,154,225,122,248,183, 81,158,248, 34, 2,243, 5, 68,127, + 97,102,143, 91,218, 89,115,107, 71,195, 77,132,248, 49,187, 77, 28, 68,211,238, 93,157,118,108, 49,225,179, 59,252,168, 94,127, + 94, 15,252, 60,142,194, 27,101, 87,148,200,147,181, 42, 7,103,180, 58, 77, 68,198,246,111, 90,219,166, 70, 37,111, 41,229,252, +220,206,117, 64, 35,151,158,236, 5, 79,233, 54,178,182,175,117, 35, 69, 49, 63, 75,145,164,218,125,200, 19, 62,181,221,218, 16, +214,175,121, 68, 80, 51,154,172,139, 68,179,118,146,131,137, 68,161,168,173, 81,130, 17,116,132,227,198,253, 13, 89,152,154, 6, +228,134,199,170,130,171, 19,174, 63,127,254,184,189, 34, 2, 97,227,146,132,176,207,215, 37,184,206,113,198, 27,246,122,171,199, + 95,113, 89, 13, 43, 43,106,171,193,174,215,239, 99,180, 49,212,141,104,170, 10,194, 76, 1, 27, 14, 71,126,229, 27,136, 8,197, +160,143,201,112,228, 54, 74,159,238, 14, 27,245,112,208,122,213, 63, 6, 95, 25,111,107,164,109, 4,109,153,148,204,150, 11, 6, + 27, 42,163,156, 42, 76, 38, 19, 13, 84,138, 27,226,157, 56, 5,145, 18,101,250,195, 53,130,114, 58, 17, 86, 32, 16, 9, 40, 89, + 51, 3,204, 82, 15,207, 33, 66, 81,244, 80, 85,165,201, 41,235, 20, 67,158, 43, 72,120, 18, 4, 11, 46, 28, 86,153, 40, 37, 81, + 20, 57,114, 42,176,123,247,110,252,245, 95,127, 20,253,165, 85, 64,142, 48, 30,142,116, 83,156, 44,199, 83, 79, 63,137,229, 94, + 31,189, 94, 31, 21, 36,118,236,220,129,167,158,120, 66,143, 70, 5, 80, 86, 85, 84, 26,201,152,152, 26,113,187,182,164,233, 37, + 96, 75, 13,237, 61,208, 93,225,204,189, 96,157, 79, 93, 90, 93,197,246, 29,187, 48, 30, 13,177,126,225, 60, 78,159, 58,137, 60, + 19,216,113,237,117, 56,123,250,180,139,178,138,162,128, 32, 97,206, 95,247, 17, 80, 82,162, 44,167, 32, 16, 38,211, 9,138, 92, +139, 19, 43, 41, 77,186,198,212,124, 43,229,148,234,202,107, 12,165,123, 0,232,250,124,189,174, 24,153,167, 43,177,199,238, 28, +232,152, 5,243, 28, 14, 23, 49, 42,246, 4,114,104, 48,122, 13,144,182,165,145,172, 12,206, 83,205,232, 45, 16, 62, 51, 37,167, + 65,132,123, 72,203, 68,230,139, 1,118,158,165,251,154, 57, 11,117, 6, 37,200, 17, 83,154, 82,236, 57,125, 6, 37, 35,118,205, + 10,214, 34, 89,102,213, 46,132,139, 54, 72,151, 36,116,254, 2, 33, 22, 46,183, 93, 95, 29,169,183,136,202,102, 82, 22, 9,138, + 93, 4,138,232, 22, 15, 42,250,221,204, 41,106, 81, 51,151, 84, 91,214, 96,136,202,140,201,112,126, 45,122,252,185, 13, 48,247, +243,212, 60, 59,178, 39, 52,123,173,183,241, 51, 20,131,166, 55, 42, 49,246,207, 26,147,120,168, 9,180,245,247, 97,185, 88,160, + 1, 8, 0,149, 16,180, 16,112, 53,235,102,195, 21, 77,167,166,214,193,197,165,115, 30,104, 57, 47, 63,190,199, 20,244,119,159, +207,167,197, 74,216,180,160, 32,160,142, 45,123, 19,213,131,199, 37,100, 49,109,207, 70,105, 45,165,116, 14,159, 82,202,244,246, +206, 81, 78,245, 3,216,239,245,113,250,244, 89, 47,165,161,213,227,153, 29, 34,228, 61,196, 54,215,238,139,127,156,250,221,111, +132,225, 9, 99,252, 99, 6,113,237,172, 8,163, 5,160,230,144,150,201,184,196,100, 82,186, 33, 44,241, 80, 27,123,238,126,111, +123, 63, 74,178, 29,230,244,207,148,211, 64, 80, 80,247,111,214,134,105,184,162,197, 82, 86,184, 40, 1, 22,174, 76, 81,152, 13, + 43, 19, 2,194, 12,107, 81, 74, 65,120,204, 72,188,246,236,154,168,170, 10,219,119,238,194,211, 79, 63,141, 44,239,161,200,123, +216, 24,157,115,236, 77, 85,149, 24, 44, 13, 48, 45,167,186, 77,171, 0,158,126,226, 43, 96,169, 92,205,189,109,166, 19, 70,147, +150, 45,209, 74,117, 29, 77, 27,167,218,116,236,210, 41, 4, 91,169,160,175,149, 84, 18, 91, 86,183, 96,180,190,129,181,181,211, + 58, 55, 11, 6,171, 12,231,215,214,176,178,188,140,117,211,228, 70,119,171, 99, 8, 67,183, 47, 47, 45, 67, 41,157, 18,144,170, + 4,129, 80, 86, 21,122, 69, 15,176, 58,136,104, 78,131,237,205,110, 5, 91, 89,174,123,200,247, 7,125,240,136,205,208, 32, 95, +251, 32, 35, 58,188,117,107,109,137, 62, 57, 72,125,233,107, 83, 5, 41, 11, 86,166,245, 13,213, 61, 47,234,225, 47,139, 20,119, + 35, 93,217,133,217,141, 92, 54, 13,232, 52,135,117,229, 89,218, 41,209,226,124,192,117,220,211,175, 85,201, 33, 82, 81,114, 59, +138,182, 1, 80, 66, 4,215, 58,232, 43, 5,230, 81,240, 11, 74,130,121,219, 28,246,220,167,197,219, 4,113,113, 63,115,151, 7, +167, 38,245, 64, 58, 9,221, 62, 83,125, 19, 53,128,169, 84, 64,210, 43, 91,128,191,105,107, 69, 27, 28, 55,181, 31,107, 92,142, +214, 74,218, 36, 6,169,212,185,242, 48,234, 12, 15,187,153, 82,240, 5, 88,204,212,160,207,252,147, 15,193,208,159,105,238, 57, + 4,206, 9,178,161,181, 10,114,195, 86,235,192,177,130, 70,192, 43, 49, 52,138, 81, 65,174,161,139, 13, 27, 56, 80,178,251, 11, +187,153, 38, 8, 29, 69,106,228,174, 26,138,217, 8, 12,235,148,129,161,128,145,158,108,102,205,170,201, 45,141, 45,165, 66,150, +219, 19, 35,112, 37,189,126, 9, 20,245, 97,175, 29, 9,102, 64, 78,171,134, 3,146,206,245,215,181,232,126,137,162,125, 71, 27, + 37, 11, 79,128, 5,170,160,219, 52, 40, 59,101, 30, 12, 29, 17,142,134, 19, 13, 26,145,186,221, 87,220,251,250, 1,231, 96,212, +185, 17,111,168,141,127,207,184,206, 4,216,206,141,202,180,114,245, 68,131, 96, 59, 40, 71,151,102,229,121,142, 74,105,144,152, +148,140,126, 95, 96,105,105, 11, 70, 60, 68,201, 83, 16, 19,116,124,175,193, 61,227,176, 42, 67, 1, 40, 6, 5, 54,214,215, 33, +149,196,250,198, 26, 88,217, 58,108,160, 95,244, 32,132,192,216, 76, 82, 99,201,117,191,116,179,158,108,141,127, 35, 85, 42, 8, +131,126, 15,147,201,212,128, 38,187,242, 51,255,217, 81, 74,161,172, 42, 87,146, 56, 92, 95,135,146, 83, 29, 57,203,170,126,216, +170, 10, 50,203,220,252,120,102,198, 84,105, 7,134,137, 48, 26, 13,221, 53,239, 21,133,121, 70,244,249, 22, 69, 97,158, 35,157, + 59,103,165, 32,216,116,173, 51,128,201, 25,161,148, 21,122,189, 30, 32, 8, 69,191, 48,194, 63,133, 44, 3,170, 74, 34,203, 96, + 82, 68, 10,113,137, 73, 40, 62, 51,209,185,245,169,148,112, 32, 5,247,140,147,118, 94,141,190,193, 94, 71,159, 13, 68, 84,253, +194, 11, 36,187,125,246, 89, 45, 34, 30,230,197,240, 32,112,218, 22, 72,161, 38,223,215, 40,106, 91,107,184, 89, 64,175,122, 85, + 71,243,113,116,206,169, 25, 27,209,166,236,158,147, 68,202,162, 5,228, 21,249, 78,143,168,217, 11,106, 47, 53,110,166, 18,226, +156,250, 12,245,162,139,136, 51, 10,199,142,214,251, 93, 40,182,139,135,153,120, 32,223,156,120, 35,194, 7,149, 90,220,207,182, +223,209, 2, 14, 2, 71,234,252,136, 94,111, 52, 65,105, 99, 13,194, 70,214,201, 70, 1,193,161,122,162,185,212, 41,136,182, 65, + 6, 65,155, 86,191, 84,167,221, 83, 99,110, 87,107,250,247,176,190, 7,205,200, 56,232, 20, 69,222,195,148,168, 39, 13, 82, 24, +126, 4,194, 33,107,208, 22, 71,164, 74,101,136,154,163, 71,125,145, 94,157, 35,143,128, 52, 65,213,187,154,226, 44, 11,157, 49, + 34, 64,217, 22,172,166, 21,104,175,135,241,120,234,162, 58, 33, 4,138,162, 48, 52, 46, 5, 20,187, 85, 84, 7,251, 68,130,234, +182, 81,186, 31, 41, 43,102,173,183,247,128,221,206,142,215, 55, 70,185,191,181,209, 27, 17, 97, 50,158, 98, 60,158, 56,117,123, +236, 72,216,188,121, 16,249, 71,148,172, 95,234,199,168,124,197, 68,122,200,140,208, 77, 86,148, 82, 58,215,156, 80,201,231,189, + 30, 6, 6,192, 70,227, 49,170, 74, 66,144,196,234,214,173, 88, 63,127, 1, 37, 79, 16, 97,112,112,111, 6,131, 62,134,235, 99, + 92,119,253,141,120,228,209,207,161, 87,244, 80, 73,198,202,234, 22,140, 38, 19, 8, 2, 38,195,145, 41, 3,171, 26,235,219,182, +187,181,204, 66, 61,121, 76, 97,105,105, 9,227,209, 40,152,136, 86, 87,136,212,207,152,148, 10,236,181,142,221,216,184,128,109, +219,119, 98, 52,158,214,128,105,206, 95, 74,169,133,108,130,208,239,247,141,202,157,209, 43, 10,151,151, 39,152, 97, 64,172,160, + 42, 56,199,167,146, 21,136,188,233,131, 92, 59, 81,202,155, 47, 95,150, 37,138,162, 0, 65, 55,204, 25,143,149,115,254,114,211, +202, 88, 15, 58,170, 2,125,140, 21,129,170,128,133,177,247, 50,108,134,227,239, 49,219,183,111,195,218,218, 90, 34, 87, 31,231, +209, 47,193,120,180, 84,218,121, 19, 1, 94,176, 87,205,124,255,230,177,210, 76, 64,247, 34,111,226, 80, 15,226,156, 34, 10,114, +155, 41,134,182,209,214,214, 27, 57, 92,247,198, 8, 55,113, 73, 51, 88,234, 70, 63,152,166,166,136,137, 26,159,157,207,227, 66, +234,136,131,194,193, 2,212,162,108,244,242,222,193, 20, 34, 66,107,157,119,178,214,220, 7, 60,154, 77,235, 36,217,133,232, 51, + 41, 17, 13,250,158, 20, 5, 46,106,156, 2,104,122, 99, 20,136, 23, 34,111, 42,113, 93, 40,113, 94, 49,125, 18,247, 99,246, 55, +159,186,231,122, 40, 18,211,115,149,189,104,155,235,200, 62,236,230,100,179, 51, 4,144,104, 12,105, 73,166, 46,216, 70,193, 62, + 83, 82, 43,244,237,134,169,156,222, 1,141,232,157,162,116, 64, 88,175,234,143,115, 77,231,138,156, 18,212, 19, 31,214,247, 37, +115, 67, 43, 82,209,185,205, 89, 90,229, 55,187,247,202,204,180, 44,237,109,102, 66, 71,241,189,162,192,120, 60,118, 57,240,137, +163, 63,235,166, 55, 58,205, 84, 34, 28, 71,217, 4,116,225,205,111,247,129, 58, 41, 20,178,247, 12,210,163,239,217, 52,122,145, +134,110,151,174,251, 95, 44,134,243,115,226,126,133,130, 75, 3,216,207, 19,117,164,150, 2,242,160,237, 44, 17,152,164,166, 32, + 51, 51,197,206, 84, 78, 16, 19,138,162,192,112, 99, 67,231,129, 69,134,193,202, 50,138, 94, 95,139,194,242, 30,182,238,200,113, +254,220, 57, 96, 58, 5, 41, 21,148, 76, 41,211,253, 74,100, 57,246,238,221,139, 51,103, 78, 67, 64,104,237,142, 4,118,221,112, + 61,142,127,241, 81,228,153, 22,250, 85, 82, 38, 54,121, 14,198,255,186,186,110,227,244,108,184,193, 59,112,125,255,237,239,116, + 39, 62, 13,176,253,254, 18,136,128,209,120,136,149,229, 85, 72,169,176,177,113, 1,166,117, 58, 68, 86,224,154,107,118,161,215, + 31,160,200,180, 3, 83, 20, 5, 78,157, 60,129,245, 11,107, 96, 8,108,148,165, 78,203,100, 25,178, 92,183,162,173,202, 10,153, +208,149, 19, 66,100,186,167,129,161,178, 69,170,199,133,233,247, 81, 73, 9, 41,164,115, 84,179, 44, 7,115, 5, 34,233, 58,226, + 1,140, 60, 47,156,194, 95, 41,101,170,167, 24, 25,233, 72,222, 41,231, 45,221, 78, 48,244,189,245, 40,244, 53,189,112,225, 2, + 96, 28,136,170,170, 80, 78, 74, 51,249, 79, 56,239, 67,128, 76,227,155,205,129,183,184, 4, 62, 64, 16,161, 39, 6,206,145,106, +130, 33, 35,106,101, 62, 75,225,110,103,150,147,158, 85,239, 71,188,110, 44, 42,105,113, 40, 88,212,221, 56, 73, 26,230, 53,243, + 8,242, 89, 0,221, 6,230, 34,233,108, 2,177,230,136, 26, 96,238,197,212,110, 74, 35,131,117, 73, 91,163,157,171, 7,120,194, +245,182,174,229, 92,156,152, 61,157, 20,159,137,246,252,118, 44,106, 11,122,201, 83,164,185,106, 80,225,228, 9, 54,185, 57,144, +166, 45,151,226, 13, 31, 9,110, 62,115,152,221,142,232,245,100,143,226, 8,168, 3,102,195, 11,171, 27,243,205,185, 62,177, 90, + 81, 78,141, 40, 54,142,114,185,213,139, 51,212,188,243,204,201,213,241,146,215,173,173, 86, 81,215, 11, 64, 41, 83,215, 75, 94, +179, 20,227,149,167,244, 14,117, 3,161, 40, 18, 72, 93,110, 65,225,116, 39,175, 36,198,119, 90,154, 77,123,252,144,161,173,221, +104,125,254, 98, 78, 89, 86, 92,223,174,148,170,219,153,194, 87,236,123, 76,133,113, 4,166,211,105,240, 94, 75, 75, 3, 93, 67, + 28,140, 70,173, 35,101, 31,188,221, 92,114,235, 88,248,121,245,104,246, 60, 69, 42, 33,253, 55, 90,208,183, 97,128,211, 79,189, + 88, 85,187,125,152,253,200,220,126,142, 83,183, 39,116, 5,201, 53,235,149,172,249,142,167, 72,148,226,233, 41,109,117,239,113, +165, 36,134, 23,206, 67, 18, 32, 68,142,229,165, 85, 44, 45, 47, 99,203,182,109, 88, 63,191,134,233,120,106,132, 87,126,105,149, + 30,150,242,149,199,143, 67,100, 5,122, 69, 1,145,101,184,233,133, 47,198,249, 11,231, 1, 37,161, 76,119, 55,174, 42,247,252, +216,134, 55,177, 99, 88,131,122,200, 42,105, 48,103, 87,195,110,243,225,250,119,186,182, 93, 51, 47, 2, 82, 86,152,140, 71, 40, +122, 3,100,131, 2, 89, 81,224, 53,175,121, 29, 62,250,241,191, 68,117,250,140, 17,231,105,114,118,101,105, 9,131,193,114, 77, +197,151, 37,212,100,130, 34,211,247,116,219,182,237, 88, 95, 95,199,210,210, 18,202, 74,131,233,180, 50, 61,243,165,116, 85, 5, +250, 89,215,128, 46,165, 66, 81,228,152,150, 37, 50,145,129, 88,207,159,183,142,175, 29,151,171,181, 29,108, 74,250,234,253, 74, +201,186,236,133,252, 41,125,214,193, 37, 5, 82, 97, 78, 94,211,250,250, 58,244,122,125,200, 74, 66, 73,229,122,205, 7,148,225, +115,104,180,192,196,182,152,230,134, 16,237, 96,224,234,197,213, 76,188,106,234,172, 56,104,202,214, 42, 34,159, 91,103,142,136, + 61, 74,129,121, 51, 74,111,100,188, 99,253, 21, 40, 26,232,146,138,208, 35, 37,250,204,246,170, 62,216, 70, 99, 81, 3,193, 68, + 68,183, 7,239,223, 16, 8,180,111,216,241,136,212,166,218, 62, 28, 46, 71, 14, 84,106,177, 90, 80,102,209, 34,104,224, 68,254, +164,117, 12,106,203,100, 29,255,223, 53, 77,200, 94,158,187,141,126, 96,248,115,116,235,224,158, 90, 4,137,126,189, 42,133,186, + 7, 47, 55,214,168, 36, 64,212,206, 19, 54,207, 94, 31,129, 98,229,221,147,250,117, 89,162,244,206,117,229,107,107,108,149,108, + 62,227,200,110,151,239,204,178,172, 30, 79,234,205,111, 15, 7,187,160,181,230,154, 60,170, 86,167, 34,201, 40,184,245,255, 69, +150, 59,150,193, 54, 20, 1, 17,164,170, 28,205,238, 70,186,230,185,235,240,229, 11,227,226,103, 70,120,226, 56,231, 4, 5,155, + 35,153,168, 87, 11,209, 96,188,113,191,230,158, 37,176,190, 62,212,202,120,197, 65,169,156, 63,109,174, 49,220,193, 48, 26,100, + 90,226,106,169,127,237,208,166, 82, 20,113,137, 97, 12,232,113, 73,147,160, 28,211,233, 40,232,248, 7, 8, 8,102, 64, 74, 12, + 55,214, 48, 92, 95,115,189,226,179, 34,135, 44,167, 53, 35,100, 30,202, 45,203,171,128, 32,172,172,172,160,172, 74, 12,150, 86, +240,229, 39,158,192,181,215,236,214, 68, 54,135,202,222,254, 64,131, 78,211,209,174, 75, 57,237,243,101, 1,190, 10, 94,143,160, +213, 43, 64,166, 59, 28, 33, 51,169,151, 94,191, 15, 89, 85,144, 85,137,126,127, 59,142, 63,254, 40, 38, 27, 27,186,185, 14,215, +109,102,215,215,215,177,178,178,130, 74,150,200,242, 12, 75,185, 17,209, 65, 11, 7,135,195, 13, 44, 13,150,160, 88, 33,203, 4, + 68,214,131,200, 4, 38,147, 9,242,172, 64, 37, 75, 51,145, 77, 3,176,206,205,107,144,237, 23,122,140,172, 32, 66,158, 23, 96, +102,148, 37, 59,161, 34,153, 82,181, 44, 3,138, 34, 55,142,133,233, 76,171,194,220,179, 19,227,185,123, 26, 94, 7,219, 68, 72, + 15,221,145,184,118,207,110,156, 62,117, 10,213,180,106, 48,211,184,194,216, 30,207, 65, 15,160,132,231,252, 29,205,136,238,216, +159,193,160, 22,154,237, 65, 38, 34,175, 81, 85, 36, 43,115, 82,123, 16,131, 26, 52,121,152, 86,165, 8,228,169,225,104, 80,194, +201,161, 52, 85,221,204,169, 7, 84, 34, 99,177, 70, 46, 72,228,172, 83, 11, 33,166,121,197,108,199, 32,166,220, 27, 14, 66, 74, +224,198, 9,230, 32,202,123,248,120,216, 70,177,167,102, 61, 55,212,237,177,248,171, 73,158, 36,192,198,223, 52, 99,103, 42,236, +179,238,247, 9,142, 71,143,134,158, 64, 44, 62,240, 59, 75,121, 64,206,126,243,148,102, 42, 36, 40, 7, 52, 64,169, 68, 93, 70, + 35, 56,117, 46, 97, 25, 36, 35,108,115,217,100,113,200, 83,224,114, 99, 88,139,127, 14,174,113,140,180,116,100, 93,246,214, 46, +180, 11,233,100, 6, 92,100, 84, 47, 26, 89, 51, 81,153, 6,224, 44,207, 33,171,202,253,125, 37, 75,143,174,213, 63,155,148,211, + 32,117,226,119, 66,244,193, 54, 19, 34, 4, 29, 29,102, 5,235, 80, 41,214, 81,150,153, 48, 23,150,221,101, 24,141, 54,180,194, + 58,138,236,227,207,117,218, 12, 31,232,252,239, 17,246,203,159,149,171,180,189,201, 83,237, 59,253,159, 59,154,222,139, 4, 93, + 67, 30,255,153,103,198,100, 58,173, 5, 83,118, 96,147,121,181, 84, 90,244,247,204, 99, 79, 97, 50,158,224,134, 27,151, 48, 24, + 20, 24,142, 54,156, 14,198,150, 2,101, 66, 32,239,245, 48, 30,174, 69,236,130,118,242,172,216, 75,127,213,107,199, 30,115,158, +103,152, 76,116,123,215,149,149, 85, 48, 43,140,198, 35,119, 45, 7,253, 62, 70,163, 49,100, 85, 25,178, 74,111, 78,167, 79, 62, +243,255,243,246,102, 77,150, 36,215,153,216,119,220, 61,150,187,228,158, 89, 91,119, 85,119,161, 1, 98, 33, 8,136, 20, 69,202, +134, 52,141,105,180,204,140,164, 87,189,202,164,127,130,191,162,135,249, 5,122,210,152,108,104,154, 25, 17, 52,114,200,193, 16, + 4, 8, 18,141, 94, 81,107, 86,229,114,183, 88,221, 93, 15,190,132,187, 71,220,172, 34, 69,170,205,218,170, 43, 59,151,155, 17, +113,253,156,243,157,111,137,118,222,225, 90,167,170, 43,148,229, 12,187,221, 14,164, 57,102,229, 12, 93,219,122,142,196,174,218, + 34,207,115, 8,145,161,174, 27,116,157,153,244,123,155, 41, 48,184,210,153,166,145, 19,131,236,122,200,222, 64,247, 74, 41,200, + 94,130,200,236,211,251,174, 71,198, 5,100, 32,129,236,186,222,120,206,247, 6,189,224,140,161, 15,238, 29,113,238,119,237, 70, +205,160, 61,121,213, 61,154, 89,150,163,235, 90, 67, 80,148, 29,238,223,127,128, 23, 47, 94, 66,169,222, 15, 96, 90,255,127,215, +146,255,157,139,250, 8,181,140,143,184,125, 19,242,126, 18, 29,249,149,155, 71,140, 24, 77,119, 4,122,146, 9, 16,123,107,236, +203, 68, 79,125, 69,136,188,243, 91, 74,126, 75, 93, 65,211,223, 37, 1,222,247,214,227,176, 49, 17,142,172, 54,217,173,220,101, + 19, 75, 19, 69, 58,173, 45, 24,187,202,121,152,125,194,116,102, 50,233,141,226, 68,181,189,141, 6, 37,251,114,151,219,124,215, + 92, 56,201,248,199, 24,102,159, 42,244, 90, 71,217,227, 72, 47,126,192, 40, 14,165,102,233,212,144,250, 8,135,235, 0,189,119, +130,215,251, 9, 20,129, 85,111,228, 54,239, 97, 35, 68, 15,167,231, 63,164,209,182,206,176, 65,147,247, 25, 15, 33,248, 73,223, + 56, 29,167,152,249, 20,174, 81,131, 71, 19, 36, 16, 68,187, 82,231,103, 28, 22, 41,179,215,141,141,112,210, 27,155, 22, 35,103, + 14, 2, 10, 60,229,137,123,194,221,124,177,192,118,179, 1,231,132, 94,106,143,230,180, 77, 23, 77,192, 89,150,161,237,187,104, +229,146, 38,139,133,126,239,140, 15, 9,113, 74,107,144, 11,146,153, 34,193, 4, 11, 33,173, 13, 49,206, 77,152, 33,219, 53, 13, +179,137,208,159, 52, 9, 10, 46,217,141,141,144,140, 65, 31,111,166, 79,231,123,158,238,218,195,176,151,176, 73,113,218,116,105, + 21, 19,225, 25,203,236,193, 72,211, 3,140,221, 39,107,204,230, 51,236,182, 59, 48, 65,232,187, 22, 69,158,225,250,234, 13,120, + 46,160,146,176, 45, 70,100, 88,225,129,175,121,170, 78,112,171, 36,157,120, 7, 56,164,195, 65,238, 74, 41, 52,109, 13,217, 73, +128, 56,142, 79,142, 32,251, 14,117,109, 12,108,148, 6, 62,252,240, 49, 46, 47, 95, 3, 26,216,109,183,145,127, 63, 35,142,251, + 15, 31, 34,203, 50,108,214, 43,220,220, 92,227,240,224,208,163, 58, 70, 2,167,209,180,134,232, 87,215, 53,184,232, 81,150, 37, +242, 34,179,222,252,150, 5,111,191,130,115,110, 17, 36,237,147,247,156,147,157, 12,136,109,204, 54,135,121, 38,208,245,189,105, + 54, 64,102, 21,226,188, 16,200,204,148,125,215,197,132,221,116, 4, 11,162,120,153, 61, 51,186,182,195,118,187, 69, 81, 20,184, +184,255, 16,175, 95,252, 58, 24,132, 66,228,237,255,135,145,157,246, 20,244,125,101,137,222, 5,211, 15, 5,157, 72, 89,142, 77, +178,230,212, 24, 23,107,210,160,212, 68, 38,174,198,147, 31, 75,218,220,196,229, 51, 12,131, 97,227, 53,241,132, 28,154,136,141, + 82, 50,166,146, 63,205,160,194,141,117,232,123, 71,139, 6,176,252,200, 28, 68,143,119,225,225,174,124, 95,214,120, 10, 3,251, +226,226, 28,237, 66,246,246, 8,218,208,113,231, 22, 68, 36, 78,247, 90, 83,251, 95,102,157,177, 88,224,242, 21, 66,215,225, 20, +197, 6,105, 16,226,196, 29,167,101, 14,181,175,227,169, 40, 92,183,132, 19,154,242, 12,233,193, 13,140,153,184, 76,145,217,216, + 76,243, 47, 99,194, 59,122, 13,242, 22,242,187,114,207,182,182, 4,165,184,184,210, 16, 69,154,172, 44,120, 4, 37,219, 67, 76, + 3,100, 89,198,138, 17,122,173,209,219,120, 2, 69,128,132,134, 36, 13, 9, 29, 73, 88,180,221, 19,250,199, 59,117,182, 11,255, +117, 7, 70,164,133,101,123, 26,166,119, 63,155, 41,100,236, 51,223,161,160,108,146, 25,105, 6, 37, 53,202,114, 6,173,164, 13, +132, 49,100, 53,165,123,244,157, 10,144,150, 80,165,160, 39,214, 41,227, 61,186,111,156, 0,127, 47,133, 16, 6,138,117, 5, 53, + 66,143, 44,207, 65, 2,117,221, 24, 93,182, 71, 5, 6,205,185,176,161, 32,254,185,116,104, 68, 50, 73, 26, 67, 24,128,113,138, +216,244,161,142,223,188,183, 76,250, 27, 35, 14,165,198,174,127, 97,147,228,159,103,251,227, 57, 49,100,140, 71, 8,142,121, 46, +226,216, 28, 14,243, 28, 49, 11, 98,106, 2,138, 60,199,102,179, 66,179,171,140,171,166,224, 40,103, 51, 92, 92, 60, 66, 91, 55, + 86, 29,161,124,179, 34,132,128,234,250, 0, 70,102, 72, 33, 61,206, 5, 14, 15, 14,146,235,236,246,208,176,124, 1, 99, 46, 4, +198,240,244, 27,159, 64,129,176, 94,175,209,182,198, 57,112,185, 60,196,102,183, 69,211,214, 88,111,214, 88,204, 22,224,196,192, + 56,199,197,253, 71,248, 39,255,213,127, 13, 33, 24,158, 61,251, 26,109,219,224,228,228, 4,173,141,128, 5, 17,102,179, 25,178, + 34, 7, 99, 28,139,197, 1,202,162, 68,215,214,168,171, 45,182,219, 53, 14, 15, 14,112,114,124,138,131,229, 17, 56, 19,158, 85, +159,137, 28, 90,154, 85,140,200, 4,164,247,213, 31,144, 58, 77, 26, 76, 0, 74,182,200, 56, 96,251, 70,115,173, 8,232,161,192, + 50,129,114, 62, 3,227, 60, 50, 60,130,158,242,183,176,123,245,174,179,100, 56, 66, 83,247, 88,175,111, 80, 22, 28,243,229, 97, +196, 68,139, 92, 37,137,254, 81, 11, 58,238,210,159, 79, 41,125,236, 14, 93,211, 29, 5,157,140,212,207,240,139,147,177,208,165, +171,165, 5,157,141,175,215, 36,106,155, 12,144, 26, 38,108, 69,123, 56, 14, 35,162,118,186, 55,103,108,104,206,181,191, 12,230, +235, 83, 71, 57,231,205,145, 34,217,140,216, 52,251, 61, 50,117,153, 96,182, 79, 65,239, 83, 23, 61,133, 54,238,140, 38,197, 29, + 49,174,110,239, 78,241,142, 77, 91,102,166,158,216,109,235, 52,220, 32,133,104, 38,108, 21, 49,106, 52, 18, 56, 37,244,253, 78, + 96,104,207, 66,143, 38,245,116, 71, 73,241,183,138,204,100,152,111, 10, 6,195, 7,242,240, 99,248,117,147, 13, 14, 5, 90,110, + 98,166,120,105, 61,226, 43,164,200, 72, 56, 61,134, 36, 35, 23, 34, 97, 45,193, 34, 20,198,203, 16, 35,105,135,142, 67,104,244, +132, 7,213, 88,219, 52, 13, 59, 5, 95, 16, 9, 40,166,140,105,238,144,132,140,214, 43,174,232, 43, 43, 5, 19, 57,234,166, 70, + 38,184,153,124, 92, 33, 83,122,114,133,226,244,225,169, 35, 92, 68,216,115,112,188,157,214,149,210, 9, 31,130, 76,220,104, 64, +244,116,133,147,115,142,237,166,178, 86,172, 58,120, 6, 7,255,127,178,147,149,227,121,248, 0, 23, 43,223, 83,206, 89,143,143, + 29,238,122,187, 94,208, 58,137,191,181, 22,176,108,114,181, 49, 29,145, 73,100, 72, 92, 93,215, 97, 4, 73, 57, 55, 51, 77, 9, + 59,215,233,113,205,127,103,121, 9, 46, 24, 30, 62,249, 24,243,249, 2,155,237, 26,154,200,144,238,148,142,242,231, 51, 33, 44, +147,220,161, 70, 67,193, 98,108,248,239,245,102, 61, 66, 23, 24,227,222, 36, 71, 3, 88, 44, 15,144,231, 5,214,171, 27,172,110, +222, 64,107,160, 44,103,200,243, 12,154, 8,155,213, 53,164,214, 56,152,207,209,182, 13,178, 92, 64,228, 51,252,240,135,191,131, + 31,255,241,191, 69,189,219, 64, 1,216,213,141,153,108,103, 51,232,182, 67, 93, 85, 0, 12,170,144,101, 57, 86,155, 13, 4,231, + 88, 46,150,216,238,182, 40,202,194,146, 47, 9,235,205,218, 19, 14,133, 48, 49,172, 69, 81,162,105, 43,127,214,105,251,123,154, + 51,128,123,146,164, 10,204,108, 92,243, 51, 24,201, 40, 48, 38,188,231,188,118,249,242, 9,154,233,120, 26,222, 22,217, 70,224, +106,165,176,221,214,200,178,107,156,221,191, 64,211,212,232,218, 38, 34, 37,142, 72,105,255, 40, 85,253, 31,144, 72,231, 38,244, +128,221,238,127,130,226,201, 55,210,190,145, 33, 27,119,236, 21, 72, 83,123,243, 9, 50,156, 98, 9,235, 40, 10,131,161,233,243, + 60,173,146, 65, 42,230, 62,222, 91, 52,157, 7, 13,130, 24, 49,211,195, 47, 78,131, 84, 66,131, 18,232,136,168, 22,201,207, 38, +246,224,145,205,168,222, 15,229,135,235,234,116,239, 59,197,200,158, 52,121, 73, 47,184,158,216,173, 39, 90,195,148, 88,229, 15, +189, 9,144, 52, 53, 0, 24,235,178,227, 29, 76,120,230,197,210, 52, 10, 36, 11, 97,130,216,176, 7,245,164,190,196,250,193,124, +140, 39,170,129, 16, 86,103, 32,206, 18, 3,151,113,103,151, 58,246,249,125,180, 35,104, 48,147,123, 77, 74,155,169,157, 98,252, + 39,244, 66,223,183,166,137, 72,169,204,201, 64,166, 9,163, 58,102, 80, 6, 84, 65, 36,136, 8,121,185, 93,170, 21,159,154,218, +137, 6, 15,117,198, 53, 52,122,204,242, 5,154,205, 14, 89, 94,160,237, 58,243,251, 56, 13,187, 48, 94,221, 14, 65, 16,156,129, +250,152,139,193,236,247,100,156,143, 92,236, 52,153,253,165,249,187, 75,105,179,207, 48, 83, 16, 60, 44, 78, 26, 74, 1,235, 85, +133,190,239,124,250, 87,168,102,112, 44,105,165, 20,200, 78, 97, 14, 5, 48,147,135,233,230,157,131, 29, 11,210,182,194,207,117, + 82, 62,173,172,169, 16,148,253,147, 70, 65, 52, 83,249,215, 38, 40, 36,162,234, 67, 43, 64,216, 9, 71, 58,111,247,232,145, 24, +203, 90,190,245,141,111, 97,181,171,113,125,115,133, 55,111, 46,209, 55,207,112,124,126, 12,173,156, 85,185,138, 9, 93,182,169, +114,240,116, 72,108,158,138, 6,205,178, 44, 96,244, 27,157, 59, 49,194,241,241, 25,170,122,135,166,170,113,112,176, 68, 89,204, + 76,193, 39,224,246,246,198, 41,160, 32, 88,189,164,120,176, 0, 0, 32, 0, 73, 68, 65, 84,102, 93,239, 12,255, 98,150,229,248, +229,223,254, 53,170,237, 26,125,111,118,218,194,146, 44,171,237, 22, 7, 75,179,167,111,219, 22, 85,181,179, 72,157,185,102,171, +109,133, 60, 43, 80,239,106,228, 5, 80,148, 51,204,202, 18,117, 85, 3,224, 80,189,209,189,183,109, 99, 60, 19,154,202, 91,207, +122, 73, 25, 52, 24, 19,232,149, 2,227,153, 97,226,107,133,140, 17,164, 54, 57,108, 36,114, 27,241, 42,145,205, 10,100, 90,160, +169, 42, 31, 6,212,247,246, 89, 34, 66, 15,147,241,174,181, 6, 19, 28,188,200,161, 58,227,101,127,112,124,132,174,239,209,214, + 53,238,221,255, 0, 47,190,254, 10, 10,189,143,215,133,126,183,211,232,223,251,159, 9,212,152,212,254,198, 93,179,116,204, 10, +139,193, 32, 73, 35,210,147, 36,230,189, 11,102,227, 8, 20,213,132,125,236,118,114,207,125,128, 10,140,145,201,100,144, 28,229, +135,208,222,193,249,174,248,243, 41,196, 68,220,149, 17,238,138,120,148,173, 30, 30,216,129,132, 46,205, 66,143, 8,116,233,238, +156, 81, 76,108,211, 83, 23, 53,248,127,148, 78,152,241,198, 98,159,148, 41,114,241,210,177,140,141,238, 32,103,236,135,151, 82, +255, 93,218, 99, 31, 60, 48,153,245,228,206, 55,102,246, 13, 78, 78,137,199, 92,148,168, 21, 23,202,208, 11,128,152,133, 95, 53, +130, 61, 52,108,196, 37, 69,149,113,170,136,251,201, 59,124,179, 96,240,169, 30, 19,253,227, 29, 43, 37,196,193,169, 70, 34,253, + 88,132, 32,248,192,133,208, 66, 55,148, 81,134,215,149, 77, 56,185, 77,239,185, 67,115, 26,165,245, 72, 51,206, 18,227, 15,247, +249,157,148,129,127, 56,121,246,188,147,166,249, 9,221, 50,204, 83, 6,188,177,120, 29, 56, 8, 4,123, 64,211, 64,196,209,214, +219, 93, 42, 5,206, 50, 52, 85,237,205,101, 98,139, 87,179, 22,113,214,177,126,178, 15, 16,129,200,161,206, 74,221,116,192,184, +151, 74,123,153,158,116,114, 42,140,205, 48, 82,146, 97, 24,227, 26,101,175, 35,150,145, 97,178,241,221,255,143, 82, 18, 44, 35, +124,245,245,231, 96, 74,162,111, 59, 40, 6,220,191,255, 33, 62,253,244,111,134, 73, 74, 15, 25,215,225,116,234,154, 39,103,255, + 26, 43,153, 88, 68,250, 11,117,247,121, 57, 67, 46, 56, 86, 77,131,217,108,134,190,239,208,245,141,249, 92,105,246,233, 32,133, +217,242,216,166,186,221, 26,146, 37, 3,170,106,139,197,114, 97,238,145,253,189,165, 26,194, 92,214,107, 35, 95, 43,203, 18,155, +205, 6,140, 51,156,158, 94, 96,179, 93, 65,245, 18, 77,211, 34, 47,102,168,235, 29,132, 16,104,219, 14,139,229, 2,109,219,161, +237, 90,212, 77,141, 89, 57, 3, 72, 34,203, 50,116, 93,103, 11,125, 11,173,148,149,187,101, 0,148,125,166, 56,250,222, 12, 30, +156,219, 70, 72,105,136, 34, 71,215,119, 40,242, 28, 77,219,249,130,110,136,153,166, 9,231,130, 7, 40,170,101,212, 43, 5, 46, + 4, 24,231,144,125,143,172, 40,161,165, 66,211,109,177, 60, 60, 48, 9,119, 8,220, 5,255, 49,134,243,247, 97,161, 83, 28,232, +245, 62,109,197,212, 52,236,199,233,176,115, 32,231,179,193, 35, 36,244, 46,148, 87, 97, 68,105, 74,234,194,152,255,226,253, 72, +238, 72, 61,189, 11,233,222,123,253,237,249, 62,157,210,166,247, 44,226,167, 24,233,108, 26, 50, 15,187,136, 73,111,121,134,216, +150, 48,129,109,163,102, 99,194,153, 13,216,175,113, 30,101,246, 38,241,150,216,243,235,236,187, 88,147, 58, 65, 61, 38,193, 13, + 55, 44, 76,235, 26, 95, 88,247, 57,238,167,187,131,107, 12, 31,199,161, 32, 67,163,224,222, 94, 44, 38,209, 36, 70, 63, 68,136, +228, 96,126,183,108,167,255, 94,199,250,103, 29, 2, 62, 54, 49,140,162,134,194, 66,119,129,169, 69, 24, 39,232, 13,106, 20, 65, + 90,196,129, 52,121,111, 3,237,141, 79, 83,103, 63, 29,229,186,135,136, 69,124,141, 13, 68, 29, 22, 27,247, 43, 48,206, 70,164, +181,208,159,158,236,118, 23,208, 40,242,220, 78,230, 49,207,195,105,239,149, 82, 46, 61, 17, 92, 91,243, 22,107,237,153, 54, 12, +227, 55,171, 33, 47, 9, 63,245, 42, 48, 78, 16, 22, 38, 29, 76,122,134,139, 90, 53, 29,234,166,182,172,237, 97,119,201,185, 8, +173,247,163,221,168,187, 48,220, 78, 91, 62,114,211, 61,139, 80, 86,130, 8, 48, 61,172, 8, 56,231,222,154, 52,253, 29,210,235, +150, 54,113, 3,121, 46,224,152,216,247,169,178,144, 59,211,230,238,170, 32,209, 44,109, 84, 25, 17, 94, 93,190, 70,215, 52, 6, +143,200, 56,238,157, 93,224,246,246, 22,245,118,227,127,182,210,166,144, 85, 85, 5,169,212,128, 68, 76,172,191, 98,103, 99, 29, +153, 42, 49,102, 32,241,174,235,241,250,242, 21, 68,150, 67, 74,137,221,174,133,210,166, 48,159,156,158,163,106,107, 52, 85, 5, + 46, 4,110,175,174,192, 25,129, 9,130,224, 5, 14, 14, 14,240,242,213, 51,251, 94, 83,208, 96, 40,242, 18,135,199,199,216,110, +214,104,186, 22,219,186, 2,148,196,172,156,161,170, 27, 60,123,246,204, 88, 17, 43,141, 44, 19,232,186, 6,101, 57, 71,215,245, +152, 47,230, 32,192, 18,234,204,239,212,182,141,113, 51,204, 11,116, 77,143,182,110,144,151, 5,218,170,182,114, 54,147, 11,223, +246, 61, 50, 33,192, 56, 65,246,173, 85, 7, 24,121,156,212, 61, 56, 39,180,109, 3,210, 26, 92,112,112,102,146,227,156,127,255, +160,170, 32,255,188,115,110,131,140, 24, 55,164, 66,106,193, 23,115,228, 89,142,217,193, 18,109,211,160,105,118,195, 59,230, 31, +104, 72,255,251, 4,178,144,117,134,219,191, 63, 39, 95,168,163,115,113,138,217, 78, 42,220, 72,239,223,155,239,131,219, 83,159, +119,194,228,234, 46,172,149,129,241,244,164, 20, 46, 13, 32, 75,225,245,187,152,239,158,172,234,237, 82,195,194,203,104, 28,198, + 50,129, 93,120,187, 88, 29,210,245,105, 36,185, 9, 25,208, 6,194,211, 65, 50, 79, 64,188, 99, 19,169, 82, 90,143,226,222, 29, +244,233,247,149,142,197,185, 39,196, 99, 82, 91, 62, 50,144,161, 24,218,245,255, 14, 30,219,211, 89,212,176,228, 56,242,172,234, +169, 3,145,188, 20,105, 34,232, 36,240, 29, 31,180,163, 3, 44, 26,202,225,194,130, 63, 28,200, 9,124,227, 9,239,228, 31,136, + 80,238,163,181,129,141,205,245, 30,120,118,196,172,188, 70, 8, 8,206, 35,249,223,224, 79, 62,236,232,212, 4,245,109,152,152, + 66, 78, 3,129, 25,223,176,125,219,243,224,249,139,205,133,144, 64,239, 99,114, 28, 27, 77,154,227, 55,167,121,209, 66, 8,115, +136,121,249, 89,218, 36,216,221,179,167,234, 25,169,145, 75,175,242,110,113, 19, 74, 9, 67, 58, 13,140,113, 28, 9,213,206, 56, +134, 8, 3, 63,229,187, 13, 88, 85,215,190, 88,134, 13, 41, 11,130, 89,156, 9,148, 95,137, 56, 57, 84,104,147, 27, 64,230, 74, + 15,223,143, 7,187,127,119,184,112, 62, 64,132,108,138, 77,111, 13,110, 82,238, 64,184,202, 24, 14, 33,242, 14, 87,206,195,154, +105, 75,144, 27,161, 60,230, 33,121,243,230,173,207, 31,152,205,230,200,243, 2, 12,202, 68,190,170,161,113,209,118, 95,108,238, + 25,159,108, 58,226, 70,107,248,187, 16, 3, 89,181,109, 59, 40,217,225,131, 39,159, 96,177, 60,178,249,235,102,119, 36,184, 64, +223,181,168, 54, 27, 51,157,110,215,166,129,200, 50,148,197, 18,143, 63,122,138,171, 55,151,232,235, 14,196, 8,203,195, 83, 60, +126,242, 20,139,197, 2,171,213, 53,100, 95,227,104,185,192,189,179, 83,228,185,192,174,170,192,136,144, 9,243,188, 43,104, 84, +117, 3, 34,151,189,174,177, 94, 27, 24,127, 54,155, 33, 47,114,191,251, 39,102, 8,156,179,217, 12,196, 8,245,174, 66, 81, 20, +158,235, 96, 10,176, 64, 47, 37,152,205,115, 87,202,232,238,133, 16, 16,156, 33,227, 28,153,224,200,243, 12,140,113,116,125, 7, + 33, 50,187,150, 16,118,157,195, 35,226,167, 82,131,143, 62,180, 65, 70,170,205, 14,220, 94,203,139,123,247, 7,226, 30,225, 31, + 78,223,118,215,247, 74, 81, 92,102,246,225,154,238, 72, 88,115,252, 30, 50,146,209,184, 51,160,177,136,221,146,225,220,121,229, +107, 64, 90, 39,162,247,172,121,206, 85, 64, 58,100,209,217, 78, 35, 68,145, 49, 26, 49,215, 71, 40, 25,163, 73, 68,124, 58,221, +109, 56,171, 71,100,185,176,216, 58, 40, 54,234, 10, 40,102, 72,123,230, 59, 98,184, 32,140, 80, 29,165,125,237,233,236,136, 13, +121,210,184, 51,108,103, 96, 21,179,176, 72, 39, 13,132,158,186, 9, 83,222,188,193, 62, 52,149, 35,165, 7, 68,122, 32,165,110, +104, 33, 25,201, 60,244,241,190,220,188,121, 88, 16,191, 73, 65, 14, 56,243, 15, 19, 99, 12,140,179,224,115, 88,210,100, 4, 69, +203, 77,199,254, 33, 7,164,211,162,130,188, 97,140,166,216, 81, 13,140, 64,156,249, 63, 67, 18,158, 78, 72, 81,202, 66,126,209, + 3,158,122, 39, 7,145,162,148,116,223, 76, 3,220,201,210,108,240, 74, 72,214,211,164,163, 55,232,112,141, 88, 18,170, 2,191, +159,156,146,242,133, 60,187,176,200,233, 9, 54, 56,227,102,162,113,247, 4,208, 16, 25, 71,103,245,231,161,115,151,119,253, 3, + 0,206, 32, 67, 57,154,211,162,219, 2, 63, 76,184,142, 92,147, 52,180,118,141,161, 19,168,135, 49, 67,140, 83,145, 13, 42,243, + 83,179, 41,254,136,126,110, 68,196, 11, 13,104,236,235, 49, 1, 29, 49, 43, 95,250,208,147,137,128, 28,215, 16, 7,239,129, 40, +101, 46, 41,236,190,105, 13,184, 11,134, 53,192,252,140,160,152,187,231,110,135,203,134, 51, 90,107, 40,109,244,233, 89,158, 65, +228, 25,158,126,252, 9,148,150,184,124,251, 22, 82, 73,171, 79, 31, 10,187,115,236,115, 7,227,116,243, 54, 62,245, 66,211, 30, +165, 21, 78,207,239, 99,181,186,198,237,237, 21,138,114,142,131,163, 3,136,204, 20,197,213,106, 5, 13,224,233, 39,223,134, 34, +142,143,159,126, 3,189, 84,232,250, 26,159,125,250, 11, 40,109,158,149,197,226, 16,223,249,206,119,177,171, 54,216,237, 86, 96, +214, 60,166,218,109,176,217,172,176, 92, 46,177,152,207,176,152,207, 0, 50,230, 54,243,197, 2, 23,247,239, 97,177, 92,226, 96, +185, 68,219, 54, 40,242, 28,196, 24,250,174,247, 4,192, 94,246, 67, 88, 22, 99,152,149, 11, 8,110, 52,238,121,150, 69,236,115, +173,173, 89, 18,231,224, 76,160,235, 58, 8,193,205,115,105, 17, 13,115,191, 6,222,142, 33,211, 41,111,105, 59,186,167,190,241, +151,166,249, 4, 80,239,118,128,214,200,202, 28,103, 23, 23,113, 26,231,223, 65, 53, 53,133,137,107,186,195, 84, 76, 79, 20,254, +119, 21,115, 56, 99, 42, 29, 19,206,245,132,166,156,172,234, 6, 28,184,107, 66,167,184,200,235,128,236,169, 61,159,103,218, 60, + 38,180,151,142,234, 39,177, 17, 63,104,204, 33,167,168,222, 78,169,124,166, 8,232, 68, 4,190, 60, 58,253,145,187,249, 83, 12, +233,125,228,167,112,236,143,247,151,251,133,241,180, 79,103,187,135,251, 56, 76, 17,227, 95,136, 77,144,220,166,166, 39,119, 0, +222,245, 26,227,233,155, 18,153, 12, 3, 38,245,134, 73,161, 13,102, 82,243,134,225,102, 71,229,138,179,141,235, 76, 93,199, 34, +130,149, 30,188,208, 61,212,163,227,244,179, 40, 29,141,209,208,189, 98, 32,106, 14,205, 82,112, 79, 89, 80,148, 3,246,244, 84, +211,192,172,197,164,131,139, 92,195, 97, 10, 52, 69, 7,122,200, 91,240, 5,149,104,112,152,100,128,179,188,208, 20,235,231, 67, +157, 40,129, 48,182,167, 29, 38,181,120,133,128,225,160,231,131, 85,171,239,150,131, 55,161,191,190,220,232, 36, 24, 35,112,150, +131,115,142, 78,118, 32,178,153,220, 74,161,151, 18, 90, 1,109,219,122,148, 6,204,178,216, 45,148,205, 57,183, 8,134,249,153, +195,225,104,145,156,192,203,217,189, 70, 29,236,106, 60, 91, 64, 3,219,173, 49, 36, 9,121, 11,198, 2,116,248,254,140, 82, 2, +160,253, 61,156, 53,109, 72,142,180, 9,106,140,179,145,225, 76,164,169, 15,144, 45, 55,225,185, 93,188,123,189,156,115, 8, 33, +198,254,134, 90,251,149,136,155,238,152, 37, 83,142, 20, 66, 46,150,217, 62,195,142,247, 65,246,239,203,165,145,119, 17,203,144, + 21, 57, 94,188,248, 53,116, 47,135,125,191,214,200,243, 60,122,237,142,119, 16,122,185,187,134,199, 89,168, 58,107,100,199,193, + 88, 44, 22, 40,203, 18,117, 93,161,169, 76,240,202,249,217, 5,222,188,189, 4, 52, 80, 20, 5,132,224,152,205, 22,184,185,126, +139,182,174,113,123,115, 13,193,204,189,158,205,230, 88, 44, 22, 32, 70,144,109,131,235,235, 75, 3,131,215,157, 49,182, 97,220, +164,209, 73,131, 0,237,182, 21, 90, 11,113,103, 66, 64, 48,134,213,106,133,221,110,135, 94, 74,156,158,158,161,105, 90,200,190, + 69, 81,150,198,223,190,239,141, 37, 44,180,137,107, 5,208, 75,133, 60,207, 33,251, 14, 82, 41,228,121,102, 63, 79,120,185, 42, +227,220, 54, 84,218,135,193, 12,103, 8,243,195,131,227,242, 56,239,248, 56,208,137, 2,171,228, 64,117,226,214,125, 10,200,138, + 28,229,108,142,222,114, 0, 60,139,248, 93,233, 42,123, 6, 53, 23, 14,246,206,130, 30,156,115,239,234, 32, 70, 43, 37, 15,183, +179, 4, 18, 48,137,121, 3,105,151, 44,162,153,216,131, 39, 38, 79,174,160, 15, 3, 91, 26,134,196,252, 53, 99, 41,210,237, 6, +149,176,152, 7,147,185, 43,224,225,251,125,212,184, 78,201,216, 38,134, 91,126,112,114,246, 35,218,179,180,159,100,218,133, 83, + 81,168, 39,159,172,202,113,225,223, 79,120,164,241,244, 64,137,146,253, 14, 75, 62,208, 29, 86,122, 19, 16,123,106,246, 18,146, +218, 66, 13, 97,248,177,240, 70,133,208, 74,204,132,215,209,215,121,244,195,251,103,187, 41,143, 34, 4, 35, 77, 29,115, 15,128, + 51,147, 48,221,123,204, 13, 8, 33, 92, 7,177,134, 94,224,206,165,202, 85, 81, 79, 14, 99,227,224,145,168,192, 7, 31, 75, 35, + 88,211, 92,244,116,199, 20,146,157, 29, 4,164,134, 29,137,223,245,115,176, 40, 64,103,184, 43,122,196,168,165, 96, 66,211,246, + 0, 30, 38, 73,171,173, 39, 29, 77,154,238,218,164,169,101, 32, 3,181,154, 80,142,220, 51,205,149,148,232,165,180, 69,202,229, + 88, 59,194, 27,129,103, 28, 90,170, 8,126,247,235,158, 61,161, 42, 65,250,140,191,126, 30, 58, 86, 61,218, 94,249,160,150,240, + 31,211, 8,198,121,241, 32,248,103, 33,220, 99,179, 68, 98,230, 16, 9, 33,196, 56,100, 38, 92, 29, 4,133,157,130,191, 59,159, + 4,151,110,151, 22,243, 49, 43,126, 32, 26,106, 50,200,204,192,202,136,220,169,192, 20, 32,237, 74,137,195,184, 4, 42,192,104, +198,181,194,235, 87, 47, 1,169, 33,251,110, 64,212, 24, 67,158,231, 30, 49,112, 63, 91, 42,229,223,152, 44, 74, 18,140,115,195, +221,189,105,219,214, 19, 31, 79,206, 47,176,219,108,177,219,109, 32,165,196,124,121, 0,145,229,216,213, 21,148,146, 40,203, 18, + 92, 20, 56, 60, 58, 54, 62,240,153,129,173, 55,155, 13,160, 9, 23, 15, 30,160, 87,214,133,173,109,240,131, 31,252, 0,223,251, +193,127,134,139,123, 15, 48, 63, 56,194,225,193, 17,178, 44,195,114, 49,135,148, 38,132,165,151,102, 7,158,231, 57, 50, 33,176, +221,172,253,181,239,218, 14,109,219,162,156,149,104,234, 6,220, 34,104,198,147,130,161,174,107, 20, 22,158,111,219,206,250,180, +247,182,193, 81,195,128, 99,223, 75,125,111,226, 91,157, 36, 54, 92, 39, 58,249, 95,186, 66, 28, 20, 56,195, 35,155,101,217,112, +222, 41,107,173,155,101,152, 29, 44,177, 93,175, 33,101,191, 95,130,244, 30,242, 51,208,251,139,217, 52,209, 59,201,121, 83, 69, +208,176,215, 41,222,159, 51,101,225,118,223,246, 79,178,219,195, 53,174,131,218, 7,219, 90, 54,177,242,155, 66,145,200,251,154, +132,103,117, 8,153, 71, 69,124,202, 80,109,106, 21, 30, 16,156,167,134,104, 17, 50,145, 67,139,207,119, 98,250, 9,227, 46, 90, +158,197,113,218,251,111,222,123,132,113,104,132, 70,250,211,254,236, 52, 65,148, 35,140, 53,205, 3,162,199, 38, 73,105, 41, 25, + 45,117, 58, 27,138,190,142, 32, 20, 64, 71,140,247,136, 29,169,164, 47, 16, 38,113,105,152,118,132,101,173,107,165,236,164, 19, + 92,247,208,187,221, 17,235, 56, 27, 24,216,156,123,251, 84,157, 48, 67,141,108, 41,254, 24,131, 14,122, 85,243, 61,122,107,238, + 17,166,175, 65, 41,200,104,122,214,113,210, 26, 77,184, 43,141,180,171,218, 72, 60, 92,131,164, 39,158, 15,152,208, 48, 32, 33, + 83,134, 18, 70,173,163,240, 32, 87, 88,194,253,174,137,123,103, 35,178,151,123,102, 40, 40,182,254, 80, 11,228, 70,140, 11, 3, +141, 43, 13, 98, 2,109,181,139,158, 11,206,173, 77,173,213,243,242, 0, 97,113,207,163,249,158, 38,200,135, 49,242,102, 63,100, +145, 6,173,172, 70,214,238, 53,193, 56,218,190,179,159,231, 76,110,236,254,157, 27,252,156, 44, 31,130, 88,160, 34,177,132,168, + 97, 50,213,112,192, 54,247,214,212,236, 78,110,129, 11,250, 8,141,107, 28,115, 94, 7, 44,119, 71,104,147, 1, 11, 62,108,146, +180,150, 94, 63,222,118, 29, 68,240,182,215,161,149,166,253,184, 36, 13, 40, 5,174,153,181, 46, 2, 84,215, 1,185, 64,211,181, +232,165, 66,105,117,225,144, 54,247, 92, 43, 75,118, 50,141,142,118,182,175, 74,129,139,204,132,190, 88,181, 64,248,108,116, 93, + 64,254,180,168, 3, 99, 12,243,217, 2,171, 43,227, 0,167, 64,216,109,110,145,103, 57,110,111,174,192, 24,225,155,223,250, 46, +190,252,242, 51,212,187, 13,170,221, 26,103,103, 23,184, 94,221,128, 19,195,253, 7, 15,192, 52,225,250,242, 18, 93,215, 99, 75, +192,239,253,222,127,137,203,171, 43,252,234, 79,126,140,182,174,124,182,250,249,217, 25, 54,235, 45, 50,145, 97, 49, 63,132, 82, + 61,218,190,193,118,183, 70, 39, 13, 66,193, 57, 71,221,236, 32, 68, 6,185,149,216,237,118,145,202, 64, 89,247,196,210, 70,200, +138,172, 4,145, 33,192,113, 46,108, 67,106,163, 99, 25, 3,231, 4, 6, 99,117,220, 52, 13,202,178, 68,215,181,254,121,224, 60, +116, 88,132,255,187, 82, 20,104,214,205, 57,227, 26,219,197,124, 1,169, 58, 48,145, 65,245, 29,154,106,135,114,190,196,253, 71, +143,241,236,203,207,160, 85,111, 78, 7, 78,128,124,143,202,206,238, 32,196, 77,124,185,102,116,167, 82,105, 66, 93,182,231,231, +170, 96,144, 99,136,252,223,223,193,110, 31,168,103, 52, 34, 62,211,104, 77, 61,158,204,245, 62, 66, 57,238,176, 95,223,227, 20, +119,103, 45, 14,252, 75,248,193,241,217,143, 24,177,168,250,131, 16, 65, 1,251, 52,130, 81, 1,219, 99, 8, 66,123,254, 23,165, + 68,183,100, 87, 62,149, 85,206, 2,104,149,146,105, 49,206,250,198,222,102, 97, 12, 71, 98, 2,138,218, 95,236,163,239, 25,253, + 25, 91,190,134, 83,191,203,123, 54, 16,164, 5,163, 35, 79, 27,231, 38,100,246,143,156,177, 8,130,103,118,255,228, 14, 74, 95, +216,236, 77, 12,239,147,179,213,228, 66, 12, 28, 7,102,224,112, 22,117,144, 22,186,183,133,209, 59,159, 77, 48,241,117, 56,149, +167, 73, 72,129, 84, 16,251,210,235,166, 68, 10, 97, 75,148, 74,224,146,175,119,135,182,131,217,195,233, 91, 4,100, 63, 55,209, +185, 41,147, 77,240, 36, 24, 49, 27,146, 1, 40, 45,161,236, 52, 37,109,184, 74, 83,215,209, 78,155, 11, 14,165,164,119,220,139, +221,254,184,239,183, 6, 20,134,197, 22,146,204,106,194,181, 50,176, 57, 17,118,187, 30,109,111, 52,193,110,194, 20,194, 74,227, +152,117,158,243,134, 23, 44, 90, 61, 80,176,203,231,204, 56,157,153,245,194,216,206, 56,148, 28,166,239,147,148,135,228,138,165, +107, 24,124, 40,141, 45,246,161, 10,195,255,169,116,236,140,167,141,155, 28, 11,164,118,254,255,217,137,158, 33, 64,248,180,198, + 55,191,253,125,212, 77,131,182,218,161,109,154,192,167,223, 20, 26, 46, 24,242,188,244,207,101,111,175, 91,150,137,104, 26,117, +141, 71,150,101,144, 74, 98, 62,155, 89,175,117, 59,221, 75, 3,235,151,101,137,114, 86,226,250,250, 10, 7, 39, 39,104,171, 29, +120,150,227,248,244, 2, 55,215,111, 81,100, 5,230,203, 5,178, 60,195,174,222,225,254,197, 3,148, 69,129,123,231, 15,209,201, + 30, 39,103,231,200,242, 28,140, 9, 20,179, 12,159,254,226, 23,168,171, 45,218,174, 71,223,247,232,187, 22,235,245,218, 7,198, + 8,198,237,123, 93, 33, 23, 25,202,114,129, 60, 55,129, 45, 92, 48,236,182,117,196, 21,208, 90,163, 40, 10,219, 44,154,245, 78, +150,101,104,154, 26, 69,110,154,194,190,239, 60,130,224,222, 69,156,147, 93, 47, 49,243,188,250,233, 92,217,239, 79,126,165,163, + 53, 34,164, 50, 38,115,145, 71, 25,165, 82,222, 31,193, 17,207,164,148,152, 47,150,224, 60,195,102,187,217, 91, 89,167,214, 62, +251,184, 83,180,167, 82,239,247,112, 71, 68, 92,142,141,196,172,190, 92,179, 17,141,222,236,207,135,168,212,119,193,237,225, 96, + 18,231, 45, 4,110,112,193,174,159, 2,126, 80,234, 3, 61, 82,202, 76, 21,104,154,222,177,239,173,197,132, 49,185,156, 0,126, +120,114,254,163, 17, 54,207,104, 36,101,163,169, 23,249, 14,151,155,105, 41, 34,237,223, 25,236,115,236,185,163, 91,139,166,114, +208, 68,188, 36, 97,202, 8,102,172,117,166, 4, 74, 25,136, 90, 30,198, 6, 75,180,188,113, 7,197, 24,183, 16, 41,146,252,112, + 29,179,184, 35,137, 24,155,212,107, 50,206,237, 14, 71,219, 8, 74,225,119,221,220, 45,209,149, 2,105,155,103,174,131,146,104, + 15, 99,243, 38,102,254,205, 12,155, 10,229,120, 35,110,138,229, 32, 8,107,233,170, 38,108, 65, 89,146, 83, 76,201, 46, 41, 34, +147, 36,146,171,240,215,226, 26,224, 68, 80,206, 12,197,237,221, 45,105, 46,188,203, 10,202,202,164,156,131, 29,130,169,131,123, + 56,214,252, 94,240,202, 3,183,127,103,193,107, 10,139,187,224, 28, 66,112,180,109, 3,145,229,168,235, 10, 90, 42,244,210, 20, +245,222, 39,179, 89,229, 67,240, 59, 49,206,189, 46,221,100,116, 59, 82, 26,162, 32,151,240,154, 1, 10,204,238,215, 25, 35, 72, + 69,216,237,106,244,125,103, 66, 94, 0, 16,227,224,121,102,254,116,210, 60,231,203,157,172, 75,204,239,111, 29,227, 24,129, 11, +138,200,122,145,250, 84,235, 81,146,155,151,190,217, 34, 75, 1,129, 77, 43,229, 11,186, 59,240,116,210, 32,132, 77, 88,168,176, +243, 4,203,136, 89, 27,232, 63,165,246, 14,144,195,174,129,225,240,232, 8,219,237, 14,235,205, 6,135,135,135,168,171,106,216, +169, 91, 95,244, 89, 57, 67,150,229,144,210, 22, 78, 41,237,238, 88,249,103,192,185,229, 41,165, 32, 56,247,177,185,195,142,211, + 52, 63,187,122,103,158,119, 97,244,216, 77,215,225,228,232, 4,109,219, 99, 86,230, 56, 62, 57,193,118,187, 5,215, 10,223,250, +246,247,160,123,133, 39, 79,158,224,217,139,175,112,123,125,133,170,169,112,112,112, 4, 16,240,236,217,151,144, 82, 35,207, 50, +124,244,209,199, 56, 61, 63, 71, 81,206,208,119, 29,182,187,141,121,110, 73,217,255, 38, 28,158,156, 99, 62,159, 99,179, 89,129, + 67,162, 40,102, 56, 58, 58,130,148, 18, 77,219, 6, 73,136,198,225,206, 56,196,105,255, 92,215,117,131, 44, 51,153,245,125,215, +129,177, 33, 79, 64,203, 30,194,229, 13, 16, 67,219,118,152,205, 74, 51,201,107, 4,241,192, 3,219,125,152, 60,195, 65,198, 58, + 90, 70,142,124,218, 7,191, 48, 16,164,146, 56, 58, 62, 70, 83,213,232,155,198,153, 7, 14, 46,104, 52,232,148,137,104,188,210, +158, 82,148,197,210,166,253, 54,177,216, 19,217,188,111,140,100,202,242,193, 7, 66,220,164, 28,149,177,152, 8,103,205,189,220, +238, 60,156,206, 35,103,203,132,171, 53,170,155, 83, 68,185,196,228, 45,228,154, 77, 22,115,188, 95,241,247,111,171,131,211,179, + 31, 69, 12,219,176, 74,167,193, 43, 20, 76,194, 68,119, 94,210, 52,248,130,167,133, 64,235, 73,121, 25, 77,236,194, 49, 49,221, +179,232,115,104,136, 21,213,123,246,240,123,144, 6, 23,106,144, 62, 44,241,142,221,238, 94, 18,135,172, 84, 46,231,184, 35, 67, + 7, 25,194,193,161,132,136,197,108,122, 10, 11,231, 96, 85,234,244,221, 8, 28,238, 12, 43,149,188, 57,135,255,249, 44,216,237, + 19, 34, 98,150, 78,254, 12,119,188,166,128,104, 31, 67,171,167,200, 87,251,246,231,177,231,237, 72, 42,160,109,195,192,181,121, + 91,165,191, 35,139,220,133,201,187, 21,146,149, 1,165,156, 11, 95,240, 0, 8,235, 24, 38, 56,247,211,136, 39,173,121, 83,158, +177,149,171, 35,132,213, 77, 99,246,234, 93,103,166,117,165,209,245,210,236,120, 67,246, 57, 84,148,248,229,159, 21,198,108,202, +218,128, 38,112,235,244, 22,190,225,120,128, 42, 40, 16, 86,187,198,255, 76,119, 93,179, 60, 51,223,143, 15, 92, 0,145,112, 32, + 12, 18, 96,237, 92, 45,151,128,123, 66, 35,139, 44, 85, 67,121,103,170,238,208,209,186, 7,126, 39, 78,169, 92,212,161, 2,193, +231,196,251,116, 10,204,161, 98,115,167,116, 2,211, 90,131,180, 33, 76,178, 4,137,105,187, 6, 82,118,232,218, 6,117, 83, 15, +207,161,253,126,179, 89, 1,193, 51,228,121,230, 73,114,125,223,163, 44, 10,235,158,198,253,239, 65,201,238,221, 53,218,206,210, + 86,107,133,243,123, 15,209,118, 61,170,221,206,236,207, 57, 71,219,214,248,222,247,126,128,205,118,133,229,124, 97,242,219, 25, +199,111,126,255,183,208,171, 30,159,127,241, 37,218,110,135,166,239, 80,239, 54,216,109,183,104,154, 29,218,166,195,111,255,206, +239,227,209,227,199,216,108,183,184,122,251, 6, 85, 85,227,226,254, 61, 44, 23, 75,212, 85, 11, 70, 64, 83, 27, 24,188,151, 29, +170,174,198,209,241, 41,148, 52,175,165,170, 42, 8, 97, 76,136,156,102, 93, 67,163,239,122,204,102, 51,251,124, 91, 52, 39, 51, +166, 53,206, 35, 92,218,124,119,173, 53,114,193,130, 68, 63, 51,197,182,109,135,178, 44,237,231,105,191, 87,143,223,215,174,113, +140,217,227,206,179,129, 89,249,163,147,220,101,153, 93, 87,129,112,124,114,134,219,213, 53,180,148,113,200, 8,189, 7, 59, 94, +239,153, 7,205, 1,250, 30,251,243, 17, 86, 31, 89,186,134, 5, 61,130,207, 39,166,243,177,246,220,253, 28,158, 20,127, 54, 65, +200,139,147,211,166,134,214, 17, 73,155,176,119,176,221, 91,204,105,191,231,123, 52, 88, 18,131, 72,195, 86, 34, 95,220,176,227, +208,169,101,235,120, 63, 30, 90,172,142,100, 78, 58, 14,176, 8,171,230,190,226,171,239, 40,200, 49, 35, 61,230,201,208,132,109, +105,104,211, 26, 27,201,232,201,239,225,138,125,200,246,189, 11, 81, 72, 61,204,125,154, 89,224, 2, 27, 38,162,249, 46, 57, 72, +245,146,189,244, 25,230,195,141,100,113, 81, 13, 76, 70,144,228, 12,187,156,244,116,159, 30,237, 83,131,244, 45, 47, 56, 39, 54, + 72,144,166,236,115, 39, 99,101, 17, 9, 27,117,226, 26,231, 30,201, 65, 77,162, 67, 15, 64,131, 48,120,219,248,244,137, 50, 95, +111,238,135,246,211,151,135,197, 96,223,248, 65, 97, 68, 48,109,106,247,185, 97, 14, 64, 64, 12,148,210,100,171,103,150, 69, 44, +149, 49,106,209, 42,248,126,118, 90, 80, 50, 54,161,100,100,233,220, 52,172, 66, 34, 11, 90,199, 4,215,202,194,160,214,240,135, + 52,118,187, 14, 93,219, 89,251,207, 65,219,238, 38,127,223,105, 7,166, 63, 67, 49, 54, 86,151, 94,142,228, 32,103, 11,155,171, + 32, 11,222,175,169, 2,254,129, 39,151,185,105,196, 50,200, 41, 32,200,133, 82, 64, 66, 28,233, 26,217,130,234,152,180,170,149, + 49,137,145,210,172, 51,180,210, 94,145, 1,140,217,204,142, 63,161,164,180,199,173,194,172, 40, 80, 91, 50, 27,179,104,206,160, +188,224,246, 25, 37,143,136,132,107,153,112,154,242, 41,103,156, 35,207, 11,116, 93, 7,173,153,191, 79,215,111, 94, 91, 4,128, +161, 44,230,168,118, 59,124,243, 59,191,137,162,204, 48, 43, 74, 92,220,123,128, 34, 47,192, 4,199,235,203,183,120,249,242, 37, +242, 34,199, 98,126, 15,203,165,196,205,245, 21, 62,254,248, 41, 62,251,252, 87,184,119,112, 12, 46, 50,252,236, 47,255, 28,219, +237, 22, 93,111,246,213,155,245, 10, 34, 19,248,198, 55,190,137,175,191,254, 26, 39,231,103,120,240,232, 3,180, 77,135,183,151, + 47,176,190,189, 69,150,103,120,254,226, 57,230,101, 1,193, 5,142, 14, 15, 33,123,105,178, 8,200, 64,235,235,205, 6,139,249, +124,136, 5,214,176,110,115,141,109,100,249,128,204,233, 62, 56,123, 8, 74,153, 85, 68,223,247,254, 79,119, 13,184,111, 20,220, +253,102,126,104,112, 28, 5,179,127,215, 54,253,142, 44, 26,210, 66, 8,129,188, 40,204,127,103, 57, 30,124,240, 24,207,190,248, +220,112,128,180,122,111,250, 59,233,169,157,240,190, 64,150,113, 40, 86, 84,204,163,103,114,120,111, 82, 32,179,220, 71,134, 35, + 63,157,167,231,247, 29, 25,231, 33,185,120, 79, 90,232, 20,146, 60,165, 32, 11,255,190, 15,143,190,155, 88, 56,254, 90,126,112, +114,246,163,125,139,250,168,147,160,233,253, 56, 37,209,164,239, 5,195, 51, 54,250,218,187, 38,114, 80, 40, 55,160, 36,198, 78, + 71, 12,207,240,202, 78,105,207,199, 13, 65, 8,111, 82,162, 19, 31,175,206,167,225,122, 54, 49,237,107, 11,119,199,229, 44,108, +160, 28,148,163, 45,119,137,184,241,107, 31,116,199, 49,183, 64,143, 58, 73,211, 13, 79,197,112,166,242,165,148,163,224,237,115, +199,145, 71, 49,249, 45, 40,102, 58,153,204,185, 69, 14, 20,198, 46,127,142,119,170,105,108,240, 75, 73, 67,226,140, 94,210, 76, +128,112,251, 43,172, 7,128, 6,192, 44,147, 88, 74,233, 39,117, 36,114,150,208, 64,197,229, 95,187,143, 41,169,145,101, 57,148, +150,168,106,227, 86,102,178,171, 3,203, 88,206,193, 4, 55,144,116, 48,185,147, 37, 37,121,163,158,128,239, 17,146,208,220, 1, +231, 34, 65, 59,169,176,221,236, 76,193,179,254, 0,140, 49,100, 34, 3,103,194, 76, 75,218,152,211,184,239,193, 2, 23,192, 40, +233, 45, 40, 96, 41, 65, 52,181,188, 13,189,211,245, 8, 62, 31,154, 29,223,232, 37,154,220,112,138,247, 7,154, 50,155, 3,165, + 6,252,221,249,178, 59,167, 44, 21,154, 42, 57,242, 23,116,236, 38, 72,132,163,147, 19, 60,122,242, 20, 89, 49,195,205,205,181, +189, 62, 58,146,247, 21,249, 12, 89, 81,160,237, 91,211, 12, 6,102, 65,128, 49, 20,234,186, 14, 34,203,144, 89,230, 63,231,194, + 79,161,154, 52,202,249, 12, 25, 23,129,172, 75,130, 50,129,243,139, 11,156,157,156,226,230,205, 43,220,127,244, 33, 94,189,124, +142, 47,190,252, 28,143, 30,125,132,175,190,250, 12,235,219, 91,220,187,255, 16,207,159,127,141,237,250, 22,121, 89,224,234,234, + 45,154,122,135, 44,203,240,235,103, 95, 98,187, 89,163, 15, 60, 29,148, 86,232,186, 14,219,205, 26,178,239, 81, 87, 53, 46, 95, +189,196,229,171, 23,150, 79,166,113,123,125,131,197,204,104,217,133,200, 48,155,205, 48,159,207, 61,138,194, 5,135,224, 2,109, +215, 34, 19,153,247,188, 80,106,104, 62,157,179,164,227,224,176,196,162,212,192,238,230,138, 51,206, 34,215,198,212,121,145, 72, + 39,123,118,242,153,235,174,129,224, 54,160, 8, 68,224, 34,179,251,245, 5,186,174, 71,211,212,239, 62,255,157, 10, 78,239, 35, +209,209, 59,164,106,152,158,208, 39, 72, 92, 97,198,196,168,206, 36, 38,101, 70,119,206,162,235, 50,174, 33,137,230,156, 38,164, +206,137, 68,119,114,218,102,239, 95,208,211,169, 60, 93, 51,123,230,124,242, 51,162,162,126,215,120,143, 61, 5, 29,184,195, 59, +102,130,252, 22,238,201,177,143,161, 27, 22,105, 95,164, 88, 20,140,146,238,205,211,194, 27, 75,125,246,253, 38, 58,217,161,167, + 48, 75,156,101,205, 34, 79,238, 97,178, 15,175,155,246,140,113,251,250,248, 64,120, 34, 29,239,112,152,213,152, 7, 75,208, 96, +229, 49, 38, 73, 80, 48,169,132,111,190,208, 98, 55,218,243,164,247,102,116,125,199, 16, 17, 75,100, 78,161,225, 15, 23,194, 55, +100, 44,232,114, 83,199, 37,178,182,161, 58, 48,141,160,132,232, 65,119, 49, 56, 99,140,223,147,134,156,247, 57,207, 50, 20,121, +110, 52,236,153, 48, 76, 97,123, 15, 60,196, 62, 97, 23,107,164, 94,204, 70, 93,114,212, 77,141,174,239, 12,137, 74,193,203,203, +136, 8,228, 52,218,158,155, 16,134,182,132, 59, 74, 68,211,163,119,244,183, 81,186,142, 99,177,221, 25,249,154, 84, 50, 50, 61, +202,178,204,223, 47,198,200,203,250, 40, 49,124, 97,129, 3,156,151,209,241,216, 97,205,255,190, 9, 91, 61,154,116,162, 24,206, +187, 57, 45, 14,249,136,118,241,218,132,207,132, 16,121, 8,229,115,139, 84,132,150,181,240,251,246, 36,201,143,140, 15, 57, 0, +220, 92,189, 49,240,187,178, 48,177,221,206, 43,109,216,226, 69, 81, 64, 41,105,160,228, 96,101,230,124,210, 25, 99, 40,139, 2, + 74, 25,109,183, 6, 48,159,207, 33, 56,199,225,209, 41, 46,238, 61,196,118,179,134,146, 18,156, 51,100, 89,137,111,127,251, 55, +241,221,239,124, 15,191,243,195,223,134,132,198,243, 23, 47,113,120,124, 2, 45, 21,170,166, 70,145,151, 56, 58, 57,193,179,175, +190, 68,211, 52,184,184,247, 8,125,223, 99,117,115, 13,165, 20,170,170,178,247,201, 76,204, 89,102, 34, 87,101,111,136,106, 82, + 41,131,204,200, 14,121, 38, 80,206,102,104,234, 6, 74,105,156,159, 95, 0, 96,104,154, 26, 77, 91,163,174,107,228,121,142,195, +195, 67, 75, 90, 52, 83,178, 16,194,175,231, 66, 25,229, 32,107, 51,207, 84,102,159,215, 20,165, 52, 83,187,142,252, 62,220,179, + 25,106,217, 29,239,103,112,153, 51,223,103,240,252, 7, 56, 23, 38, 40,199,154,102, 49, 34,200,190,199,241,201, 41,214, 55, 55, +145,137,210, 94,197,147,222, 83, 35,222,123,135, 78, 19, 75, 94,187,203, 35,101,207, 97,134,208,213,141,238,144,190, 41,119,102, +167,239,151, 9, 3,176, 17, 73, 46,145,168, 17, 38, 6,200,116,103,158,202,173, 39,180,235,123,213, 43, 83,255,178,152, 4, 76, + 68, 16, 81,184,202,158, 27, 17,122,174,179, 4,138,165, 68, 78,133, 64, 78, 52,154, 14,247, 65, 42,251, 18,211,136, 38,183,116, +174,131, 28, 92,188,198, 5,123,122, 45, 67, 73,114, 14, 75,215,192, 73,177,199,176,135,178, 81,164, 20,165,102, 13, 18, 20,231, +149,174,153,221,135,135, 97, 44, 86,162, 4, 2, 36, 20,200, 78,157,222,183,204,198, 90,105, 70, 17, 34, 98,136, 51,218, 79, 61, + 67,174,188,158, 76,150, 75,119,233, 20,202, 69, 44, 12,158, 58,173,165, 7,124,104,132,162,137, 34,146,156,146, 50,122,160, 20, + 57,127,248,129,152, 5, 31, 56, 50,193,214,156,224, 81, 64, 15,238,114,148,192,114,166,139,101,126,106,229,156, 3, 82, 66, 56, + 7, 44,198,192, 68, 6,146,202,222, 27, 62, 92,150,132,176, 23,122,223, 19, 51, 41, 96,142,136,228,253,225, 45, 91, 24, 48, 19, + 49,131, 49,166, 97, 19,207,100, 40,173, 35, 11,111, 83, 72, 46,115, 83, 44, 49,180,178, 31,228,137,246, 23,245,218,107, 27,228, +163,149,130,114,175,209, 78,252, 74,107,240,208,224,201, 91,219, 14,209,183,238,218,132,192,103,104, 36,163,148,138,248, 42, 10, +227,213, 76,186,194, 24,120,108,195,186,198,233,215,157,219, 30, 33, 14,212,240,193, 47, 62, 10,213,192,235,176,107, 22,218,179, + 79, 19,156,225,230,250, 45,170,202,216,161, 54,114, 55,152,199,216,139, 41,161,193, 69,102,138,157, 53, 3, 50, 81,172, 6,246, + 55, 90,238,194,174,188,128, 76,100,200,139, 18,189,214, 88, 28, 28,224,252,222, 35, 92,189,126, 5, 34,142,229,193, 1,154,106, +135,243,139, 11,124,255, 59,223,197,195,135, 31,224,245,245, 37,126,250, 87, 63,195,217,233, 25,126,254,151, 63,193,253, 7, 15, +145,151, 37, 62,253,197,207, 33,242, 18,128,194,147,167, 31,227,179, 79,127,137,140, 11, 44,151, 75,116, 93,139,123,247, 30, 64, + 74,141,217, 44,199,183,190,243, 93, 84, 85,141,215,151,175, 64, 0, 46, 95,191,134,148, 61,170,170,198,237,141,217,181, 83,219, + 34, 19, 70,119,127,187, 90, 65, 43,133,197,124,134,237,174, 66,223,118,200,139, 18,162, 44, 49, 91, 46,145,229, 57,218,186, 70, + 85,213,158, 55,225,154,105, 97, 27,193,182,109, 33,180,225, 24,212, 93,143, 69, 89, 64,246,157,157,168,165, 55, 8, 50, 43, 33, +229,215, 20,206,134, 90, 74, 71,130,139,207, 89,135,220, 56,158,138,227, 84, 24, 93,188, 68,193, 51,144, 86,208, 82, 67,228, 51, +116,125,135, 71, 31, 62,198,151,159,127,102, 48, 26,139, 8, 48, 61, 78,114, 11,159, 51,114,174,152,239,187, 63, 31,229,157, 19, + 64,189, 39,232,133,114,181,247,147,170,185, 9, 29, 19,239,113,242,211,178, 14, 73,194,152,150,169,209,132,207,187, 86, 99, 15, +247,187, 88,239,239, 34,130,135, 69, 52,230,167,197,239,105,177,111, 15,128, 4,178, 11,127,213,140, 49, 79, 0, 0, 32, 0, 73, + 68, 65, 84,113,186, 75, 79, 62,185,248, 72, 10,255, 29,251,146,184,149,208,251,218,129, 61, 63,134,238,182, 4, 30,117,123, 58, +136, 66,213,145,139, 82,168,115,245, 69,219, 23, 43, 4, 50,144, 32,157,206,193, 52, 92,128,217, 83, 73,133,147, 20, 17, 4, 19, +144, 48,222,247, 44, 96,201,187,106,230, 33, 79,101,205, 88,216,224, 86,228,244,189,122,106,250, 66,204,126,247,226,186,192,249, + 73, 39, 23, 45,204, 68,143, 82,236, 16, 55, 7,209,254,116,194,119,219, 79,107, 73,118,249, 36,114,147,236,109,223,165,110,117, +150,177, 74,107,200,214, 28, 88, 93,223,225, 48, 59,180, 5,203,132,185,104, 57,200,177,252, 33, 24,144, 58,221, 84,220,219, 34, +221,182,173, 47, 84,209,253,181, 47,189,200,115, 52,117, 19,144, 48,105,148,167,156, 50,103,125,247,239,174,171,225, 17,163,109, +141,140,209, 73,176,132,103,236, 51,111,166,226,200,164,238,107,133, 83, 63,104, 13, 30,216, 15,179,137,195, 73, 77,216,192, 14, +235,160,241,231, 18, 38, 66,146, 38, 50,211,149, 77,146, 35,198,160,251,126, 72, 62,211,220,239,210,157,126,220,203,214,240,119, +249, 71, 27,217,153, 77, 97,156,149, 37,250,166, 49,251, 99, 43, 33,244, 36, 69,206, 44, 81, 43, 67, 39,181, 85, 31,152,255,159, +231, 57,202,178,196,106,181,194,114,121, 96, 36, 99, 82,225,248,232, 16,121, 94, 96,179,190,193,174,217,225,163,167, 79,113,249, +234, 5, 30,125,240,109,124,242,141, 79,144,207, 75,236,154, 26,109,221,131,115,129, 47,190,250, 12,139,131, 67,172,119, 91,108, + 95,189,196, 71, 79,191,137, 87, 47,159,161,239, 52, 94, 60,123,134, 15, 31,127,140,106,187, 69, 91, 87,248,214,183,190,131,235, +171, 55,184,184,120,136,162, 44,240,239,255,237, 31, 97,187,219,130, 52,179,196, 75,137,194, 58,192, 29, 44, 14,160,230,166, 25, +187,185,189, 70,150, 27,221,253,205,122,141,182,169,204,107,206, 74,236,182, 27,244, 74,161, 40, 11, 0,240,198, 59, 93,103,204, +107,220, 61,170,235, 26,140,115, 20, 69, 1,228, 28,155,205, 6, 26, 64,219,181,166,216,106, 13, 97, 17, 16, 35,235,211,201,116, +201, 2,104, 61, 14,163,242,145,211,100, 72,162,158,228,169, 92,234,160,177, 85,102,172, 48,141,129,146, 0, 24,202,217, 18,167, +103, 23,184,122,123, 9,130, 10,220, 49,105,130, 83,165,173, 19, 38,253,221,200,112,233,122,208,187, 94, 82, 84,240,217,132, 57, +217,180, 51, 92,186, 63, 31,199,163, 82, 66,146,187, 75,162, 54, 34, 98,179,233,143,223, 41,247,157, 74, 77, 13,148, 4,163,194, +174,227, 36, 84, 34, 74,243,212,199,209,118, 72,224,219,144,128, 20,217,173,141, 71,230,201,137,112,242,162,131, 38,166,237,125, +250,120, 29,252, 88,154, 32, 96, 83, 80,140,105, 4,215, 15,147, 56, 2,137, 3,162,239, 57,192,218,129,101, 43,120,240, 43, 42, +251, 76, 49, 59,177,194, 23,251, 65,175,109, 59, 64, 75, 56,209, 54,247,216,115, 5,172,252, 68, 5, 41, 98, 8,152,241,196, 45, + 89,207, 78,133, 74,171, 36, 61,111,252,208, 58,210, 80, 88, 52, 21, 27, 18,212,248, 68, 10,151,198,216, 19,223,241, 24, 28,156, + 22,154,123, 36, 29, 79,140, 30,220,209,208, 77,253,195,172,243,156,210,241,155,140,108,222,179,249,156,216, 72,200,201,189,164, + 37,161,229, 89,134, 94, 3,157,108,172, 4,141, 71,186,108, 55,117,112, 33,192,243, 18, 77,183, 53,250,240,228,160, 73,205,127, +138, 60, 71, 93, 85, 65, 72,143,131,189,245, 52,143,196,198,147,107,109,140,106,204,202, 6,168, 26, 9,169, 53, 58, 27,161, 41, + 4,183,123, 84, 97,139,170,246,208, 42,231,220, 71,164,166, 80,161,135,231, 83,216, 59,129,186,157,158, 91, 39,239,181, 80,249, + 48, 32, 45,241,212,228,139,121, 64,188,235,165,178,150, 90,214,230,216, 60,145,131, 73, 13,140, 87,128,180,164, 61,103, 98, 35, +236,245,239,180, 33, 66,154, 9,130,199,206,149,154,176, 91,111,113,120,120,128, 89,177, 4,192,193,136, 27, 52,139,180,157, 36, +201,172, 64,236, 61, 40,139, 18,125,111, 12, 87,242,178,128,182,145,164, 90,195,232,167,139, 12,154, 8,101, 86,128, 49,142, 34, + 47,176,217,118,248,228,147,111,227,230,230, 6, 31,124,252, 9, 46, 46, 30, 96,219,180,144,175,223, 96, 87,125,133, 55,151,175, +209, 52, 53, 22,243, 37,174,174,174, 0, 45,241,228,201,199,248,244, 87,191,194,201,241, 49,116,217, 67,105,133,235,171,107,204, +115,142, 63,252,195, 63, 68,175,129,229,209, 33,174,175,175, 33, 50,134, 31,254,240,119, 33,149,198,122,187, 70, 91, 55,120,249, +226,107,188,189,124,137,251, 15,159, 64,100, 2,178,107,240,242,197, 11,204,231,115, 20, 69, 97,188,230,149,198,110,183, 69, 81, +228,232,123,227, 34,135,106, 7, 82, 10, 93,215,162, 44, 75, 16, 49,148,165, 97,250, 23, 69,129,166,105, 7,226, 27, 8, 26, 28, +179,249, 33,170,106, 13,169, 20, 4, 35, 59,133, 19,102,179,210, 6,215,192, 62, 59,202,163, 85,240,247, 80, 38, 67,151, 26,189, + 55,220,255, 51, 14,121, 38,201,173,105, 26, 20, 69,129,190,169,144,149, 37,218,182,194,253,135, 15,177,219,110,208,212, 59, 67, +112, 37,107,150, 21, 78,146,161,133,230,251,254,163,156,213,182,134,182,175,215,215, 88, 45,246, 15,136,137, 82, 75, 17,139,216, + 77, 41,172, 31,161,197,228, 56,243,137,234,231,174,233,156,146, 36, 82, 96,111, 24, 11,222,131, 16, 24, 21,122, 54, 85, 83, 3, + 11,241,192,176, 70, 68,211, 82, 64, 40,162,233, 48,240,161,128, 0,163, 68,180,253,123, 20,237,191,134,209,187,139,245, 93,187, + 21, 31,247,137,105,166,123,186, 23, 15,247,236,161, 33, 76, 92,204, 7, 75, 80, 15, 63, 59,198, 63,198, 70, 41,174,120, 18, 89, +243, 13, 23,134, 16,144,216,164,223, 95,179,129,113, 79,206,232, 69, 15, 62,240,140, 44,115,116,216,119,133,187,121, 36, 62,247, + 44,201,188, 14,187,232,176, 33, 11, 93,192, 34,147,152,160, 8,176, 64,110,165,147,189,105,154, 45,235, 24,210, 33, 33, 76, 79, + 76,118,233, 4, 62,154,198,131,105,157,238, 92,176, 99, 52, 97,102,153, 8,224, 67,211, 24, 9, 46,192,114,160,107, 13, 35, 24, +154, 91,242, 96,252,124, 25,226,212, 96,192, 81,219,180, 44,247,175,148,210, 67,149, 3,153, 42,145, 36,178, 97,215,155,190, 47, +132,117,166, 51, 77,132,217,135, 74,197, 12,180,106,179,174, 89,162, 55,215,208, 17,107,219,175,161, 70,207,168,246,134, 32, 58, + 36,190,233, 33, 89, 43, 92,203,176,224,153,149,110,154, 14,166,116, 4,178, 55, 55, 93,171,132, 60,231, 53,236,246,181, 43,255, + 26,116,148,142, 16, 21,128,224,217,116, 44,106,195,186,222,127, 95,165,146,144,189, 68, 49,159, 97,189,222, 68, 33, 67, 14, 9, +235,237,228,158, 9,195,159,224,214,217,207,216,204,154, 67,190,218,109,113,120,122, 6,165,140, 49,205,209,209,153,221,111,119, + 88, 46, 15,241,209,147,167, 56, 62, 93,163,235,141,204,235,211, 95,126,142,155,171, 27,220,127,112, 31,111,175,175,176,217,220, + 58, 33, 8,126,243,251,255, 57,222, 94,189,197,227,199, 31,225,217,175,191, 64,223,213, 88, 46, 15,113,239,252, 12,143, 63,126, +138, 95,254,234, 51,172,111,111,176, 94,173,240,141,223,248, 54, 62,120,252, 20,255,254,223,253, 27,236,182, 43, 72,169, 81, 55, + 53, 4, 19, 56, 57,191,103,147,214,182,144, 74,225,225, 7,143,113,115,125,141,203,203, 55,200,139, 28,167,167,103, 88,109,214, +200,139, 25,182,187,107, 64,183, 56, 56, 60,128,148, 6, 21,105,154, 54,178,253,237,123,133,197,124,129,186,169,131, 24, 92, 83, +136,235,202, 54,226,202,144, 71,165,148,102,231, 31,165, 59, 18,122,203,208,119,207,184,121,134, 28,121,211, 76,226,206, 2,214, +105,217,221, 51,104, 66,158,164, 47,128,189,141,106,133,214, 80,170, 67,215,103,120,244,209,199,248,226,211, 95, 66,247,157, 95, + 99,106,167, 20,121,143,120,183,105, 13,122,112,222,145,158, 38, 60, 79, 21,244,119, 16,239, 48, 49,133, 19,139, 17, 77, 29, 22, +103,218, 3,161,211,120,194,158,246, 92,121,127, 6,251,212, 36, 79, 97, 78,185,158,102,214, 67, 3,252,240,244,252, 71,161,230, +219, 27,139,220, 49,121,165,147,202, 84, 64, 75,234, 22,151,222,130,129,160, 65,193,159, 52, 42,208,161,219, 82,202, 64, 15, 9, +110, 41, 65,110, 26,206, 97, 35, 54,101,114,201, 2,216,214, 62, 72,204,146,150,136, 69,102, 32,196, 24, 52, 99,150,124, 73,193, + 3, 96, 11, 71,152,101,231,246,145,142,140,226, 92,230, 8, 67,204,228,196, 4, 78,201,132,229, 93,186,130,195, 92,133, 26,227, +196,139,156, 5,206, 96,169,226, 32,109, 14,116,224,165,237,165,124,193,228, 22,113, 37,180,158, 76,200, 75,163,110,217,158, 28, +251,161, 8, 12,201,194, 58,105, 96,117,248, 6,177, 79,178, 97, 66,231, 38,220,162, 40, 81,100, 5,178, 44, 3, 23, 2, 77,219, +153,206,218, 19, 87,116, 68,148, 51, 83, 48, 60, 51,189, 11,224,119,165, 52,100,111,139,153,141, 51, 92, 28, 44,209,212,181,217, +243, 51, 22,121, 14,184,103,128, 5,239, 21,103,244, 3, 39,129, 4,208,245, 10, 85,211, 66,217,245, 14, 23,166,225, 16,118,231, + 25,133,208,164,241,194, 4,112,102,208, 33,199,110, 54, 58,254,144,140, 55,200,233,134,208,142, 97, 31,238, 44,136,145, 72,238, +194,132,183,176, 32,179,196, 88,200,199,112,170, 4,161, 97,166,248,249, 68, 56, 70,241,234, 39, 81, 32, 24,238, 66,208,160, 57, + 18,165,189,195,173,236,193,109,152,137,236,100,188,246, 2,176, 88, 46,176, 56, 56, 52, 40,136,205, 3, 31,236,169, 9,170,239, +160, 52, 48,155,205, 33, 50,225, 11, 29, 49, 32,159,205,241,228,201, 83, 60,124,248, 1,218,182,198,102,181,194, 23,159,127,138, +186,222,161,218,237,176, 94,175, 80,111, 87, 56,191,255, 16,213,118,135,255,230,191,253,151,120,254,252, 5,158,125,245, 43,180, +157,196,201,201, 25,170,106, 7, 48,142,217,236, 0,175, 94,190,192,229,171, 95,227,224,224, 16, 15, 63,124, 2,158,113,124,254, +217,167,184,186,124,133,170,110,209,182, 29,250,182,133,108, 77, 65,222,236,118, 88, 93, 95,162,218, 85,104,219, 22, 93,215, 66, + 8, 35,183,219,238, 54, 96, 92,160,110, 27,156,158, 28,163,222,109, 49,155,205,208,117, 18,125, 47,189, 51, 28, 99, 12, 76, 8, +212,117, 13, 64,121,191, 6,231, 30,103,130,119,200, 64,237,106, 96, 64, 25,115, 26,147,182,232,146,216,204,219, 87, 97, 58, 15, +139, 70, 43, 79,135, 84, 57,210,156,121, 59,235,200, 74, 91, 8,142, 76,100,232,101,143,114, 62, 7, 35,142,237,102, 29, 16,100, +222,175,152,239,133,221,157,165, 43, 11,135, 50, 30, 39,153,221, 81,208,149,149, 67,234,119,144,222, 88,164,102, 97,254, 64, 14, + 25,235,227,159,133,145,133,242,144,187,129,253,186,114, 26, 7,184,120,230,254,132,251, 94, 88,248,137,238,182,139, 21,225, 27, + 80,167, 4,163,228,239,211, 68, 3,120,178, 14, 38,164, 77,123,181, 13, 9,227, 60,157, 52, 99,143, 93,218,243, 61, 18, 82, 3, +197, 46, 87,225, 36,158,118,119,131,246,151, 70,123,200, 48, 29, 77, 59, 36, 93,141, 39, 18, 29, 26,224, 4,172,201,240,230,144, + 66,160,125,215,158, 73,239, 39,126,198, 34,219, 84, 55, 5, 15, 59, 44,150, 40, 63,130,107,100, 39,150,208, 11,221,201,139, 66, +195,144,180, 0,187, 98, 70,193, 78,152, 7, 19,150,147, 39, 69,211,126,240,185,225,115,146,134,190,224, 61,228,141, 78, 91, 61, +230,103,198,126,225,227,129, 88,163,239,173, 68,172,235,112,126,122,142,182,235,144, 9,142,114, 86,160,171, 91,223, 40, 17,153, +130,230, 34, 83, 25, 49, 27, 30,162, 7,148, 73,202,100,213, 52,152,239, 48, 62,164,230,141,237,102,181,159,172, 29,178,213, 75, +105,118,208,118, 53, 67, 32, 84,117,107,137,126,106, 72,229,179, 80,117, 56, 37,167, 13, 25,119,114, 70,144,113,224,115,141,155, +245, 22,119,207,137,187,135,142, 80,151,250,220,147,115, 38,180,247,197, 21, 3,173,116, 76,254, 9,137,119, 1,119, 34, 92,207, +184,132, 58,101,237, 86,195,105,199,209, 54, 34,178,158,189,199, 78,191,110,244,226, 20, 92,103,219, 68,218, 70,171,239, 58,211, +176, 53,173, 13,138,209,126,245, 35, 4,183,238,108,218,114, 35,204, 78,122,179,222,224,224,240, 0,175,111,111,209,182, 45,142, + 79,207, 80,148, 37,178, 44,195,172, 92,128,103, 57, 30,220,127,132,229,242, 0,159,127,241, 57, 78, 78,142,240,252,217, 87, 88, +175,111,177,221,110,209,214,181,105,214, 5, 71, 85,213,134,124,215, 54,168,234, 45,186, 94,225,224, 56,199,151, 95,125,142,167, + 31,125,140,245,118,141,103,207, 62,195,193,108,129, 31,254,238,239,227,203,207,126,133, 79,127,249, 11,228, 57,199, 71, 79, 62, +194, 15,254,187,127,142,203,171, 27, 60,123,254, 28,111, 95,191,196,213,155,215, 32,198, 49, 43, 50,148,121,134,203,203, 87,224, +125,142,217,108,142,237,118,131,186, 94, 97,177, 88, 32, 43, 75,244,125,143,174,235,205, 62,127,189,133, 16, 28,189,148, 40,242, +194, 56,194,161,195,188, 44,177, 56, 88,162,109, 91,212, 85,133,121, 89,154,169,219, 54,111, 89,158,163,148,115,244,109, 13,217, + 53, 16, 25,247,193, 48, 6, 98,143,195,166, 6, 30,145,178, 82, 57,237, 3,122,194, 65, 73,135, 13,171,125, 34, 6,116, 72, 24, + 20,165,105, 13,145,145,128,182,174,112,126,113,129,221,118,131,205,234,202,191,147,245,123,144, 45, 70, 5, 93,177,164,234, 7, + 77,130,166,233, 61,117,146,121, 30, 84,138, 9,171,111,154,248,185, 20,237,178, 71,217,230,216, 3,197, 7,251,115, 29, 16,185, +167, 19, 65,131,172,139, 4,174,159, 84,157, 77,145,229,244,126,146,157, 24, 77, 79, 83,112,251,158,105,125,116, 28,223,105,190, + 79,239,177,114,213,241, 65, 49, 42,248,227,221,120,184, 55,119,255, 63,252, 90, 31, 41, 59, 97, 30,147,166,173,133,236,119,193, + 5, 56,152,103,238,146, 32,111,206, 48,116, 77,131,140,204, 28,148,230, 86, 49,123, 88, 17,105,104, 62, 28, 80,238, 48, 84, 42, +112,111,211,193,193, 14,179, 63,100, 68, 32, 59, 29,133,106,113,157,168, 4,148, 53, 20,145,206,209, 73, 7, 71,176,243,140, 79, + 73, 81,201,122, 37,156,218, 85, 32,223, 74, 27,138, 20,137,241, 16, 62, 99, 17,131,124,239,157,143,204, 75, 2,210, 12, 5, 67, +123, 40,197,137,210,190,134,103,180,235, 59,128, 12, 89, 78, 91, 79,237, 94, 26, 27,221, 70, 85, 0, 6,255,122,183, 38,113,215, + 67,106,233, 15,175,168, 89,210,209, 31,182,176, 26,185,152,212, 26, 44,244, 60, 15,174,103,188, 6,209,208,150, 59, 65, 4, 52, +173, 68,215,246,131, 79,187, 45,136,112, 69, 59, 40,198, 81, 74,158,253, 56,201, 33, 94,117,216,131, 14, 42, 11, 36,196,198, 80, +153, 18, 50,222,117,128,188,184,247,131, 70,162, 93, 15,155,139,148, 89,107,111, 78,184,242,136,155, 84,199,221,128,121,102, 17, +172,180, 44, 12, 44,132, 89,155,212,117, 27,182,213,254,245,207,178, 28,139,197, 2,203,197, 1,218,182, 69,223, 73, 47,197,202, + 50, 97,221,246, 56,180, 38,155,212, 87, 66, 91,131,153,195,131, 3,124, 85, 87,144,125,135,227,163, 35,176,172,196,209,209, 33, +180, 38,156,157, 26,159,246,213,122,133,195,195, 3,172, 86,183,184,185,185, 66,223,182,128,236, 76, 1,212,132,227,227, 19, 84, +171, 91, 92,124,248, 24, 63,253,201, 95,224,205,155, 75, 20,162,192,237,205, 21,150,101,129, 23, 47,158,161,239, 58,124,240,193, + 19,156, 93, 92,224, 39,127,241, 31, 80,228, 5,238,221,127,128, 15, 31,126,128,167,159, 60,197,143,255,244, 79,241,226,249, 51, +212, 85,133,147,147, 99, 48,254, 0,183, 55, 55,168,219, 22,140, 51, 92, 92, 60,192,219,183,111, 81, 87, 21,178, 76, 96, 86,150, +216,108, 54, 88, 40,137,186,174,192,185,192,233,217, 57, 4, 23,168,155, 26, 76, 41, 91,112, 51, 48, 98,216,109,182, 88, 44,140, +111, 60,183,201,115, 69,145, 3, 61,208,119,198, 96, 70, 73, 5,104, 9,217,183,254,172,114,190,229,161, 67, 28, 66, 78,132,134, + 53,235, 97,163, 20,198,208, 2,216,160, 93, 44, 88,207, 40,155,225,110, 36,162,117, 93,161, 40, 74,227,150,152, 75, 60,120,244, + 1,190,172,119,232,154,198, 75,112,226, 18, 67, 19,195,153, 43,216,147,159, 50, 76,252,154, 38,225,118, 36,131,165,222,155,156, + 54, 17,165,237, 9,200, 52, 9,151, 71,133, 53, 41,164,222,151, 93,199,179, 73, 10,167,199,142, 29, 52, 73,142,123, 39, 83, 62, +216,177,143, 67,199, 0, 32, 78,135,223, 11,179,143,244,227,225, 93,215,119,109, 74, 82,223,245, 49,196,158,202, 8,166, 36,236, +169,117,107,170, 83, 28, 72,110, 46, 65, 43, 14,163,143,244,131,140,121, 43,195, 48, 75, 56, 12, 4,225, 86, 2,162,148,134,150, + 10, 74, 26,215, 49,169,205,161,109, 50,194, 13,179,220,202, 35, 61,233,139,113,150,164,180,169,200,155,124, 50,223,218,122, 59, +103,153,201,182,230, 66,128,229, 25,152,224,113,104, 1, 13,242, 10,231,221,237,140, 83,220,223, 83,109, 48, 33,177, 14,117, 5, + 9,129,161,202,132, 91,146,123, 77,238, 64,118,111,110,135, 2, 80, 96,199,250,110,181, 1,198,132,203, 64, 99,175, 39, 96, 45, +166, 77, 68,107,200,193, 8, 85, 4,238,117,138, 76,152, 72, 79,235,101,175,116,143, 78,182,222,196,195,212, 91,211,176,116,178, +183,188, 17,138,246,233, 9,236,228,227, 88, 41,240, 64, 15, 97,119, 55,249,134, 25,226,156,152,245,207, 48,175,119, 87,153, 29, +191,146, 61, 24,231, 38,107, 27,132,140,241,248,103, 38, 72,145, 51,203, 33, 54,236, 66,163,108,248,224,158,177,240,153, 14,155, + 42, 26,163, 29, 94, 65,161, 38,226,141, 19,195,153,248,185,176, 97, 30, 28,230, 65, 39, 53,161,124, 80, 32,102, 62,135,241, 1, +101, 11,249, 57,153, 16,118,218,211, 96, 96,224,246,223, 76, 8,240, 76, 32,207, 75, 40,237, 26, 0,242,208, 62,227, 70,181, 32, + 68,102,220,253, 52, 89,203,124, 66,145, 23, 40,178,220, 35, 44,151,151,151,214, 14,150,225,225,195, 71,200,178, 12,111,223,190, +193,131,139,123,224,140,240, 87,255,233, 39,168,183, 27, 52, 77,141, 60,203, 76, 78,185,236,209,245, 18,229,193, 17,214, 87, 43, +180,178,193,119,190,247, 3, 92,111, 46,145,137, 25, 78,239, 61, 2,207, 4,206,239, 61,192,213,213, 27,124,250, 55, 63,199,111, +126,255,135, 56,191,247, 0,187,205, 26, 71,103,199,248,227, 31,255, 9,126,253,229, 23,216,109, 54,104,155, 6, 47,158, 63,199, +110,183, 1, 99,192,201,209, 17, 72, 1, 47, 95,188, 48,239,239, 44, 67,211, 26, 36, 44,207, 77, 14,251,241,201, 25,202,197, 18, +117,219, 98,181,190, 69,145,231, 38, 98, 24,129,239,132, 6, 54,171, 53,118,235,173,245,191,239,176,217,172,140,162, 70,112, 40, +173, 81,206, 74,136, 34, 3,101,194, 36, 48, 50, 30,104,204,249, 16, 66, 68,176,132,207,129, 20,103,138,188,142,206,224,176,176, +187, 65,100, 56,179,184,111, 54,187,174, 67,215, 52,232,186, 22,128, 70, 93,237,144,231, 57,206,239, 61,244,242,221, 81,182,184, + 38, 48, 48,123, 46, 82,252, 30,116,150,175,246,121, 27,158, 85,243,113,194,126,184,221, 49,219,149, 37, 66, 59,207,255, 41,226, +105,104,173,173, 3, 51,153, 8,110, 79, 77,100,246, 20,244, 1,197, 29, 38,248,116,204,137,166,113, 26,199,176,134, 63,239,174, + 0, 23,208,190,243,149,130, 73,125,212,153,211,164,158, 24,137,119, 56, 35,122, 7,131, 93,223, 9,196, 18,253, 93,100,104,233, +238,229, 93, 50,182, 52,231, 60,181, 58, 37,255,166,209, 86, 26, 49, 88,109, 38, 41, 67, 70,164, 97,204, 77,220,132,167, 52, 72, +233,128, 96,102, 73,112, 74, 25,215, 44, 7,169,219,212, 59, 21, 76,121,110,210, 98,193,127,235, 32,242, 20, 73,212,172,251, 30, + 20,238,190,131, 73, 51,132,195, 93, 71, 56, 72, 61,134, 66,232,138,134, 14, 52,199,202,198,119,186, 98,226,146,195,100, 96, 36, + 17,122,159,135,169, 88, 33,116,173,247, 24,154,220,133,219,232,176,152, 76,124, 47, 61,129,219,185, 9,176,235, 58,228, 69,129, + 92,100, 88,173,111,208,182, 77,148,199,174,237, 61,210,164,193, 56, 67,215,117, 62, 6,215,235, 77,211,213, 82,112,223,153,211, +172, 7,207,205,192, 29, 12, 92,205,220,125, 52, 10, 24,255,255,186, 78,250, 66,204,172, 30,151, 52, 89,210,151,137, 34,117, 59, +245,144,116, 72,140,129, 41, 53,236,226, 52,130,189,249,112,221,125, 54,186,107,118, 18,126, 68, 24,176,163,177,199, 88, 38,120, +198, 66, 40, 95, 37,235,151,208, 86,116,114, 50, 8,154, 62, 34, 35, 63, 83, 82,249,215,196,108,243, 89,150,133, 9, 81,105, 59, +111,195,124,120,120,128,174,239, 81,237, 54,102,130, 38,101, 56, 7, 18,152,205,231,230, 30,219, 34, 39,165,196,172, 44,177,221, +110, 0,173,113,122,118,134,237,110,235, 95,103,215,247, 88, 46,143,112,118,126,134,166,105,113,123,115,133,188,200,241,179,191, +254, 41,222,188,121,139,213,234, 10,189,148, 56, 57, 57, 70,181,221,128, 56,199, 98,126, 96, 26,106, 33,160,168,195,245,229, 13, +126,126,253, 23, 40,242, 5,136, 41,124,253,249,223, 66,100, 28,111,171, 6,208, 18, 39,199, 39,144,125,143,179,227, 19,124,243, + 27, 79,113,122,124,138,135, 15, 30, 96,121,120, 8,173, 52, 46, 95,191,192,151, 95,124,110, 86, 10, 82,162,186,185, 65,223,247, + 80, 74,163,218,109,144, 23, 11, 60,254,232, 35, 92, 95, 95, 35,207, 75,172,183, 43, 52, 77,133,243,179, 7,216,236, 54, 56, 61, + 61, 69, 93, 25, 83,164,249,108,110, 81, 51,179,122,200,243, 12, 66, 8,180,125,135,182,237,208, 84, 91,200,190,195,108,118,224, +159, 99,206, 5,150,203, 3,108, 86, 55,126,186, 22, 66, 24, 52, 79, 15,254, 8,125,239, 86,143,189,103,203, 15,239,111,151,167, +224,138,121, 98, 57, 77, 20,236,236,181, 47,250, 93,215,161,224, 28, 82,118,104,218, 26, 39,167,167,216,110, 86, 88,221, 92,121, +249,240, 64,120,195, 30,107, 57,164,227,121,100,131,205,246,133,126, 77,156, 48,251, 98, 82, 93,209,101, 48,230, 51,123,225,246, + 41,169, 90,164,120, 99, 99,248, 28,239,142, 43,223, 59,125,239,115,150,123, 7,201, 46, 93, 17, 8,111,109,153,238,214, 19,178, + 22,237,149,163,237,135,217, 39,253,217,113,135,143,111, 66,164, 11,217,224,241,154, 95, 15, 32, 45,197,128, 75, 8,213, 71,250, +234,137,125, 4,179,190,220,142, 24,161,184,182,112, 37,129, 89,157,184,178,174,111,194,102, 99, 43, 37,205, 1,109, 59,194, 24, + 61, 24,200, 59,112,147,142,133, 54, 89, 74, 36, 12, 67, 54,130,157,101,202,104, 15, 25,229, 96, 67,106, 88,120,144, 50,154,222, + 76,135,209,165,174,104,103,194,236,193,218,174, 51, 7,182,221, 7,167,214,161,161, 99, 90, 58,213,238, 43,230, 81, 44,103, 90, +140, 71,204,247,193, 66,151, 41,237, 25,219,102,141, 70, 30,113, 96,154, 60, 52,175,148,113, 32, 83,246, 30, 54, 77,139,217,108, + 1,206, 5,138, 28,104,235,218, 24,100,128,160,165,185, 57, 34,207,252,148, 33,152, 48,220, 8, 74, 51,231,141, 44,171,151,131, + 49, 16,177, 96, 47,109,167,114, 97,239, 7, 83,204, 34, 62,158,134,234, 21, 12, 68, 26, 85,211,131,101,153,111, 50,140,131,157, + 0, 83, 46,122, 55,241,106, 22,102,146,119,198, 90,218, 90,123,186,142,126,144,184, 25,105, 94, 24,145,138, 52, 61, 45, 92, 11, + 32,137, 93, 13,117,237,193,222,219,217, 25,195, 54,120, 82, 41,179,114, 72,180,254,110,229, 19,174, 83, 66,104,223,236,235, 93, +178, 33,139, 26, 54, 6, 99, 94,148,229,185,135,229,239, 93,220,195,118,183, 51,188, 16,255,250, 9,140, 20,160, 36,230,203, 37, +148,234,193, 69, 14, 16,144,103, 25,180, 54,144, 60, 0,220, 59, 63,199,215, 95,127,137, 44, 47,145, 49, 1,165, 76,129,218,238, +118, 80, 74,162,239, 59, 92,221,188,197,233,233, 57, 30, 63,126,140,215,207,191,134, 86, 10, 7,203, 57,234,202, 76,213, 77,219, +227,240,248, 24,171,245, 53, 46, 95,190,196, 39,191,241, 93,124,249,229,175, 64, 82,225,237,229,165, 97,241,103, 11, 60,126,252, + 20,213,110,141,174,174,241,219, 63,248, 1,190,250,250,107, 44, 22, 7,248,233,207,126,142, 55,111, 47,241,230,213, 43,212,245, + 14,189, 82, 38,193,172,105,113,239,222, 57,222,188,125, 13,106,107, 28, 29,159,160,170,118,168,234, 26,159,127,250, 75,207,171, + 17,130, 80,150, 51,108,214, 43,180,109,135,174,105, 77,244, 42, 49,116, 74, 65, 1,232,219, 26,187,170,130,214, 10, 71,135, 71, + 56, 56, 58, 54,170,128,166,198,237,245, 91, 64, 43,136,124, 1, 98, 12,130,103,208, 76, 32, 43, 22,168,171, 45, 56,200,146,113, +135, 60,117,179, 90,114,138, 25,233, 83,219,156,103,254, 62,101,146, 35,203, 25,155,228, 65,181,225,161,124,169,124,214,189,234, + 26,104, 33,112,255,209,135,232,219, 30, 85,181,186,187,241, 87,204, 43,132,192,100, 76,156,214, 52, 29,169,157,146,225,246,237, +200,105,250,227, 35,233,217, 93,236,246, 59,138,253, 62,157,249, 62,118,252, 59, 33,118, 39,124,186,203,101,239,142, 29,124, 60, +169, 71, 63, 8, 81, 39, 79,211,179,214,196, 84, 60, 61,141,239, 65,248, 71, 69,120,202,230, 48, 64,250,189, 77,231,251,144, 46, + 38, 47, 2, 66,158, 64,188,187,247,150,123, 32, 59,213, 13,123, 41, 73, 67, 50, 26,183, 62,200,192, 16,148, 17, 17,157,130,164, + 40,215, 33,167, 89,212, 97, 17,100, 65,247, 27, 22, 98, 0,224,118,210,114,218, 97, 76,216, 13,166, 58,227, 48, 3, 27, 68,128, +205, 12,119,242, 32,199,142,238,237, 52, 46,146, 55,114, 40,149,210, 19,186,233,176,184, 15,161, 55, 52, 42,244,119,245,223,230, + 58,107, 12,112, 9, 18, 82,205,244,247,208, 1,201,111,187,219,224,236,244,204, 4, 76,180,198,164, 69, 81, 63,209,116,104,191, + 75, 52,230, 37,210,223, 23, 7,171,119, 46, 76,199, 17,223,122, 99, 72, 2, 11,195,187, 6,139, 5, 15,113,184,103, 55,215, 2, + 80,138, 80, 85, 13, 40,203, 64, 32,127,221,221,251, 37,108, 20, 48,106,246,200, 27,212, 24,179, 21, 22, 89,119,142, 96,170,176, +161,242,200, 37,139,216,241, 26,113, 72,135,114,197, 58,100,189, 7, 59,126,103,139,171, 1,104, 41, 35,153,107,184,199,103,137, +115,164, 14, 28, 20,157,221,173,231,142,104,141, 76, 8, 72,193, 81, 20, 57,186,166,131,224, 28,219,221,214, 50,183,135,181, 7, +231, 28, 93, 91,121,254,137,200,140,215, 61, 35,134,188, 44,161,186, 6,143, 31, 62, 66,215,105,112, 38,208,181, 61,190,255, 91, + 63, 68,158,207,112,125,253, 6,229,108,142, 89, 81,224,245,229, 43, 92,190,126,137,223,250,173,223,198,171,151, 47,241, 87, 63, +253, 9,182,219, 13, 22,203, 18,125,111,130,117, 24, 52,164,214, 40,139, 18,235,219, 27,204, 23, 75, 60,127,254, 21,154,106,135, +249,108, 1,217,212, 56, 62, 58,198,193,225, 9,158,191,248, 10,130, 24,254,199,127,254, 63,224,243,207,190,192,209,225, 2,219, +205, 6,229,108,134, 7, 15, 30, 0, 90,226,203,207, 63, 71, 83,237,160,251, 14, 93,215, 98,117,123,141,229,193, 17,164,172,113, +115,115,227, 45,108, 37,235, 61, 25,150, 49,134,245,122,131, 44, 43,209,182, 13,164, 82, 40,138, 18, 68,132,166,174,188,229,111, +150,113,244,173,196,205,245, 27,220,222,222,224,254,253, 7,152, 45, 15, 32,149, 68, 91,109, 33, 56,131,236, 9, 89, 94,160,181, + 26,114, 45, 59, 64,245,222,220,200,157,211, 74, 59, 82,156, 12,236,183,101,196,171, 9,227,162, 13, 7,197,200, 52,221,116,110, + 72,120, 44,202,109,151, 82,163,169, 27,204, 23, 2,154, 96,180,245,229, 28, 23, 15, 31,225,249,215, 45,250,182,241, 6, 90, 67, + 53,230,239, 68,113, 41,153, 12,195,130, 30,147,225,166, 84, 80,227,130,238, 36,195,250, 93,187,243, 9, 93,122, 74,106, 11,147, +215,210, 93,249, 93, 83,246, 62,195, 26, 79,160, 99,211,159,175, 7,218,223,222, 51, 86,220, 13,117,211,158, 9, 92, 35, 12, 6, +152, 22, 36,191, 15, 11,222, 17,212,104, 18,241, 79,109, 93,167, 60,220, 77, 61,152,248, 21, 73, 39,218, 62,237, 61,200,125,177, + 11,180,126, 74, 43, 48, 56,167,172,160,184,186,135,194,235,202, 13,156, 8,105,138, 30, 55, 22,114,150, 45,109,114,163,101,223, +249, 16, 23,178,186, 97,101,161, 85, 37, 21, 32, 85,146, 19,239,220,231, 6,226,216,212,196,235,178,194, 71, 16,170,237,192,247, +145,218, 84, 80,116,189,229, 99,160,101,119, 58,216,112, 34, 31, 18,176,104,128,234, 3, 70,254, 93, 22,163,233,235, 30, 37,247, + 57,184, 90, 13,118,247,202,105,103,109, 33,146,100,254, 63, 5, 36, 54, 5,109, 64, 16,123,255, 26,107, 14, 99, 52,204, 57,184, + 16,232,187,206, 72,159,108,209,233,186,206,134, 99,112,244, 74,161,204, 50, 84, 77,101,204,124, 44,193,145, 51, 1,201,134,104, + 97,195,178,239, 99,117, 7, 15,119,225, 26, 74, 27, 98, 24, 51,152, 59,132, 45,194, 77, 87, 67,146,121, 99,121,254,130, 50,175, + 94, 5,168,147,219,143, 59,126, 4,188,177,134,176,135,101, 32,223,180,238, 29,189, 28, 80,153, 48,101,205, 23,107, 55,189,135, +129, 39,169,233,140,214,208,202, 16,163,140, 38, 89,121, 20, 7, 82, 66, 6,134, 61,169,202, 33,180, 12,245, 13, 93,176,138, 35, +102,164, 67, 82,170,136,176, 76, 0,122, 59, 5, 54,149,217,187, 74,219, 24,116, 93,103, 26,204,222,252,255,147,147, 35,188,185, +172,252,228, 88,230, 37,184, 16,230,153,145, 26,223,249,141,239,226, 63,253,199, 63,195,237,237, 53, 54,219, 45,186,174, 67,219, +117, 40,243, 12, 26,132,186, 49,209,166, 89, 94,224,193,131, 15,241,234,229, 75,252,242,175,127,142,156, 51,100, 39,167, 56, 88, +228, 56, 61,187,135,219,155, 21,202,249, 28,219, 93,141, 78, 73, 11,253,183,232,186, 30,164, 9,117,181, 67, 38, 56, 72, 75,204, + 11,142,127,246,207,254,103, 40,217, 97,125,115,141,111, 60,125,130, 77,211,225, 87, 63,255, 25,254,246,111,254, 26,117,181, 3, + 24,195, 98,190,128, 82, 10,245,110,139, 60,203, 48,159, 47, 32, 50,129,249,108,134, 34, 47,177, 90,223, 98,187, 89, 5,164, 69, + 14,173,185,141,158,237, 44,124,206,209,182, 21,170,106,103, 86, 74,202, 25, 20, 49,127, 94, 8,161,177, 90,173, 48,155,207,144, + 23, 37,218,109,131,205,250, 10,139, 67, 35,213, 17, 25, 67,223,105, 20,179, 25,100,223,160,235, 58, 64, 13, 43, 52,229,253, 20, +100,196, 45, 10,157, 53,157,211,166,107, 86, 57, 23, 80,106,248,216,224,133, 33, 3, 87, 78,227, 73,223,219,213, 88,223,181, 16, + 34,195,242,240, 16, 39,231,231,184,124,241, 18,164, 19,165, 69,116,102,219,231, 6, 98, 76,142,219, 39,143, 5,139, 38,242, 41, +159, 18,176, 80,118,203, 98,133,214,223,115, 58,191,115,183, 77,131,187, 91, 58, 88,186,143,167,108,118, 87,204, 83, 40,221,127, +220, 53, 20,250,238, 80, 22,130,117,148, 27,249, 56, 99,236,185,238, 9, 5, 81, 9,165, 9,229,219,187, 89,238,251, 39,115, 29, +252,125,144,126, 77,127,175, 32,108, 37,121,109,218,245, 97, 62,243, 89, 91, 62, 53,124, 4,234,208,214, 13,112,176,219,139,123, + 79,109,198,124,206,128,103, 56, 43,248,108,121, 95,124,161, 44, 36, 74, 62, 40,129, 17,179, 69, 88,123, 3, 14,109, 3, 47,188, + 70,223,202,230,148,210,129,205, 44, 69,211, 49, 11,109, 88, 49, 4,169, 32, 40,182,174,224,235,200,234,148,252, 52,234,254,222, + 75, 57,134,176, 48, 36,108,233, 0, 9,208,193, 84, 26,154,219,220,185, 23, 74,125,157,247,176, 51,195, 72, 78,114,186,101,196, +238,108,218,122, 71, 15, 31, 26, 38, 85, 41,165,201,137,238,141, 84, 39,207, 50,236,118, 13,202,178, 64, 91, 85,158, 32,228,167, + 68,202,204,138, 1, 38, 9, 79,201, 62, 30, 22,148,138, 56, 10, 74,169, 97, 37,225,100,107, 35,109,126,204, 7, 48, 76,237, 12, +219,109,227,239, 11, 11,136,118,225, 33,198, 57,247, 77,130,180,247,196,164,104,145,129, 54, 49, 40, 61,116,192, 7,225,193, 20, + 30,114, 1,148, 85, 76, 40,165, 38, 14, 23,248, 76,244,208,200, 72,135,210,190, 0,206,228,129,154, 33,253, 94,233,115,144, 74, +242,204, 51,195,161,153, 9,125, 97, 68, 54,174,207,177,237, 29,116, 43,144,231, 25,154,186, 65,158, 9, 79,188,204, 24, 97, 62, + 43,176, 88, 30,128, 24,135,146, 29,178,236, 0,156, 11,116, 77,131,139,211, 99,252,236,103,127,137, 95, 63,123,134,174,109,140, +252,178,235,209,182, 45,118,219, 45,136, 8,117,245,115, 48,145,225,227,143,159,226,209,227, 79,240,248,131,135,248,254,119,190, +139,127,245,175,254,119,220,123,244, 33,254,250,167,127,129,229,179,231,216,222, 94,225,224,248, 4,229,124,105,119,215, 12,183, + 87,111,108,179, 5,112,145,225,155,223,252, 54, 62,124,252, 49, 24, 83,120,244,240, 1, 22,179, 25,254,205,255,253, 71,248,243, +255,235, 95, 99,187,217, 96, 62,159,227,252,236, 12, 95,125,185,193,110,189, 66,155, 23,152,205,102,134,104,219, 75, 84,187, 29, + 30,158,157, 65,149,115,188,126,253, 18, 89,158,163, 40,103,104,155, 22, 78,123,208,219,194,122,255,209,135, 40,102, 75,228,156, +176,221,110, 64,204, 40, 60,160, 21,180, 50, 38, 61,198, 46, 87,160,105,106, 51, 53,211, 9,186, 78,130,229, 51, 48,221, 98,183, +190,193,242, 48,131,102, 5,242, 34, 67, 83, 75, 40, 50, 6, 77, 26,189, 53,112,202,172,231,131,128, 82,210, 78,223, 38,170,213, + 20,244,161, 81, 23, 98, 48, 15,114,198, 52,198,151,159, 5,232,169,178,107, 80,238,207,228,182,109,192, 56,247,150,178,133,224, + 56, 63,191,135,122, 91, 97,115,123, 59,164, 67,234, 32,236,193, 23, 87, 30, 79,215,251, 70,202,196,185,106,202,234,213,187,142, +166,172,247,187, 10,246,132,145,204,212,116,158,202,151,211,157, 53, 33,224,230, 4,211,245,251, 76,242,251,138, 63,193, 26,249, + 68, 49,227,227,243,149, 31,159,223,251, 17,166, 18,189, 82, 64,158,194,161,159,162, 4,179,180, 64, 15, 13,213, 20,155, 62, 77, +190, 9, 88,239, 44, 72,214,161,225,243,227,253, 8,139,187, 49, 10, 85, 92,195,133, 28, 62, 62,102,143,251,184, 82,219, 52,176, + 96, 94, 86,169, 23,171,142,175, 67, 24,177,154, 86, 41,178, 97, 19, 33, 23,193,147, 83, 92,209, 8,101, 81,220,101, 69,147,215, +171,155,169,199,164, 52,153,164, 38,101,119, 98,131,163,147, 84,202,250, 75, 43, 63, 65,203,137,194, 27, 21,145,192,124, 6,123, +136, 83, 72,166,114, 21, 76,238,251,224,117, 61, 97, 68,243,206,117,136, 14,223,200, 65, 16, 77, 32,116, 82,147,107, 31, 83,116, +164, 54,135,147, 82, 10, 15, 31, 62, 66, 89, 20,216,108,182,144,178, 51,161, 57,125,111, 38,240,128, 20,200, 57,131,130,198,114, +177,192,118,187, 49,159,227,145, 11,243,189,251,190, 7,115,209,157,196,160,236,231,120,162,154, 67, 47,124, 35,236, 2, 85,204, +231,212, 77,135, 93,213,216, 70,147, 65,219, 68,182,208, 96, 40,148, 12,186,235,151,217,244, 56,206, 77,220,166, 87, 74,216, 71, +198,145, 23,221,158,154,115,110,166,215,160,248,178, 40,185, 47,184,230,246,245, 58, 11,218,240,217, 53,164, 56,101, 15,224,216, +151, 64, 39,103,149,224,124,224,119, 80,220,246, 71,137,120,208,129, 73, 19, 60,139,223,144, 76, 1, 33, 76,138, 89,223, 75,228, +121,134,182, 51, 25,234,203,131, 67,124,252,209, 55,240,240,193,125,236,182, 45, 46,238, 63, 68, 57, 63,196,131, 7, 31, 66, 67, +227,226,252, 30,126,253,229, 23,120,246,245,215,144,170,199,209,209, 41,254,224, 15,255, 41,192, 5, 56,227,216,110,215,126,250, + 85,125, 7,104,137,123,247,238,227,112,185,192,127,252,201,159,227,139, 47, 62,195,151,191,250, 12,245,118,139,213,234, 22,125, +219,160,174,107, 60,184,127, 15, 31, 60,254, 6,242,124,134, 44,227,200,179, 18,197,124,129,223,253,221,223,195,247,190,255, 3, +168,190,199,229,219,215,120,241,242, 37,126,253,226, 57, 86,171, 21,158,127,245, 21, 86, 55,215,184,186,185, 69,223,119, 88, 46, +103,184,185,189,181,234,149,220, 48,152,179, 12,199,167,103, 16, 66,160,169,107, 28, 29, 29,225,205,155, 87, 56, 56, 60,198,253, +135, 31,224,236,252, 28,125,175,240,193, 7, 79,112,124,122, 14,158,101,216,222, 94, 99,187, 89,227,240,248, 4, 74,219, 92,121, +165, 81,150, 37,202,217,220,175,207, 22,139, 57,186,174,195,110,183, 69,158,103, 88, 44, 15,193,121, 6,173, 58,244,125,139,188, +152, 67,202, 30, 34, 19,232,101, 15,206, 57,100,223,123,229, 74,145, 23,254,188, 24,206, 85, 61, 81, 32,145, 48,222,221,249,173, + 35, 35,174, 56, 14,155,217,105, 88, 91,243, 36,195,113, 41,102,115,100, 89,134,221,102,107,154,106,127, 38, 43,107, 42,195,108, +254,249,184,105, 47,118,230, 0, 0, 32, 0, 73, 68, 65, 84,160,135,242, 76, 39,131, 29,140,190, 88,100, 80,182,151,233, 78,211, + 69,121,146,217, 78, 49,179,157, 38,165,113, 24,190, 54, 96,178,167,113,171,238,235,223,135, 0,231, 95,207, 93,145,228, 68,119, + 26,208, 16, 0,113,183, 44, 73, 79,236,197, 89, 96,250,159,238,115,247, 17,230,144, 72,217,210,201, 92, 79, 72,221,116,194,129, + 76,180,134, 44,152,186,109, 19,161,188, 29,237, 40,191, 52,112,136, 51,211, 26,172, 28,109,128, 85, 93,194,218,192,120,214,100, + 50,195,135,105, 87, 7, 90,121, 74,172,103,173, 58, 64,197,114, 49, 88,162,138,246, 30,200, 20, 67,163, 65, 49,102, 22, 26, 50, +241,146,118, 87,203, 40,218,105,135,133, 74, 71,201, 89, 3, 76, 28,234,153, 67,207,240, 33, 50,123, 26, 54,119,127,134, 48,127, +184, 95,191,171, 88,239,131,219,247, 35, 53,238,245, 5,228,134, 64, 82, 70, 52, 72, 66,152,125, 39,147, 37,227, 48, 78,158,124, + 85, 55, 53,206,142, 79,253, 53,146, 54,225,203,240, 4,180,103, 98, 3, 64,158,229,134,125, 78,177, 37,176, 11,190,209,182,248, + 73, 41,141, 81, 77,162, 8, 9,205,129,188,230,159,145,137,127,149, 26,187,186,242,211, 42,164,163, 1,186, 29, 58, 34,164,193, + 65,222, 44,210,191, 91,219, 84, 5, 8,193, 12, 73, 48,152,198,121, 96,254, 99,214, 62,195, 84, 45,149, 50,133, 55,177, 12,118, +140,122, 21, 70,179, 98,216,123, 40,192, 24,191,216,148, 51,119, 47,115, 23,126, 99,191,183, 91,239, 80,112,192,142, 34,120,225, +242,187, 1,169,180,183,112, 37, 54,208, 72,189, 38, 90, 1, 82, 42, 20,121,142,178, 88,224,232,228, 28,235,109,133, 31,255,248, +143,209,247, 45,234,221,206,248,233, 11,129,139,123,247,240,201, 55,191,131, 79, 63,253, 37,242,140,227,201,147, 79,240,191,254, + 47,255, 27,254,244,207,254, 4,183,215,151, 88, 30, 28,224,164, 62,193,102,187,129,234, 58, 48,145, 65,148,115,220,187,255, 8, +127,246, 31,254, 2,111,223,188, 2, 40,195,249,253, 7,184,189,126, 13, 45, 27,180,109, 3,165, 36, 94, 62,251, 26,191,254,250, +107,124,255,119,126, 31,117,221, 65,245, 53,126,247,191,248, 39, 40,139, 25, 94, 62,127,134,255,231,223,253,145,181, 67,101,104, +187, 14,139,131, 37, 46,238,157,227,205,219, 75, 72,169,208,229, 25,102,101,129,163,163, 99, 72, 37,113,114,118, 6,105, 17,185, +231, 47,158,131,105,224,240,240, 16, 74,105, 28, 30,158,128, 51,142,219,171, 55, 88,109, 86,120,248,193, 99,104, 40,188,248,234, + 11, 40,199, 83,128,198,245, 27,224,248,228, 28, 25,227,104,154, 26,187,245, 26,140, 24,138, 89,137,195, 67,195,116,207,243, 12, +125, 47,177, 94,175,209,182, 45, 78,207, 47,160,155, 28, 28, 18,245,110,133, 98,177, 0, 17, 33, 47, 74,236, 54, 43,112, 33,160, +164, 66,223,119,232,165,176,141,174, 8, 0, 36,231,183, 31,171, 94,220,196,228, 38,244, 56,111, 92, 71, 19, 59, 15,162,169,185, + 49,239, 0, 3,161,239, 58,244, 93,139,229,193, 33,142,207, 78,113,249,234,229, 16,192, 4,158, 12, 78, 19,137,105, 81, 49,119, +159,203,246,154,201,164,172,247,201, 84,181,187,224,244,119,217,192, 78, 76,208,163,105, 62, 49,177,185,203, 44,230,189,212, 66, + 97, 3,176, 39,128,109,152,212,207, 46,126, 52,134,181,195,238,139, 77, 18,215,210, 11,186, 47, 45, 45,242, 62, 79, 10, 62, 81, +204,116, 79,109, 92, 7, 79,235,160,177,160,113,220,220,148,153, 12, 33,238,106, 6,199,182, 65, 42, 52, 20, 18, 88,217, 89,140, + 0, 80, 64, 8, 10,117,131,180, 39, 30,150, 69,177,169,102, 10, 50, 19,175,139, 6,117, 16,254, 0,237,186,159, 97,164, 77,128, + 21, 18, 27,183, 56, 98,118,138, 50,123,239, 34,207,189, 13,102,120,200, 70,182,176,110,106, 10,210,149,220, 10,203,147,239, 56, + 55,108,108,203,138,119,137, 78,105, 33, 15,125,197,195, 73,240,174,108,224,125,114,167, 73,116, 0,177,127,120,168,187, 80,161, +245,140,142, 95,155,200,205,206, 77, 8,129,131,163, 35, 28, 31, 29,163,174,119,232,218, 22,181,181,118, 53,191, 43, 13, 54,151, +196, 32,242, 12, 90, 41,180,117, 5, 25, 52, 42,220,146,127,250, 94, 98, 54,159,153,105,198,154,197,112,193,125,126,247,168,237, +212,166,144,246,189, 68,175, 20, 54,187,202,120, 21, 48, 22,167, 27, 70,146,175, 9,141,120,176,103, 31, 38,128,112, 77, 69,131, +124,104,162,137,130,101,150,247,110,141,146, 24,211,184,103,204,115, 39, 92,227,170, 48,210,250,186, 93, 58,183, 17,159,206,207, + 62, 37,204,122,244, 34, 60,116, 35,210,231,180,212,113,176,209, 52, 97, 60,247,239,221,199,227, 15, 62,196, 95,254,229,159,225, +211,191,253, 20,235,245,218,186,207, 73,200,222, 52, 70,187,237, 6,171,213, 10,155,213, 45,142, 79, 79,241,223,255,139,255, 9, +191,252,219, 95,224, 95,255,159,255, 7,110,111, 87,184,185,121, 99, 16, 14,206,161,149,196,163, 15, 63, 66, 94,148,120,125,249, + 2, 93, 83,227,252,222, 3,124,248,228, 9, 62,255,213,223,160,239, 42, 8,193,176, 88, 44,160,165, 4,101, 57,148, 84,216,172, + 87, 56, 59, 59,199, 31,252,193, 63,197,195,135, 31,226,234,234, 13,158,191,124,137,122,187,197,213,213, 21,186,174, 65,153,113, + 92,156,159,226,234,237,149, 9,186, 97,132,163,227, 67, 67,108, 3,176,219,109,177,186,185, 70,215,182,104,172, 67,222, 98, 62, +195,122,181, 6, 49,130, 84, 29,174,174,174,145, 23, 37,142,142, 78,161,164, 70,223, 52, 40,102, 51,116,109,131,178,156,225,236, +222, 3, 44, 15, 14,209,180, 53,164,236,112,122,114,129,162,156, 65,106,141,186,169, 80,215,181,231, 31,204,102, 51,195, 52,151, + 29,122,169, 81,148, 51,104, 34,112,221,154, 51,147,103, 22, 25,233,189,125,177,203,188,119,200,148,119, 25,180,190, 28,195,179, + 21, 67,216, 49, 7, 10,193,164,206,146,161, 67, 88,158,134, 24,120, 73,130,163,147, 61,242,188, 64, 81,150,104,234,218,152,210, + 4, 59,243,240,172, 29, 72,106,108,172, 92, 66,104,209, 28,214, 15,242,126, 32,195, 11,103, 35,237,248, 36,220,206,246, 23,244, +200,194,245,142,175,245, 95, 71,123,154,130,125, 57,233,123,166,115,175,163, 71,152,215, 62,174,162,233, 57, 18,164,180, 81, 16, +189, 23,179, 8,167,118,229,113,209,166,189,187,238, 81, 50,104,112,156,143, 31, 22,134,192,188, 50,114, 19, 75, 25,136, 94,135, +237,114,194,181,246,211,122,212, 8,132, 83,188,219,167, 7, 89,231, 26, 70,174,166,130,135,151, 2, 81,164, 54, 42, 78,115,225, + 45, 37, 35,132,160,162,135, 94, 1, 5,153,236,103, 2,129, 67,129, 88,134, 90,247, 38,239, 27, 26, 96, 28, 4, 3, 79, 49,173, +193,148,180,191,135,132, 82, 70,150,225, 26, 19,206, 6,189,168,187, 18, 82, 41, 64,233,192,203,153,162,104, 68, 31,186, 18,230, +154, 35, 38,182, 56,139,213, 46, 41,198,119,217,202,190,107, 74, 7, 48,249,121,163, 68,184, 41,153, 91, 80,124, 52,145,223,149, + 49, 29, 79, 10,209, 58, 65,147,105,152,132, 70,181,221,162,204,114, 20, 34, 71,155,229, 16,140,161,147,195,239, 34,149,137,244, +108,218, 14,243,217,236,255,165,236,205,154,100, 57,206, 51,205,199,221, 99,205,173,170,178,246,179, 97, 33, 22, 10, 36, 37,138, + 82, 83, 61,221,109, 54, 82,183,153, 76,166,190, 25,155, 95,132,127, 50, 55,115,209, 61,253, 11,166, 47,164, 54,205, 72,106, 77, + 55, 73,137, 20, 73,236,203, 1, 14, 78,157,218,115,139,221,221,231,194, 35, 34, 35, 50,179, 0, 17,184, 0, 80, 56,149,149, 21, +153, 25,254, 45,239,251,188,172, 22,179,173,110,214,214, 81,184,141,223,214,247,253, 62,141, 79,246, 71,143,141,144,210,243,188, +150, 6, 87, 21,101, 39, 74,183,198,111, 54, 19,129, 29,169,135,198,152, 53,230, 87,201,118,100,191, 22, 33,186,110,214, 90, 55, +178, 22,178, 22,160, 53,215,179, 19, 0, 35,106, 80, 80, 3, 33,234, 22, 16, 64,187,170,104,196,110,109, 72,138, 92,103,178,219, + 13,190,191,214,154,200,247, 41,107,113,157, 82,170,147,231, 69,207, 97, 33, 54, 11,194,142, 16,170, 79,179,171,187,122, 1,194, +186,231, 63,221, 63,224, 87,255,252, 75,140,245,121,227,205,239,115,115,243, 10, 93, 85, 20,101,230,108, 93, 69, 69, 69, 73, 16, +132,120,129,199,112, 52,228,250,250, 21,127,251,183,127, 75, 24,197,172,150, 25,101, 81,146,101,247,104,173,121,247,247,126,196, +112,111,159,187,171, 75,206, 79,159, 82,217,146, 15, 62,252, 45, 71, 7,135,172, 86, 75,108, 85,160, 61, 73, 81,148, 68, 81,200, +106, 49,115, 25,236,202,199, 86,238,231,252,205,223,252, 53,183, 55, 87,164, 73,130, 31, 4,156, 61,121,204,242,230,146, 63,254, +163, 31,243, 15, 63,251, 5,126, 24,243,206,123, 63,162,200, 18, 62,253,244, 19,158, 62,157, 32, 21,120, 82, 80, 84,134,100,181, +196, 43, 2,242,188,104,119,211,216,136, 82,187, 72,221,229, 98, 78,178, 90, 80, 22, 57, 82,214, 65, 67,190, 91,185, 93,191,250, + 6,173, 13, 65, 24, 50, 61, 60,164,168, 10,166,211, 41,190, 31, 48,187, 87,204,231,247, 24,163, 41, 10, 67,150,101,174, 56, 49, +184,216,218,170,192,247, 60,146,165, 38, 52, 25, 66,122,224,251,248, 97, 68, 81, 20,245,100,201,173, 62,154, 67,185, 41,250, 27, +234,156, 27, 80,173,181, 65,221, 16,172,198,178,217,148,227,107,184,141,220,154, 14, 53,121,236,141,182, 71,121,144,103, 41,131, +193,136,233,241, 49, 69,145, 83,212, 89,241,236, 24,181,247, 10, 86, 65,199,194, 44,119,218,213, 26,125,148,217, 56,120, 31,244, +150,127, 87,119,254, 29,157,253,214,186,119,211,210,102,191, 67,253,142,248,214, 12,245, 93, 93,249, 38,130,125,167,140, 93, 8, +212,193,241,217,251, 98, 43,120,125,125,160, 55, 93,118,223, 42,176,203,135, 46,218,125,202,191, 4, 32,179,213,249,201, 13,251, + 66,123, 83,146,125,235, 0,219,121,181, 93,185,127,183, 59,111, 5, 86, 77, 88,139, 0,148, 68,213,157,184,134, 30,152,195,118, +199,172,221, 80, 18, 41,240,132,108,163, 75,123,239,163, 58,188,197, 19, 48,242, 20, 18, 23,125,231, 11, 24,251,134,137, 39, 81, +214, 64,153, 19, 84, 41, 42,155,225,103, 11,188,108,137,170, 10, 84,153, 18,234,146, 88, 10, 2,235,182,250, 74, 42,119, 32, 72, +209,238,241, 13,235,155,101, 75,190,171,111,208, 13,253, 77, 41,185, 29,210,210,138, 94,188,157,149, 98, 23,164, 34,191,197, 43, +248, 47, 25, 25,109, 22, 3,223, 58,134, 23,162,151,248,183,235,195,108,123,117,252,250,219, 26, 21,182,242, 61,132, 20,188,241, +218, 27,204,231, 51,172,209,100,105, 90,139,136,100, 43,156, 12,195,144, 74, 87, 4, 97,224,212,185,157, 41, 71,147,206,134, 16, +148,165, 70,120, 46,174,211,137, 31, 59,130,197,198,166, 88,255, 89,151, 24,231, 58, 28, 37, 37,139,197,170,135, 49,126,232,122, +117,211,216,148, 82,189,164, 67, 85,231,172,211, 89,223,244, 66, 99,100,255,253, 41,161,221,219, 11,169,250,212,199, 78, 81,210, +100, 12, 52,215, 52,142, 34,231, 69,239,132,186,120,190,223,218,221,122, 5,148,220, 86, 43,119,125,239, 98, 35, 4,102,179,200, +220,236, 42,214,133,131, 96, 52, 26,179, 88, 46,185,188,185,225,223,254,187,127,207,207,127,241,223, 89,206,102,228,197,138,253, +131, 41, 94,224, 49,157, 30, 99,141,174, 21,245, 6,233,249, 76,143, 78, 56, 58, 57,225,171,231, 95, 49,217, 63, 96,188,183,207, +106, 57,115, 69,139,231,241,229,199, 31,241,218, 27,223, 35, 73, 22, 44,230, 43,222,121,247,135,172,146, 37,139,249, 29, 74,185, +177,176, 82,138, 36, 73, 40,138,210,193, 89, 44, 44,150, 51, 46, 95,189,164, 42, 11,238,110,110, 89, 46,151, 78, 5,111, 45,255, +241, 47,255,130, 95,253,250,159,185,185,189,199, 15,124,130, 48,196, 88,205,225,116, 74,146,166, 96, 43, 22,179, 57,198, 10,198, +147, 61,144, 46, 50,117, 52, 26,146,164, 41,171,213,138,147,147, 83,162, 32,224,254,254,158,201,222, 30,251, 7, 71,228, 89, 74, + 81,150,156, 63,121,236, 10,254, 86, 88,107, 25, 12, 71, 76,246,167,228,105,198, 32,142, 41,138,156,229,114,137, 16,178,158,180, +185,172,117,169, 20,139,100,193,254,222, 1, 65, 16,225, 7, 1, 73,146, 32,108,233, 68,114,117, 17,103,170, 10,129,109, 87, 32, +190, 31,212, 98, 90,211, 9,121,177,237,129,222,253, 20,110,166,154,181,201,150, 27,144,151,118,229,216,164,233, 41, 85, 11, 50, +107, 15,186,144, 12, 6, 67, 42, 93,146,164,105,239,125,193, 6, 19,161,127,128,178, 65,228,236,190,231,214, 29,114,111,207,189, + 17,196, 34, 55, 59,247, 7, 66, 90,214, 68,199,141,221, 57,125,235,243,131,197, 64,119,178, 41,251,157,120, 99, 87,117, 95,239, +147, 78, 69,211, 60, 52, 19, 87, 33,182,115, 39, 54,181,111, 59,162,102,189,158, 53,204,110, 42, 10,187,222,100,179,229, 81,239, + 10,221, 54, 15,251, 77, 49,213,230,232,126,123,125,111, 92,119,210,116,217,117, 51,220, 77, 12,179,130,158, 87,111,211, 66, 39, + 91,140,170,221,138,166,179,157, 23,177,194,172, 11,150, 14,181,109,147, 95,222,229,124,183, 93,176,148,244, 90,121,107, 81, 18, +124,225, 49,242, 4,251,126,200, 59,199, 7,104,163,201,138, 28, 35, 13,105, 86,242,217,197,130,121,178, 36, 84, 62, 86, 88, 60, + 95,178, 55, 25, 17,199, 35,202, 52,101,149, 44, 80, 74,177, 23,143,240,162,128, 87, 89,201,109, 81, 98,164,196, 26,209, 91,205, +216, 7, 32, 7,235,131,124,251,131,216, 13,105,233,190, 54,221,209,176,253,151,164, 46,240,237, 4,185, 77, 91,219,183, 69,242, +110,241,226, 59,228, 66,213,174,216, 55, 31,191, 43,145,183,148,101,129,177,206,255,155, 23, 25, 90,116,196,125,245,235, 91, 89, + 67, 60, 28,180, 35,199,202,104,220,104, 68,215,126, 97,139,148,158, 43,244,116,197,100,178,199,124,126,143,173, 61,239,141,216, + 81, 87, 85, 75,224,107, 56,232, 70, 87,228,153,243, 23,119, 41,117,187,126,127,219,161, 50, 54,147,151, 6, 2,163,148,172,131, + 94,214,186, 16,139,236,195,160, 54,166,102,218, 81, 94,106, 17,113,181,182, 38,213, 23, 42, 12,130,154,102,182,222,119,154,102, +255, 94, 67,136, 60,223,111,117, 26,170,103,119,114, 14,128,102,157,211, 60, 78,253,193,233, 69,250, 54,223,167, 54,130,133,186, +101,127, 89,239,165, 27, 76, 41, 10,132, 53,204, 87, 25, 81, 24,115,123,127, 67,153, 25,188, 32,228,251,239,253,128, 56, 30,242, +217, 39, 31,113,127,119, 67,146,174,208, 85, 69, 28, 71, 76,246,246,249,232,131, 15,120,241,197,199,100,101, 66, 85, 25, 60,207, +103, 56, 24,178, 63, 61,193, 15, 67, 68,237,153,190,189,189,100, 62,155,241,197, 39,191, 33, 8, 99,170, 34, 35, 30, 12, 25,140, + 78,220,161,167, 2, 68,186,114,162, 43, 83,145,173, 74, 94,126,253, 5,195,241,148,131,163, 35,222, 59,127,196,221,205, 53,135, +227, 17,127,245,215,127,197, 98, 49,103, 48, 28, 50,136, 71,188,250,230, 27,242, 60, 97,111,111,138,240, 60,142,142, 31,177,183, +127,196,171,151,223, 80,105,203,241,225, 33, 95,125,249, 37, 43,189, 96,178,183,231,116, 26,165, 3,203,140, 70, 35,202,162, 96, +118, 55, 35, 8,125,132,148,124,253,197,231, 45, 31, 36, 12, 67, 4,150, 87,223,188,224,230,246,134,209, 96,204,215,183, 87, 76, + 15,143,248,222, 59,223, 71,249, 62,175, 94,124,213,174,101,164,148, 20,121,202,245,213, 37, 7,211, 67, 70,163, 49, 82, 72,238, +111, 47, 8,163, 8, 37, 61, 6, 81, 76,170, 13,165, 21, 40, 95,181,160, 30,247,218,154, 13, 43,152,105, 59,226, 38,170,181,251, +255,251, 77, 31, 91,174, 8,165,104, 99,140,141, 49, 14, 99, 91,105,132, 84,148, 69,134,242, 61,246, 14, 14,201,146,148,197, 98, +209,102, 6,108,254,165,133,218, 88,235,202, 29,205,167,216,233, 73,127,112,156,254, 29,123,245,205,239,221,185, 43,127, 96,223, +190,233, 89,223,217,189, 63,224, 0,151,221, 18,202,174,131,165,118,119,241,235, 51,169,231, 90,107,174,255,244,248,236,253,110, + 8,202, 90,197,184,109, 63,219,250,229, 17, 15, 94,216,237,202, 69, 60,232,233, 19, 82,108, 37,184,108,197,209,117,132, 7, 93, +223, 30, 27, 66,137,230,239,205,148, 55,219, 5,231,117, 4, 74,205,187,195,108, 70, 80,118, 46, 94,163,134,150,157,223, 79, 41, +247,223,129, 0, 79, 72,166,158,229,207,222,122,131, 39,227,144, 63,253,215, 63,229, 96, 16,178, 92, 38, 68,158,143, 39, 37,158, + 82, 53, 69,205,112, 58,153,240,175,223,121,135, 63,120,237, 53,126,240,232,140,167,135, 7, 28,237, 77, 8, 67,159,187,197,156, +187,171,107,158,140, 98,222, 60, 60, 32, 45, 10,150, 90, 35,233,130,128, 28,101,205,116, 18,147,122,170,250, 29, 34,182,205, 67, +123, 83,216,182, 57,178,253,174, 46,253,161,174,255,187, 10,131,205,231, 96, 31,176, 92,214,193,120, 78, 28,182,129, 2,110,138, + 77,169, 28, 31,224,236,228, 12, 79, 41,238,231,247, 78, 8, 84,148, 45,131,191,209, 13, 0, 68, 81, 72, 89,228,148, 85,229,200, +114,173,131,192,117,244, 85,101, 16, 74, 50, 26,141,241, 60, 69,145,101,109,213, 28, 4,129,243,251,118, 32, 67,214,106, 16,184, +168,204, 82,127,107, 1,180,201,253,239,237,192,148,234, 49,207, 55,233,124,170, 86,158,171,141, 72,221,110,193, 45, 59, 86,208, +174,114,184,233,150, 26, 13,134,172, 69,115, 94,125,200, 55, 16,162, 38, 59,160, 17,226, 53, 19, 5,221,241,188,119,161, 54,237, + 1,221,129,242, 52, 90,130, 94, 44,115, 35,206, 51,134,188, 40,136,234, 67,230,120,122,194,247,222,122,135,139, 87,175, 40,243, +148,131,253, 3, 38,147, 3,180, 46,120,245,242,130,171,171, 11, 87,212, 11,120,253,205,119,152, 30, 30,178, 92, 44,136, 6, 17, +215,151, 87,156,156, 63, 70, 87,146,249,108, 70, 81,100,140, 71, 99,252,104,192,245,229, 5,171,197, 61,215,151, 55,172, 86, 11, +194, 40,228,217, 91, 63, 64,122, 30,119,183,175, 48, 85,209, 78, 87,164, 53,248,129,207,104,114,192,100,223,229,175, 23,149, 33, + 93, 46, 89,205,238, 89, 44,239, 25,142, 70,200, 32, 98,149, 36,172, 86, 9,139,229,146,162,200,137, 7, 17,105,154,112,119,123, +237, 4,135,218,144,100, 25,227,201,132,155,155, 75,238,239,110,152, 30, 76,153,205, 23,104,237, 0, 48,171, 36, 33,142, 35, 42, + 93,113,123,115,131,181,150,162, 40, 80, 82,226,251,238, 53,170,170,138,162, 40,221, 36, 97,181, 66,103, 57, 86, 88,167,136,215, +134,139,111,190,193, 84, 21, 71, 39,167,204,103,119,148,133,219,139, 15,134, 35,231, 13,175, 28, 88, 41,140, 98,132, 84,232, 50, +195,243,253, 90,124,233,163,181,193,247, 60, 60, 79,214, 26, 8, 89,119,233,219,105,106, 13,176,105,125,216, 55,206,141, 6, 58, +181, 94,121,122,202,235, 77,210,220,148,199,171,167, 92,178, 77,128,179,214,189, 79, 6,209, 0,139,131, 62,233, 70,227, 33,214, + 93,186,237,117,168,155,122, 30,214, 57, 12,157,231,214, 30,218, 98,123,114,216,106,143,132,108,187,231,205,136,234,205,175,183, + 59,114, 41,118, 78, 33,155,248,236,205, 73,114,239,191, 45, 27,231, 24,253,238,252, 33, 82, 94,247, 51,196,118,196,121, 79,192, +187,113, 47, 86,211,147,211,247,183, 59,121,209, 17,183,109,250,213,101, 39, 66,113,123, 52,111,123, 10,102,177, 97, 79,219,236, +240,186, 1, 25,114,125, 1,216,102,175,219,206, 99,118,247, 13, 61,129,194,230, 1,223,216,214, 58,162, 55,217,248,218,109,119, +255,178,105, 23,232,236, 47,186,129, 39,214,182,153,187,162,118, 84,134,194,112, 30, 73,126,255,100,202,217,254,144, 81, 20, 50, + 14, 67, 14,143,143,249,230,155,151, 12,163,152,101,150, 81,148, 5,158, 82,156,239,237, 17,135, 33,203, 52,101,149,103,120,192, +254,112,128, 20,150, 65, 16, 17,121, 33,149,208,124,126,113,201,253,252,142,247, 78,142,137, 61,197,117, 86,184, 96, 18,171, 29, +106,212,234, 54,156, 99, 13, 48, 96,231,225,189,121,208,111,162, 32,255, 37, 29,248, 67,227,245,239, 58,236,191,109, 4,255,109, + 30,246,150, 33, 64,141,117,109,212,175, 13, 73,178, 22,192,121,129,207,254,222, 62,131, 65,204,124,177,192,104, 77, 89,148,235, +194,175,249,176,214,135,124, 85, 86,232, 74, 35,172,165,210,142,201,109,106,235,163, 49, 26,161, 20,123,123,251, 4, 97, 64,150, +101,120,117,122, 85, 52,136, 41,138,162,133,172,200, 26, 68, 36,164, 32,171,241,180, 93,159,251, 38,164,103, 23, 77,208, 89,216, + 84, 61,218,111, 94, 39, 83,175, 85, 20, 66,168,117, 8, 74, 61,126,180,152,142, 72,200, 17,224, 90,137,121, 29, 84,211, 28,216, + 13, 45, 46, 8,130, 53,235,160,182,208, 57,155,154, 83,237,123,158,143,244,106, 37,180,117, 24, 88, 79,249,120,126,208, 90, 27, + 61,207,115, 41,115,157, 53, 77,239,247,217, 52,193,118,198,164, 82, 10,130, 32, 66, 73,247, 59, 31, 79,143,121,246,244, 53,254, +233,151,255, 72, 89, 22, 60,122,252, 20,131,226,211, 15,127,201,205,245, 13,121,158,162,171,156, 60, 89,184,152,209, 65,204,167, +159,124, 76, 89, 85,156, 61,122,194, 31,253,209, 79,249,244,147, 15,185,190,188,104,139,160,209,232, 0,173, 53, 69,190,228,173, +223,251, 3,158, 60,125, 74, 60, 24, 48, 24, 76,152,221, 92, 80, 22, 37, 7, 7,135,104,235,102, 25, 85,153,163, 60,159,225,120, +132,146,146,249,221, 53,149, 49, 8,163,169,116,137, 17, 30,126,224, 81,229, 37,139,217, 29, 66,121, 8, 1,195,241, 62,161,239, +113,117,121,137, 11, 12,113, 99,236,195,227, 19,102, 53,227,124, 60, 30, 83,228,206,171, 61, 61, 58, 98, 60, 26,225,251, 62, 69, + 89,214, 22, 70,223,117,215, 69,222, 30,166,110,125,166,234, 9,146, 19,154,141, 15, 14,200,139,130, 60,203,200,243, 28,107,225, + 96, 58, 37, 47,114,132,167,136,163, 1,105,186,162,172,114,180,209,120,129,215, 54, 45,214,128, 23, 4, 88,140,131, 13,121,161, +155, 82,149, 5,198,186,174,185,201,156, 23,214,246,245, 73,116,199,240,114, 99, 82,251,144, 16, 82,186,142,220,116, 56, 25, 70, +215,126,120,179,190, 23,215,143,235, 41, 69, 24, 70,104,173,221,239,214,114, 58, 84,103,162,163,214,162,229, 58, 83,192,141,174, +229,150,136, 91,116, 2,179,154,148,197,230,160,238, 30,232,237,215, 54,242,201,187, 69,183, 84,114,107,244,222,216,164,187,249, +232,109,152, 75, 3, 7,218,229, 8, 18, 15, 4, 91,109, 70,118,111,101,178,211, 47,106,228, 70,179,217, 61,175, 54, 38,203,106, +122,236, 14,117, 41,251,135,240,238,155,176,220, 49,234, 96, 35,123,183,159, 13,189, 57, 35, 95,239, 15,156, 47, 81,116,149,181, +114, 59, 76,165,217,139,247, 16,121,173, 34,189, 51, 41,176,187, 15, 10, 35,235,125, 76,111,156, 94, 95, 75,185,222,147,211,189, + 89,119, 15,175, 14,150,180,235,243,149, 88, 98, 91,242,230, 80,241,222,209,148,233,112,136, 54,150,113, 28,163, 4, 12, 71, 67, +238,151, 9, 55,119, 51, 23,192, 80, 85, 20, 85,201,124,190,160,212,154,210, 24,102,171,132,155,229,130,155,197,156, 72, 5,148, +166, 4, 44, 81, 24,226,121,146,219,217,130,203,217, 29,251,129,207,179,189, 1, 86, 64,105, 61,132, 82,235,234,181, 91,173,213, +191, 95,224,251,189,157,234,102, 39,189, 9, 41,249,174, 67,249,187, 60,232,223,214,141,127,231, 65,190,163, 82,237, 36,155,183, +213,123, 91, 66,214, 7,143,231, 57, 5,188, 31, 4, 28,236, 31,112,116,120,200,108, 49, 35,203, 82,202, 60,239,136,239, 32, 8, + 2,124,207,119,176,141,202, 56,143,186, 53, 84, 85,133, 54, 22,163,237, 26,178, 35, 4,163,241,158, 11,206, 40, 93,218,155,144, + 18, 63, 8,208,101,185,254,176,215,135,173,214,154,162, 40,218,155, 89,239,253,185,161,252,223,238, 26, 68, 95,108, 38, 4, 82, +137, 94,104,134,181, 6, 75, 19,247,235, 68,122,158,231,198,146, 86,175,221, 9,158, 31,244,136, 97,205, 65,222, 96, 70,131, 32, +192,171,179,220,141,214, 46,165,172,142,172, 21,194,121,255,221, 99, 56,139,155,203,199,150,181,238,192,173, 29,154,108,116,175, +214,114,216, 13,145,211, 90,120, 72, 79, 24,167,164,228,248,232,132,233,193, 17,191,247,246,247, 25,142,247,248,159, 63,251,159, +248, 65,200,147,167,223,227,252,252, 17,191,252,197,255, 71,105, 45, 39,103,103,156,158, 61, 97,188, 63,101,255,240,152,195,163, + 99, 78,206,158, 16,197, 67,198,227, 49, 39, 39,103,252,252,127,252, 61, 55,151,223,144,102, 25,121,150,113,116,124,140, 54,112, +125,249, 2, 83, 86,164,105,198,203,175,190,224,242,229, 11,174, 47,191,118,209,113, 6, 94,190,252,170, 86, 99, 7, 68,195, 17, +227,201, 20,207,243,241, 60,201,244,248,140,201,120,143, 32,140, 24,140,246, 49,186,196, 90,195,217,163,167,196,163, 49, 89,186, + 98, 62,155, 17,134, 17,139,229, 10,139,123, 95, 25, 3,126,224,147, 37, 43, 87,244, 33, 25, 13,135, 24, 99,137,227,152, 60,207, +185,189,189,101,111, 50,193, 90, 88, 37, 9,163,209,136, 36, 89, 81,228, 57,198, 84, 8, 97,235, 14,189,192,171,193, 53, 69, 89, +146,231,185,219,247,151, 37,101,145, 83, 21, 5,105,154, 48, 26,143, 8,131,192,173,235,166, 83,172,181,100, 89,130, 16,224,123, + 62,105,150, 48, 28, 14, 90,224,148, 87, 91,215,156,147,195,146,231, 25, 66, 8, 6,195, 33,198, 52, 96,161,181,101,119, 27, 17, + 43,122,145,216,221, 20,204,214, 38,105,205,214,244,118, 29,127, 93, 31,246, 29, 1,181,148, 10,223, 15, 40,107,123,103,154,102, + 29,230,137,216,106, 36,215, 54,186,250, 96,221,236,178,155, 9,109,179,239,239,120,204,155,255,110,167, 91,244,187,236,230,192, +110, 4,216,221,239,217, 69,142, 91,115, 64,109,143, 4,183,153, 44,218,221,189, 55,235, 97,177,113, 96,239,210,169,116, 98, 68, +251,118,218, 14,244, 74,244,116, 42,253, 66, 65, 77,143, 79,223,255,246,251,181,232,217,206, 54, 5,114, 77, 71,223,247,111,119, +187,242,205,216,211,142,165,108, 35,146, 85, 73,213,179,152, 89, 54, 32, 0,173, 0,168, 57,228, 59, 88,213,206, 72,102,251,233, +175, 31,204,108,208,243, 76, 55, 4, 99, 99, 31,106,235, 49,112, 51,166,108, 20,208,194,106,204,106,193,185,167, 25, 9,193,100, + 56, 64, 10,201, 60, 75, 56,156,236,243,234,238,150,167, 39,199,220,220,221,243,252,242,146,210, 58,187, 81,154,103,124,125,125, +203,197,205, 13,121, 89,114, 55,159, 49, 95, 38, 36,121, 1,194,162, 75, 55,194,139,194,136,243,131,125,206,166, 83, 70, 97,200, +245,108, 70, 86,228, 28,120,134,147,161, 79,154,102,148,210, 3, 33,219,113, 88, 87, 28,213,221,155,239, 82,181,111,198,173,126, + 87, 71,254,208,193,244,173,234,205, 7, 70,242, 15, 5,189,236, 36,206,109,140,232,155, 9,179,236,136,116,252, 40, 68, 32,120, +246,244, 41,179,217,140, 52, 75, 41,139,162,125, 92,207, 83,248, 97,224,114,170,211, 20, 9, 84,166,170, 3, 63,220,161,174,107, + 80,141, 83,132, 75,198,227, 9,113, 28, 81, 22,185, 11,228,177, 16, 70, 78,108,231, 42,194, 86,185,129,239,121,172,146,116, 75, +196,217,220, 0, 27,241,162,218, 16,147,169,206,168, 90,128,131,201,212,152,189,118,196,173,214,197,174, 20,141,120, 70,174, 87, + 48,157,215,192,116,110,194,170,227, 87,111, 32, 53,198, 24,188, 48, 36, 8, 67, 71,250,170, 61,228,182, 30, 65, 75,229,117, 20, + 27,238,115,171, 43, 77, 16,134,238,218,148,213, 86,122, 94, 75,171,235,114, 19,118,104, 43,164, 82, 28, 31, 30,241, 39,127,244, +199, 44, 87, 75, 62,252,244, 99,238,111,110,121,231,251, 63,100, 60, 26,212,251,123,195,112, 56, 34, 79, 51,110,175, 95,145,167, + 75,174,174,174,200,179, 20,176, 60,255,242, 51,174, 47, 95,161,128,120, 56, 38,140,134, 20,121, 78, 89,230, 36, 73,142,231, 41, +242, 44,193, 15, 34,146, 36,231,224,112,234, 8,125, 94,128,231, 5,220,220, 92,130,169, 88, 46, 22,128,225,112, 58, 37,175, 71, +215,195,120,194,193,244,136,217,253, 53,147,253,125,246, 15,207,240,132,102,122,116,202,191,253,119,127,202, 87, 95,126,138, 80, +146, 60, 77,201,243,132,253,131, 41, 74, 42, 87, 44,250, 62,121,158, 50,187,191,115,221,161,167,200,243,130,193, 96, 64,154,166, + 44,102,115, 38,147, 9,175, 46, 93, 44,108, 16, 4, 8, 41, 25, 12, 6, 88, 96, 60, 30, 19,134, 33,101,153,187, 49,125,165,219, + 46, 82,151,121,139,243, 53, 90,187, 61,184, 49, 44, 23, 11, 22,139, 57, 74, 9,210,213,202, 77,113, 60,207,145,234,140,243,176, +207,102,119,196,113,140, 16, 94,141, 87,118,247, 77, 93, 85,110,149, 87, 79, 71,131,192,133,199, 56,192,145,105, 19, 39,251, 90, + 43,187,113,216,218,173,213,107,191,217,179, 61,203, 89,163,174,175,180,110, 39, 18, 85, 85,225,121, 62, 81, 60,160, 40,114,167, +217,208,166,115,216, 54,141,214, 6,138,252,129, 68,180, 45, 65, 90, 71, 44,215, 19, 0, 63, 64,135,235,129, 98,186,223,191,107, +207,190,105, 69,147,162,183, 82,147,189, 63,207,206,216,242,221, 7,186,232, 47,221, 55, 33, 60,236, 94,115,247,172,109, 8,212, +244,248,252,253,135,194, 51,214, 4,183, 93,108,118,177,195,171,222, 39,174, 53, 21, 25,162, 91, 24,216,245,101,217, 24,227,117, +111, 26, 86,172,119,217,118,131,238,222, 30,232,114, 61,146, 69,138, 45, 79, 51, 98,221,233,173,141,228, 46, 6,211,118,212,189, +221, 11,222,205,123,147,194,169,222,101, 13, 82,176, 2, 68,158, 99,231,119,168,229, 29, 39, 7, 19,215,177, 7, 33,158,242, 72, +242, 28, 79, 41, 94,221,221, 81, 86,134,231, 47, 95,114,121, 63, 39, 43, 10,210,162,100,153,101,172,242,140, 44,207,168, 42,247, +120,198, 66, 94,148, 76,247, 38,156, 30, 28,114,191, 92,162,141, 38, 12, 35, 6,158,207,163,131, 41,127,252,246,219, 72, 37, 72, +138,130,219,219, 91, 94,155,142,176, 89,202,170, 50,104,233,110,218,194, 82,115,162, 59,222,112,107, 31, 12,128,249,182,195,186, +187, 51,122,232,207,110,254,191,223,101,196,254,157, 66, 60,214,182,182,254, 72,222, 85,251,178, 22, 8, 1,110, 95,168, 13,223, +123,243, 77, 22,203, 5,105,154, 80, 22,101,107,169,105,110,188,214, 88,202,188, 64, 40, 73,165, 11, 7, 84,169, 25, 2,166, 6, +113, 52, 86, 31, 99, 44,143, 31, 63, 38, 79, 83,170,178,192, 15,252,122, 47,233,110,172, 80,115,227,173, 33,138, 6, 20,245,207, +107,138,168,166,139,105,196,105,221,157,250,150,135,124, 67,233, 43,164, 83,218,251,158,135, 20,178,142,206, 84,189,105, 84,243, +190,237, 89,230,154,226, 84,186,252,241,246,179,216,177,177, 25,234, 96,148, 32, 68, 41, 15,223,247, 80, 74, 56, 88,138,242,136, +162,200,229,125,151,133,211,144, 72,103, 41,243, 60,159, 65, 60,112,244,183,186, 64,217,180, 5,110,253,123,231, 61, 20,250, 33, +191,247,238, 15,248,226,249, 11, 62,250,228, 19,246,167, 83,140,177,188,251,238,219,252,250,215,191,226,244,244,156,159,255,236, +191,243,226,249,115,110,175, 95,185, 68, 50, 33, 0,141, 16, 30, 79, 94,127,155,170,200, 49, 90,243, 71,255,234,127, 97,190,156, +241,252,139, 15,201,243,130,195,195, 67,246,246,246,185,191,119,225, 41, 66, 42,222,122,251,109, 46,175,110, 72, 22,247,164,233, +178, 22, 36, 58, 48, 83, 16,185,145,175,244, 66,222,122,247,247,240,195,152,213, 98,206,229,245, 5, 66, 72,246,143,206,249,234, +249, 39,204,239,103, 76,167, 7,252,242,151,255,200,205,245, 75,150,247, 51, 64,147,151, 21,203,229,138, 32, 8,184,186,186, 2, + 4,243,229,140,241,120,223,137, 16,181, 70, 42, 73, 16,120, 20,165,243,215,204,230,115,246,247,247, 8,130,128,162, 40,219,201, +203,241,241, 9,179,249,156,249,252, 30,116,133,176, 22, 63, 8,136,135, 46,121, 80,215,133,148, 10, 3,226,193,128, 50,207, 9, +253,128, 40,140, 72,179,204,113, 18,124,159, 48,140, 25, 14, 70,196, 81,140,209,218,189, 95,172, 37, 93, 37,140, 39, 19, 71,119, +235,100, 57,232, 74, 83, 22, 89, 93, 40, 24,226, 56,162,168,170,122,149, 99, 59,135, 56,157,152, 85,209,179,183,109,190,159, 55, + 39, 83,205,206,221,125,201,237,212, 85, 29, 36,212, 52, 71,149, 49, 4, 94,224,130,152,140, 33,235,142,225, 91,245,184,236, 81, +217,186,135,232, 46, 95,120,207,234, 43,118,136,213, 54, 24, 38,221,239,239,137,176, 55, 58,243,230,239,230, 44,146,242,219,197, +113,221,174,124, 83, 79, 35, 54,220, 63,219,107,234,109,215, 79,119,205,221,231, 8,244,161,108, 0,234,240,228,252,253,237, 3, + 91,246, 65, 46,130, 45,187,206,118, 22,250,182,165, 77,212, 35,147,214, 64,191, 33,197,111, 46, 82,215,106,208, 86,105,109, 87, + 76, 59,102,223,180, 56,216,141,170,172,131,100, 95,191, 72, 82,236, 20, 39,108,138, 13,100,215,110,211,189,248,166,227,151, 46, +115,200, 19,100,190,226,112, 20,114, 48, 26,161,181, 83,180,166,121,202,170, 44, 72,178,132,139,251,123,126,251,213,115,110, 22, + 75, 42,107, 73,138,156,172, 40, 88,166, 41,121,169, 73,178, 2, 76,163, 72, 87,228, 69,193, 42, 75,153, 12, 98, 0, 22, 69, 70, + 81, 86, 40, 79,177,204,114, 66,207,227,181,195, 99, 12,150, 36,175,120,117,119,195,227,131, 61,252, 50, 99,153, 21, 24,217,248, +165,229,182,154,252, 1,255,120,191, 0, 19,223, 57, 50,222,180,106,236, 82,187,127, 91,231,254,187,230,173,187, 56, 83,250,240, +137,246,108, 23,173,136, 71,212, 16,142,179,147, 83,138, 50,103,181, 90, 81, 22,133,179,163, 9,137, 80,138,241,120,228,242,212, +117, 19, 74,227,198,157, 13, 27,223, 24,219, 11,144, 16, 82,241,248,201, 99,210, 36, 33, 75, 18,180,177,140, 70, 35,170,178,196, +232,178,183, 31, 79,211,140, 52,205,187, 53, 84,135, 38,216,143, 14,238, 94, 39,187,145,248,214,248,134,149, 90,219, 15,187,244, +192, 45, 84,101, 7, 27,187,190, 71,172,161, 67,205, 65,222,236,237,149,231, 17,132, 17,195,193,160,101,128,199, 81,140,175, 60, +151,236, 85,186, 21,194, 96, 48, 64, 73,229, 70,191,210, 49,218,203,178,104,139, 36,211, 48,244, 89,107, 56,122, 0,154,206, 97, + 47,234,156,131,195,131, 35,202,162,228,243, 47, 63, 33,205, 51,254,240,199, 63,197, 83,146,171,203, 87,252,187,159,254,148, 15, + 63,248, 13,105, 1,171,116, 69, 85, 85, 60,125,253, 13,252, 40, 34, 10, 7,188,241,230, 59,220,223, 94,243,205,139,231, 40,229, +115,124,122,206,207,255,254,239, 72,243,156, 42,207,208, 72, 22,139, 59,242,101,194,114,185,164, 44,114,174,175, 46, 73, 87,115, +170,178, 98,122,116,194,252,246, 14,163, 51,148,231,181,218,128,170,204,249,250,249,103, 84, 69, 73,105, 42,148,181,232,178, 32, +207,114,138,229, 29,199,143, 95, 99,180,183,207, 96, 16, 81,228, 57,179,219, 91,146, 36, 65, 73, 15,229, 57,224,208,225,225, 17, +171,100, 69, 20,135,228,137, 43, 0,227, 65, 76, 28,197,220,221,221,177, 55,217,195, 74, 8,234, 29,186,181,142, 25, 48,159,221, + 83,150, 5,203,197,130,193,112,200,114,177,192,154,218,105,161,113,112,150,162,112, 28, 4, 99,168,138,146,162, 44, 24,198, 67, +210,116, 69,101, 53,195,209, 8, 83,105,134,163, 9,119,119,215, 84, 69,193, 96, 48, 36,138,135,117, 55, 99,200,211, 37,161, 31, +160,124,175,157, 10, 5, 65,224, 64, 51,181,179,193, 90,139,209, 21, 81, 20,163,171,162, 22, 76,246, 89, 34,155, 7, 71, 35,134, + 91,139,214,228,134, 50,126,163,147,236,236,190,165,116, 69,133,172,173,110,212,150, 83, 93,175,146, 90,226, 99,247, 94, 97,215, + 54, 52, 37, 85,111, 79,222,215, 84,237,152, 44,178,129,121,101,215,216,187,175, 96,223,196,197,246, 4,223,157,115,177,247,231, + 55, 37,226, 59,196,214,187,166,147, 2,177,221,141, 11,177,113,198,138, 45,209,122, 95, 83,176,161,153, 58, 56, 62,121,191,179, +113,238,176,217,237, 78,168,204,166,242,189,233,184,197,214, 97,178,189,127, 88,147,221,100, 15,221,234, 44, 20,172, 71,242, 82, + 32, 84,237,213,174, 65, 31, 26,176,202, 9,159,154,148, 21,101,193,107,253,220,174, 19,183,114, 45,142, 51, 98,187, 19,146,157, + 74,169,119, 51,218,101,101,107,158,191, 53, 88, 91,225,229, 57, 97,185,194,215, 5,251,147, 9, 74,120,228, 53, 31, 60,201,114, +150,121,198,221,106, 73,150,231,172,138,194,237,206,173, 33, 43, 75,202,178,164, 50,134,188,204, 89,172, 82, 44,134,170,174, 90, +149,146, 36,121, 70,161, 13,227, 97,204,253,124,201, 60, 89,177,172, 61,172,101, 13, 2,217, 27,196, 20, 70, 51, 91, 37,204, 86, + 75,206,246, 39, 40, 83,178, 44, 75,172, 10,220,155,174,193,169, 10,118,194,100,190, 75,236,246, 47, 25,189,119,199,234,187, 14, +248,223,249,175, 93,223,103,109,187, 90,233, 87,162,162,134,160,232, 25, 34, 0, 0, 32, 0, 73, 68, 65, 84,188,200,150, 45, 62, + 28,186, 46, 37,138, 35,230,171, 5, 89,150,183,169, 84,126, 16, 16,132,161,163,248, 25,131,209, 6,109,214, 28,108, 23,170, 98, + 58,104, 74,129, 84, 30,167,103,167, 36,171, 21,182,141,206,117, 2,182, 50, 47,219,248, 72,207,243,209,166,206,227,171, 51,196, +141,116,163, 80,140,237, 8,201,104,181, 25, 61,241, 92,103,191,214,222, 36, 91, 47,186,105, 71,241,106,167,160,176,134, 28,121, + 94,189,227, 86,237,251, 91, 73, 65, 24, 70,189, 96, 32,107,173, 75,120,178, 16,197,113,189,115,119, 69, 81, 20, 69,196,113, 76, +150, 39, 20,101,229,132,116,166, 78,170, 19, 2,233,123,148,186,194,106,144,173,205,200,174, 1, 61, 61,189, 73,179,102,147, 8, + 97, 16, 72,126,252,227,159, 18, 68, 33,179,249,140, 31,252,224, 71,100, 89, 66,158,151,252,225,143,255,144,119,222,121,151,175, +190,185,224,139, 47, 62, 38, 77, 86, 72, 12,151,151,175,200,242,140,251,235, 91, 22,243,123,110,174,175, 17, 74,242,163, 63,252, + 99,126,249, 11,183,139, 47,138,130,178,200,200, 19, 23,224, 19, 15,199, 12, 71, 35,194, 56,230,123,111,191,199,114,121,207,209, +233, 57,126, 52, 2,171,137, 6, 3,242, 60, 71,151, 57,167,143,158, 48,217,155, 18, 4, 49,201,106, 70, 50,191, 99, 48, 26,243, +244,141,119,184,190,186, 32, 10, 61,198,147,125,138, 60,227,213,203,175,176, 2,124, 63, 34,207,114, 70,123, 99,202, 66,147,166, + 43,230,179,123,246,246, 70,220,221,220, 82,100, 43,140, 46, 72,146, 21,241, 96,128, 82, 30, 23, 47,190,194, 11, 60,198,227, 61, +150,243, 25, 82, 74,150,139, 5,251,123,251,204,102,115,124, 79,113,123,123,197,209,225, 49,203,197, 18,151,228, 87, 91, 7,133, +193,152, 10, 99, 53, 22,247,222, 45,171, 2,139,203, 53, 16,210, 39,203, 22,100,201,146,225,120,159,172,200, 40, 75,167,149, 40, +203,146, 40,142,209,186, 34, 89,205,137,162,168, 14, 92,129,188, 44, 25, 12,134, 53,186,218,105, 83,180,118,226,200, 40,140,169, +116,213, 22,162,107, 71,148,220, 16, 63,203, 45, 55,211, 38,128,102, 29,209,106,123,170,249,230,173,226,215, 76,143, 74,107,148, + 31,212,129, 84,134, 60, 47,106, 22, 68,127,197,212, 8,223, 54,109,100, 61, 8, 76,167,171,223,180,165, 53,157,123, 79,209,206, +154,218,246,224, 8,126, 23,245, 77,244,133,121,205,228,184,157, 78,109,196, 18,179,217, 68,117,232,148,219, 42,246,245,201,185, + 73,119,237, 54,212,155, 29,126, 23, 32,167, 14, 79,206,223,223, 45,144,218,182,164,245, 67, 88, 58,234,240, 77,237,171,232, 10, +210,250, 49,116,114, 13,130,238,239, 33,235, 29, 79, 51, 94,105, 40,174,109,244,166, 88,123,201,219,206,100, 99, 79,190,153,117, +221, 38, 80,109,254,126,157, 11,222,197,104,238, 68,160, 90,139, 16, 22,179,156, 35,231, 55,232, 90,144, 18,199, 17,121, 85,146, + 87, 37,214, 88,178,170, 36,201,115, 86, 69,142,168,153,205,205,118, 42, 47, 92, 42, 83,169,235, 68,169, 36, 67,214,172,250,160, +134,198,104,107,201,171,194,137,152, 45, 44,242,156,217, 42, 33,171, 74,202,170, 64, 27,203,193,112,228,192, 20, 82,112, 57,187, + 67,107,195,241,158,243,185,103,218, 98,149,215,190, 6, 86,124,183,215,252,219,198,239,189,202,175,131,160,101,199,193,190, 75, +100,247,109,123,247,157, 17,191,155, 84,169, 13,158,113,247, 13,169, 88,147,214, 12, 48,217,219, 3, 11,211,131,125,110,239,239, + 48,186,194,212, 40,205,209,100, 92,251,100,171, 54, 32, 71,235,146,170,206, 84,119,221,186, 91, 39,186,206,216, 9,159,206,207, + 31, 83,228, 41,139,197,188,183, 70,210,101,229, 4,107,214, 34,144, 24, 43,200,243, 18,223,115, 34, 52,103, 56, 21,248,157,168, + 86,165,228,214, 20,200,118,114,161,219,176,159,250, 80, 55,198,184, 25, 86,157, 37, 32,155,137,150, 84,157, 27,152,234,225,148, +187, 93,185,177,134,178,170, 8,252, 96, 29,171, 90,127,143,227,152, 59,177, 97, 24,133, 4,126, 64, 94, 20, 12, 7, 3,246, 38, +251,109,177,227,114,206, 5,101, 85, 97,172,219,211, 58,154, 97,133, 84,162,197, 8,171, 46, 18,183,167,242,119, 5,192,249,217, + 83, 62,248,224, 55,252,234,151,255,132,242, 37,255,254,207,254, 3, 63,255,249,207, 72,147, 5,131, 65,200,255,245, 95,254, 11, +190,231,243,245,243, 47,200,210,148, 82, 91,158,189,246, 26,158,140, 24, 12, 66, 38,211, 99,164,175, 24, 13, 7,220, 92,124,195, +191,249, 95,255,140,189,233, 49,131,225, 0,191, 97, 19, 84, 26, 91,175,201,206,206, 31,243,242,197,115,170, 60, 35,205, 50, 14, + 14,166,228, 69,130,231, 43,246,143,142, 72,151, 11,176,130, 44, 75, 48,198, 17,228,166,135, 39, 40,229,241,242,235, 47, 73,230, +215, 76, 38, 39,156, 61,121,157, 52, 73,185,186,120,129,169,220,225, 26, 13, 38, 45,129, 77,213,162,195, 52, 77,235, 12,248,172, +221, 75,151, 69, 65,165, 53,131,225,144,155,203, 43,210,213,130, 40,138,184,187,187, 39, 8, 2,150,203, 21,113, 20,225,249, 65, + 45,212,243,176,194,114,120,124,202,193,225, 9,105,154,128,213,237, 97,104,219,226, 63, 32, 8,134,174,160,242,124, 48, 26, 83, + 26,242, 44, 99,184, 55,198,232,154,134, 88,107, 42,252, 32, 32, 73,151,136,250,181,174,116, 35,160, 20, 53,110,218,162,164, 3, + 41,173,121, 15, 97, 47,153,109, 83,247,212,117,110,128,221,134,173,212,231,131,169, 81,216,235, 38,145, 53,188, 9,231,184,104, +104,142,198, 24,162, 48,170,185, 8,146,162, 44,182, 39,135, 77,114,163,236,239,205,219, 52,180, 6,179,189, 99,242,184,121,160, +247, 58,116,209,193,203,138, 78, 1,176, 1, 55,219, 76, 94,219, 92, 53, 73, 33,182,236,105,236,194,138,247,113,115,125, 37,252, + 3,112,247, 93, 19,147,190,245,188,255,239,106,122,114,246,254, 67, 89,230,108,236, 3,214,176, 18,219,191,144, 98,157, 53, 46, +186,144,215,214, 19, 46,183,246,220, 98,125, 13,251,163,138,102,223, 93,119,154,170,251, 75, 88,122,214,181,102,151,190,117, 80, +116, 70, 30,155,202, 92, 81, 71,140,110, 6,117,212,155,159, 90, 3, 85,223,180,173,198,147, 22, 63, 75, 40,111, 94, 81,166, 25, + 40, 73, 28, 6, 45,121,161,210, 21, 82, 8, 86, 89, 86,251,125, 29,164,166,170, 42, 42,109, 92,198,119, 13,238,104,124,169, 89, + 94,182,123, 41,175,230,186, 7,129, 95, 23, 39,206,207,158,150, 57, 89, 81,178, 76,210,118,130, 98,172, 97, 47, 30, 49,207, 86, + 84,198,114,183,116,227,181, 65,224,145,165, 9,149,149,104,207, 67,214,217,236, 15, 29,210,242, 1,127,100, 87, 87, 32, 58,130, + 46,186, 59,244, 78,152, 9, 59, 82,144, 54,187,245,127,201,120,126,203,230,241,224,227,116, 20,241, 18,252,218,251,191,183,183, + 71, 89, 85, 60,125,252,132,251,217, 29, 73,146, 96, 42, 13, 74, 48, 30, 79,220, 46,179, 44, 48,149,243,164, 87,186,108, 61,193, +214, 88,176,114,195,209, 33, 57, 58, 62, 38, 10,124,102,139, 57, 66,186,162, 75, 41, 73,165, 75,186, 97, 67,171, 36,173, 71,152, +174,136, 8,162,168, 30,241,186,238, 95,121, 94,253, 57, 49,189,113, 97, 55,208,133, 14,175, 95, 42,177,102,173,183, 76,235,117, + 81,213, 8,239, 90,171, 75,253,105,107,168,130,141,134,196,247, 67, 6,245, 40, 54,240,220,225, 17,134, 81,173, 47, 48,245, 10, +195,237,223,135,131, 1, 73,154, 17, 71, 49,131, 65, 76, 20, 70,235, 66, 92, 58,107,146, 95, 23,159,149,209, 40,161,234,247,181, +179, 87,138,206, 20,108,147,123,191, 88,206,209,149, 97, 60, 25, 97,141,225,248,228, 17, 95,191,248,154,243,243, 83, 46, 46, 46, +249,201, 79,254, 21,203,213,156,247,126,255, 39, 8, 21, 1,150,251,249, 45, 63,252,253,159,240,197,103, 31,241,244,233,235,140, +135, 99, 62,255,236, 19,222,120,251, 7,252,195,223,255, 63,124,250,225, 63,115,241,226, 5,201,202,197,159, 54,248, 91,132, 64, + 40,143, 44, 93,185,236, 5,107,185,190,120, 65,178,156, 97,116, 69, 85,228, 4,158, 71, 85, 58,237,132, 46, 50, 22,139, 37,121, +213,120,244, 21, 97, 60,228,232,228,156, 15, 62,254,144, 34,203, 9, 3, 31,129, 33, 30,140,145, 2, 14,166, 39, 60,121,246, 61, +142,143,142,200,178, 20,221, 10,190, 98,116,165,209,186, 34,136,135, 4,161,139, 6,206,210, 21,101,238, 62,203,131, 65, 76,146, + 36, 68,161, 15,198,176, 92, 45,137,194,136,201,129, 83,176,207,231,115,150,203, 37,163,209,200, 21,144, 85, 89, 43,189,125, 6, +147, 49,199, 39,167,132, 97, 84, 43,244,199,236, 79,143, 8,227, 33, 97, 20,178, 88, 44, 92,129,106, 42,210,100,137,193,226, 5, + 17, 10,195,114,126,143, 31,120,248,126, 68,145, 23,181, 48, 82,174, 49,175,210,113, 4, 26,143,123, 16,132,245,231, 64,181,123, +241,238,104,189,235, 29,239,209, 16, 59,231, 67,215, 26,215,141, 69,109,190,236,251, 78,211, 97, 89,135,104, 69, 97,232,138,200, +118, 77,182,125,207,234, 3, 92,196, 86,170,154, 84,178,103, 83,219,132,190,244,160, 50,155,148,185, 29,121,230, 91,162, 53,209, + 47, 96,101, 71, 0,222,219,147,119, 60,241,162,183,222,221,164,169, 74,122,104, 49,177,253,132,251, 4, 87,187,245, 92,186,113, +229, 56,162,156,104,247, 39, 27,252,151, 30,192,133, 46,117,173, 3,169,232, 41, 19, 45,219, 81,168,182,223, 29,219,142, 93, 73, +108, 40,230,109,231,143,211, 88, 39, 44, 61,251,156,169,119,233,205,147,181, 29,160,134,232,168, 53,187,136,188,246, 32,111,108, + 68, 82,110, 5, 95,180,172,106,177,126, 3, 43, 33, 25,234,146,213,221, 43, 76,101, 40,140, 97,236, 43, 38,163, 33, 86, 8, 12, +150,178, 42, 41,165, 66, 91, 67,169, 43, 39,250,192, 82,214,176,143,160, 46, 32,138,162, 68,168,245,243,117,161, 12,178,189, 30, +113, 24,145, 21, 5, 69, 89,162,164, 36,240, 3,146, 52,163,210,134, 69,154, 56,193,147,176,132,126, 64,172,124, 70, 81,196,205, +124,206,237,108,206,116,127, 76, 44, 42,108, 57, 39, 17,154,194, 31, 35, 27,150,249, 46,133,106,231,218,109, 30,182,205,243, 91, +211,249, 58,222,235,174,205,175,163, 78,255, 46, 17, 94,151,253,190, 75, 84,213, 27,185,239,242,122,210,207, 33,232,170,175,173, + 49,164,105,198,104, 60,110, 61,195, 74, 41,140,148, 8, 85,131, 91,140,174,111, 18, 98,171, 72,232,122,251,165,164,221, 71,166, +105,194,116,255,160, 86,165,139,186,171,239,139,195,138, 82, 35,149,135, 53,213,250,107, 73,214, 18,255, 60,207,193,113,148,231, + 49, 30, 29,214, 98, 60,215,233,251,129, 79, 80,243,218, 93, 1, 88,181, 55,165, 38,126, 85,215,123, 79,106, 59,217,104, 60,162, +170,180,235,226,234,162,181,200,139,250, 38,170,107,223,177,195,220,122, 50,160,172,170, 54, 8,200,130, 83,179,251, 62,182, 46, + 52,188,154, 56, 23, 4, 33,135,211, 3,138,188,172,119,232, 21, 71, 71,199,164,105,202,117, 13, 73,105, 66, 58,124, 63,112, 99, +211,178, 34,138, 66,242, 58,215,188,171, 21, 80,157, 21,195,116,122, 68, 89, 84, 92, 94, 94,240,236,233,155,252,243,175,255, 25, + 99, 74,198,227, 3,138,188, 34, 8, 7,168, 48,228,227,143, 62,226,131, 95,255, 12,233, 41,162,120,194,199, 31,254, 6, 63,140, +201,203,130,143,126,251,107,170, 60, 99,126,127, 67,145,164,104, 3,198,104,116,153, 33,133, 37,205, 74,172, 46,240,130, 16, 79, +249,228,105,230, 70,215,104,240, 34, 78, 14,159,144, 23,115,242, 60,103, 60,158, 48, 8, 66, 44,150,229,172,228,232,248,148,203, +139, 23,220, 94, 22,140,134, 35,148, 47, 88,206,102,104, 83,178, 50,112,176,191,143,242,220, 1,180,127, 48, 37, 28,140, 89,220, + 95,178, 88,204,121,227,237,239, 51,159, 93,243,245,231,159,115,119,119,199,100,178, 71, 49, 43, 40,179,140,201,100,159,120, 50, + 98,121,127,135, 10, 20,210,247,137,134, 49,105,154,224, 7, 33, 73,154, 49, 61, 58,226,238,250,134,188,200,153, 30, 30,241,234, +226, 37, 88, 77,150, 44,240, 61,143, 48, 12, 28,209,205,243,209, 69,197,203, 23, 95,183,156,254, 40,138,201,243, 12, 63, 8, 57, +123,250, 26,227,189, 61,238,239,239,201,146, 37,158,239,225, 41, 73, 85,185,107,162, 60,143,155,235, 27, 78,207, 35,148,146,164, + 73, 74, 52,136,145,202,195, 87, 30, 69, 89,226,135, 32, 61, 77,145,229,181,127, 94,214,120,105, 7, 89, 82,181,119,187,129, 24, +173, 81,178,238,134,223,124,190,218,207,168,109,239, 38,157, 21,171,108,181, 5,141,250,189, 57,248,140,169, 64,249,140,134, 67, + 4,224,103, 30, 89,150,215, 97, 88,221,100, 71,187, 69,105,235, 78,127,187,250,147,166,187,223,100,158,192,218,202,182,201, 63, +105,239, 55,155,235,133, 14, 70,188,143, 49,239,138,183,237,150,197,184, 71, 96,221,193, 14,233, 38,128,210, 66,213,118,223, 71, +215, 7,183, 97, 87, 35,222, 28,123,106, 90,143,223,187,246,180,190,218,189, 47,163, 95,143, 84,214, 42,200,222, 70, 90,208,241, + 80,139,118,189,222,181,162,137, 26, 2,211, 62, 78, 19, 36, 95,243,172,215,149, 83,111,149,218,185,168,219, 33, 0, 82,108,140, + 53, 54, 68,112,221, 72,210,181,135,187,131, 26,220,160,198, 41, 97, 81,166, 98,148, 57,219, 89,150,151, 8, 5,231, 71, 7, 12, + 99,247, 65, 41,141, 65, 23,101,109,215, 48,228,149,118,227, 36,235,182,174,218, 24,194,154,175,236,236, 80,110,228,158, 23, 37, + 90,187, 81, 82,224,251, 8, 96, 52, 24, 56, 63,105,253,226,122, 82,186, 67, 67, 74, 23, 93, 88,199,170,150, 85,225, 10,128, 60, +199,243,125,238,150, 75,132, 21,148, 85,137, 53, 6,175,222, 69, 27,229,215, 5,146,220,128, 74,244,217,226, 93,149,242,102, 8, +199,230, 33,236, 14, 15,118,124,125, 55,201,238,119,161,205,153, 93,157,121, 67,201,179,236, 36, 21,122, 29,206,248,163, 39, 79, + 28, 31,187,204,107, 80,135,173, 59,130,160,101,188,187,195,169,164,210,235,157,186, 49, 77,113, 96,235,253,162, 27,115,123,190, +199,233,201, 41,119,247,119, 8,168,187,122,221, 90,204, 44,240,218,235,239, 96,173,235, 98,133,116,152, 87, 26,225, 88,237, 49, + 23, 66, 56, 63,110, 89, 81, 22,149,251, 12,105, 67,153, 23, 20, 69,225,108,113,190, 71, 24,132, 4,190, 79, 24, 68,236,239, 29, +112,116,120,194,227,243, 39, 60,125,250, 26,103,231,143,121,252,248, 25, 71, 71, 39, 28, 31,159,115,114,124,202,201,201, 35,142, +142,206,216,155,236, 59, 52,232,112,210,118,237, 13,168,196,243,188,118, 44, 24, 6, 1, 65, 20, 18,197, 49,113, 28,187,157, 39, + 16,197,145, 43,124, 42,103, 55,138,194,208,117, 76,133, 19,128, 78, 15,246,209,218, 80,233,138, 74,151,181,176, 85,180, 54, 54, + 81,103,126,183, 41, 11,157,236,121, 37, 37,223,255,254, 15,120,121,113,201,179,103,207, 24,143, 71, 72,207, 9,231, 6,195, 1, +151, 87, 87,252,246,131, 95,115,125,241, 53, 87,175,190, 97,185, 90, 49, 28, 78, 88,173, 22, 20, 89, 66,178,156,147,165, 57,190, +231,241,253, 31,253,132,192, 87, 28, 76, 15, 57,123,252,180,198,246,150, 40, 47,224,248,236,148,104, 56, 70, 9, 73,154,174, 64, + 10,242, 60,199,247,124,206, 31, 61, 97,182,152,113,176,183,143, 69, 16,197,145,227, 61,148, 5, 85, 85,145,172,150,232, 74,163, +164,197,243, 36, 65, 56, 98, 60, 57, 36, 89,222, 33,176, 68,241, 0, 35, 60,132, 84, 4,241,128, 52,113,154,141,170, 44,249,242, +179, 15,136, 7, 35, 52,150,213,252,150, 82,107, 39,194,171, 10,146,229,204,173, 44,164, 36, 75, 19,140, 49,228,101, 69,228, 7, +220,222, 92, 49, 61,152,114, 63,155,179,183,191,207,252,238, 14,233, 41,132,132, 50,119, 22, 62, 91, 91, 46, 77,189,130,161, 94, + 27, 57, 8,204, 26, 88, 35, 60,143,217,237, 21,195,225,152,243, 71,143, 9, 2,159,249,108,198,120, 52,170,199,213, 30, 82, 9, +178,213, 10,139, 97, 48, 24,214,201,110,238,222, 84,212,148, 63, 23,223,219,196,226,218, 14,124,198,182,194, 77,175,153, 58,117, + 58,113, 37,229, 3, 69,184,236, 48,226, 85,231, 28, 81,109,129,176,126, 92,133,174, 12, 66,168,154,122,167,121,253,245,215,241, +131,128,213,114,213, 83,187,111,250,207,123,106,120,118,228,131,108, 28,188, 93, 76,108,119,164,222, 54,154, 27,145,169,155,202, +246,245,153,182,177,178, 20, 59,236,185, 98, 87,138,250,198,124, 82,236, 38,177, 62,148, 17,255, 0, 61,182,183,226, 80,135,167, + 14, 19,219, 61,208,121,232,169, 8, 92, 6,111,135, 44,100,155, 76,244, 22, 18, 34,215, 22,182,182, 98,114, 85,156,176,162,245, +218,118, 31,212,212,226, 54,185,230, 19,244,196,111,237,239,175,214,187,199,230, 64,106,131, 54,234, 55, 73, 55, 53,170,219, 85, +110, 90,109,214,111,218,245,203, 40,154, 17,142,144, 40,105,217,175,114,170, 98, 69,154, 57, 75, 90,232,251, 28,237, 79,240,164, +187, 73, 22,101, 65,228, 7, 88,220, 77, 46, 43,139,214,254,230,188,159, 21, 94,171,242,116, 40, 73,107,113, 22, 40,107,241,164, +219, 75, 5,129,135, 39, 21,195,193,128,178, 42,107, 86,183, 27,167,150,149,166, 40,202, 26,224,160,235,125,173,164,172, 52,190, +175,200,203,138, 82, 87,232,170, 34,201,115,148, 48,196, 53, 2,210, 42,191,135, 88, 84, 15,196,167, 54,215,209,237,237,188,214, + 46, 37, 59,152,213, 32, 8, 90,144,200,166, 5,113,115, 87,188,203,234,246,157,170,247,205,241,124, 83, 96,216,166,214,111,228, +105,162,115,168, 55,100, 52,197,225,201,137, 67,162, 74,193, 42, 73, 40, 75,119,205, 28,229,202,249,160,203,170,164, 42,115,170, +102,244,222, 77,144, 51,182, 21, 7,201, 90,104,246,228,241, 19,238,239,111,221,247,231,142, 8,216, 64, 47,162,104,204,120,188, +207,139,151, 95, 59,194, 95, 45, 52,106,178,180, 27,219,142, 18, 18,171, 43,132, 0,207, 87, 8,105, 81,190,170,119,159,206, 26, + 86,212, 66, 74,171, 13,218,106,202,178, 96, 54,155, 49,159,207,201,242, 12,129, 59,164,180, 54, 68, 97,200,209,201, 41,167,103, +143, 56, 59,127,194,179,215,222,226,252,209, 27,188,246,250,187,188,254,198,219, 60, 58,127,194,249,241, 41,158,114, 10,246,178, + 42,200,242, 20,173, 43,134,195, 33,158,146,196,209,128,241,216,137, 11,155,215,121, 48, 24, 56,234, 89, 81, 32,165, 96, 60, 28, + 57, 80, 73, 81, 48,158,140, 9,130, 16,173, 43,135,149, 53,198,141, 78,141,117,108,137,118,115,182, 6, 56, 41, 41, 25,196, 49, +113, 52,102,177, 88,240,201, 71, 31,161,124,143, 31,255,248,143,248,135,127,248, 59,132,112,133, 80,169, 43, 44, 30,231,175,189, + 69, 85, 89, 87,144,232,130,101,146, 48, 57, 56,228,237,119,223,227,254,230, 18, 63,138,249,139,255,248,191,243,205,203,151,220, +223,223, 49, 28, 14, 49,166, 34, 93, 44,200,210, 5,171,229, 10,107, 45, 39,103, 79, 16,194,163, 76, 86, 8,224,254,230, 26,140, + 33, 77, 86, 76,246, 38,148, 89, 74, 60,136,177, 70, 99,180,139,225,181,214, 16,199, 3,162, 48,100,122,122, 78,146,205,137,130, +129, 59, 16,253,208,113,242, 11,183, 94, 75, 22, 51,178, 85,194,124, 54, 35, 77, 50,130, 40,102, 24, 15, 72,210,132, 60, 77, 8, +131, 24,229, 41,116, 85,146, 36, 41,123,251, 83,146,213, 2,172,102, 48, 24, 17, 69, 17, 89,158,176, 92, 44, 24, 14, 6,164,105, +206,254,225,148,187,155,107,252, 32, 96, 16,143, 24,140,247,136, 7, 67,151,109,144,151, 88,187,118,106,172, 5,170,245,200,219, + 90,226,193,152,187,235, 87, 44,151, 75, 6,227, 9,113, 20,113,115,117,201,104,111,143,178, 42,145,210,199, 86, 5,203,213,138, +189,253,125,199,139,175,189,233,190, 39, 41,139,162, 46,194, 84,143,123,161,148,172,221, 33,186,142,103, 22, 4,126,176,219,127, +186, 21,183, 45, 59,126,245, 58,242,215,138,173,123,132, 87, 3,113, 26, 64, 77,163, 27,185,159,205,120,235,157,183, 56, 60,156, +146, 36, 9, 90,235, 45,220,235, 67,190,244,135,132,193,187, 84,239, 77,151,223, 13,130,217, 36,199,109,193, 94, 58,130,107,187, +195,135,222, 93, 71,117,191, 91,108,160,111,165,220,116, 32,109, 58,208, 30, 96,175,108, 29,230,125,119,130,247,173,135,120,239, + 2,212,251, 59, 91,211,173,228,218, 94,212,100,128, 55, 36, 48,201,218,206,211,118,231,157,138,167,203, 92, 23,117, 85,210, 34, +245, 58, 86,153,182, 75,219, 1,177,111, 70,126,182,147, 48,166,235, 17,123, 19,109,105,113, 49,157,214,210, 27,237,183,190, 97, +213,223,175, 91, 99, 92,181, 42,192,211, 37,145,201, 89, 90,218,174,206,117, 98, 2, 97,220,129, 28, 72,201, 48, 26, 48,203, 82, +215, 33, 27,139,145, 78, 7,160,107,165,117, 89, 85, 4,158, 7, 82, 58, 91, 85,211, 17,154, 70,136, 1,101,165, 41,171, 18,191, +249, 80, 89,183,223,106,244, 7,210,119, 42,123,149, 67,234,151,220, 47, 87,248,190, 79,178, 90,114, 54,221,231,131,175,190,102, + 28, 13, 40,138,148,202, 74,252,106, 73, 24, 87, 40, 52,153,138,209,158,223,102, 11,203, 7,236,107, 46,144,164, 99,233,175, 15, +239,166,131, 46,139,162,238,248,215,227,239,205, 17,250,174, 81,252, 46,174,252, 67,190,230,110,177,176,126,147,218,181, 43,130, + 62, 43,190, 21,106,213, 26,134,217,108,206,244, 96,175,238,142,221,161,153, 23,133,163,167, 85,122, 29, 91,218,196,186,218,254, +123, 92,235,181,234, 55,205,178,250,198,233, 1, 69,207, 13,225, 7, 33,171,229,130,143, 62,254, 45,123,227, 61,162, 56, 98, 56, + 24,113,116,120,140,239,123, 92, 94,188,100,185, 90,225, 7, 1,105,154, 17, 4, 62,131, 56,198,247, 67,246,247, 38, 28, 31, 31, + 19, 71, 49,159,126,241, 25,101, 89, 80, 20, 37,195, 65,204,247, 94,127, 29,161, 20, 23,175, 46, 72,235, 67,169,170, 42,110,175, + 95, 49,153, 76, 56,152,140,248,230,197,151,252,227, 47,254, 7,121,158, 19,135, 17,167,167,167,188,241,198,155,220,205, 87,204, + 23,115,108, 85,162,171,146,225,104,200,120, 60,225,192, 59,224,233,227, 39, 92,188,186, 96, 54,155, 19,142,195,246,119,197, 90, +103,187,170,195, 91,202,178,100,111,207,117,252, 69, 81, 16,197, 49,126, 24,112,125,115,131,167, 20,199, 71,199,204,230,115,132, + 72,200,243,220,233, 5,218,247,207,186, 80, 30, 14,134, 4, 65,200,217,249, 51,226,193,128, 87,255,227,239, 80,210,130,213,124, +254,217,199, 28, 31,159,112,117,117,193,114,185,228, 39,127,252, 83,146, 85,198, 95,255,213,255,237,178,212,139,140,147,211, 39, + 68, 67,167,133,248,224,215,255,200,254,254, 20, 33, 5,255,233,255,252, 63,152,221, 95,179, 88,204, 41,139,156,189,201,136, 52, +203, 64, 56,100,178,169, 36,243,251, 91,180,177,120,190, 71,165,221,253,167, 44, 82, 68, 24, 16,122, 10, 65,192,114,177,100, 56, +140, 81,202,199, 84,117,122, 95, 85,145,231, 5, 47,190,250, 20, 42, 67, 16, 69,172,150, 43,246,132, 32, 77, 74,108, 85,162, 86, + 43, 12,134,100,185, 34, 79,157,214,101,118,115,205,217, 15,127,204,245,229, 21, 58, 47,200,242,132,120, 48,230,240,232,128,187, +187, 91,150,179,123,154,152,210,187,155,107, 78,207, 31, 49, 28,239,147, 39, 9,201, 42, 33, 30,141,157,136, 83, 27,138, 44,167, + 42,243, 86, 20, 25, 69, 49,209,104, 68,178,152,181, 83,178, 70,141,174,181,193,152, 28, 1, 20, 69,206,222,222, 1,203,229,146, +139, 23, 95, 51,217, 63,224,228,252, 41,179,197, 29,163,225,136,162, 40,240,227, 17,100, 9,243,217,156,195,227,211, 86,240,231, + 66,125,234, 21,147,117,227,114,233,249,238,174,221, 54, 39,101,189,190,116,194, 73,135,132, 13,234,113,124,217,163, 84,246, 63, +239,178, 13,231,114,204,247,245,160,181,129,100,105,237,236,149,218,104,180, 5,180,192,243,220,218,225,213,203, 11, 94,127,227, +117,142,143,142,248,242,203,231, 60,255,234, 43,119, 47,214,102, 61,150,111,133,193,157,115, 7,219,219,191,247, 24, 15,155,187, +117, 54,130, 91,196,195, 96,172,157,145,167,155,226,235, 13,244,248,195, 7, 49, 91,235,197,190, 69,124,243,126, 41,182, 2,211, +186,218,183,238, 83,245,186,212,160, 93, 88, 88, 81,139,225,172, 53, 53, 16, 70,238,176, 58,173,145,145,178,107, 97,147,178, 85, +238, 54, 23,207, 8, 23, 68,210, 38,177, 1,202, 56,120,138, 17,160,155,177, 67, 51,222,169,149, 81,186,211, 89, 55, 99,250,110, +164,100, 51,170,109,114,158,155,223,208,200,174,199, 80,244, 40, 88,162, 19, 63,217, 88,148,172, 49,248, 82, 50, 50, 9, 24,131, +209,150,210, 56,133,125,105, 12,121, 89, 16,123,161, 83,138,170,128, 81, 28,145, 21, 21,202, 23, 40,161,208,149, 69,248, 10,107, + 43, 16, 80, 25,141, 47,124,140, 94,167, 29, 89,108,219,205, 33, 4,126, 61,253, 48, 70, 19,171,128,133,206,214,201, 87, 24,116, +141,234, 44,107, 11,200,170, 40,137, 81,164,133, 97, 92,179,185,157,128,201,226, 33,208,126, 72, 82, 24, 2,147,226,123, 26,107, + 98,172, 23, 98,154,169, 65,125,173, 76, 83, 4,117,108, 18,109,193, 35, 93, 69, 33,235,199,111,253,212,181,166,193,108, 6,179, + 60, 32,144,123,200, 39,191,243,123,186,246,182, 46, 41,173,219, 13,116,246,238,198, 24,124,229,161,181,102,181,152,227,237, 31, + 18,250, 65,109,215,113, 7,189,167,188, 54, 12,165, 72, 75,164,240, 17,194, 34,240, 64,148, 61,134,157, 75,173, 82,109, 64,202, +108,126,223, 78,127,154,170, 90, 41,133,213, 37,133,118, 66,200, 60,203, 48, 70,163,148,207,114, 53, 39,142, 6, 76, 15,143,152, + 30, 28, 56, 91,102, 61,122, 92,174, 22, 60,121,252,152, 40, 8,120,117,117,197,112, 48,224,254,230,146,171,171,107,134,163, 33, +121, 54,224,179,207, 63, 71, 2,121,158,214, 55,188,186, 67,171,137,119, 74, 74,132,242,208, 85,217,190, 78, 47, 47, 94,242, 79, +191,252,167, 58,152,198,180,215, 78, 41,201,201,241, 25,199,199, 39,252,205,223,253, 29,105,178,114, 66,183, 90,217, 60, 61, 56, +224,205, 55,223,224,230,246, 22, 33, 4,135,135,135,156,159, 63,162,170, 74,202,210, 48, 30, 11,242, 34, 35, 75, 19,206,142,143, +152,205, 23, 84, 90,179, 55, 26, 59, 60,173, 49,148,182, 68, 87, 14,148, 84, 85,165, 83,214,123,130, 97, 60, 70, 96,185,186,186, +224,242,242, 21, 97, 16,241,236,245,239, 49, 24,132,132, 97,200,106,149,112,117,241, 13,111,190,251, 46,159,125,246, 49, 55,151, + 87,228,201, 2, 83, 20,156,158, 62,230,248,252, 49, 31,254,243,207, 56, 62, 57, 71, 87, 25,215,215,215, 60, 14,125,110, 94,189, + 96,149,101,232, 34,175, 59,225,132,195,211,115, 60, 79,113,115,125,129,167, 2,116, 85,178, 90, 46, 81, 97,204,159,252,219, 63, +229,249,231, 31,145, 37,115,178, 60, 37, 26, 31,241, 7, 63,248, 17,194, 24, 94,190,250, 6,163, 13,171,131, 91,252,208,231,238, +250,150,215,143,206,248,213, 47,254, 59, 69,238, 66, 80,130, 48, 36, 79, 23,181,166,162,194, 23,146, 50,207, 72, 23,203,246,208, +202,211, 21,191,253,197, 63, 80, 84, 5, 85, 85, 58, 61,198,106,134,169, 50, 6,163, 9,152,202,237,197,165, 32, 12,124,238,111, + 46,137, 6, 35,252, 48,164, 42, 92, 7, 44, 61,143,120, 56, 98, 56, 30,177, 92,204, 88,206,239, 49, 90,147,234, 10, 63, 26,224, + 5, 33, 85,225, 98, 74,149,114, 5,162,197,186, 14,214, 88,164, 53,220,223,220,225,249, 30, 81, 13,160,185,189,185,226,248,228, +172,254, 12, 56, 43,219,120, 50,165,170, 42,202,170, 36, 8,195, 26,238, 21, 56,129, 31, 56,118, 60, 2, 41, 75,180,172,192,106, + 71,160,107,195, 91,108,235, 99,111, 28, 0, 74,249,117, 49, 92,186,200, 99,217, 4,196,168, 13,202,104,205, 35, 17, 29, 74, 93, +173, 39,113,130,204, 90,199, 99, 12,165, 41,241,125,143,251,187,123, 86, 39, 9,227,241,136,183,223,125,155, 39,143, 31,243,155, +223,254,150,217,108,238,116, 50,117, 35,213,222, 75, 68,167,209,236,106,199, 54,133,114, 29,103,214,183, 82, 53, 55,232,163, 59, +181, 73,157,201,226,183, 29,226,155,186,160,237,102,218,238,116, 8,245, 15,244, 93,137,168,219, 63, 71, 29,158, 62,122,255, 97, + 90,156,172, 5, 85,118,171,250, 88, 43, 5,109, 59,122,183,157,202,168,151, 65,107,233, 97, 76, 27,118,118, 27, 21,183, 54,145, +119, 20,128,245,155,161,229,180,119, 84,133,205, 65,220,236, 44,186, 7,129, 16, 91,170, 98, 54, 2, 53,122, 83,130, 78,183, 40, +235,245,129, 18,134, 65,153, 98,117,201,170,200, 89, 36,153,251, 96, 2,161,130,201,100,236, 60,194,202, 99, 58, 30,178, 76, 82, +164, 39, 73,139,178,174,100,235,174,178,158, 2,248,158,215,243, 69, 87,218, 80, 20, 21, 65,224, 35,235, 73,133,239,121, 68,129, + 79, 28,134,228, 85, 81, 39,135, 81, 43,233, 93, 39, 47, 85,157,237, 94,143,221,242,170, 32,240, 61,238,150, 43,192, 18,251, 33, +171, 44, 35, 8,125,244,112,159, 82,248, 88,229, 70,109, 86, 42,247,193,169,199,233, 93, 65,135,106, 89,252,107,101,166,177,235, + 67,162, 9,115,232,178,240,237, 3, 98,184, 7, 45,107, 15,128,104,196,239,178,131,218,252,185, 53,204,195, 26,139, 31,134,196, +131, 1,167, 71,199,220,220,222, 56,127,175,181,248,190,135,174,156,158, 65, 87,110, 12, 94,149, 85, 47, 71,218,152,198,106, 83, +239,249, 0, 21,132,156,157,158, 97,180, 38, 73, 19,202,220, 77, 42,226, 56,198, 8,159, 31,253,232, 39, 76,167, 71,174,211, 80, + 62, 74,194,108, 54, 39, 30,196,124,252,201,135, 92, 94, 95,241,252,249, 23,124,249,197,167,124,253,213,151,220,221,222,113,125, +123,203,245,221, 45,201,114,201, 7, 31,252,150,187,217,140,225,104,200,222,222, 1, 79,159, 60,115, 29,168,214,140, 70, 19, 60, +233,113,119,123, 71, 89, 85, 12, 6, 67,103, 97,146,158, 83, 92,235,202,237,185,107, 87,133, 54, 27,255, 94,186, 21,206,114, 49, +227,242,242,130,197, 98,193,114,181, 98,185, 88,146,164, 25,101,153,115, 63,191,231,249,243,231,124,243,205, 75,238,238,238,120, +254,252, 75,190,252,242, 57, 55,119,183, 88, 11, 71,135,135, 72,225,194,109,156,186,217,221, 8,155, 93,123, 19,199, 90, 85,149, + 91,117, 52,186, 20,165, 24,196, 3, 84,232, 19,120, 1,195,225,132, 39,207, 94,227,228,244,140, 95,252,236,103, 24,235,172, 86, + 74,121,228, 89,198,211, 71,103,220,222,221,114,246,248, 77,103, 3,155, 76,248,234,179,143,176, 72,242, 34,225, 95,253,235, 63, +229, 63,252,249, 95,112,117,125,197,217,147,215,240,253, 0,207,115,130,200,192, 15,200,107, 48,142,146,146,103,111,188, 77,154, +103, 76,246,167, 76, 15,143,120,241,229,231,188,250,230, 11,116, 85, 16,135, 62,215,151, 23,124,245,229,167,188,186,188, 64, 10, +197,139,175, 62, 38, 77, 83,138,220,176,183,127,192,243,231, 95,162,176, 20,121,201,193,209, 9, 40,143,170,116, 69, 91, 24,134, + 20,149, 38, 75, 19,116,165,235, 73,161,219,125,151, 69, 94,199,209,202,118,130,232,162, 86,115, 38,211, 19,138, 60,119, 96,151, + 58, 24,167, 44, 11,178, 60, 39, 30, 14, 72,146,165, 35, 87, 6, 1,201,114,197,104, 52,102, 52,158,184, 4,179,178,196,148, 5, +195,241,190, 75, 8,172,111,166,101, 89, 82,150, 85,175,160,150, 10, 42, 93,145,165, 43,180,214, 68, 81,196,205,245, 37,135, 71, + 39,117, 1, 92, 81,150, 21,123,251, 7,120, 53,170,182,177,191, 33,234, 72,226, 90,152, 25,248, 1,198, 26,103, 93,172, 53, 20, + 94, 13,208,169, 61, 66,110, 13, 91,139,103,221, 61,163,155,242,214, 76,109,250, 86,232,102,232,170,164, 11, 49,106,238, 43, 77, +115, 99, 59, 93,119,115, 64, 45,146, 37,143, 31, 61,170, 67,123, 70,188,254,250,235,132, 81,196, 98, 62,223, 98,172,111, 89,190, +100,223,111,190,137, 27,239,218,175,119,209,233,196, 67, 25, 21,157, 17,252,182,165, 79,110,228,168,244, 15,225,102,164,190, 41, + 74,223, 28,211,175, 11,169,205,149,248,238,253,122,215,153,160, 14, 79,207,223,223, 94,250,175,115,156,155,253,183,148,114, 35, +208,197,174,237,101,182,111,177,233,222,176, 77,125, 32,183, 9, 91, 29,235,152,221,176,178, 53,233, 56,107,127, 97, 93, 4,200, +141, 23,162, 59,190,237,240,165,177,125, 6,122,119,212,188, 21, 62,177,163,136,177,245, 1,230, 89,131,151, 47,209, 85, 65,146, + 59, 11, 90, 89, 57,145,147,242,224,112, 60, 6, 1, 70,107, 70, 81, 76, 97, 42,132, 80,100, 85, 78,146, 23, 45, 10,177, 81, 98, + 54,187,198, 82,107,140,133, 82,187,188,103, 37,107, 20,173, 82,196, 81,132, 0,130, 32,194, 74, 81,179,144, 53, 86, 8,170,218, + 31,172,148,155,123,248,158,135,176,130,172,204,241, 60,159,249, 98, 65, 89,106,246,134, 35, 42, 83,145,101, 57,158, 23, 98, 7, +123, 88, 63,196, 42,223,121,216,235,131,219,238,176,146, 53,164,181,230,242, 54,100, 48,187,129,128,180,205, 24,240, 59,194, 96, + 30,130,219,124, 43,160,102,135, 26,126,119,113, 32,214,215,181, 22, 89, 90, 99,152, 30, 30,115,116,112,192,124, 49,167, 40,114, +140,177,237, 46, 50, 8, 66, 76,237, 75,175, 42,167,140,110,188,180,205,141,168,185,233, 90,235,244, 27, 79,158, 60,193, 24,195, +108, 62,171,189,227,212, 55, 60,193,151, 95,125, 73,158, 38, 92, 95,190,226,246,254, 14,173, 75,238,239,174,249,230,226, 37,101, + 89, 80, 22, 57, 73,146,184,206,163, 44,201,243,140,213,114,193, 98, 62,227,230,230,154, 52, 77,200,178,148, 44, 73,152,205,102, +124,250,233, 39,220,222, 92, 51,159,207,152,207,103, 28, 28, 28,242,236,217,155,100, 89,202, 42, 89,213, 35,245, 1,167,167,143, + 56, 57,123,196, 42, 73,120,235,173,183,249,254,239,189, 71, 20, 71, 28,236, 79,121,246,250,155,188,246,218,247,144, 18,142,166, + 83,158, 61,125,198,123,223,255, 1,239,189,247, 3, 0, 46,111,175,193, 88,138,162,132,122,173,228,130, 68,114,178, 60,101,177, +156,115,123,123,203,203,139,151,124,242,233,199,252,250,215,191,230,195, 15, 63, 36, 73, 18,164, 80,188,254,198,107,120, 82, 80, + 25, 87, 16, 57,175,181,114,137, 95,110,214,132, 69, 48, 24, 77, 40,138,138,171,203, 87,148, 85, 78,154, 44,249,205,175,127, 73, +158, 44, 57, 61, 61,225, 47,255,242,127,227,235,175, 62,231,207,255,252, 47,185,186,185, 99,178, 63,229, 31,127,241, 51, 22,203, +185,187,121,239, 31, 82,230, 43, 14, 79,207,136,227, 1,255,239,127,251,175, 12,134, 19, 38,123, 7,124,250,225,111,184,189,189, + 70,121,138,213,106, 78,186,156,147, 37, 75,124, 79, 49,220,155,242,226,249,231, 36,243,123,110,175, 47, 89,101, 41, 18,203,222, +100, 8,202, 35, 47, 5,105,186,100,113,127,143, 21, 46,254,243,250,242, 37,249,114,201,139,175, 63, 39, 91,185, 64,160, 32,240, +185,191,191,197,154,170,221,247,166, 89, 82,239,184,139, 90, 27,179, 6,251, 24, 83, 43,210,195,144,241,120, 76, 89,148,132, 65, +132,174, 44, 85, 89, 50, 24, 14, 40,242, 2,163,203,118, 45,103,170, 10, 83, 85,248,210, 39, 93, 45,137, 71, 99,130, 32,224,246, +234,165, 75,206, 11, 2, 38,123,123, 12,134, 35,198,147, 3,172,133, 50, 75,107,214,194, 58,100,106, 77, 56, 19, 45,129,206, 69, +189,106,162,193, 16,223,243, 9,195, 16,131,165, 42, 11,151, 56, 24, 13,106, 45,132, 68, 73,175, 86,161, 43,172, 17, 14,204,100, + 52,126,224, 59,199, 77,227,254,176,198,165, 25,118, 84,220, 78,181,222, 8,230, 84,219,133,175,215,123,238,218,108,250,202, 69, +139,114, 93,223, 35, 85, 45,212,149,178,249,108,187,199, 43,178, 28, 95,249, 76,198, 99, 71, 53,244, 20,167, 39, 39, 60,125,246, +148, 66, 87,164, 73,210,102, 65,116,249,235, 61,203,218, 38,172, 6,209,167,203,137,221,214,222,222,185,216,163, 36,138,222,129, +222,109, 24,173,221, 22,152, 55,250,154,117,242,169,248, 14,177,155,224,219,110,147,162, 22, 64,175,197,116,253,160, 53, 79,108, + 4,158,244,118, 12, 29,195,127, 59,222,104,119, 21,162,247,226,174,247,162,235,155,175, 49,102,157, 99,222, 24,228,233, 11, 12, +186, 35,116, 83,251, 77,117,131,162,108,124,235,221,206,174, 27, 26,209,233, 30,155,155,110,151,171,221,132,181,244,162, 8, 30, +160,172,117, 31,223,104, 77,158,151, 72,219,247, 75, 90, 44, 85,101,200,106,175,167,167,156, 63, 61, 10,124, 22,105,198, 32,136, +184,183, 43, 87,229, 74,217, 86,236,221,231,209,236,130, 74,173, 9, 81,245,155,132,118,183,174,181, 70,225,186, 32,165, 20,182, + 62,220,155,113,124, 85,185, 78, 31, 91, 81,232,138,178,112, 9,112,121,161, 41,247, 52,161,239, 99,173, 65, 47,239,145,210, 67, + 15,247, 90,239,127, 79, 44, 88, 95, 87, 99,129, 90,132,178,182,161,208, 75,193,115,222,123,211,217, 64,213, 81,168, 59,222,121, +191, 83,204,234,230, 8,126,211,202,177, 49,226,234,237,223, 59,182, 26, 99,113,209,147,190, 71, 90,228, 4,171, 51, 14,171, 0, + 0, 32, 0, 73, 68, 65, 84,129, 3,122, 84,149,174, 61,214,126,155, 94, 86,105,103,243,170, 76,209,255, 49,157,159,161,181,251, +190, 60,207,241,124,175,102,163, 59,100,177,181,134,155,155, 27,164,148, 92,220,223, 16, 4, 33, 7,123, 19,230,171, 37,167,103, +207, 40,202,156,197,236, 22,109, 12,147,189, 9,121,154,145,165,169,243,199, 87, 46,209,173,251, 73,211,149, 11,241,168,180,174, +133,144,110,162,240,233,167, 31,184, 40,213,122, 74,230,121, 30,215,175,174,184,124,121,129, 84, 10, 79, 74,126,249,203,159,215, +174, 13, 15,207,247,217, 63,152, 82,228, 5,105,186,106,221, 36, 65,224,198,163,143,206, 31,243,238,187,239,145,172,230, 4,202, + 39, 30,196,248,158,207,114,181,226,197, 55, 47,208, 85, 69,109, 74,162, 42, 75,150,245,117, 18, 86,242,252,197, 11, 94,188,252, +134, 95,253,246, 55, 20,105,130, 84, 62,143, 31, 63,194,247,125, 78,142,207, 81, 94,128, 65,115,127,127,199,253,237, 29, 31,127, +240, 91,110,111, 94,241,218,219,239,113,115,121,193,254,209, 41,165,214,188,246,206, 15,249,241, 79,254,152,187,187, 25,149, 81, +252,167,255,252,159,145,162, 64,121, 62,139,249, 61, 89,150,163,203, 10,109, 94, 97, 76,201, 96, 52,224,131, 95,253, 35,209, 96, +200,217,163,167,252,237,127,251,175, 44,238,239,208, 69,206, 60,207, 24,141, 6, 96, 28,114, 84, 5, 49, 85,165,241,164,160, 52, +146, 71,207,222,172, 67,123, 50,194, 40,230,224,232, 8, 37, 61, 62,255,248,183,152, 82,243,234,249,151,132,195, 33,211,227, 51, +146,249,141,139, 39, 85,170, 29,181, 55,125,163, 82,142, 15,177,127,120,198,237,213,133, 43,180,123,239,201,230,159,154,162,102, +151, 75,165, 40, 75,135, 94,245,124,207, 9,216,226, 1,203, 85,213, 58, 5,168,119,225,186,170, 8,194,144,249,221, 53, 71,199, +167,236, 29, 28,113,119,123,139, 95,185,200, 87,107, 97, 56,206, 57, 58, 58, 38,142, 7, 92,188,120,142,164,190, 63, 74, 73, 28, + 15,107, 61, 68,230, 38,126,113, 68,150,229, 20,185,131,225,152,178,226,228,209, 99,226,104, 72,154,164,148,101,201,114, 57, 99, + 60,217,195, 83, 65, 91,208, 42,229, 17,134, 18,139, 35,187, 57,212,178, 89,231,139,215,170,248,178,200,123, 66, 51,223,247,218, +207,177, 18,170, 78,254,163, 45, 60, 84, 29, 93,108,140, 19, 4,119, 71,205,107, 45,148,198,150,245,212,173, 6,210, 56,119,131, +187, 7, 62,255,234, 57,147,201,136,225,104,220,174,161, 38,227, 9,255,230, 79,254,132,203,215, 47,249,197, 63,253, 19,171,229, +170, 14,104, 90, 79, 68,233, 34,150, 69,255, 30,179,158,102,247, 15,241,230, 5,109,108,211,118,147,223, 97,237,142, 20,209, 93, + 8,245,254,196, 98,157,128, 39,118, 80, 50,127,247,191,196, 14,218,102,107,105, 59, 58,125,244,126,143, 4, 39, 55, 18,113, 58, +130,131,245, 78,123,187,211,149,117,176,125,155,243, 84, 87, 13, 77,134,121, 71, 18,216,166,239, 88, 33,182,198,242,221, 10,184, + 23, 83,199,118, 58,148,232,116,250, 91,104, 62,250,170, 69, 54, 42,175,222, 11,216,137, 87, 53,214,162, 4,232,197, 45, 10, 65, +169, 43,178,188,162,212,110, 95,164,168, 59, 20,233,198, 84,101,165,137,253,128,172,112,234,232, 89,146, 56,232, 76,173,202, 55, +181, 66,184,161,203, 85,117,199,159,229, 69,253,179,164,243,164, 6, 62, 22,131,231,249,142,219, 92, 21,200,186, 66, 46, 42, 87, + 24,116,255,124, 89,150, 24, 43, 8,125,143,251,229, 10,139, 64, 73,136,131, 0,132, 32, 47,114,124, 12,194,243, 49,126,236, 38, + 33,245,248, 93,214,187, 94, 79,121,219, 33, 8,221, 81,183, 93,119, 5, 61, 23,193, 78,253, 69,127, 42,242, 59,197,175, 62, 36, + 76,233,220, 0, 69,199,110, 98, 59, 66,146,230, 57, 75, 1,251,211, 41, 65, 16, 80, 21, 37, 6,227, 60,212, 77, 60,169, 20,100, +121,142, 54,110, 95,222, 5, 2, 89,187,238, 56,154,195,223,243, 61, 55, 10, 29, 14,185,189,189, 69,116, 87, 95,158, 98,190, 88, +214, 97, 41,146, 36, 89, 81, 85, 37, 69,153, 49,155,223, 99,235,180,173,170, 44,235,116, 51,214,182,175,250,242,185,159,109, 90, +145, 81, 51,110, 67, 42, 39,220,210,206,194,228, 4, 81,238,123, 53,198, 61,110, 85,145, 21, 69,189,111, 7,109,221,239,154,231, + 25, 69,150, 82, 20, 69,157,157, 93,146, 37, 25, 85, 85,114,123,123,205,213,229, 43,230,179, 25,247,179,123, 46,175,174,184,186, +189, 65,120,138,243,179,115,246,247, 15, 24,143, 39, 60, 58, 63,231,232,248,152, 71,103,231, 76,247, 15,184,124,117,137, 31,122, + 40,223, 35, 10, 35,100,157, 43,126,115,123,195,237,237, 29, 47,190,254,138,175,190,126,206,114, 54,199, 26,195,245,237, 53,175, + 94,190,160,170,211,194,178, 44, 99, 56, 28, 19,132, 3, 86,139,123, 62,250,240, 3,150,203, 37, 6,184,126,117,193,217,217, 35, +158, 62,123,147,197,114, 69,186, 90,160, 45, 60,123,237, 53,230,243, 57, 81, 20, 19,199, 17,179,249, 61, 81, 8,139,217,146,104, + 48, 36, 89,206, 17, 8,170,170,172,117, 57, 6, 79, 73,110,175,175,169,202,148,120, 48,226,236,236, 17, 95,126,246, 9,201,242, +158,170,204,184,120,241, 37,215,223, 60, 39,138,199, 84,214,160,164, 33, 73,150, 4,210, 21,113,123, 7, 83,231,127,215,238,243, + 25,199, 81, 43,200, 29, 79,166, 24, 43, 81, 86,147, 36,171, 30,108,165,121,253,132,168,225, 68,149,139,166,221,223,223,119,201, +140,105,194,104, 60,102, 49,191,103, 48, 24, 56,197,185,239, 17, 13,134,132,241, 16,173, 75, 76, 89, 58,247, 74,178, 34,136, 98, + 4, 22,165, 92, 52,106,150,164, 84,121,194,253,253, 29, 0,131,193,168,221, 99,171, 22,180,226, 80,194, 69, 86, 31,196,202,125, +206,195, 40,100,181, 92, 98,208,132, 81,228, 10,198,178,112, 74,254,178,108,197,164, 13, 83,195,104,183, 58,244,234, 60, 0,223, +115, 99,122,165, 84,173, 9, 18,132, 65,216, 30,156,205,116, 0,220, 46,188, 33, 50,118, 27, 59, 7, 75,146, 45,235, 65,213,212, +203, 46,222,148,110,134, 0,174, 72,119, 5,129, 43,106,203,210, 61,175,253,189,189, 90,137,239, 49, 28, 12,241,189,128,233,116, +159,183,223,250, 30, 22, 7,239,217,178,187,117,238,247, 2,182, 58,112,185, 11,138,213, 82, 52, 55, 0, 81,157,169,200, 26,163, + 43, 58, 19, 97,185,211, 10,190, 57, 62, 95,119,246,114,235, 96,223,164,186,174,167, 30,245,121, 42,215,193,104,219, 93,126,141, +228, 61, 58,123,252,254, 38, 67,183,139,116,221, 52,235, 99, 55, 83,103,100, 93,223,219,118,212,222, 30,170,178, 17,186,245,115, +177,187,104,215,238, 1,209,189,232,118, 35,241, 6,182,233,115,155, 47,144,221,129,139,125, 8,133,186, 57, 62,233, 29,104, 64, + 49,187,197, 23,174, 3,204,235,124, 99,223, 87, 8,235,142,149,189,209, 0,141,192,147,170, 78,238, 18, 40,207, 39, 45, 50,146, +162,112, 2,169,250,102, 46,133,170, 87, 9, 22, 93, 57, 33, 95, 94, 58,102,188, 95, 91, 72,226, 56,116, 89,202,198,214, 42,211, +178, 61, 80,181, 53,104, 99,169,180,198,151, 30,202,115,100, 51, 99, 44,131, 56,100,190,202, 16,128, 39, 85, 13, 47,113,147,149, +178,172, 8,133, 70, 6, 49, 70,249,237,184,171, 65,124,110, 42, 86, 91,223,105,151,112,214, 69, 4, 75,241, 32, 22,214, 62, 56, + 42,223,238,226,191, 45,207,189,251,126,144, 86,244, 68,171,178,254,255, 70,180,199, 58,170,161, 54, 33, 24,140,198,140, 6, 35, + 60,165, 72,107,171, 18,214,137, 11,253, 26,180, 98,172,187, 1, 87,122,125,168,187,235,220,221,249, 59,165,111, 24, 69, 28,236, + 31,112,125,115,133, 87,187, 23,180,214,220,207,102, 88, 93, 57, 56, 72,253, 53,112, 57,228,182,190,217, 53, 31, 88,207,243, 92, + 50, 87,237, 47,182,181,127,157,206,180,161,153, 32, 24,107,208, 90, 83, 22,133, 75,208,234, 60,167, 40,142, 9,194, 33, 86,152, + 26,121,107,218,207,226,104, 56,100, 56, 24, 33,132,106,111,122,206, 2,167,137,135, 3,132,167, 8,163, 24, 93,150,109,144, 77, +243,250,103,105, 74,150,101, 4, 65,204,171,235, 87,220,222,222,112,125,125,197,237,236,158, 36, 77,249,209, 15,127,200,155,175, +191,197, 31,254,193, 79,120,246,248, 9,191,255,251, 63,226,135, 63,248, 33,167,199,167,204,102, 51,198,227, 17,127,240,195,223, +103, 60, 25,243,233,103,159,241,217, 39,159, 33,165, 32,207, 51,246,246,247,209, 70,115,117,121, 1,104,150,203, 37,161, 23,128, + 82,124,246,255,179,246,102,189,146, 36,105,122,222, 99,102,190,198,122,246,220, 51,171, 42,107,237,233,158,158, 25,129, 67,145, + 0, 5, 2, 18, 68,137,146, 40,232, 66,208,223,169, 31, 38,128, 23, 18, 1,174,226, 76, 47,211,211,221,181,103,101,229,114,214, + 88,125, 49, 55, 51, 93,152,185,135, 71,156, 56, 89,213, 67, 38, 80,168, 92,206,137, 19,139,187,153,125,223,247,190,207,251,205, +183,252,236,147, 79,168,173,225,225,147,143,248,207,255,233,223,163,235,146,251, 15,159,240,250,205, 43,156, 46,113,194,240,228, +233,251, 60,120,244, 30,200,132,241,244,144, 31, 94,190,224,225,189,251,212,117,197,112,152, 51, 24, 12,137,162,132, 52, 27, 83, + 55, 21, 85, 85, 19, 39, 57,179,155, 75,138,213, 18, 41, 29, 38,140, 88, 6,163, 41, 82, 70, 56,171, 25, 14,125,120,210,193,225, + 1,149,174, 40, 10,223,225,113,214,145,103, 3,210, 44, 13,155,144,162, 44, 43, 46,206, 95, 83,172,151,157,245,113,247,186,142, +162,144,132,103,124, 50,155,174, 75, 34, 37,145,137,167,248, 21,171,101,184, 78,156, 79, 73,171, 52,214, 56, 6,227, 9, 73,150, + 83,213,254,122, 77, 18, 47, 92, 43,171,130, 56, 29,240,240,201,251,100,195, 33,197,114, 65, 89,174,209,186, 4, 33, 56, 58, 60, +102, 62, 95, 96,106,239,153, 55,109, 39,205, 17,210,226,252,245,145,166,158, 54, 23, 69, 17,167,103,247,252, 99,132, 14, 65, 93, +173,125,146, 97,234,227, 87,163,208,169,240,140, 3, 15,134,137,226,212,103, 25,132, 14,150,117, 94,173, 46,216,172, 37,237, 1, + 71,132,217,251, 22,220,201, 57,132, 80, 91,236, 6,217,131,127,245, 25,243,214,217, 0, 53,235,217,221,130,114,126,177, 88,146, +103, 41,147,241,216,175,207,129,251, 33,112,100,105,202,147,199,143,121,250,228, 49,243,249,156,170,174,182,168,119,187,145,211, +125,150,194,166,115, 41,187,113, 94,127,230,125, 11,224, 42,196, 45,116,122,191,165,222,230,190,239,182,218, 69, 15,106,214,111, +153,239, 35,185,138, 29,130,221, 46,255,253,199,126,169,211, 7,143, 62,223,246, 44,111, 4, 3,174, 39,130,219,187, 88,139,150, +148,179, 33,225,244,197, 0,125, 65,219, 86,208,251, 46,219,187,223,222,216,217,192,183,232,103,189, 13,126,175, 32,171,103,197, +234, 51,197,119,255,189, 31,114,225,110, 5,101,248, 19, 71, 61,191, 33,114, 6,139,175,148,117, 32,192, 73, 33, 48,206, 48, 30, + 12, 54,237, 98, 9, 89, 20, 83, 7,200,204,178, 40,186,121, 78, 39, 50,147, 97, 76, 16,132,111,198,134,205, 38,248, 77,179, 56, + 38, 86, 81,168,218,124,101,223,182,238, 29,208, 24, 63, 43, 83,225, 98,106,137,116,177, 82,204,215, 85,184,184, 19,100,164, 80, +194, 31, 54,138,170, 34,143, 35, 18, 5,100, 99,154,214, 25,208,211, 23,244, 49,141,173, 34,190, 29,103,184,157,175, 19,251,236, +169,123, 54,248,253,123,245,221,214, 55,238,208,128,246,231,255,221,130,213,227,218, 11, 54,180, 53,235, 44,131,225,136,201,116, + 74,150,196,172, 2,133,175,174,170, 45,139,136,105,250,193, 46, 97,166,110,217,130,234,180, 35,161,241,228,128,233,116, 18, 42, + 0,207, 25,168,117, 77,177,246,143,221,175,246,187,113,147,219, 8,238, 60,158,214,171,130, 93,103,241,220,121, 95,108,247,195, +183, 25, 11,225, 58, 86, 50,176,220,235,154,170,244, 10,232,118, 83,246, 36, 47, 67, 89,149, 20,197,202,183,221,237,230,121, 17, + 64, 52,117, 85,121, 47,114,103, 73, 12,135,197,198,208, 52,154,178, 44,184,190,190,192, 26,199,112, 60, 37, 73,115,148,140, 40, +171,154,217,124,134, 19,146, 95,255,234,111,249,237,239,126,203, 31,254,240, 7,190,250,230, 43,234, 90,243, 47,255,231,255, 21, +169, 98,190,123,249,146,183,111,222,240,155,223,254,138,213,114, 65,154,229, 56,103, 25,143, 70,200, 40, 38, 82,138,198, 88,198, +227, 3, 14,142,143,121,245,234, 7,242, 60,103,185,152,241,230,213, 15,188,126,253, 61,215, 87, 23, 52,186,241, 12,114,163, 73, +211,156,179,251,247,120,242,248,125,190,249,234,119,164, 73,202,239,126,251, 43,234,178,160,172, 10,242, 97, 78, 62, 26, 81,149, + 53,113,156, 50,187,185,160,169, 52,247, 30, 62, 98, 52,153, 50,187,122, 75, 99, 60, 24,106, 52, 57, 98, 60,158,176, 92,205,176, +117, 69, 83, 87, 12,134, 67,178,108, 64, 50, 24, 19, 39, 25,117, 89, 96,234,130, 52, 29, 4,157,134,255,188,138,162,160,152, 47, +112,166,233,172,144,237,129,104,195,246, 87, 93,149, 78,207, 78,101,140, 1,107,136, 98,143, 93,213,186,234,173, 57, 14,103, 27, +116, 85,122,246, 68, 18,211,232,198, 11,104,211, 4, 93, 87,212, 85,193,252,250, 2, 39, 28, 7, 7, 71, 68, 73,236, 41,107,166, +166, 40, 43,226, 44,195, 4, 1, 93,235, 54, 82,173, 48,214,181,192, 26, 47, 34,172, 10, 47,230, 59, 60, 58, 97,189, 90, 98, 77, +133,181, 26, 93,149, 84,101,129,181, 58,160,100,227, 45,113,172,179, 22,164, 36,137,211, 46,110,216, 5, 13, 65,187,198,251, 60, + 1,213, 85,159, 27, 62,136,235,249,191,183, 57, 25,155, 10,157, 14,125,220,222,131,109,128,139, 9,152,109, 33,252,123, 91,148, + 37,227,201,196, 67,187,146,184,187,206,155,208, 69,157, 78,167,124,250,201, 39, 12,242,156,235,235,155,174, 67,183,141,184,149, +219,156,246,221, 76,134, 30,226,124, 83, 33,111,207,188,219,145,194, 62, 84,107,159,193,190,251,189,187,170,247,254,207,216,142, + 95,221,142, 59,183, 93,231,251, 86,138,250,222, 49,178, 58,185,247,224,243, 45,203, 80, 63, 14, 85,128, 21, 2, 39,219, 40,235, +158,215, 92,108, 22, 88,217, 35,199,109, 69,224,137, 13,199,125, 43,131,123, 87,128,176, 11,148,233,219,212,118, 15, 4, 59,129, + 31, 91,167,175,222,233,143, 61, 39,171,189, 27, 74, 79, 92,215, 86,170,210, 65,181,184, 33,178,218, 87, 70,134, 0,128, 9,226, +132,144, 50, 20, 69, 50,180,123,107,210, 36,101, 89,174,137,227,136,197,218,207, 6, 85, 20,170,245, 62, 34,176,219,172,131,136, + 4, 65, 18,218,225,121,150, 97,157,223,200, 35,229,193, 51,173,162,217, 9,137,174,117,152,113,249,118,177,138, 4, 77,171,124, +118,134, 36, 73, 72,218, 25,176,104,209,181,134, 65, 20,129,140,176, 81,130,108, 1, 42, 93, 55, 69,110, 57, 4,218,138, 92, 73, +117, 43,170,214,237,232, 19,246,217, 47,222,181, 97,255, 73,195,162, 77, 93,187,213,197, 49, 61,107,135, 12,218,190, 56,242,175, + 53,138, 99, 38,147, 3, 38,163, 33,171,245, 26, 1, 44,151, 43,226,128, 62, 77,147, 4, 93, 85, 88,139,239,152, 56,131,181,155, +249,223, 22,209, 73, 72, 70,227, 17,195,225,152,186, 46,168,171, 10, 37, 37,101, 81,110,161,101,251,215, 91, 91,241,251,245,212, + 32,148, 98, 56, 28,128, 84, 56,172,231,209,247, 94,205, 22,175,161,151, 52,213,249,225, 67,232,134,107,173,151, 97, 83, 30,140, +199, 76,167, 71,216,208,133,112, 29, 25, 79,108, 97, 60,165,148,189,120, 89, 75,146, 14, 56, 60,185,199,217,253,167, 60,124,242, +148,170, 46,208,218,240,179,207,126,206,228,224,136,203,171,183, 44,102, 55,172,150, 11,138,178,228,224,224, 16, 93, 55,140, 71, + 67,150,203, 57,127,254,139, 95,240,222,179,247, 89,172,150, 56, 33,248,219, 95,253,154,255,239, 63,254, 59,192,241,213,215, 95, +114,125,125, 73,173,107,202, 98,205,225,193, 1,203,117,201,131,251,143,176,182, 6, 20, 63,251,197, 95,240,237, 87, 95,114,112, + 56, 33, 73,114,158, 61,251,128,197,122,193,100, 52,226,205, 15, 47, 25,140,189, 82,222, 90, 7, 86,115,118,250,144,191,254,199, +255,132, 39,239,125, 72, 85,174,121,245,242, 37,186, 90, 3,146, 39, 31, 60,231,233, 7,159, 98,116,195,213,205, 5,105, 54, 2, +107,209, 6,214,139,153,111, 5, 3, 89, 18,209,132,238, 69,150,229, 68, 42,241, 25, 21,145, 32,205,134, 92,157,159, 99, 27, 77, + 54, 24, 16, 39, 57, 73,158, 67, 96, 94,172,139, 21,117, 93,123,187,109,111, 19,223, 87,169,155, 0,150,138,162,222,193, 60,140, + 87, 92, 99, 57,185,247, 0, 2,120, 42,244,151, 59,222, 71,163,117,103,250,145, 82, 49, 28,142,168,107, 63, 62,241,243,237,146, +186,172, 49,214,242,222, 7, 31, 19,197, 9,101, 85,226,108,195,120,122, 72, 85,215,222,166, 25, 92, 43, 42,216, 48,227, 40, 70, +201, 24,107, 27,210, 44,167, 44,215,168, 16, 32,179, 90,249,241,145,103, 7, 9,140,174, 89, 47,231,161, 45, 31, 97,154,154, 90, +215, 33,215, 96,115,192,151, 81,180, 1,126, 25,211, 85,248, 66,138,206, 63,238, 83,216, 98,223,165, 84, 81, 24,233,182,149,108, + 72, 18, 84,170,107, 35,187,174,251,219,178, 39,252, 46, 36,163,136,198, 52,196,145,167,114,214,218,107, 92,242,225,144,162, 44, +136,147, 24, 33,101,120,253, 34,196,201, 42, 30, 62,120,192, 71, 31,125,136,214,154,197, 98,233, 55,205, 94,231,113, 27,144,211, +227,200,137,221, 49,226,110,209,178,217,148, 55,224, 24,215,251,189,216, 17,188,201,157, 42, 91,236,153,137,203,157, 65,177,184, +109,111,163, 77,138,235, 63, 38,123,162, 87,131,250,253,228,254,195,207,251,234,196, 62,202, 85, 32, 66,248,138, 64,237,196,209, +209, 83,165, 75,183,253,103,130, 26,189, 13,120, 80,189,196, 42,217,251,189,216,215,198,237,205,115,247, 81,128,118, 55,249,125, +213,250,238,247,118, 72,212, 29,165,226, 93, 45, 98, 1, 84,203, 5,137, 51, 8,225,208,218, 35, 30, 61, 41,203,191,177,214, 88, +198,227, 1,194, 66, 19,108, 38, 34,140, 40, 42,173,169,170,186,219,128, 77, 99,186,246,187, 16,130,166,177,212,181, 38, 77,162, + 32, 44,145, 72, 9,121,150, 6,246,186, 64, 74,207, 9,119,132,214,123,216,188, 85,248,112,253,252, 85, 80,149,154, 60, 75,136, +147, 20, 93,105,242,220, 31, 12,146,216,135, 70, 84, 77, 77,158,100, 72,103,168,179, 1, 22,185, 53,153,112, 45, 77,174,151,223, +173,164,218, 68,150, 56,186,170,165, 63,107,119, 63,161,234,254, 41,115,244,159,188,215,119,212,227,109, 75,155, 20, 27,108, 43, +194,227,118,239,157,158,114, 51,155,161,164,240,202,109,229, 59, 38, 90,111,194, 34,188, 72, 48,116, 66,220,238,248, 32,220, 28, + 73,194,120, 60,233, 68, 80,214, 90,170,186, 14, 16, 33,219,107,195,169,176,152,247,104,249,194, 11, 26,199,211, 41,105,154, 99, +117,229,169,113, 93,170,209,118, 95,162, 61, 60,181,149,187,195, 11, 54,219,217,165,181,126, 1, 77,211, 20,129,135,227, 76,167, + 99,156, 16,228, 89,238, 29, 40,248,113, 81, 59, 11, 54, 54,240,182, 67,171, 79, 55, 21,203,245,140,217,213, 57, 87, 23, 87,100, +105,198,199,159,253,156,175,191,250,146, 90,107,158, 62,126,159, 56, 77,200,243, 33,159,125,250, 51,116,221,112,118,118, 76, 44, + 21, 7, 71,199,252,234, 87,191,226,215,191,253, 53,151,151, 23,212,141, 99, 93, 22, 72, 97,249,234,171, 47, 88, 46, 87,172,215, +171, 78, 31,176, 90, 47, 48, 22, 62,251,179, 95, 80, 21, 5, 31,125,252, 25,117, 83,161, 34,197,122, 89,113,115,249,154,124,144, +243,151,127,241, 79,185,188,126,203,186,172,249,248,147, 79,185,184,184,228,205,155,151,156,157,221,231,231, 63,255, 37, 95,252, +241,239,249,221,111,127,205, 71, 31,255,210,211,238, 98,129,138, 4, 55,215,215,188,254,225, 37,243,155, 11, 38,147, 3,156, 53, + 20,235, 2,219,212,126, 99,202, 6,188,255,201,159, 19, 7,226,163, 84,138,108,144, 83,150, 5,145,138,153, 78, 15, 24, 12, 70, + 56,231,168,214, 11,210, 60, 69,169,152,217,205, 13,229,106, 21,102,207,126, 70,221,244,236, 99,251, 72,138,253, 3,158, 9, 27, +157,255,204,124,127, 75,235,138,229,108,142,140, 99,210,124, 16, 62, 99,187, 9, 39,106,161, 94, 66,224, 76,131,110, 12,103,247, + 31, 81, 87, 37,182,241, 40, 97,163, 45, 72,193,252,250,138, 36,205, 56, 61,187, 79,146,100,172, 86, 43,142, 79,239, 83,174, 87, +152,208,146, 54,198,120,205,129, 49, 12,134, 35, 42,237,181, 37, 82, 69,172,151,115,142, 78,206,130, 42, 61, 64,165, 48,158,201, + 97, 27,172, 53,161, 35,228,136,226,152,186,172,168,170, 2, 23,132,168, 42, 28, 20,165,128, 56,138,252,193, 3, 95,161,183, 7, + 41, 23,144,214,174,199, 59,161,171,154, 55, 27,163, 82, 81,111, 99,221, 84,249,221, 90, 35, 36,113, 18,227, 44,157, 21,112, 93, + 20, 76, 38, 83,178, 44,245, 7,164, 32, 34,181,214, 47, 6, 38,160,122,211, 36,227,131,247,223,227,193,131,251,220,204,102,232, +186,190, 67, 28, 45,119, 90,233,155, 13, 95,202,126,251, 92,222,106,187,111,185,130,220,109,144, 76,255,235,247, 71,151,139,173, +141,255, 78,191,124, 55,203,151,239,104,197,111, 14, 5,234,244,193,147,207,219, 50,187,221,208,157, 0, 23,132,108,109, 11,193, +249, 96,103, 63, 11, 87, 1, 78,210, 62, 65, 37, 59, 59, 90,255, 24,178,185,232,217, 18, 60,237,206,175,247,218,153,250,176,152, + 94, 26,206,150,215,125,135, 59,204, 30, 15,244,222,159,197,237, 12,222,173,167, 34,160, 41, 11, 98, 83,248,180, 36, 99,169, 42, +141, 67,146, 70, 10,107,124,133, 52, 28,166,126,102, 23, 54, 93, 31,193,168, 49,182, 97, 85,214,157,255,210, 26, 19,102,236, 30, +154, 99,156,163,214, 77, 7,187,113,206,144, 40,143, 14,141,133, 12,169, 92, 34,204, 38,189,160,206, 6,224,135,117, 22,148,215, +230,250,196, 49,235,103, 77,249,128,249,106,197, 52,132,126,200,150,146,214, 42,241,157, 37,206,198,212, 50,234,154,233,162,143, +245,140,162, 96,241,234, 7,181,136, 46, 55, 56,138, 34,232, 71,219,222, 77, 64,248,105,246,181,159, 90,181,183,214,157,246,112, +209,205,219, 55,183, 65,235,153,141, 84,204,244,224,128, 40,142,168,202,181,111, 63,215,117,168, 32,252, 34,214, 88,131,176,206, +119, 63,218, 32,138, 91, 27,123,168, 42, 34,229, 5, 57,113, 68, 89,150, 8, 28, 85, 89, 81, 5, 5,187, 64, 32,226,136,127,244, +143,255, 25,149,174,137,147, 8,215, 85,202,144, 68, 49,101, 81, 48,200, 51,234,218,163, 96, 55, 99,173,219, 17,140,119,225,117, + 59,122,162,179,158, 64, 87, 85, 52,186,102,181, 92,133,131,130, 67,197, 49,195,209,196, 87,122,163, 17,227,241, 1, 89,158,115, +112,120, 68,146,166,222,171, 47, 68, 72,244,244,148, 48, 93, 87, 20,235, 21,179,217, 53,235,229,130,139,139,215,222,255,107, 45, +200,136,147,147, 99, 94,191,126,195,155,243, 31,248,246,197,247,220, 92, 95, 34, 84,194,123,207, 63,230,226,237,107, 14, 15, 14, +184,188,120,195,197,197, 27,214, 33,173,206,152,141,154,191, 13,181,121,244,244, 17,139,155, 57, 23,231,111,120,249,242, 37,143, +159, 62, 38,203,199,124,242,209, 39,188,120,241, 13,135,135,167, 20,101,201,197,249, 91,174, 47, 94,131,115,100, 89, 76, 89,173, +124,199, 40, 78,185,153,207,248,237,175,255, 3, 87,151,151,152, 70, 83, 87,107,176,154,241,248,128,195,227, 83,166,135,199,212, + 85, 69, 20, 39,228,121, 78,158, 14,120,251,230,165,255, 58,103,144, 24,214,235, 34, 20, 25, 80, 87,126,110, 45,144, 12,167, 39, + 28, 28, 63,224,205, 15,223, 81,172, 23, 52, 77,229,181, 9,113,140,214, 53, 66, 73, 79, 36,252,137, 7,213,205,230,222,182,148, + 45, 4, 11,101,172,164, 15,163,177,198,127,238,214, 7, 71,121,235, 24,225, 94,111, 40,203,130,124, 48,244, 29,189, 90, 3,214, + 67,135,132,101,181, 92,112,115,117,137,214, 21, 89,150,179, 42, 86, 28, 28,158, 80,149,101,152, 89,199, 33,237,209, 81,235, 53, + 73,146, 34, 4,212, 85, 65, 20, 90,221,195,209, 56,112, 28, 82,170,170,161,177, 13,178, 69,207,226, 19,226,234, 96,227, 27,164, + 41, 56, 40,214, 43,180, 14,174, 8,229,173,207, 73,146, 6, 97,116,171,147,242,218,151, 22, 21, 76,111,147,110, 87,238,118,116, +212,218,164,219, 14,174,255,108, 54,235,177,117, 14, 33, 35,111,227, 85, 18, 33, 21,141, 54,212,101,201,120, 56,242,196, 69, 93, +183,246, 42,170,186, 38, 86, 17,105,154,117,123,197,193,244,128,159,125,246, 25, 89,150,118,160,165,246, 32, 46,164,232, 10,175, +190,207,124,211, 26,151,123,219,229,219,159,187,232,197,203,238,232,182,228,174, 21,188,159,118,119,219,255, 46,118,132,120,155, + 74,188, 83,224,252,232,127, 66,128, 58,189,255,232,243,190, 16,174,171,132,101, 63,102, 46, 0, 2,194,194, 40,182,212,229,219, +200, 59,209, 11, 6,217, 40,165,221, 45,117,244,173,197,123,199, 67, 46,238,192,237,245, 99, 65,247, 65, 78, 68,111, 94,190,219, + 18,126,151,135,250, 22,221,204, 52,136,114,137, 20, 14,221, 24,143,156, 12,173,222,198, 88,140,115, 36,145, 10,252,118,104,172, +103,137, 23,117,137,115,142, 82,155,110, 86,234, 79,197,173, 82,213, 97,157,160,214, 77,184,169, 98,116,211, 16, 71, 49,145,146, +164,113,220,165,164,201,224,109,111, 76,131,177, 46, 84,153,174,227, 37,183,152,197,201,104, 72,170, 20,235, 74, 51,200, 34, 44, +210, 87,235, 42, 66, 7,123,160,140, 18,136, 34,154, 40,233,230, 51,157,122,183, 21,193,216, 94,196,210, 14, 8,102, 75, 9,191, +163, 71,184, 75, 48,119, 23,132,230, 93,112,154,125, 51,251,190, 13,210,237,138, 42, 67, 32,138,181, 22,161, 36, 71,199,199,104, +173, 73, 19,207, 49,183,237,251,215, 5,186, 88,191,105, 9,129,179,166,107,240,239,182,224,109, 88,224,226, 56, 97, 56,204,195, + 99, 53,172, 86,235, 48, 67,244,130,158, 65,150,241,195,247, 47, 88, 45,231, 84,107,111, 43, 26, 14, 7,104,173,201,179,140,241, +100, 66,150,166,158,239, 94,235,206,134,215,130, 56,228,158,247,205,221,161, 87,216,103,255,243,240, 19, 77, 93,150, 20,235,133, +143,249,172, 86, 20,197,154,170, 42, 88,174, 86, 24,107, 56, 62,189,199,253, 71,207, 24, 31, 28,113,114,116,234,175, 37, 44,165, +174, 72,243, 28, 43, 36, 42,188, 39,101, 85, 82,213, 53, 95,127,245, 5,243,155, 43,138, 74,115,118,246,200, 31,144,176,188,250, +254, 91, 78, 15, 39, 20,171, 5,111,207,223, 82, 20, 30,208, 82,215,218,111, 64,198, 34, 84, 68,146,230, 28, 30, 31,243,191,255, +111,255, 23,223,190,248, 22,211,212,156,158,156, 49, 24, 77, 61, 11, 61, 31,147,229, 41, 23,231,111,249,234,139,223, 19,199, 49, +171, 85,193,131,135,143, 56, 58, 56,225,147,207,126,193,239,255,240, 43,150,243, 37, 63,124,247, 53,139,155, 27, 76,173,105, 2, +112,198, 31,246,161, 42, 11, 26,235,168,214, 43, 38,135, 39, 60,126,246,156,171,171, 11, 22, 55,151, 72,169, 24,140, 38, 24,237, +117, 5,211,201, 33,206, 9,174,175,223,226,172, 99,185, 90,114,254,250,123,174,175, 47,124,165,105,125, 90,158,138, 20,117,173, + 3, 31, 66,221,218,212,239, 74, 36,220, 93, 83,218, 80,148,206,122, 27, 20,230,198,154,142,219,213,138, 97,189, 5,209, 59, 31, +108,211, 80,215,254,122,114,198,110, 21, 28,113,146,146,231, 3,170,170,166,169, 27, 6, 89, 74, 99,106,142, 79,238,147, 37, 25, +168,136,135, 79,159,146,230, 3, 76, 99,177, 66, 34,218, 14,169,107,109,104, 2, 21, 39, 72, 41, 73,179,156, 36, 27, 4, 33,168, +221,154, 37, 91,235, 40,203,181,207, 59,200, 7,222,214, 91,107,154, 70, 19, 71,113,199, 8,145, 1,138,213,229, 67,116, 99,215, +182, 83, 26,196,194,206,110,181,183,219, 49,197,238, 6,218,102,134, 24,227, 45,139,198,250,194, 72, 55, 13,101, 85, 49,153,140, +201,210, 20,132, 87,201,107,237,115, 54, 84, 79,160,218,178, 75,112,112,255,222,125, 62,249,228, 83,138,162, 96,181, 90,117,250, +168,182,149,238,246,242,215, 55, 0, 27, 21,121,215,144,216,219,249,221,165,196,237, 48,105,183,146, 50,183, 71,110,109, 86,202, +173,172,247,173,199,185,195, 38, 44,229,173, 34,218, 1,234,236,193,227,207,183, 12,249, 97,131,117, 98,147,143,220,253, 95,169, +141, 80,109, 55, 33,103, 75, 17,191,227,237,107,177,124, 33,183,119,223, 12, 85,238, 8,218,216,121, 73,251, 80,125,110, 15,127, + 92,220,177,129,236, 99,145,223, 69, 56,107, 83,228,154,229, 53,177,128,166,241,155,184,177,142, 72,121,174,187, 9,201, 73,227, +161,207, 77, 54,129,215,222, 88, 95,165,232,198,208, 52,182,203,205,182, 29,149,207, 39,186,185,208,154,243,161, 30, 46,156,122, + 37, 89,136,133,140, 66, 86,184, 49,155,138, 82, 7,197,188, 15, 41,233,228, 54,140,179,140, 56,137,169,117, 77,146, 36, 84, 33, +227,189,109,135, 33, 64,198, 57, 38, 78, 17,217, 32,224, 75,125, 86,186,106, 45,110,253,174, 70,231, 77,119,157,184,175, 59, 28, +253, 72, 64,203, 93, 27,247,143, 85,238, 91, 7,197,190,155,161,167,152, 19,110,179,176,181, 28,133, 22,124,209,182,125,199,147, + 41,186,169, 57,152, 76, 89, 23, 69, 0,135,148, 93,197,107,173,243,121,243,206,117,212,188,246,101,109, 64, 52,110,171, 19,116, +124,116, 72, 81,172, 49,141,102,185, 92,119,190,221,182,194,111, 26,237, 15, 93,206, 4,248,199, 6, 78, 82, 55,134, 7, 15, 31, + 83, 55,154,117,177,246, 29,151, 61,226,206, 31,179, 2,238,251,251, 62,252, 36,196,174, 35, 66, 88, 71, 62, 24,161,155, 26,163, +107,140, 54,204,231,115,174,222,190, 97,118,245,150,171,235,115,180,209,124,240,252, 57,143, 31,191,135, 16,138,147,163, 99,127, +200, 76, 18,164, 20,148,235,181,183,213, 57,139,112,150,171,171, 43,202,114, 78, 93,148,188,247,244, 9,211,201,148,175,191,252, +146,178,170,152,205,102,232,178,194,234,166,187, 62, 84, 20,161, 84,140,138, 99, 30, 62,126,204, 31,255,240, 7,206,206,238, 99, + 29,220, 92,159,123,240,138,178,172, 43,195, 55, 95,125,201,241,233, 61, 62,252,240, 19,170,170, 96,189, 90, 96,117, 65,101, 52, +167,167, 79, 1,193,235,215, 63,132, 4, 52,159, 49, 30,199, 17,121,158,113,239,254, 99,134,147, 3,142,142,239,163, 77, 67,150, +166,252,254, 55,191, 66,151, 75,226, 56,162,174, 11,226, 52,231,232,248, 30,171,213, 2,211,104, 31,232, 99, 44,186, 44,209,117, +137, 8,122,150,186,170,136, 84, 16,102,105, 15, 13, 18, 97,227,181,198,254,120, 62,198, 59,216, 13,237,230,230,239, 33, 75, 54, + 24,162,181,233,218,240,161,111, 29,192, 47, 73,167,165,240,215,152,237, 54,134, 72, 74,178,124, 72, 58, 24,115,120,116,204, 96, + 52,198, 88,195,122, 54, 99, 54,191,164, 40, 10,226, 56, 70,169, 8,173, 27, 14, 14, 15,121,250,254,115, 14, 14, 78,144,202,143, +163,192,119, 10, 99, 21,177,154, 95,147,100, 25,214,193,116,114,128, 84,138,166,169,169,171, 34, 68, 1,251, 77,183,105, 60, 64, + 41,105, 81,180,218, 80, 87,229,166,219, 23,249,110, 67,155, 88, 25, 71,202, 87,238, 1, 51,190,219, 21,245, 21,122, 27,226, 34, +183,196,172,109,134, 72,183,131, 4,236,108,227, 12, 66, 18,128, 73, 13,207, 63,248, 0,173, 75,207,182,143,146,238,125,202,178, + 44,132, 15,169, 32, 28,244,157,200, 52, 78,248,240,249,115,206, 78, 79,185,188,184,244,221, 20, 41,182, 50, 49, 90,196,242,174, +114,254, 86,212,170,144, 91, 84,183,109,178,155,236,189,214,125, 24,246,237, 25,120, 43,164, 22,130,157,245,181,127, 0,216, 9, +227,146,189,238, 64, 95,128,238,219,239,143, 63,223, 66,227, 9,182, 44, 77, 91,133,255, 45, 49,145,216,218,140,251,204, 92,185, +139,255, 20,155,147,196,173,182, 57,123,120,251,253, 96,249,222, 98,191,111,158,181,187,113,247,193, 6,187,127,222,215,150,191, + 5,160, 9,234,203,122, 49, 35,197, 3, 90,234,166,217, 92,172,182,193, 58,129,179,142, 44,141, 59, 32, 65,165, 53,198, 26,175, +110, 55,173, 60,206, 33,149, 12,254,104,225, 47,206,198,118, 51,107,107, 44,105, 26,211,104, 77, 26, 43,178, 36,241, 80,135,112, +131, 8, 65,136,190,244,182, 58, 4, 33,206,181, 9,213,165,111,191, 71, 81,228,219,176, 66, 81,212, 21, 81,184,176,148, 82, 62, +171, 59, 78, 40,162, 28, 68,220,113,244,237, 86, 16, 67,175,179, 18, 14, 4, 74, 41,127,163,246, 85,160,189,228,187, 63,181,213, +254, 46,133,252, 93,234,248,190,234, 94,182,215,142,216,109, 91,109, 70, 41,163,201, 20,112, 28, 77, 15, 41, 74,239, 66, 40,214, +235,237, 14,142,117,221, 76,189,221,200,187, 67, 82,248,115, 55,238,145,146,163,195, 3,138, 98, 29,178,219, 43,166,147,105,183, + 24,153, 64,169,179,193, 98,214, 46,224, 77, 99, 66, 21,148, 18, 69, 49,195, 65,198,229,229,149,175,186, 92, 63,171,198,117,130, + 79,223, 18,108,103,224,238,142, 9,149,219, 11,222,235,235, 93,156,181, 84, 85,133, 64,118,223, 19,199, 49,113,150,130,244,213, +134,107, 26, 46, 47, 46,120,245,242,123,230, 55, 87,204,174,175, 56, 62, 59, 67, 42,201,112,120,192,179, 15, 62,102, 56, 26,249, + 22,125, 81, 4,174,185, 63,224, 44,151,115, 94,124,255,130,155,229,156,229,114,137, 46,252,204,182,207,136,104, 85,211,214,129, +138, 21, 2,197,195, 71,143,248,242,143,191,101,185, 88, 18,165, 25,177, 74,248,230,219, 63,226,140,163,210, 53, 95,127,245,123, + 26, 93, 99, 12, 12,135, 67, 38,211, 67, 22,243, 27,190,248,226,239,249,235,127,242,207,137,147, 20,107,106,140,109,176, 97, 3, +127,246,252, 51,254,197,255,242,175,104,140,101,185,156,243,246,245, 75,214,235, 25,206, 25,143, 82, 21,158,119,176, 94,205, 25, + 13, 50,164, 84,212,193,247, 60, 26, 29,122, 23, 68,128,198, 88,211,208, 52,126,140, 99,130,162,218, 89,211,241,197,255, 11,103, + 73,155,145, 86,135,206, 86, 29,112,168,223, 53,235, 23, 43,113,146,144, 14, 71,216,198,116,207,197,143, 77,150, 44,102,215, 44, + 23,215, 84,197,138, 56,205, 25, 14, 71,126,236,147,166,172, 86, 11,150,203, 57,139,235,107,110,174, 47,201,135, 35,162, 56,229, +228,244, 30, 54,204,240,149,138, 56, 58,187,199,213,197, 57,113,176,193,198, 73, 74,146, 15, 25,142, 14, 88, 45, 22, 33, 75, 61, +204,190, 3, 38,216, 90,195,112, 52, 36, 73, 18,214,101,217,117, 77,218, 46, 64,176,209,128,148,193,118,234,239, 47,175, 11,217, +245,182,200, 13, 42,118,199,194,220,189,229,206, 98,156, 71,139, 19,116, 7,101, 81, 96,149,226,253,103,207,188, 59, 68,215, 8, + 33, 25, 13,199, 29,214, 55,138,163, 14,236, 37,216,116, 13, 14,167, 7,252,236,179, 79,113,206,113, 51,155,109,145, 71, 85,191, +250, 21,183, 99,199,239,238, 39,246,254,174,179,194,137,158, 72,112,191,194,125, 11, 88,227,122, 92, 14, 17, 60,225, 61, 92,251, +214,127,123, 58,221,109,107,196,111,234, 98, 51,241,112, 65,120,100,119,105,179, 61,165,174,236,183,185,119, 79,170, 59, 76,220, + 93, 95,185, 82,170,179,105,177,131,114,165,183,217,190,139,183,179,111,115,127, 87,187,242,199,236, 86,251,170, 69, 39,192,148, + 5,202,212,128,111,151,219,150,144,212,170,141,133, 64, 5, 43, 89,203,223, 6, 17, 96, 14,190, 26, 20,110, 67,165,242, 10, 70, + 25, 44,109, 22, 21,137, 14,163,104,141,207,229, 78,162,136, 44, 75, 67,176,130,247,156,215,141,199, 75, 86,181,175,132,226, 36, + 9,216, 90,255,134,231, 89, 74, 18, 5, 18,159,243,115, 99,137,159, 27,169, 22, 46,225, 44,201,241,125, 76,152,141,119, 23, 23, +219,240,159,173,207,213,185,222, 66,195,237, 48,131, 61, 66,198,126,123,254,199, 48,177,123, 69,144, 59,156, 2,209, 35, 64,137, + 96,237,176,173, 51,130,254,117,238, 95,207,104, 52, 97, 93,172,121,112,255, 62,203,229,146, 36, 73, 40,202,181,135,103,224, 69, +139, 88,215, 5,232,180,168,216, 77,197,238,122,158,219,136, 44,120,213,139, 98, 29, 90,189, 53,243,229, 44,128,103, 84,151,188, +183, 11,212,232,172,130, 45, 88, 83, 56, 86,203,213, 70, 73,220,187,184, 59,244,110,143, 71, 45,149,242, 99, 18,193, 45,206,126, +127, 51,223,188,157,225, 53,180, 62,249,176, 24,182, 11,140, 53,214, 43,255,155, 86, 28,104,131,214, 3,242, 44, 71, 55,154,171, +171, 75,150,179,107,230,243, 27, 46,175,223, 82, 87, 5,186,209, 33,212,195,115,239,235,186,226,234,242,156,249, 98,193,122,177, +244,156,249,214,190,133,237, 24,250,126,204,228, 56, 58, 62,229,226,226,156,211, 7,247, 40,150,107, 94,125,255, 29,217,112,196, +131,179, 83, 14,142,143,249,250,139, 47, 88, 44,110,176,186,230,244,228, 1,255,252,191,255,159,152,207,111, 88,175,102,128,226, +251, 23,223,242,244,217,115,158, 57, 86,137, 0, 0, 32, 0, 73, 68, 65, 84,190,253,230, 75, 94,124,245, 71,150,139, 57, 82, 74, +226, 36, 97, 52, 61,228,179,159,255,146,127,251,111,254, 31,190,249,242,143,188,121,245,130, 88, 5,129,105, 56,240,166,105, 10, +214, 49, 28,230, 60,125,254,103, 60,253,224,103,220,127,252,190, 87,156, 11,201,225,241, 33,198,250, 77,161,237,176,180,155, 79, + 19,130,115,254, 33,250,144,237, 69,220, 3,142,186, 51,115,127,195, 18,174, 19,199,246,103, 76,109,149,110, 26,131,105, 12,249, + 96,128,174,234, 94, 55, 39,116, 68,132,143, 76,173,116, 77, 28, 39, 88,211,176,152,249,247, 83, 8,135, 83, 18,140,225,230,230, +130,170, 42,104,140,225,240,232,136, 97, 62,160, 49, 13, 73,146, 48,153, 28,113,125,121, 73, 81,172,168, 27,237,225, 51, 81,196, +104,122,136,214,154,162,172,194, 90,226,171, 94, 99, 26,234,170, 70, 69, 17,135, 71,199, 56, 4, 85,224, 66,216, 48, 82,244, 33, + 68, 81, 16,213,181,247,197,182, 93, 76,117,138,241,246,250,151, 61, 81,218,237,209,168, 11,247,156,148, 94,221,191,156, 47,120, +112,239, 1, 71,135,135, 72, 25, 81,107,127,224, 75, 82, 31, 19,220, 22,111, 30,144, 19,240,218, 97,189, 78,211,132,103, 79,223, +227,189,103,207,152,205,103, 84, 85,117,139, 93,178,165,136,151,219, 85,114, 71, 2,109,139, 96,209,115, 16,237,152,128,133, 20, +189, 63,238,142,108,228, 22, 99,165,171,222,247,128,217,196,142,238, 11,225,182, 51,228,219, 64,151,179,135, 79, 62,111, 91, 4, + 86,108, 32, 49,183,230,123, 59, 54,180,125, 57,178,123, 55,225,157,214, 69, 31,153, 42,247, 44,234,251,208,173, 63,229,230,217, + 87,253,255, 41,143,181, 79, 80,103,140, 70,233, 42, 68,178, 58,116,227,243,164, 85,216, 88,154,198,199,180, 14, 6,153,159,149, + 73,225,219,238, 97,211,104,213,238,178,159,106,230, 64, 55,141, 23,176, 5, 37,186,182,126,195,143,148, 34,142, 36,131, 36,245, +180,166, 16,112,163,141,111,239,151,218,116,109,245,186,105,186,239,207,210,216,223,108,237,105, 56, 0, 36, 84, 80,143,214, 90, +211, 24,203,104,124, 64, 37, 98,132,146, 91, 36,165, 62,223, 61,142,162, 16,240,210, 82,247,236,173,214,187,187,213, 68,218,131, +120,253,137, 7,168,189, 27,254,158, 82,180,253,234,166, 55,140,105,209, 72,109,112,139,179,150, 44, 27,144,231, 57, 89,150, 82, +213, 58,224, 98, 27,172, 9, 86,162,208,170,222,132,185,108, 44, 96,222,175,190,225,223, 43,233,115,228, 7,195, 33, 70,251, 10, +101,181, 46,252,236,216,110, 54, 82, 33, 4,105,158, 51,158, 78,113,210,231,167,167,131,140, 52, 73, 73,210,148, 71,143, 30,146, +103, 3,230,215,215,190,226, 13,215, 6, 8,156, 8,208, 38,225, 7,249, 46, 88,130, 58,180,175, 8,202,120, 41,186,228,194,125, +179,219,173,118, 29, 61,225, 95, 55, 86,176, 29,201,206, 6,133,176,223,192,240,182, 45, 54,225, 70, 74, 74,166,227, 41,141, 54, + 27,207,177,109, 24, 13, 6,124,247,226, 59,202,210,115,237,113, 62,255,192, 89,139,136,218,170,179, 55, 71,116, 2, 39, 37, 85, + 89,113,114,246,128, 87,175,190,227,224,232,190,231,180,231,158,118,182, 42, 74,172,174,121,244,244, 61,222,123,254,156,255,240, +239,254, 95,206,223,188,162,209, 53,141, 19, 76, 38, 7,232,186,228,219,175,191, 64,151, 69,168,160, 99,242,225,132,147,147,123, +172,215, 43,222,252,240, 61,229,186,160, 88, 47,168,107,205,120, 60, 10,135, 13,207,242,143,179, 1,131,225, 20, 93,107,254,238, +215,255,153, 31, 94,124,197, 98, 49, 67, 97,169, 10, 15,121,201,243, 1,243,217,117,200, 95, 72,168,117, 5,184, 16,203,106,254, + 65,155, 58, 61,193,105,255,151,237,143, 40, 98,229,109,137, 61,130,230,237, 27,195,122, 37,126,171,152, 15,238, 8, 17,108,101, +190,130, 55,148,101,193, 96, 56,196, 25, 47,198, 29, 77, 15, 25, 79, 14,136,210,140,114,181,162,209, 53,186,246, 68,185,235,235, +107,142,207,238, 99, 92,195,197,219, 87, 28, 29, 28,146, 68, 9,101,185,166, 40,214,232,144,190,119,120,116,204,100,122,132,115, +162, 27, 71,120,183,142, 87,245,151,197,154,225,120,204,244,224,196, 7, 37, 53, 94,145, 30,199,137,111,139,199,209, 6,173,218, +179, 32,171, 48,206,245,111,147,237,196,100,155,102,143,232,209, 22, 55, 40,112,240,107, 87, 28,103, 88, 99,185,186,190,230,195, +231,207, 25,228, 57,145,146,232, 70,163,117,197,104, 48, 64, 8, 15,251, 18, 2, 34, 21,161,148, 36, 77,146, 78, 12, 24,199,138, +233,100,202,103,159,124,198,104, 56,226,242,242,194,183,250, 91,235,155,232, 67, 98,220,118,187,123, 7, 51, 75,127, 31,218, 33, +177,110,123,141,110,235,201,118, 25, 49,109,213,221, 17, 52, 69, 8,185,217, 36,158,135,181, 95,244, 13,121, 27, 91,246,217,131, +199,159,183, 63, 74, 72,113, 11, 52,179,139, 16, 21,253,106,189,143, 90,221,215,148,184,107,161,239,125,127,127, 51,222,109,137, +247,127,246, 62,181,250, 62, 44,233,118,232,188,248,241,120,189, 59, 66, 72,186, 28,247,114,129, 52,198,111,172,161,117,154, 68, +138,198,248, 25,187, 19, 16, 43, 63,235,114, 97,238,110,236,102, 35, 84,157,112,112, 67,233,107, 26,235,189,179, 33, 33, 73, 27, +131,197,227,105,211, 52,102,148,166, 24,103, 3,170,208,183, 80,117, 99, 40,107,237, 55, 92,124, 75,190,189,188, 6,121,134,112, +142, 38, 84,253,198,122,113, 88,146,166, 72,225,187, 12,218, 24,142, 39, 99, 10,149,249,139,100, 7,150,226,218,231,108,125, 6, +124, 43,206,233, 78,160,123, 26,194,110,231, 20,125,235, 61,188,163,139,242, 83,128, 52,110,199, 21,177,223,210,182, 81, 95,180, + 98, 57,149,196, 76,167,135, 76, 38, 99,234, 90, 7,196,101, 67, 85,149,254, 6,177,155, 64, 26, 99,154, 30,221, 78,248, 76,110, +187,253, 42,243,124,192,100, 58,193, 52, 26, 93,215, 44,219,106, 91,184, 46,125,112, 56, 57,224,233,123, 31, 96,173,227, 96, 58, +193, 90,199,209,209, 17,103,247, 31,242,252,249, 71,140, 70, 99,170,178,228,242,242,210,235, 34,220,198,127,239,232, 97,143,157, +232,200,115,173,112,106, 31, 5,209,249, 36,160,158,216,192,179, 36, 58, 4,179,146, 8, 37,125,196,113,112,177, 88, 33,122,124, +137, 13,211,154, 30,182,214, 4,187,159,117,142,229,114, 78, 81,174, 40,171, 18,128, 97,158, 49,187, 58,103,185, 92,161,203, 10, +215,217,237,130,186,219, 25, 80,113, 79,212,229,105,127,141,209,164,131,156, 56, 29, 48, 26,142,248,224,131,231, 60,120,244,152, +217,236, 26,231,252,243,116,141,230, 23,191,252, 71,188,252,225, 59,102, 55,139, 32, 74,172, 64, 42, 46,206,207,185,190,190,164, + 90,175,131,123, 0,162, 52,225,201,123, 31, 50, 61,185, 79, 26,103,220,220, 92,178, 88,206, 40,215,149,239, 80,169,152, 40,205, +112,248,108,238, 60, 27, 80, 20, 75,110,174, 47,169,234,146, 88, 9,154,186,100, 52, 30,250, 42,179, 90, 19, 69, 17,235,229,138, + 40, 73,201,135, 45,206,213,143,197,246, 41,223,255, 75,127,117,155,131, 20,161, 3,226, 61,233, 2,249,163,202,250, 86,252,181, + 37,200, 11,235,106, 93,122,214,125, 54, 24,146, 37, 25,139,217, 21,163,241,152, 52, 31, 80,172,150, 8, 33, 25, 14,199, 20,197, +146,229,108, 65,158, 15,200,210, 1,166,209,220,220,220,144, 13, 50,172,179, 84,235,146,229,106,193,114,185, 32,207,115,226, 44, +103,122,112,194,104,114,224,133,142, 62, 20, 26,103,124, 84, 48, 56, 14, 79, 78, 17, 74, 81, 22, 5, 85, 85,249, 52,191,192,140, +247,135,228,205,248,181,173,160, 55,235,134,220, 18,157,249,195,114,123,112,118, 65,196,232,176,218,119, 97, 42,221,144, 15,188, +128,213, 57,120,250,228, 49, 73,146,122,208, 81,227, 63,179, 56,242,168,231,118, 95,240, 69, 83, 76, 20,249,195,132,112,155,132, +204, 71, 15, 30,242,233, 39, 31,251, 78,220,124,190,229,238,218,133,195,116, 54, 61,177, 13,131,105,157, 45,206,186, 94, 39,190, +111,191,222, 84,246,251,116,104, 91, 27,116, 47,178,124,243, 56, 59, 72,218,126, 32, 77, 47,180, 70, 29, 63,124,252, 57, 33,210, +179, 31, 67,167,186, 68,123,110,129, 96,218,139,232,167,158, 93,247,113,226,119,209,174,253,147,109, 95, 93,184, 53,231, 14,162, +179,221,127,239,111,246, 98,143,165,238,182,213, 64,190,243,207,221, 27,165, 20, 44, 23,224,106, 26,109,104, 66,123, 41, 77, 21, +206,128, 14, 10, 86,176, 12,179,212,103,175, 27, 3, 66,210,212, 14,156, 68,168,205, 7,210,110, 2, 62, 48,196, 95,168,190,213, +230,104, 77, 31,195, 44, 33, 78, 98,148,104, 21,163,254,166,168,154, 6, 29,248,242,198,186,144,214,228,169,114,131, 54, 10,211, +250,159, 93, 53, 26,103, 12,105,156, 4,152,131,162, 52,130, 60,142,137, 70, 19,214,198,134,205, 99, 91,225,209,126,238, 74,249, + 89,188,144, 27,202,211,187,184,239, 63, 86,121,191,203,101,176,119,225,218, 57, 24,114, 11, 29,220,139,229,109, 55, 16,229,197, +114, 81,146, 48, 28, 14,184,119,118, 47, 68,148,122,139,213,122,189, 14,173,123,135,176, 14,203, 70, 17,223,146,176,252,220,207, +110,189, 38,165, 36,163,241, 4,225, 44, 77, 93,177, 92,149,100,195, 17,147,131, 3, 84, 28, 19,199, 9,239, 63,255,136,197,124, +206,226,230,138,249,205,141,183,215, 69, 9, 55,243, 27, 14, 15, 15,177,206, 49, 30,143,248,254,213, 75, 31,148,177,155,195,220, +171,108,183, 88,247, 46, 32,244, 2,164,200, 73,225, 69,142, 81, 68, 20,121,124,167,138,163,158,184,175,101, 66,248,235, 84, 6, +134, 68, 95, 0,217,210,189, 90,111,127, 11,248, 17,189,133,170,117, 89,180,105,125,194,249, 57,238,236,122, 70, 85,148, 27,241, + 36, 6,231, 26,223,118,119, 14, 66,174,188, 37, 32, 75, 3, 68,228,193,179, 15,184,190, 60,231,207,127,241, 11, 78,143,143,249, +155,255,252, 31, 41,138,138,159,255,242,175,248,226,247,191,227,159,253,119,255, 3,127,251, 55,255,137,186, 44, 56, 56, 58,161, + 44,214,204,102,115,116, 93,114,116,116,204,236,242,154,162, 92,163, 34,159, 39,159,231, 57,249, 96,132, 20,142,243,183,175,121, +243,195, 15, 56,173,253, 97,200,214, 84,213,218,139, 70,131,181,177,110, 42, 16,138,170, 88,145,167, 9, 7, 71,199,126,252, 21, +231,100,169,207,181,143,178, 12, 33, 20,117,181, 34, 73, 7, 56,227,153, 6,166,139, 60,253,175,251,171, 27, 41, 57,239,107, 31, + 12,135,225,189,189,123,116,181, 77,243, 12, 93,213, 45, 53,177,191, 63,117, 93, 81,151, 5,197,106,129,109, 26, 22,139,153,199, + 36,235,154, 70,215,157,152, 45,146,176, 94,206,169,155,134,201,225, 49,135, 71, 71,200, 36,225,193,163,167, 24,103,185,127,239, + 33, 32, 88, 44,151,172,230,158,111, 48,155,205, 80, 81,204,193,201, 41, 79,159,126,200, 36,116, 3, 22,179, 57,139,217, 53,121, +150,114,120,124,134, 16,210, 31,206,132, 32,205, 82,191,209, 73, 9,194,235,116, 68,119,157,171,126,238, 91, 87,196,108, 10, 53, +177, 25, 55, 8, 73,227, 92, 16,113,123, 66, 95,156, 36,204,230,215, 28, 76, 15,185,119,239,140, 52, 73,124, 42,157,117, 8, 21, +161,148, 98, 50, 28, 81, 22,101, 23,204,228, 55,119, 21, 70, 10,126, 63, 26,228, 3,178, 52,227,163,143, 62,228,254,253,251, 92, + 94, 93,117, 89,242,219,252,245,221, 25,248, 54,219, 66,116,115,244,237, 72,215,205, 77, 46,122,227, 8, 63, 78,116,114, 91,135, +230,122,110, 49, 41,164, 63,168,110,142, 7,219,163,137,238,125,220, 28, 10,212,233,163,199,159,183, 51,130, 86, 0, 37,247, 97, + 92,219, 13,189, 21, 69,220,122,248,187, 55,243, 93, 28, 95,151,101,190,133, 13,188,219, 22,210, 71,187,238,171,174, 91, 65, 88, + 63,111,253,174, 3, 64,127,243,223,237, 12, 68, 81,228,109, 17,202,195, 68,148, 82, 30,254, 80,174,186,106,217, 90, 71, 28,201, +160, 5,241,213,177, 68,144,196, 1,237, 26, 54, 5,107, 90,196,174, 23,175,181,234,107, 41, 55,155,186,127, 14,254,251,154, 80, +253,229, 73,196, 32, 78, 2,135,217,231, 88, 91,231, 40,116,141, 54, 22, 17,218,247,222, 74, 34, 81, 82,116, 0, 22, 19,188,236, +190,157,231,185,205,214, 54, 72,165, 88,149, 53, 73,154,112,116,116,202,220,184, 45,166,241,174,216,177,237, 52,136,174, 10,219, +182,186,221,201, 22,248,137,126,245,159, 98,127,115,251, 7,199,219,159,123,239,235, 85, 16,250, 40,165, 72,147,148,147,147, 83, +132,128,170,170,113,214, 80, 85,229, 38,213,205,216, 48,166,240,175,213, 6, 72, 75, 11,166,233,107, 79,178, 44, 35,205,115, 34, + 9,166,209, 24, 11, 63,255,197, 95,178, 94,175, 72,211,140, 52, 73,176, 64,158,101,188,121,243,202,219, 16,181,166, 44,214,224, + 4,218,106,158, 60,122,196, 87, 95,254,129,229,106,181,119, 83,239, 78,218,110, 95, 63,100, 35, 60,179,214,183,205,251,118, 40, + 63,127,151,200, 40, 33, 29,142,145,113,130,136,227,110,211, 22, 42, 66,198,113, 71,127, 20,237,245, 18, 2,152,100,228,103,247, + 78,108, 87,250,125,144,212,253,179, 51,174,174,174, 88,204,230,254,253,233,198,109,182,211, 3,244, 91,197, 82, 68,221,125,174, +164, 68,166, 3,178, 60,231,207, 62,251, 25,223,126,253, 5,171,162,164, 44,150,172, 86, 75, 30, 61,120,196,108,113,195,197,249, + 27, 78, 78,239,243,234,135, 87,228,147, 3,180,174, 72,211, 1, 23, 23,231, 20,235, 37, 7, 71, 39,254,179, 77, 51, 14, 14,143, +249,235,127,250,207,248,227,239,127,207,205,213, 57, 85,185, 8,184,216,152, 56,246,168, 83, 33, 21, 66, 70, 28, 28, 29,113,120, +112,196,209,233, 25, 89,150,226, 2, 2,118, 48,152,112,114,239, 9, 69,233,163, 59,173, 13, 97, 57,186, 66,168, 24, 41, 28,197, +170,216, 96, 95,255, 43,112, 23,110,233, 79,130, 99,193, 54, 14,161,228,102,220,177,199,138,187,223, 10,220, 86,155, 97, 60,211, +159,203,247, 24, 7, 18, 65, 93, 53, 12,134, 35,180, 54,140,167, 7, 76,198, 83, 22,203, 57,145, 84, 76,166, 7, 65, 56,151,144, +100, 25,243,155, 43, 98, 37,121,246,222, 7,168, 56,230,240,248,132, 36,241,246,183, 36,142,168,235,146,217,245, 13,111, 94,191, + 97,190, 92,208, 88,199,209,201, 61,242,124, 20,198,131,146,225,120,226,149,249, 77, 77, 89, 20,196, 81,212,165,112,118,145,168, + 33,219,161,237,102,110,107,117,130, 22, 41,104, 35, 92,112, 8, 9, 37,183,187, 20,214,225, 12, 92, 93, 95,113,239,222, 61, 70, +163, 33,113,156,144,101, 89, 23,108,164,235,138,209,112, 64, 89,150,222,234,134,127,142,158,184, 39, 72, 18, 31,222,163,181, 70, + 10,193,209,225, 33, 63,255,217,207,201,179,212,139, 91,173,219, 18,229,110,239, 27,114, 59, 35,229,150,133,141,237,214,122,183, + 1,187, 46, 4,173,117, 91,109, 84,236,108,205,202,247,253,178,194,109,104,174, 59,201,111,234,236, 81, 11,159,217,246,128,183, +213,217,173, 54,234,158,249,116, 95, 86, 47,197, 54,212, 68,222, 10,174,151, 59, 12,224,219,111, 64,187, 17,219,222, 1, 98,223, +166,210,223,208,187,239,219,173,190,187,138, 75,117,177,125, 82,122,251,133, 10,135,153,118, 3,239, 90, 34,237,156, 54,138,144, + 66, 98, 23,215, 96,189,112,198, 6, 88, 68,146,248, 22,188, 14,207, 81, 56, 75, 20,123,192, 76, 21,102,223,132, 17,110, 20,121, + 16,132, 7, 67,120,252,107,251,114, 90, 75,155, 19,194,131,100,210,152, 60,137, 58,170, 91, 18, 41,172,131,162,174, 66, 60,167, +223,184, 93,152, 41, 43,229,173, 35, 74,170,192, 64, 22, 44, 10, 77,164, 20, 78, 73, 84, 72,111, 91, 23, 53,105, 62, 96, 50, 57, +240,155,122,215, 94, 10,113,176,161,181,211,142, 12,228,142, 16,242, 46,189,167,184,171,125,254, 39, 46,128,183, 54,186,254, 97, +176,119,221,245,227,118,133,235,111,234,190,253, 30, 69,138, 60, 31,144, 15, 6,228, 89,234,217,231, 33,244,194, 25, 75, 36, 85, +151,156,214, 90, 5,219,170,214,231,175,219,173,211,184,183,201,141, 17,182, 1,103, 89,173, 11,190,253,246,107,150,179, 27,214, +171, 37,203,229,130,155,235, 43,222,190,254, 33,136,224,108,199, 0, 7, 75, 89, 21,156,157,222,167,105, 52,139,249,156,162,174, +182,104,114,254, 50,113,221,166,126, 59,232, 65,236,238,253, 62,126,216,120,236,172,213, 6,163,141, 71,208, 26,235, 71, 43, 97, + 12,147,143,166,168, 52, 71, 37, 25,233,112, 76,148,100,168, 56,246, 27,125, 20,161,162,216,135,121, 72,133, 10, 32, 36,164, 68, +136, 8, 17,121,168,148,167,156, 25, 94,191,126,237,131,100,122, 68,193,219,159,177, 67,184, 48,174,233,144,207,222, 91,252,240, +209, 83,158, 60,125,198, 71, 31,125,204,203,239,190, 98, 58, 61, 96, 52, 28,240,254,243, 15,249,230,235, 63, 50, 28,141,169,234, +134,139,139, 87,220, 92, 93, 33, 44, 24,171,177, 77, 65, 18,167,222, 67,173,125, 80,199,227,247,223,231,230,102,198,106,118,206, +108, 62, 39, 78, 50,140,169,136,211,140,195,211, 7, 12,198, 83, 26, 93, 51, 28, 77, 56, 60, 58,166, 88,175,169,202, 37,166,174, +248,240,179, 95,114,124,250,144, 55, 47,191,229,252,205, 43,226,216,167,236, 33, 36,186, 40, 60,206,215,104,154,186,238,236,100, +105,238, 45, 82,255,229, 10,248, 29,107,151,219, 56,218,108,227,195,119,116, 11, 54,218,211,221,106, 55,233, 62, 81,113,235,223, +219,182,237,238, 97, 32, 36,217,249, 2,201,251,250,173,179,164, 89,198,106,177, 96, 93,172, 41,150, 11,230,179, 89, 40, 4,252, +215,205,231,115,210, 44,197, 90,195,211,103,239,115,122,230, 67,124,170, 98,141,146, 17,227,209,132,213,114,193,236,250,146,243, +183,175, 56,191,120,195,245,108,134,174, 45,166,105, 24, 12, 70, 76, 15,143, 60,162,182,170,144, 66, 98,116,137,101,163, 49,234, +176,225, 82,108, 93, 87,237, 91,221,218,119, 13, 46,192,104,194, 38,218,115,227, 72, 21, 35, 4,196,105,198,120, 56, 12, 7,251, +196,119, 8, 28,172, 11, 31,120, 53, 25,141,124,215,179, 42,145,161, 66, 87, 81, 68,156,120, 33, 93,154,166, 88,103,136, 34, 47, + 80,126,252,232, 49,159,125,250, 41,171,178,244,184,217, 78,137,206, 86,193, 40,229,142,191,189, 27,183,239,236,115, 91,237,114, +209,213,223,178, 21, 43,183,135,235, 54,123, 64,208,205,211,183,255,107, 83,237,197,166, 99,179,181,169, 63,126,250,185,232,181, +131,216, 81,177,139,222, 27,223,158,166,228, 14,166,117, 23, 20,211,110,158,183, 48,173, 61,246,110,119,112,112, 59, 17,154,123, +230, 12,239,186, 49,250,179,244,150,145,221,125,216,157, 74,177, 85,236,251, 19,162,234, 69,187,202,126,232,125, 79, 24,209,218, +233,162, 40,166, 92, 92, 35,140, 65, 55,222,202,102,156, 35, 79,124,155, 83,155, 0,151, 9,213,162, 64, 80, 53, 33,155,217,109, +128, 53,157,221, 73,122, 75, 91,255,131,150,210,207, 63,141,177,164,113, 68,158,198, 36, 81,140,182, 13,105, 28, 83, 53,117,103, +169,243, 41,111, 33, 7,189,187, 56, 92,119,152,177,192,114, 93,162, 98,133,141, 18,178,216,251, 55, 87,149, 33, 31,142,144,131, + 17,107,219, 77, 61, 59,196,105, 95,161,239,197, 60,118, 67, 91,187,171, 42,223,151,158,247, 39,180,230,247, 47,146,110,255,223, +244,186, 5, 61,225,240,198,238,214,113,152, 61,229, 42,207, 7, 28, 76,189, 18, 30, 28,197,202,207,194, 55,129, 40, 46,176,223, + 67,165,142,236,102,202, 91,155,186, 16, 12, 70, 35,164,240, 2,179,203,235, 27,116,221,132, 3,128,241, 57,228,109,192, 71,219, +169,233, 95,147,206,177, 92, 21,252,227,191,254,111,249,226,203,175,168,203,114,211, 5,105,143,209,129, 44,230,132,235, 9, 94, +110,171, 84,182,237, 64,226,150,184,208,154, 6,173, 75,140,174,113,186,166, 94,175, 49,117, 77, 83,123, 65,147,112, 32,226,136, +100, 48, 66, 40,239,150, 64,198, 68,217, 0,149,229, 36,195,177,175, 86, 48,190, 77,170, 20, 89,154,162,203,138,235,171, 75, 92, +240,216,187,142, 95, 96, 67,220, 99,191, 50, 20, 91, 99, 54, 37, 37,227,131, 67,164, 51,124,252,201,167,124,241,251,191,227,236, +222, 67,140, 46,121,255,253,143,152,223,204, 16, 40, 78,206,206, 88,175,215,100,163, 33,117,209,176, 94,205, 41,215,107,148,138, + 56, 60,185,199,249,249, 27,242,225,144,179, 7, 79, 72,210,148,171,243,183, 92, 92,188,165, 90, 47,105, 2,212, 39,206,114, 78, +207, 30, 98,155, 10, 99, 52,163,209,136,235,171, 43,166,211, 67, 28, 10, 33, 98, 86,203, 57, 95,125,241,247,196,169,162,170, 75, + 47, 58,173, 53, 56, 65,163, 61, 73, 78,134,170, 77, 73,233,213,220, 73,140,174,245,222,121,163,123,135, 75,231, 93, 58,158, 91, + 57, 9, 97,173,106,154,230,150, 39,250, 93,135,224,187, 54,255, 45, 1,101, 56, 0, 55, 58,164,255, 25, 75, 93,151, 33,189, 48, +199, 25,235, 25,242, 85, 65, 89,172,200,243,140, 44, 31,112,116,114,202,114,189,226,219, 47,191,226,219, 47,255,200,197,155,215, +140, 38, 83, 62,248,240, 51,254,197,255,248, 47, 41,155,138,193,112,192,112,228, 43,244,245,170,192, 24, 77, 81,150,204, 23,115, +174,206,207,121,251,234, 13, 85,173, 57, 62, 57, 37,205,114,134,227, 41,206, 58,140, 54, 56,103,188,166,194,109, 79,218,218, 19, +108,123,143,249,194,163,117, 16,184,192,151,247,223,100,240, 98,207, 72, 69, 84, 85,201,225,209, 81,151,182,231, 59, 55,113,176, +251,122, 46,126, 18, 71, 62,245, 48,205, 25,228, 3,170, 96,201, 83,202, 23, 82, 81, 28,119,221, 62,137, 32, 31, 12,248,244,163, +143,185,127,255, 62,203,245,138,117, 89,120, 84,120, 15, 27,219,199,142,111,123,215,247,177, 91,196, 86, 21, 46,187,162,165, 29, + 87,109,218,247, 78,236,132,204,176, 65,197,186, 29,101,122,223,201,164, 78, 30, 62,254,188,157, 93,116, 94,193, 93,163,125, 15, + 64,179,207,255,189,175,234,222,125,161,253,100,180,125,124,246,187, 68, 83,114, 75,238,191,199,210,214,111,201,246,170,203,126, +180,223, 70,236,176,217,240, 93,135, 9,117, 1,191,234, 54, 10,203, 54,117, 43, 8,199,132,209,184,178,216, 18, 18, 37, 74, 18, +197, 10,221,248,208, 20, 33, 61,205, 40, 82, 62, 80,197,226,253,177, 78,224, 35, 24,123,211, 12,111,243, 8, 7,156,240, 28, 77, +120, 12,164, 96,144,120, 75, 73,109, 52,105, 28, 83, 84, 53, 77,104,217,119, 34, 60, 43, 66,234,154, 67, 73,225, 69, 40,206, 97, +144,148,101,133, 84, 17,209,104, 74,158, 36, 24, 93, 83, 59,200,243, 33,209,193, 17, 78, 69, 36,105, 66,150,251, 83,109,146,166, +100, 89, 70, 28, 39,157,183, 82,236,105, 35,137, 61,136, 88,183,103,161,217, 13, 58,249, 41,144, 26, 33,238, 54, 49,238,235, 20, + 1, 91,237,247,214,211, 47,149, 34,203,115,156,128, 7,247,239, 51, 95,204,253,130, 19,184,228, 42,142,113,206,120,145, 92,107, +237,178, 62,199,190,105,204,134, 59,221,123,220,131,163, 67, 34, 1,101,185,102, 62, 95,117, 27,120, 59,139,182, 97, 68,228,118, +221, 1,129,213,190, 90, 45,249,238,229, 11, 38,147, 9,243,217,172,111,192,221,106,199,245,103, 99,155,105,217,230,239,182,207, + 64, 98,239, 33, 72,122, 93,108,128,245, 56, 48, 13,174,105, 16,166,193,213, 37,205,122, 77,181,184,161, 94, 45, 59,124,177,148, +138, 40,203,136,210, 1,217,104,226,217,233,137,247,180,219, 70,115,254,246, 85,207, 38,230, 15, 67,110,171, 45,189, 25, 87,200, + 56,246,145,176, 66, 32,227,216,219,158,206,238,243,222, 7,207, 89,206,174,152, 12,135,212,218,231, 21,124,250,201,159,177, 92, + 92, 51, 61, 60,230,197,203, 23, 52,181,225,226,135, 31,200,242,136,147,251,143,169,171, 53,235,245, 26,221,104,148,107,120,239, +195,207, 72,178,148,170, 44,201,135, 99, 22, 87, 23, 76, 14,142, 80, 73,194,163,167,207, 89,173, 22, 92,188,254, 30, 41, 36,217, + 96,196,114, 49,167, 46, 86,152,198,146,143, 38, 76,143,142,185,190,120, 69,179,158,211, 88,199,104, 52, 70, 55, 13,131,193,144, + 36,205, 2,173, 49, 34,142,211, 16,166,226,173,121, 8, 25, 58,100,110,199, 82,212, 3, 33,253, 3,187, 82,187,157,200, 40,137, +127, 26,146,182, 21, 53,239,181, 45,111,183,136,183, 14, 16, 61, 87,132,119, 46, 56, 78,239,157, 81, 20,235,176,161, 73,110, 46, +175, 24, 12, 7,156, 95,156, 83, 21, 5, 71,167,199, 44, 23, 75,202,181, 31, 31,149,101,193,175,127,243, 55,188,248,250, 43, 46, + 47, 47,152,205,231, 56,231,120,240,248, 41, 15, 30, 63,227,227,143, 62,225,244,222, 35,162, 56,198, 58,195,114,118,195,219, 55, +111, 41,214, 37,247, 31, 60,246,115,249, 56, 33,201,199,225,144,110, 67, 43,122,115,189,247,155,178,198,250, 10,189, 93,127,251, + 29,139,174, 24,149,130,186, 42, 88,173, 11,238,159,221,235, 98,166,165, 20,228, 73, 66,172, 36, 74, 69, 20, 85, 77, 85,107,242, + 52, 69,215,186,139,216,109,211,220,146, 56,233, 50, 24,188,202,223,219,130, 15, 14, 14,249,248,163,143, 57, 58, 60,193, 58, 88, +175, 87,136,182, 94,222, 41, 68,251, 60,248, 93,154,234,246,154,183, 97,195,187,237, 83,141,175,184,217, 6,227,244,103,235,187, + 57, 44,162,111,105, 59,125,244,228,243, 45, 60,222,142,103,188, 47,104,235,183, 71, 54,220,109,117,167, 24,109,223, 9,178,143, +114,237,111,254,187, 98,181,221,191,111,213,146,237,191, 71, 29,156,101,187, 13, 18,252, 74, 91,155,191,223, 4, 93,215,182,238, +230,244,123, 2,233,165,218, 84,247, 54,124,189, 2,154,213,194, 71, 25, 90,211,229,120, 71,209,166, 50,119, 64, 4,158, 4,231, + 90, 17,157, 11, 86, 53, 25, 46,212, 13,164, 65,134, 36, 52, 31,199, 25, 46,218,240,254, 14,211,152, 40, 8,223, 18,165, 88,215, +149,143,108, 53, 94,161, 44,149,164,106,124,213,158, 36, 49, 10,127,210,116, 64, 89, 55,222,181, 21,197, 36,147, 3,210, 40, 66, +215, 26, 43, 36,195,201, 1, 38, 27, 98,194,169,174, 49,206, 43,228,165,191,224,163, 56, 38,207, 6, 8,124,202, 18, 78,132, 13, +171,151,178, 36, 54,155,254, 93, 34,195,119, 89, 12,247,233, 38,246,253,253, 79, 57, 16,200,222,125,208,218,218,172,179,140, 70, + 35, 84, 20,113,122,114,202,106,189, 66, 74,197, 50,228, 89, 39, 89, 70,163,171,206,206,214,250,240, 61, 43,192, 5,191,117, 47, + 95, 94, 41, 6,227, 17, 73, 36,169,170, 53,243,121,177,125,244, 8,173,251, 56,142,125, 39, 96, 39,109, 45,201, 50,156,112, 20, +235, 53, 81, 28,177, 90,174,192,186, 61,198, 83,187,149,220,220, 90, 76,183, 64, 22, 98, 95, 48,237, 93, 3, 18,135,227,142, 78, + 72,216,240,157,245,222,245,186, 88, 82, 23, 43,164,138, 80, 73, 74, 58,156, 64,228, 5, 71, 55, 23,175, 89,204,111,252, 28, 63, +116, 71,218, 77,193,111, 16,237,207,179,221,125, 38, 85,236, 15, 71, 82, 33,227,132,124, 56,230,241,227,135,232,186,228,205,249, + 5,207,158, 61,231,253,103,239, 51, 26,141, 25, 79,143,249,221,223,255,138,139,183,111,121,255,249, 39,220,123,248, 24,109, 13, +127,255,155, 95,179,158, 93,113,112,112, 64,185, 90, 98, 12, 60,121,246, 62, 47,190,249,146, 65,158,243,199,223,253,198,123,232, + 77,205,241,241, 61, 47,138, 18,126, 54,109,140, 97,181, 92,144,101, 3,142,238, 61, 65, 72,120,241,205,151, 92, 93,188, 98, 56, +204,137,162,152,245,106,197,186, 40, 80, 66, 82,107,237, 15, 55, 74, 17,167, 3,132,244,179,251,213,106,133, 80, 94,137,157,166, + 9, 77,237, 69,115, 50, 82,183,222, 91,241, 35,250,145, 93, 80,214, 93,215,181, 84, 50,112,243,239,248,247,174, 88,217,214, 52, + 57, 54,110,140,246,107,219, 24,213,190, 38,105,235, 0,161, 34,234,166,102,181,152, 83,134, 22,181, 49, 22, 41, 36,235,213, 50, +196,178,150,196, 73,206,100,114,192,114,177, 96,181, 92,176, 88,204,113, 78,176, 92,174,168,155,154, 44, 77,136,179,156,155,155, +107,192,241,229, 31,126,207,197,249, 27,230,243, 27, 26, 93, 51, 24,142,249,249, 47,255,146, 71, 79,158,112,125,117,133, 49,134, +203,139,183, 92,188,253, 1, 99, 45,147,241, 1,147,233, 33,101, 85, 34, 67,133,222,119,231,152, 96,189,108, 69,218, 45,248,169, + 93, 75, 61, 75,191,241,172,144, 32,108, 76, 83,127, 13,182, 66,179, 56,142,201,146, 20, 33, 28,151,215,215,156,223, 92,115,124, +112,208,161,186, 91, 86,191, 15,142,241, 81,178,182,197,234, 70,129, 74, 39,189,190,228,244,236,140, 52, 31, 48,191,153,117, 69, + 96,187, 54,182, 9,118,155,207, 75,236,132,184,236,119, 94,109, 33,183,219, 2,197,137,205, 1,157,125,155,248,102, 28,185,181, +169,159, 61,122,242,249, 45, 31,122,216,240,118,231,156, 50, 48,125,251, 88,186,221,170,190, 95,173,237, 46,214,187,194,180,190, +104,142, 61,116,176,118,174,190,171,116,223, 74, 96,235,157,110,108, 27,105,184, 53,231, 16,155, 42, 78,170, 91, 9, 58,162, 23, + 28,211,158,236, 76,104,211,182,222, 81, 37, 4,182, 92,130,109,192,250, 60,116,161,188,143, 60,137, 36,117,109,209,214,120,138, +155, 0,169,252, 70, 47, 59,141,130, 8, 73, 97,190,122,107,213,157, 73, 18,111,194, 70,164, 79,226,138,148, 32,137,253,166,174, + 77, 67,164, 36,171,170, 10, 93, 3,127,113,199, 74,177, 40, 43,178, 56, 38, 9,175, 77, 41, 69, 89,107,180, 14, 21,127,146, 49, + 56, 60, 33, 21, 80, 22, 37, 81,236,133, 84, 46, 31,118, 24, 67, 21, 41,106, 93,117,128,136,166,105, 54,126,209,144,101,220, 82, +215,110, 85,238, 59, 24, 96,209,235,148,136,159,104,105,251, 73,155,247, 78,142,240, 86, 84,175,219,254,222, 56,142, 48,166, 33, +207, 7,164, 89,198,241,209, 17,101, 93, 18,169,136,229,114,238,147,241,210, 52,224, 70, 55, 89,232,157,181,207,137,110,166,190, +121,204,152, 56,203, 24,100, 41,186, 42, 89, 44, 75, 31,109,217, 83,163, 70, 81, 68,146,166,225,116, 31,117,180, 46, 41, 5,113, +146,113,114,122,214,169,110, 23,139,229, 29, 94,100,183, 51, 67,247, 93,158, 46,242,248, 22, 73, 78,220,225, 63,185, 27, 55,219, +135,150,244, 20, 61,157,223,185, 89, 47, 73,210, 12, 17, 69,164,121, 70,181,184,225,234,229,183, 93, 16, 13,108, 56,228, 62,197, + 43,194,154,160, 31,232,102,129, 50, 36,255, 69, 96, 29,241, 32,199, 56,201,195,123,103, 40,233,248,240,227,159,241,250,213,247, + 52,225,113,254,245,191,254,191,105,180,229, 95,253, 31,255, 39,255,254,223,254, 27, 46, 46,222,240,226,187,111,105,202, 21, 22, +203,248,224,144, 36, 27, 50, 28,228, 60,251,248,207,104,234,146, 36, 27, 81,215,154,186, 42,209, 85,201,108, 62,227,242,237, 43, +172,179,156,156, 61,226,201,251, 31,241,209,103,127,206, 15, 47,190, 97,126,241,154,213,242,138,170, 42,201,210,148,197,108, 65, +163, 53,141,105,104, 26, 67, 85, 20, 94, 52, 41, 5,113, 36,177, 77,195,213,197,107, 68, 72, 49,107,241,157,126,109,225, 86,254, +246, 22,176, 10,119, 39,244,202,253, 68,188,178, 71, 52,219,159, 84,229,247, 15, 87,251,224, 92,253, 81, 82,187,166,110,217, 88, +219,174,169,181, 94,176,103, 60,232, 38, 74, 98, 36,146, 7,143,223, 67, 70,146,197,236,154,203,183,175,152, 30, 29,121, 20,111, +146, 80,174, 75, 28, 2, 93,150,172,151, 75,230, 55, 55, 96, 13,231,111, 95, 83, 45,215,172,215, 11,138, 98, 77,163,107,202,245, +138,139,243, 55,124,253,245, 23, 92, 92,158, 83,105,205,193,225,177, 15,225,169, 53,141,246,104,220,201,244,144,225,100, 74, 81, +149, 88,211,248, 88,228, 22,231, 28,246,147, 56,142,187,215,208,239,142,181,175,211, 24,203,186, 88, 51, 26, 14,186, 49,150,104, +181, 71,206,145,101, 57, 39, 71,199,100,105,202,213,108, 65,158,164,164, 73, 70, 20,249, 48,174,182, 91, 83,150, 37, 85, 93,133, +162,107, 3, 2,147,194,219, 59, 31,222,187,199,189,123,247, 17, 50, 98,177,152,119, 12,137,254,232,183, 47,178,236, 23,142,173, +117,175,125,126,110,103,148,218, 63,127,119, 36,214,118, 2,190, 59,134,222,152, 32, 55,133,200,217,147,103,159,203, 29,223,156, +216,185, 16,246, 33, 57,247, 85, 86,251,208,171,187,252, 92,119,199,247,222,165,240,116,119, 28, 26,118,173, 71,237,139,238, 4, +111,129, 78, 36,131,232,192, 43, 20, 55, 41, 68,237,207,234, 11,228,162, 96, 49,235, 11,178, 58,102,179,105,176,181, 79,124,114, +214,224,132, 36, 14,173, 25,103, 45,165,182,248,151,239,136, 98, 73, 99,160, 54, 94, 41,236,171,122,213, 61,111,127, 49, 90,162, +200,111,132,214, 26,164, 18, 33, 50, 53, 66, 72,201, 48, 78,168,106,141, 84,138, 50,144,228,186,196,178, 72,177, 46,106, 6,185, +111, 43,233,198,135, 30, 44, 11,141, 20,254, 84, 41,242, 49,131,233, 33,202,121,188,108,148,165,168,100,136, 86, 81,247, 60,148, +236,150,106, 31, 15, 27,102, 64, 93,230,115,240,137,182,145,142,206,237,244,128,119,252,235,183,170, 20,238,166,161,253,164, 54, +101,255, 49,119, 15,127,157, 29,108,115,250, 85, 33,248, 65, 69,222,246, 52,153, 78,209,117,133,146,130,162, 44,168,181,247,206, + 26,235, 48,205,198,210,214,158,200,189, 79,221,132,142, 74, 80, 29, 68, 94, 77, 61,153, 78,208,117,201,114, 85, 48, 28, 77,104, +108, 67, 18,123,159,109,146,101, 76, 15, 14, 40, 86,107, 63,207,115,126,195, 67, 8,210, 44,231,236,236, 1, 85, 93, 49,187,185, +193,104,141,233, 60,247,110,235,181,108,207,207,221,150,102, 96,147,207,220,111,183,202, 59, 34, 24,249, 73,134,211, 46,155, 49, +116, 9,132,179,172, 87, 75,226, 52, 65,197, 25,235,235, 11,110, 46, 46,177,141,217,204,243, 2,233,206,225, 48,206, 91,178,252, + 7,237,151, 23,149,102,129, 67,239, 71, 73, 88,127, 56,124,254,222,135, 60,127,254, 17,111,223,190,228,197, 87, 95, 49, 95, 44, +121,249,242, 59,158,190,247, 62, 81, 20,243,245, 87, 95,240,235, 95,253, 45,117, 93, 51, 26, 77,168,138,218,255, 12,163, 89, 45, +174, 17,129,233,176,154,205,184,186,190,226,242,237,247,152,166, 14, 63,215, 91, 25,165, 16, 52,186,230,229,139,111,248,230,203, +223, 81, 85,101,224,134,211,161,124,151,139,185,143, 23,173, 61, 92,166, 9, 84,189,209,120,138,214, 13,117,227, 15, 48, 22, 31, +156, 82, 87, 69,167,178,182,216,206,119,189,239,240,217,205, 66,247,108,224,119,253,126,183, 10,151, 74, 6, 33, 84,223, 21,241, + 15, 87,217,239,182,224,119,215,221,214, 10,218,118,156, 90, 40,147,214, 53, 55,215,231,172, 22, 51,162, 36, 13, 17,196,150, 60, +207,153,207,110,176,206,241,236,131, 15,169,107, 31,230,211, 52, 13, 22, 71, 62, 26, 18, 69,169,143, 58,109,179, 9,156,197, 73, + 73,150, 13, 16, 66, 82, 22, 37,139,197,156,170, 42,121,246,193,115,158,127,248, 33,179,249,140, 56, 78,152, 30, 28,243,222,123, + 31, 80, 84, 21, 85, 89,131,117, 30,107,107, 93, 23,200, 20, 69,202,231, 18,152,208, 34, 15,133,146,143, 31, 22, 56, 39,136, 84, +204,253,123,167, 61,125,152,215, 82,121, 8, 77, 68,150,230,140,134, 3,138,178, 36, 82,146,225, 96, 64,154,166,148,101,133,214, + 53,163,225,144, 65, 54, 32, 73, 18,146, 52,197, 90, 75,173,181, 71,208,198, 49, 89,146,112,122,116,200,253,123,247,169,116,195, +236,230,122, 19, 69,190, 71, 32,126,187,237, 46,119,138, 83,233, 49,216,180,255, 7, 43,125,183,206,134,107,193,181,238, 6, 41, + 58, 17,157,232,185, 96,172, 55, 20,160,238, 61,121,246,249,214, 74,113,107, 46,184,253, 4,229, 78,139,117, 55,177,166,223, 30, +223,245,129,187,158,192,109, 23,106,227,238,176, 77,245, 5,116,119, 17,228, 58,202, 93,239, 36, 45,165,231,173,171,254,207, 22, +194,127,168, 65, 84,135,160, 75,223,241, 74,203,104,171,101, 37, 8, 89,227,210, 19,219,108, 85, 96,117,141,146, 10,221, 24,146, + 40, 10,214, 75, 71, 81,155,110,214,174,164,192, 24,168,173,195, 9,235,161, 50,225,132,217,230,226, 74,217,218,176,194,255, 3, + 16, 36, 73, 82,108, 99, 24, 38, 9, 69, 85,225,132,160,168, 52,178,119,234,147, 74, 82,213, 13,113,236,253,150, 69,165,145, 42, +162,168, 52,113, 88,116, 7,103,143, 24, 78,142, 48,206, 98,101, 76,146, 15, 81,249, 0, 27, 84,245,237,169,214, 24,211,169,223, + 61, 39,222,251,125,157,117,254, 70,117, 22, 23,182, 31,209, 19,173,185, 61,157,153,125,118,180,119, 1,102,126,108,179, 23, 59, +158,245, 91,141,230,126,124,121, 56,208, 89, 99, 16, 74,249, 27, 55,203,201,210, 24,221,104, 26,173, 41,170, 2,165, 90,194,220, +166, 82,111, 43, 35, 41,188, 29,173,131, 75,132,107, 34, 31, 12,152, 76, 70, 84,197,138,229,170,164, 40, 86, 72, 54, 22, 56, 37, + 21, 55, 55,215, 24,219,116,202,122,149, 38,228,131, 1, 73, 18,147, 13, 6, 52,186,230,234,202,219, 99, 92,175,178,219, 58,160, +136,237,150,250,254,174,134,216,138,136,101, 15,250,169, 15,241,184,253,253, 97,124,189, 77, 0, 0, 32, 0, 73, 68, 65, 84,110, +175, 95,186, 3, 80,225, 40,151, 11, 98, 21, 83, 45,111, 88,204,103, 16, 14, 58,152, 6,103, 52, 32, 72,178, 1, 77, 93, 35, 48, +136, 56,195, 74,111,245,176,214, 16, 37,190, 27, 34,145,168, 36, 33, 78, 34,166, 71, 71, 76, 70, 83,126,247,119,191, 65, 55,134, +131,227, 67,116, 99,249,246,219,111,249,195,239,126,227, 57,237, 46, 44,142, 56,102, 55,175, 73,162, 4, 99, 27,162, 40,227,222, +131,103,164,113,202,197,249, 43,170,229,204,211, 2,149,224,241, 7,159, 81,150, 43,202,245,146,166,174,189,146,221,249,199,170, + 10,175,156, 95,204,103, 24,109,168,235,202, 11,179, 66,247,204, 3,102, 34, 64,208, 88, 47,136, 19, 8, 26,173,187,117, 77,135, +212,197, 70, 55,161,155,246,110, 66,135, 96,155,214,184, 91,156,236, 77,150,236,219,216,240,107,146,189, 21,124,181,199,121,242, + 19,104,155,119,141, 4,246,205,220, 93, 43, 80, 51,206,207,219,195,235,108,170, 26,103, 27, 86,139, 27,138,162, 32,203, 7,232, +186,226,242,237, 75,255, 94, 75, 69,154, 13,153, 30, 28,145,228, 3,142, 79,238,249,238,135,146,124,246,139,255,134,108, 48,160, + 46, 43, 22,203, 37,149,214, 36,105,210, 5, 74,213, 85,201,108,177,228,252,252,156, 31,190,255,142, 31, 94,126,207,245,108,206, +209,233, 25,143,158, 60, 69, 91, 71, 28,197,196, 73, 66, 85, 85,196, 74,133,148,196,182,224,242, 99,195, 52,205,186, 22, 58, 82, + 82,215, 21,163,241,136,193,112,136, 12, 7, 23, 37,125,193, 19, 69, 49,105,154, 6,235, 91,142,117,150,178, 40,200,211,148,209, + 96,224, 93, 78,206, 49,157, 76,105,116, 67,165, 61,205, 47,142,188,168,216, 6, 36,114,164, 20,147,209,144,143,222,255,128, 44, +207,185,185,153, 5,196,176,184, 5,152,185,123,131,223,246,191,111,117,235, 4,183,132,232,187,157, 75,217,143,133, 13,143,163, +238, 5,245,123,127, 97,233,236, 40,119,180, 74,219,214,199,238,223,237,166,160,237,125, 1, 61,128,205,238, 98,223, 37,193,109, +197,218,237, 15,100,233,171,139, 91, 22,189, 10,209,120,187,201,111,237,247,245,231,240,237, 59, 97, 67, 88,138,175, 72,183,219, +178,221, 8,192, 89, 31,255,167, 53,182, 42, 73,147, 8,173,107,148, 18, 93,107,167,214,254,228,152, 40,159, 75, 30,199, 49, 69, +237,185,216,137, 20,196,106,147, 78,100,157, 37, 73, 34,255,245, 73, 10,132, 89,185,244,249,211,206, 90,226, 80,161, 59, 97,169, + 67,165,100,218, 81,130,244, 74, 78, 41, 28, 81,148,114,189, 42,145, 10,172,147,196,145, 68, 35,153, 60,122,143, 56,203,145,113, +228,231,141,113,140, 72, 82,207,133, 15, 56, 88,235,108, 71, 20,243, 85,139,246, 42,120, 99,130,253,174,109, 61, 6, 88,141,219, +108,232,125, 18,221,173,246, 96, 95,203,176,167, 21,252,174, 8,220, 45,147,248, 62,133,113,223,218,214,210,167,194,169, 86, 69, + 10, 27,198, 30,227,131, 67,172,105, 56,156, 78,169,170, 10, 16, 20,171,117, 24,199, 40,116, 93,117,170,117,219, 6,109,116,155, +186,232, 90,103,113, 28,147, 15, 6,140, 71, 67, 86,139, 5,179,217, 42,168,114,155,110,131,214, 90,251, 27,189, 35, 67,250,235, +241,201,179,231, 12, 71, 99, 16, 48,159,221,176, 94,175, 55,213,185,235, 8,241, 61,113,144,219,105,163,239,107,173, 91,246,152, +103,216,159,105,200,143,186, 11,246, 54,240,157,163, 88,206,169, 86,107,159,209,109, 77, 55, 50, 18,120,156,174,105,106,255, 49, + 37,121,224,224, 71,126,205,136, 21, 70, 27, 68, 20, 51,152, 78,137,199, 62,248,227,240,240,152, 23, 47,190,161, 88,123, 27,224, + 96, 56,226,226,245,119, 32, 28,131,225,148, 55,175,127,224,253,143,255, 44,228, 41, 8, 86,171, 21,113, 44, 25, 15, 15, 56,123, +240,132,211, 7,143,200,242, 1,175, 95,126, 71, 89,174, 59,215,193,205,213, 21,194, 89,172,107,208,141, 38, 82, 49, 73,228, 43, + 46, 21,249,196, 49,227, 44,214,216, 46,148,196,118,185, 9, 46, 88,162, 36,131,209,129, 63,144,225,168,171, 10, 99,253,225,182, +169,181, 87,249, 7, 78,121, 59,207,238, 14,149,237,239,109, 88, 96,223, 1,142,121,215,232,169,219,244,129, 72,170, 91,214,181, + 54,143, 2,185, 1,205,252, 41,157,175,125,254,247,189,207,165,223,141,179,155, 33,147, 53, 62,129,178,181,192, 14,199,195, 0, +185,242, 85,125,163, 11,138,245,146,166, 40,184,186,186,160,210, 21, 77, 99,121,243,230, 53,179,229,188,151,101,224,117, 58, 73, +150,161,141, 97, 85, 22,172,151, 43,140,243,122,151,186,214,204,110,174, 57,127,253,154, 55, 63,124,207,213,197, 91,138,245, 26, +164,228,240,232,152,131,195, 99,132, 76,136, 99,133, 66,114,118,122,143,193,112,194,106,189, 12, 93, 87,112,214,175,231, 77, 99, + 56, 58, 60,244, 27, 93,164, 72,211,196,167,240,133,206,164,183, 87, 71, 36,113, 74,156,250,144,172, 44,203, 56,154, 30,208,104, +205,106,189,226,209,131, 7, 30,248,213,248, 28,121,191, 87,248,117, 60, 82,138, 72, 41,146, 56,230,233,163, 71,124,252,209, 71, + 40,169,184,188,186,232,186,158,109,113, 40,118, 29, 99, 98, 91, 15,212, 63,180,183,127, 47, 17, 72,231,250,228,101,148, 11,193, + 86,248,251,164, 69,187,219, 62, 56,238,244,225,227,207,111,109,154,237,205,190, 67,127,235, 7,179,236, 10,130,250,149,123,247, +247, 61,175,123,255, 36,218,127,188,182,122,221,151,180,214,111, 17,181, 98,173,109, 69,187,220,146,243,111,133, 95,244,146,225, +250,173,255, 54,109,170,127,211,200,112,195,202,144, 57,188, 85,149, 6, 59,133, 84, 10,171,107,159,179,110, 52,177,242, 66, 54, +127,250,243, 22,179, 82, 55,196, 74,250,121, 99, 20,177,174,125,171, 85, 6,180,108,235, 81,116,214,249,100,182,198,118,179,154, +198,152,112,170,147,152,128,144,173,181,193, 73, 65, 85,153, 14,222,159,132,139,210, 43, 53, 35,140,117,220,172, 10,162, 56, 34, + 82,145,223,220,227,140,163,199,207, 16, 74, 33,226, 8, 3, 68,113, 2, 50, 10,149, 73, 80,209,219, 13, 37, 80, 6, 53,101,211, + 4,150,119,208, 32,108,141, 60,118,211,217,118,171,243, 61,200,224,187, 22,180,189, 21,254,158, 5,199,237,177,182,117, 98,205, +254, 98, 39,232,110, 62, 25,208,155, 82, 69,156,157,157,176, 94,175, 49,214,159,198,173,245, 62,124, 99,180, 87,116,247,194, 92, + 8,175,191,239, 33,151,202,183,145,167,211, 49,243,235,107,150,171, 98,163,188,101, 59,217,174, 15,108,242, 96, 32,197,225,201, + 9, 85,185,224,237,155,183,152,166,217,178,227,109,143, 50,118,229,237,242, 39, 83, 2,254, 20, 43,225,187,116, 11,244, 94,207, + 48,207, 89, 46, 87, 52,166, 9, 7,183,128,215,141, 18,226, 65, 30, 98,102, 27,136, 83,148, 76,176, 85,225,223, 75, 33, 25, 76, + 15,153,156, 30,163,146,216, 95, 67, 50, 98,177, 90, 50,156, 76, 89,173, 86, 24, 93,146,102, 67,116,101,121,244,244, 35, 46,206, +191,199, 1,217, 96,192,119, 95,254,142,170,208, 8,225,124,200, 74,163, 89,149,107,102, 87,151,124,245,197,239, 41,215, 75,156, + 19,148,229,202,183, 98,149,191,238,133, 12,161, 50, 33,156,197, 57,219,121,190,109, 99,200, 36,126,222,223, 83,129,139, 54,241, +207, 57, 48,206,119,237,164,236, 72,132, 62, 95,220,244,236,183,219,220, 12,225,216, 8,153,222,161, 31,217, 87,160,188,235, 87, +183, 54,137,109, 63,122,223,238, 33, 16, 63,249, 51,126,215,115,217,237,136,110,117, 86,123,247, 99, 95,123, 98,141,247,161, 99, + 55,217,235, 54, 92, 35,109, 58,165,144,210, 39, 2, 70, 18, 21, 70, 81, 42,142, 81, 73, 76,148,196,158, 46, 23,222,127, 99, 12, +117, 93, 83,148, 37, 77,211,144,132,110,105, 54, 28,121,220,237, 96,202,205,236,138,155,155, 75,170,178, 98,118,125,205,186, 40, +120,244,248, 9,191,252,171,191,162,214,154, 56, 75, 81, 42,226,248,232,132,199, 79,158, 81, 20, 21,171,213,154, 15,159, 63, 39, + 75,115,226, 40,198, 58, 65, 18, 39, 36, 73, 26,112,177, 81,119,152,246,177,177,145, 31, 61, 10, 56,156, 78, 25, 13,115,230,243, + 69, 7,161,242,243,121,175,133,242,130, 58, 13,150, 32, 52,246, 45,252, 39,143,159,240,217, 39,159, 82,150,165,207,109,151,226, +118, 32,204, 78, 58,219,214, 62,197,109, 97,157,227,110,216, 91,187, 91,201, 94,177,163,238, 63,125,239,243, 86, 21,206, 14, 67, +189, 21,203,237,122,194,111,217,202,246, 44,216, 46, 8,214,222,181,120,187, 91, 25,181,251, 90, 19, 50,248,222, 55, 27,110, 63, + 37, 78,244,114,221,251, 73, 89, 45, 98,181,109,203,118, 96, 26,122,111,112,103,223, 18, 93,235,169,205,125,247, 11,133, 12,192, +153,224, 63,182,190, 58, 54,186,102, 24, 75,154,112, 81, 59, 7, 81, 36, 89,150, 53, 82,248,141, 23, 33, 88,107,141,182, 16, 73, +137, 18, 46,228,244,110,124,135, 42,242,237, 98,165,130, 93, 3, 71,146,198, 33,198, 50, 96, 75,113,232,102, 83, 18,164,137, 34, +138, 54, 16,157,166,105, 88,213, 13, 74,122, 81,151,192, 33,135, 83,210,201,161,143, 62,180,198, 43,217,195,197,225, 2,160, 68, +181, 81,159, 61,159,100,247,188,100, 0,226,132,104, 88,211,165,127,189,195,186,115, 71, 75,254,174,246,251,238,103,110,239, 16, + 7,109,210, 23,237,158,138,114, 91,133,174,130,245,168,139, 79,148,146,179,147, 83,138,181,143, 96, 93, 23,171,144,142,167,168, +202,178, 3,138,244,189,234,219,155,122,168,212,243, 33,147,201,152,213,114,206,114, 85,110,143,138, 58, 97,166,236,156, 1,126, +188,226,181, 9,207, 63,252,136,197,205,140, 60, 31, 50,155,207,252,253,228,122,185, 13,253, 62,132,187, 75,197, 78, 15, 94,177, + 43, 27,220, 95,115,139, 61,137, 80,183,133,114,183, 25, 0,221,225,215, 52,172,138,117, 87, 93, 33,101, 71,164, 54, 85,233,133, +148,113,138,106, 28,214,105,191,152, 36, 41,249,228,128,193,217, 25, 34,220, 3, 14,135,147, 18, 21,197, 12,243, 17,105, 62,228, +252,252,130, 98,181,196,153,154,229,242,154, 52, 27, 51,200,115,144, 17,186, 42,177,182,161,177, 94, 89, 47,132, 32,207, 71,204, +110,174,105,170,218,111, 44, 66,120, 81,147,105,130,245,204, 82, 20,107,176, 62,230, 88,135,128, 26,135,192,104,205, 40,242,182, + 38, 35, 19,127,112, 14,218, 25,169,100,239, 32,239,200,243,140,178, 88,227, 11,122,215, 69,157,210, 41,156,183,123,224, 91,122, +228,240,129,182,145, 17,110, 7, 13, 74,207, 71,204, 59, 14,189,219,105,133, 59,155,186,184,125,117,252,216,227,237,174,215, 63, +118,184,232,219, 50, 85,228, 67,146,220, 22,157,180, 79, 56,180, 97,141,247,235, 21,194, 31,128, 91,148,177,140, 35,226, 52, 37, +201, 82,226, 44, 35,201, 50,210,193,192,255, 62,245,127, 86, 82, 5, 16,146,183,217, 58,231,168,235,134,198,104,170,162, 96, 57, + 95, 48,159,249,110,140,214,190,107, 18, 7,143,185,177,240,250,205, 57,175,127,120,193,229,219, 55, 44, 23,115,138,178,228,102, + 62,195, 57,203,193,100, 74,150, 13,136, 18,255,184,195,193, 48,196, 88,107,162, 40,246,128, 46, 92,151, 25,143, 16, 36, 73,130, +117,142,197,122, 69,154,196, 28, 78, 38,148, 85,137,146,138,209,112,136, 20,144,196, 49,105,150,134,245, 86,116, 93, 94,129, 32, + 77, 98,142,143,142,248,229, 95,252, 37,159,126,252, 9, 87,151,151, 62, 2,186,165,254, 5,154,222, 46,251,189,239,104,107,239, +241,109, 30,252,166,128,233,255, 39,130, 80,174,255, 17, 69,237,197,234,118,111,240,128,131,220,253,160,251,196, 57,217, 9, 33, +220, 86,219,105,183, 5,191, 47,243,188,127, 88,224, 29,234,247,190, 79, 61, 78, 18,111, 95, 8,217,205,221, 38, 31,236, 97, 66, +109,183, 44,189,170,115, 99, 77,107, 1, 51,125, 49, 92,167, 71, 9, 25,234, 22,219,249,198, 17,108,226, 3,165,132,196,211,149, +156, 49,216,106,193, 32, 75, 41, 43,237,113,155, 64,166, 34, 26, 99, 81, 89, 68,161,235,112, 40, 48, 88,160,208, 22, 37, 28,113, +236,130,210,220, 32,140,199,147,122,168,141,195, 52,142,104,164,168,145,212,193,171,106,173,161,177, 13,206, 41,164,136,186, 76, +225, 22,180,210,126,236,198,181,239,175, 34,206,135,157, 7, 62,138, 34, 76,152,243, 8,231,176, 33,136,196,226,124, 8, 77,139, +254, 13, 42,127,239, 71,182, 29, 97,141, 78,180,225, 59, 16,214,184,173, 78,206,150, 14, 98, 79,155,253, 46, 10,215, 59,195, 92, +122,157,129, 62, 43, 97, 19,102,225,246, 8,190, 68,104,177, 10,140,181,196,113, 76, 89,172, 59,205, 64,211, 24,162, 56,161,209, +197,150, 80,114, 19,174,210, 35,188,245,246, 56,139,143,186, 21, 66,145,100, 73, 15,148,177,113,127, 72, 41, 25,142, 70,228,195, + 33,243,171, 43,106,173, 81, 82,117,110,129,178, 42,253,231,189,101, 61,113,183, 77,103, 59,239,161,127,142,225,107, 59,193,148, +184,229,165,191, 75, 76,239,110, 7, 66,109,223, 31,239,208, 66,100,113,138, 48,230,255,167,237,205,154, 44, 73,210,243,188,199, +195, 99, 61, 91,158, 92, 42,107,223,186,122, 95,208,221,179, 1, 24, 12,193, 1, 8, 98, 35, 65,137,102, 36, 69, 19, 37,147,153, + 76, 23,148, 81, 50,234, 66, 63, 0,183,250, 21, 52, 74,102,210,133,126, 1, 37, 25, 9,129, 48,112, 48,192,108,152,233,158,238, +234,170,174,125,201, 61,243, 44,177,187,187, 46,220, 35, 78,156,147,153,213, 13, 26,149,102,105,221, 89,149,149,203,137, 8,119, +255,190,239,125,159, 23,227,200,106,109,247,203,147,120,161,143, 8,124,116,158, 83,234,202,126, 93,233,163,241, 88,191,254, 26, +189,141,117,178,233,140, 50,155,225,213, 54,107,221,212,138,241,104,141,167, 79, 30,130,177,240, 19, 35,124,148, 50, 92,184,116, +147,221,151, 79,200,143,142,201,103, 41,181,174, 40,138, 28,173, 52,107,227,117,187, 40, 3,121, 49,199,247, 37,243,227, 41,210, +179, 68,188,170,200,201,179,202, 5, 25,105,188, 32, 32,244, 96, 45, 14, 56,152,165,248,210, 99,115, 60,226, 56, 45, 41,138, 2, +233,198, 41, 69,158,227, 75, 65, 85, 87,206, 10, 9,113,111,132,214,154, 34, 79, 45, 73,210,173, 27,173,118,195, 99, 73,175,208, + 4, 35, 45,186, 29,167, 59, 85, 13, 45, 76, 59, 13, 79,247,190,251, 42, 33, 93, 23, 6,213,109,135,159, 7,161,121, 85, 76,236, +215,137,144, 93,173,206,173, 43,192,107, 79, 16,178,165,124, 90,188,178,104,133,117,142,111, 41,108,245,237, 5, 1, 34, 8,221, +134, 30,179,190,185,229,186,133, 1, 81, 28,211,235, 37, 8,167,108, 47,203,202,209, 16,237,186, 26,250,146, 36,234, 99,140, 33, + 77,103,236,191,124,134, 16,130,162, 44, 73,164,199,209,209, 33,243,185, 5, 74, 73, 35, 28,176, 9, 60,223,166,175,229, 69, 73, + 47,233, 17, 70, 33, 39, 66, 48,153,229, 12, 71, 16,245,122, 60,223,221,103, 60,236,115,241,194, 5,138,178,160,168, 74, 6, 73, + 31,129,108, 92,165,173,227,197,247, 3,142,231, 5, 85,165,185,176, 49, 38,207, 51,180,170,217,190,112,193,230, 72, 32,232, 39, + 22, 61,107,181, 73,117,171,213,169,141,193, 80,114,235,250, 77,254,229,255,248, 47,249,209,143,127,196,191,249,191,255, 13,251, + 71,135,228,133, 21,226, 89,228,184,118,200,112,221, 22, 22,139, 52,184,197,254,169,219,235,190, 40, 8,149,235, 48,121,103, 20, + 90, 45, 38,182,217, 60, 57,199, 87,217,204,171,165, 59,217,118, 67, 86,228,138, 96,238, 44,145,219,170,104,174,249, 59,217,216, +228, 58, 33, 50,221, 9,225,146, 34,191, 57, 80,184, 95, 60, 8,252,133, 77,205,253,163, 5,242, 83, 57,225,148,171, 52,221, 92, +173,133,212,152,142,183,185,201, 52,239,136,134,236, 41,206,169,229, 27, 8,141,123,129,101, 24, 99,170,130, 65,232,132,101, 70, +163,149,109,171, 23,202, 42,216, 43, 23,138,145,215, 86, 40,167,141, 33,144,146, 80, 74,235, 73,215, 26, 85, 59, 33,138,214,212, +202,182,240,141,209, 40,229,172, 28, 74, 81, 42, 77,237, 20,243,129,244, 8, 3,175, 19, 77,104, 23,157,121, 94, 83,106, 72, 2, + 31, 63,140, 9, 55, 46,224,133,161, 21,176,187,153,120,115, 58, 12,253,160, 37,125,181,179, 25, 79, 58, 13,133,110, 15, 82, 30, + 2, 41,236,251, 2,107, 42,206,174,240,224, 76, 91,226, 89, 85,194,215, 17,202,137,229, 35,235,138, 58,252,180, 88,164,241, 94, +123,222, 98,113, 29,140, 70,104,163, 88, 95, 27, 3,216, 76,122,101, 67,113, 60,207, 86,122,182,165,108,218,140,243,198,115,221, + 77,110,147,129,207,112,180,198, 96,216, 39, 79,167, 76,167,169,237, 10,116,112,194,113,146,216, 32,157, 44, 35,233,217,156,106, + 91,249, 37, 92,189,126, 3,173, 20,199,135,135, 45,127,222, 51, 44,217,160,186, 2,183,115, 85,236, 98, 25, 76,179,252,186,153, +149, 10,254, 52,144,228,213, 54,184,211, 94,235, 74, 85,164,217,220, 82,191,140,182, 42,114,165,236, 60,186,174,168, 43,155,136, + 22,184, 49,135, 39, 60,100, 16,179,121,243, 6,198, 8,250,107,235,244,215,198, 8,223,119,155,159, 38, 75,231, 80,229, 72,135, +228, 28,111,108,115,178,255, 28, 53,217,103,154,165, 76,142,143,172,157, 40, 75,173, 94, 36,140,185,121,231, 77,162, 56, 65,213, + 53, 73,220, 35,157,167,212,101,238,218,234,245, 98, 83,113,241,154,104, 99, 83,216,234, 26, 37, 4,218,192, 36,175,237, 33,217, + 24, 12, 30,189,193, 0, 99,106, 43,170,116,130,200, 32, 76, 8,162,200, 69,246,218, 3, 64,107,215,115,173,122, 79,122,103, 90, +148, 16,103,193,129, 22,151,106,184, 49, 38,238,247,240,157,102,163,113,220,156,167,128,239, 94, 99,179,146,200,246, 55,157,163, +191,138, 33,113, 94,177,213,126,236, 58,133,150,172, 41,157, 29, 87, 47, 1,189,108,129, 43,108,171, 93, 74,103,137, 12,136,251, +125,130, 36, 97,180,190, 73,220,239,147, 12, 7,172,141,199, 36,131, 1, 97,191, 79,111, 56, 64, 38, 17,194, 11, 40,234,130,249, + 44,101, 54,155,114,116,120,192,206,206, 11,246,118,159,115,120,112, 96, 15,231,101, 65, 16, 4,244, 6, 67,134,107, 99,162, 56, + 33,137, 99, 27,115, 93,169,150,231,208, 32,180,237, 70,171,168,139,146,227,227,125,210, 52,165, 44, 42,102, 39, 7,124,227, 91, +191, 74, 81, 89, 29, 85, 85,164,182, 43, 84, 87, 75,123, 83, 94, 20,110,111, 18, 84,218,144, 21,182, 64,219,218,220, 64,213, 53, +195,225,144, 36, 73,236,154,238,251, 68, 81,136,244, 4, 81, 24,182, 89, 25, 30,154,170,178,120,234,235,215,111,242,221, 95,255, + 46,158,240,216,223,221,181, 27,177,183, 18,217,186, 50,115, 95,134,183,117,148,146,139,126,253,233,118,124,115,248,186,112,237, +198, 31,211,153, 35,175,230,165,175, 6,212,119, 83,220,196,138,239,177, 57, 24, 4, 65,208,225,187,159,223, 98,106,126,240,230, +192, 96, 58,237,198,238, 24, 96, 65,237,177,159,228, 75, 31,233, 75,151,124,214,137, 92, 21, 11,145,146,173,182,235, 78,203,171, +147,246,213, 68,162, 98, 51,209, 45,209,199, 44,181,199,148, 82,237, 2,223,140, 18,154, 3,141,231,121,144,244, 9,242, 57,161, + 19,150, 41,160, 86,138,162, 86, 4,158,135,198,102,171,151,104, 7,113,209, 4,158, 36,137, 66,132, 39,200,138,146, 74, 27,140, +139, 98, 5, 75,158,171, 74,229, 60,163,134, 90,215,212,218,107,245, 2, 66, 24, 66, 63,112, 22, 36,119,154,243, 60,242,178, 38, +175,173,197, 42,217,216, 32, 28,172,227,133,161,123,232,180, 11,168,145,248,210, 39,240, 36,113, 16, 18,248, 62,129,148, 72, 79, + 16,120, 16, 74, 15, 97, 12, 81, 24,226, 53,179, 67,161, 23,177,142, 13,120, 4,179,136, 63,237,130, 19,190,162, 58,120,213,204, +241, 44, 27,163, 89,113, 68,172,170,238,155, 74, 73, 47, 40,200,246,244,238,132,141, 81, 28,163, 13,140,134, 35,194, 40,100,158, +218,234, 43, 47, 82, 80, 11, 15,111, 99,117,178,182, 30,209, 6, 72, 52, 7, 89,233, 7,248, 65,192,104, 96, 55,245, 52,205, 23, +129, 88, 29,248, 76,145,103,212,117, 77, 89,148, 4, 29,223,186, 50,134,183,223,124,139, 23, 47,118, 72,211,217,146,192,207,156, + 25, 88,124,218,218,214,249,104, 5,169, 41,206,152,173,155,206, 6, 35,120,213, 30,240,170, 56,221,192,151,164,243,212,118,107, + 60,223,233, 51, 34,219,245,241,164, 19,198, 9, 43,170, 20,224, 5, 33,227,139,151, 89,191,122,139,116, 54, 5, 85, 96, 60,159, +193,104, 29,207, 15, 93,248,145,102,115, 60,230,234,181, 91, 4, 97,108, 3,106, 60,152,206, 38, 84,121, 78,216,235, 83,228, 25, + 23,175, 92, 39, 47, 21,227,141, 49, 70, 25, 30, 63,248,130,201,241, 49, 51, 7, 68, 49,216,241,152, 17,160, 84,101, 69, 80, 73, + 15, 79,250,109, 21, 84,105,211,182,239,133,108, 90,237,118,228, 20, 70,129, 35,142,233,246, 80,175,117,205, 96,184, 70,150,231, + 54,136,167, 42,209,170,118, 27,160, 91,235,140, 62,117, 0, 51,102,249,112,181, 60, 30,178,207,109, 93,219, 49, 65, 81,216,132, +180, 94,175,183, 68, 69, 59, 43, 38,186, 9, 17, 17,136,115, 97, 77, 95,167,237,126,158, 95,254, 85, 29,181,110,113,230, 75,191, +237,128, 90,101,119,135,150,102, 4, 32,173, 13, 43,240,145,126, 8,158, 71,152, 36,132,113, 76,152,244, 8,251,125, 6,235, 99, +214, 47,108, 49,218, 88,231,189,119,222,230,251,223,253, 53,254,179,223,251, 61,254,235,255,242,159,113,233,227,111,112,255,243, +135,164,243, 9, 85, 81,161,155,195,119, 85, 83, 87,165, 21,209, 41, 69, 58,157, 49,155, 76, 40,178,148,249,108,198,108, 54,103, + 56, 26,210,239,245, 90,200, 76,163,141,105,102,252, 13,125, 51,136, 98, 48,134,191,251,187,127,143,157,221, 61,158, 60,121,200, +250,198, 22, 74, 27,134,253, 1,113, 20, 33,189, 69,200, 74, 24,132,110,127, 16,173,240, 87, 27,193,116,158,146,244,251, 68, 97, + 72, 93, 22, 68,161, 77,105,108,198,158, 24, 99, 25, 35,190, 21,208,121, 46,165,208, 30,228,124, 62,252,240, 35, 62,254,248, 99, +142,142, 14, 73, 83, 27,247,235,251,114, 89,175,182,228, 80,241,150, 15,232, 98, 33,140,235, 10,138, 13,166,237, 26, 25, 79, 44, + 87,234, 93,161,143, 56,163, 98, 90,218,104,207,240,168,175, 46,226,194,205,101,206, 82,202,119, 63,150, 43,228,186,110, 23,160, + 21,104,104,237, 48,158,139,155,221,115, 17,161,184,205,166, 17,118, 53,153,226,158,183,220, 85,104, 54,243,110,136,135,105,230, +181,157,249,125,227, 37,247, 26, 86,188,155,121, 27, 71, 97,210, 74, 65, 16,162,138,146,190,175,157,135,177, 6, 4,133,178,169, + 72,181,182,153,216,149,182, 62,104,187,121, 10,122, 97,224,128, 50, 53,165,214,148,117,141,241,164,245,184, 27,231,189,116,121, +237,133, 54,237,108,219,206,126,236,117, 82,202, 50,228,125, 41,172, 26, 83, 8,114, 23,210, 50,190,124,147, 32,233,225, 7, 65, +171, 39,240,125,233,188,149,214, 95,153,196,145,245,108,122, 16,152,146,141, 97,159,155, 23,199, 92, 28,245,185, 48,140,233, 71, + 33, 85,145,225, 11,171, 20, 23,221,140, 96, 99, 28,163,120,133,130,212, 57, 48, 45,165,248,157, 35,128, 60, 87, 24,215, 13,115, + 57, 99,203, 19, 43, 42,248,198,165,209,160, 37,219, 92,117,191, 33,228,197,108,172,175,115,120,116,132,116,243,214,230, 97,213, +170, 70,105,219,158,183, 21,135,215,122,215, 27,133,171, 39, 37,195,209,144,209,112, 64,158, 78,152,205,173,146,190, 86,150, 29, +208,204,100,149, 82,205, 74,183, 20, 24,148,244,251,124,118,247, 19,182, 47, 94,226, 96,111,111,233,254, 53, 75,112,138,118,219, +126,197,188,124,209,150,235,126,188, 88,199,205, 18,113,236,172,179,214,105, 91,187, 88,138,185, 53,110, 97,172,148,178,169,128, + 66, 0,150,113,111,202,202, 45,158,170,181,132,106,103,165, 49, 26,198,151, 46, 67, 16, 49, 24,173, 81,151, 21,170,204, 40, 84, +141, 16,144,244,134, 8, 41,216, 26, 14,209,117,142,174, 21, 39,199,187,108,142, 55, 56,153,204,168,148,177, 74,226, 56,177,243, + 86,233, 49, 24, 36, 8,207, 48,222, 88,119, 27, 12,132, 81,224, 4,141, 86,204,134, 39,136, 93,222,119, 16,197, 12, 6, 35,100, + 16, 17,134,177,163,196,249, 36, 73,159,126,127,136, 17,134,168,215,115, 86, 33, 7, 91,113,190,231, 56,138,241,165,199,225,238, + 30,190,244,169,157,216,206, 58,135, 93, 1, 33,204,121,147,166, 51,245, 30, 0,194, 37, 62, 14,135, 35,146, 94,130, 31,248,172, +143,215, 57, 57, 57,121,165, 70,169,219,162, 55, 30,175,156,201,159,167, 73, 58,111,220,181,186,217,175,118, 82,187,136,109,123, +120, 94,198,178, 54,135, 26,207, 19, 14,163,234,163, 49, 72, 25, 32,124,137, 23, 72,188, 40, 34, 25,140, 24,109,110,242,237,239, +253, 38,255,253, 63,251,167,252,183,255,197, 63,230, 15,191,247, 61,190,249,246,219,108,109,111,163, 67, 31,111,109, 76,230,173, +241,240,211,159, 81, 87,181, 67,215,186, 60,117,163,241,156,144, 46,240,125, 64,217, 67, 91,101,157, 23,101, 89, 80, 86, 37, 85, + 85,181, 14,151,174,240,181,161,144,190,245,246,187,140,215, 70, 28, 79,142,120,248,224, 62,191,255,123,255,128, 52, 75,137,162, +152,254,104,196,218,104,141, 94,210,183,192, 40,199, 33,104,210,254, 60, 79,162,116, 13, 24,170,170, 38, 77, 51,210, 44,103, 52, + 26,225, 75,159, 36,137,108, 84,181, 47, 25,174,143,173, 98, 93,184,144, 48,223,190, 78,129, 47,219, 34, 96, 99,125,157, 15, 63, +250,136,219,183,110,241,252,197, 11,151, 12,231, 45,146, 65, 29,189,174, 77, 27,245,108, 4,118,155, 61,191, 34, 84, 95,141,168, + 22,158,135,191, 10,245,160, 19,226,210,253, 34,109,213,202, 57,152, 59,183,192,117,171,107, 58, 11, 80,227,201,238,206,226,151, + 23,119,125,138,216,164, 59,226,172,166, 21,174,148,162,114, 11,163,239,251,237, 70,226,121,182, 98,174, 85, 67, 69, 51,237, 2, +217,216,222,194, 48,112,240,126,185, 0,149,184, 86,188, 37, 14, 45, 44, 78,190,107,145, 55,115,142, 38, 48, 70, 91,105, 51,194, +128, 30,172,161,166,150, 84,149,151, 37,101,165,240, 61, 65,213, 88,196,220, 89,171, 54, 6,129, 79,221, 28, 62,132,245,164, 23, + 74,163,141, 38, 54, 32,195,144, 82,105,180, 1,175,214,212,198, 80, 43,251, 96,249, 46,193,205,151,134, 90, 43,148, 22,104, 93, + 32,189,208,138,224,114,171,186, 15,226, 1, 97,175, 79, 16, 70,104, 1,129,144, 8, 97, 23,173, 80,122,188,255,206, 91,252,218, +119,190,195,120,188,206,139, 23, 47,169, 78,142,248,240,218, 58,178,180, 9, 86,181,170,172, 85,200, 93,247,231, 7,199,220,125, +186,199, 95,125,241,132,105, 81,145,187, 3,139,208,134,122, 65, 36,239,120,156, 23,221,154,110, 87,228,188,217,223, 89,226, 75, + 86,128, 51,221, 42, 93,116, 14, 97, 6,240,244,194, 10,182,186,100,149, 85, 69,127, 56, 98, 62,155, 19,248, 33, 24,207,138, 96, +180, 70, 87,218,102,129, 47,109,160, 54, 31,124,181,106, 22, 90, 83,150, 5,202,109,216,129, 47,219,195, 37, 88,209,140, 49, 22, + 98,210,237,242, 20,101,201,214,246, 37,252,164, 71, 48,139,121,242,248, 73,171, 61, 81,173,101,197,141,118,132,109,115,122,230, +171, 45,104,167,237, 73,167,105,114,171,237, 97,173,207,210, 58,184,223,207, 89, 2, 27, 13, 74,251,210, 27,160, 25, 87, 73,105, +169,138,162,196, 8,129, 31, 68,206,234,105,108,166,129,178, 93,188,160,215, 39, 73, 18,202,170, 32, 24, 12,144,194, 67,213, 37, +218, 24,242, 98, 78, 40,125,140, 22, 68, 97, 76,224,135, 4,226, 10,235,219, 23, 57,154, 76,184, 16, 39, 28, 31,236,177,185,185, +201,108, 54,227, 63,255, 71,255,148, 90, 27,210,172, 96,231,229,115,132,119,151,253,157, 23,108, 95,187,206, 96,184,198,252,228, +144, 47, 62,251, 4,207,225,105,165, 19,189,230,197,156,170,168, 8,130,144,164,159, 88, 4,108, 16,130, 20,110,179, 15, 48,194, + 67, 8,187,248,139,186, 70, 43,136, 70, 67, 60, 63, 98,115,235, 2, 71, 7, 7,110,243,142, 80,170,116, 57,241,242,149, 27, 36, + 75,221, 44,231, 28, 66, 32, 12, 92,216,216, 98, 56, 94, 35,157,206,152,207,231, 28,236,239,211,239,247, 73,211,180,117, 96, 44, + 92, 62, 30,202, 88,194, 91,115, 61,132, 62, 61, 14, 61, 75,236,214, 77,181,252,155, 36, 37,118, 59, 6, 45, 91,189, 33, 26, 90, + 1,206, 82,183,211,122,241,125, 55,219, 21,224, 53, 99, 81,215,154,151,182,106,151,113,196,250,165, 27,124,255,159,252, 55,188, +126,117, 64,207,253,235,220, 61, 75, 18, 65, 32,224,221,143,127,133,159,255,135,143, 72,255,242,223, 83,250, 1,120,121,187,126, +218,145,143,162,168, 43,192,142, 52, 61, 64,212, 86,196, 88,212,117, 91,120,105, 93, 59, 49,178, 92,154, 77, 31, 29, 31,129, 30, +113,229,218, 77,174, 94,185,197, 95,252,224,207, 88, 91,223, 96, 52, 92,195,151, 33,113,111,204,221,123,159,113,124,116,200,149, +203, 87, 88, 27, 14,144,126,224,176,181, 2, 95,218, 12, 4, 75, 21,180, 58,168,167, 47,118, 73,226,136,237, 11,235,108,110,110, +184,145, 27,196,131, 62, 50,180,241,174, 85, 93, 81,229, 5,105,150, 81,149, 5,126, 96,133,135, 27,235, 99,190,253,173,111,113, +229,242,101,254,237,191,251, 19,254,226,135, 63,100,158,205, 73,139,194, 30, 74,252,198, 22,220, 92, 83, 59, 10,142,195,192,229, + 85, 24,202,178,108,187,201,102,165,208,145, 23,175,221,248,227,238,209,243,172, 86,144, 56, 67, 72,177, 42,116,234,222, 16, 77, +187,122, 21, 36,211,110,232, 29, 1,157,148,142,171, 43,101,203, 60,246, 86,190,207, 89, 25,235,141,144,170,129, 24,180, 11,189, + 88, 6,221,208, 73, 48, 51, 29, 47,160,231, 84,136, 93, 32,142,181,146,249, 22, 48,160,117,235,107, 95,220,248,166, 69,199,106, + 12, 66, 6,228, 69, 65,172,107,148,209, 40, 13,165, 82,182,250,198, 35,115, 85,159,104, 88,239, 2,250,161,205,108,159,229, 21, + 89,109,219,179,141, 60,162,172, 21,117, 3,126, 1, 74, 99,163, 93,147, 72, 82, 57, 38,115,232,251,228,181, 34,171, 44, 56,163, +210, 10,141,197,115,142, 47, 95, 35, 25,108, 16,248,176,222,139,217, 94, 27,112,105,173,207,157,173, 33,223,188,115,141,141,216, + 39,159, 77, 56, 62,158, 16, 70, 61, 8,122,124,190, 51,101, 39, 83, 40, 4,101, 62,179,135, 6, 99, 65, 58,195, 36,225,206,197, + 49,191,246,222, 29,198,177,207,254,193, 49,153, 90, 84,210,170, 83, 10,138,149, 50,240,111,154, 50,245, 42, 43,155, 88, 81,121, +181,215,114, 73, 69, 78,123,120,212, 90, 35,164,100,224,210,163, 54, 55, 54, 57,153, 76, 73,122, 49,179,217, 20, 15, 15,101, 22, +233,106,139, 16, 31,227,132,206,237, 48,202, 18,165,226,152,225,112, 72, 89,204,169, 74, 77,154,229,173,254, 34, 12, 67,170,170, + 58, 29,102,131, 33, 74, 6,108, 95,190,204,241,241, 17,147,163,195,101,143,191, 89,252,252,218,205,132,219,252,250, 87, 84,234, +231, 41,219,151,102,176,231,107, 23,219,205,252,212, 6,181, 20,123,233,152, 13,141, 59,192,184, 77, 77, 70,246,243,221,235, 85, + 23, 57,166, 42,237,152, 70,193,232,226, 37, 42,165, 64,186,103,210, 88,165,122, 24, 37, 36,201, 16,180, 33,150, 53, 82, 27, 62, +252,240, 27, 36,189, 1, 65, 28, 83,171,218,117,192, 42, 54,182,182,248,238,119,127,155,170, 42,248,209, 15,254, 61, 59, 47, 30, +243,226,233, 3,166,199, 71,164,233,140,163,221, 23,236,191,120,198,108, 50,163,215, 75,236, 12, 61, 8, 81, 74,225, 7, 1,155, + 23, 46,209, 27, 12, 91,214,134,210, 53, 74,149, 36,113,143, 48,140, 40,202, 10, 92,128,143,144, 62,101, 81,217, 42, 72, 89, 90, + 88,158,102,182, 43, 97, 52, 65,175,111,117, 46,170,217,120, 87,220, 3,205, 53,236,250,213, 91, 78,129,104,215,181,143,190,241, + 49,198,243, 56,220,223,103, 54,157,185, 46,131,106,215,203,110,117,220, 8,167, 76,247,230,215,230,107, 43,220,207,179,169,157, + 69,239, 60,235,217, 91,170,246,219,207,243,150,173, 86,158,103,115,233,189,197, 40, 66, 72, 31,225,135,200, 48, 68, 6, 17, 81, +156, 16, 13,199,188,253,173,239,115,245,141,111,176, 57,246, 8,132,203,199, 0, 20,130,169, 49,236, 23,138,163, 12, 6,195, 45, + 62,251,201, 95, 82, 21, 25,117, 85, 57, 56,148, 21,208,217,180, 75,133, 48,198,226, 88,141, 61, 56, 27,173,145, 66, 32,132,194, +212,202,185, 74,154,188, 10,171, 95, 26, 95,216,230,250,245,235,188,118,251, 54,247,239,125,198,227, 7,247,136,147,132,209,160, +199,246,133, 77,130, 40,226, 79,255,244, 79,120,244,228, 1, 15,191,188,207,103,247,190,224,225,147, 71, 76,102, 51,242, 74,187, + 89,121, 96,149,241,129,133,214,140, 70, 35, 54, 55, 55,241,131,128, 44, 43, 40,235,138,225, 96,136,239, 91,134,124, 55, 78, 59, +112, 88,106,165,236, 56, 65,107, 69, 24, 70,196,253,136,245,245, 49,239,190,247, 14,119, 94,187,205,227,135, 79, 90, 54, 6,157, + 53, 64, 58,118, 75, 20, 71,109,231,193,151,146,126,191,223, 2,222,186, 33,100, 2,135,137, 93,248,186,151, 69, 20, 75,149,122, +167, 21,223, 86, 99,157, 69,182, 81,136,139, 21,104,136,160, 19,227,218,217,240,155,175,169, 26,175,176,227,174,215, 46, 28,101, + 53,150, 85,117, 42, 33,233,196,102,221, 27, 81, 41,213,218, 73,172,160,195, 56, 21,183,183, 12,166,105, 8,110,238, 64,224, 59, +157, 64, 35,178,106,108, 92, 77,190,175,116,177,169, 11,206,189, 93,132,219, 83,181, 16,200,124,142, 54, 53,181,182, 27,123,230, + 80,160,165,214, 40,219,159, 68,120,182,179,208,151, 30,190, 39,153,151, 53,179,214,183, 44,156,154, 84,218,255, 26, 43, 6, 44, +106, 91,185,135, 78, 63,160,181,194,243,237,225,167,172,237,140,178,172,106, 20,134,164,215,227,205,183,222,224,157,155,151,121, +239,198, 85, 46,174,245,232, 73,141,174, 10,230,233,156,227,201,132,162, 40, 81, 69, 65,157, 78,121,254,248, 75, 62,255,226, 51, +102,179, 25,198, 15,121,240,242, 24,146, 53,118,247,119, 57,153, 30, 51,205,114,166,217,220,122,237, 85,205,246,250,136, 15,239, + 92,167, 44, 10, 94, 28, 30,219, 74, 93, 47, 20,192, 75,150,200,175,225,201,253, 42, 49,157, 56, 79,121, 36,132,173,104,117, 87, +216,181,188,169, 43,165,137,162,136, 36,233, 19, 70, 17, 73,146,160,220, 33, 45, 75, 83,215,230,107, 82,250,212, 34,232, 71,177, + 8,120,105, 68,146,158,160, 63, 24,208, 75, 18,116,149,113,116, 60,105,133,149,150,123, 80, 83,185,184,204,133,191,216, 46,124, +227,205, 77, 6,227, 77,166,135, 7, 54,250,213, 85,227,194,216,152, 85,207, 8, 52,102, 17,185,218, 84, 78, 46, 67,121, 89, 28, +119,122, 34,190,252, 18,122,103,136,232,196, 89, 19,243,115, 62, 90,174,252,141,209,148, 69,142, 48,154,126,156,216, 96,160,124, +142,208, 21, 90,215,120, 98,185,197,111, 60,232,173,109, 18,245, 6, 84,101,105,103,223,170,198,168,154,170,200,208, 85, 69,224, +251,252,202,157,183,201,230, 19,214, 55,215,121,244,240, 75,164,128,167,143, 30, 48,232,247,185,243,230,219,124,244,193,135,236, +237, 61,199, 24, 65,208,239, 51, 24,173, 17,245, 7, 84, 90,113,114,120,140,239, 75, 60, 63,164, 86, 41, 69,154, 57,251,148,135, +239, 7,132,113, 66, 20,217,192,150,193,218,152,181,141, 77,251,186, 56, 1,119,158,219,104,206, 38, 42,121, 52, 24, 90,207,178, + 19,235,206,211,185,211, 12, 8, 42,101,147,221,234,170,194,232,106, 57, 2, 83, 72,132,177,207,233, 42, 6,200, 45,118,173,248, +105,125,125,204,230,214, 38, 73,175,207,116,122,130, 39, 5,131, 65,159,170, 42,208, 70,181, 93,192, 56, 9,232, 37,137,173,206, + 26,154,155, 88,133, 49,125,125, 30,193, 89,232,237,243, 50, 58, 78, 9, 87, 61, 15,227, 45,194, 72,108,161,228, 89,231,131,180, + 48, 43,225,249,246,117,112, 65, 56, 66,250, 8,233, 89,123, 90, 24,226,199, 9,189,126,204,205,119,191,195,229, 91,175,211, 79, + 96, 16,122,104, 32, 23, 48, 7,166,198,112, 92,106, 78,166, 10, 63, 24,112,124,176,207,193,139, 71, 78, 17, 95, 97,234, 26,212, +226,208, 45,140,177, 92,128,206, 94,101,217, 20,157,188,121,151,163,225,121,146, 48, 12,121,231,131, 15, 73,122,125,142, 14,247, +233,247, 98,202,178,230,198,245, 27, 92,185,114,157,209,104,204,159,255,135,127,207,151,247,239, 50,222,216, 34,140, 34,164,144, +228, 89,198,213,107, 55,120,255,157,247,200,139,140,159,253,226,231,252,197, 15,127,192, 95,253,232, 71, 60,121,242,152,141,245, +117, 46,109,219, 60, 7,233,217, 44, 14,233, 75,194, 40,116,130, 74, 73, 20, 39,120,194,163,204, 75,138, 60,167,174, 42,132, 39, +232,245,251, 12,215, 70,132,145, 77,196, 11,130,128,173,173, 77,126,245, 87,191,197,211, 39, 79,153, 77,103, 86,163,226,174,183, +244,237,120,175, 46,107,119,208,182, 5, 87, 85, 85,237,235, 18, 39, 49,190, 31,180, 99, 7,191,123,172, 63,143,130,212,204,193, +140, 89, 25, 0, 0, 32, 0, 73, 68, 65, 84, 41,206,108,143,118,218, 62,221,207,107,110,106,229,230,211,205,230,184,104,105, 47, + 8,114,139, 74,193,250,130, 27, 72, 71, 23, 80,211,253, 62,221,182, 60,206, 86, 65,151, 50,167, 77,155,109,222,206, 23, 59,128, +154, 70, 65,223,181,154,104,101, 90,202,154,114,138, 90, 41,229,210, 44, 89, 58, 5,168,116,161, 47,117,173,241,163,132, 84,198, +120, 85,137,240, 52,126, 40,240,202,202, 66,106, 58, 15,137,103, 7,220, 40,225,145,215,118,132, 96, 58,227, 9, 79, 72, 43,252, +105,236, 10,109, 12,158,157,111,246, 35,155,246, 37,227, 16,223, 11,208,166, 64,123, 30,253,193,144,173, 75, 23,185,118,249, 10, +195,193,136, 44, 45,185,123,242,132, 34,159, 83, 85, 54, 24,193,247,125,162, 48, 38, 43, 42, 78,102,115, 7,173,209,152,186,100, +239,120,143, 47, 62,251, 57, 91,151,110,112,116,124,196,112, 56,160, 60,120, 65,236, 89, 52,173, 49, 26, 15,235,181,143,227,152, + 27,155, 9,145,188,198,159,254,242, 57,121, 83, 10,154,211, 54,183,179,186, 58,231,205,213, 87,237,143,171, 27,206, 82, 87,200, + 5,107,156,157,138,101, 58,118, 32,131,210,182, 13, 30,199, 49, 89,150, 57,236,107, 64, 97,114,123,223,168,133,114, 90,172,180, +175,237,169, 88, 18,132, 33,131,254,128,170,180,232,208,178, 40,169,107,221,110,252,117,167, 5,214,188, 5,190,143,240, 37,227, +181, 53, 2,233,145,205,231,103,132,170,173,186, 9, 22,118, 37,179,234, 79,254, 10, 75,224, 25, 44,160,115,164,112, 43, 31,175, +216,217, 76, 71,192,103,154,115,130, 16,100,101,129, 41, 43, 55,158,104, 40, 89,194,181, 34,221,181,213,138,227, 71,247,153, 31, +237,179,126,237, 54, 50, 25, 96,116,133,174, 42,251,155, 57,225,231,228,228,128, 94,210,227,241,131,135,172,175,141, 56, 60,153, +242,183,191,255,187,248,158, 71,145,167,244, 7, 99,122,253, 67,142,143,166,148,233,156,199, 79, 31, 49, 57, 60, 34,157,159, 16, + 69, 33, 73,210, 99,114,114,132, 86,176,113,241, 18,179,217,140, 40,142, 41,139, 20,233, 11,166,147, 99,122, 73, 66,150,206,208, + 90, 17, 39, 17, 82,142,145, 66,112,233,202,136,170,170, 40,171,146,217,201, 17,232,154, 34,183,139,227,250,246, 69,146,254,128, +217, 60,101, 50,155,226,197,125,210,233,196,170,247, 75, 55, 86, 20,246, 16,104,111, 64,191, 83, 81, 45, 55, 83,154, 68, 45,207, +243, 24, 12, 7, 28,159, 28,243,226,249, 14,233,124,238,214, 19,221,230,182,123,129,221,124, 60, 31,170,162,180,112, 44,150, 17, +200, 95, 69, 0,252, 74,136,205,215,128,210,156, 5, 52,105,198,152, 6,105,243,195,219,205,221,129,101, 92,182,134,141,160, 21, +139,141, 94, 56,135, 15, 33,163,181, 13,230,147, 9, 7,179,117,174, 12, 23,191, 68, 41,160,242, 60,246,143, 11,138,121, 5,158, +224,219,191,245,135,124,241,179,191, 36,152,103,212,126,142,144, 37,120, 10,207, 83, 24, 60,232, 8,226, 22,135,106,213,238, 21, +205,134,222,172, 37,195,181, 53,202, 34, 67,245,134,244, 7, 35, 46, 92,188,196,100,242,215, 76, 78, 14,153, 76,199, 60,125,246, +132, 79, 62,249, 5,127,239,143,254, 33,158, 12,248,201,143,126,200,241,201, 17, 55,175,223,100,125,180,206, 15,127,244,151,236, +238,236,112,176,191, 71, 81,164,164,243, 57,147,201,148,157,157, 29,148,170,249,237,223,250,126,187, 78,132,161,101,129,132,113, +104,199, 18,181,178, 7,115,207,178, 19,122,189, 30,243, 52,181,145,207, 75,185, 37, 86, 7,180,177,177,193,191,248, 31,254, 57, +255,234, 95,253,175,252,248, 39, 63,101,230,121, 24, 10,202,178,196,247, 36,184,180,192,162,174, 40,235,218,166,115,122, 30,186, +193,178, 75,201,250,120,108,109,155, 23,174, 94,255, 99,241, 21,130,139, 46, 95,125,117, 56,127,158,239,114,117, 49,175,170,122, + 81,225,174,124, 61,173, 53,126, 96,109, 49,129,163,245,172,170,122,206, 74,120, 91, 84,238,139, 24,213,246, 32, 96,244, 34,181, +205,137, 23, 60,151,201,107,218, 80, 21, 67, 85,215,139,252, 98,215,106,106,190,127,119,161,181, 63,187,107, 43,210,216,241, 36, + 6, 15, 45, 37, 20, 5,149,170, 48,158, 68,123, 18,173,106, 27,191, 42, 60, 16, 6,223, 15,136,147, 30,210,243, 72,243,140,162, +118,153,220,198,210,225,164,239, 57, 82, 92, 19,230, 96, 79,202,113,224,211,235,247, 72,250, 61,130, 56, 36, 76, 34, 46, 95,189, +204,123,239,189,201,187,239,188,197,173,155,183,184,124,233, 10,194, 19, 28,157, 28,178,127,176,203,228,100,143,172,152,161,235, +178,253,154, 2,131,210, 53,101, 85,144,102, 57,105,158, 83,148,150,233, 44,133,226,240,224, 37, 47,158, 63,230,232,100,138,140, + 7, 28,236,239,145,102,115,166,243,148,163,121,206,209,116,206,254,241, 17,251, 39,115,208, 53,107,131,136,151, 39,185,181, 17, + 10,206,180, 67,126, 29,181,110,247,250, 46,221, 67,231,206, 3,205, 43, 32, 56,194,117, 97, 52,194,147, 14, 28,147,208,239,245, +240, 3,223,157,110, 21,121,150,217, 17,135,118,150, 40,173, 81,218,122,240,187,221,161, 48,142, 16,158,199,198,250,134,189, 38, +170, 96,111,255,216, 41,228,205, 43,197, 71,113,220,195, 11, 66,214, 54, 54,120,252,229,125,151,178,167, 87, 68,127, 98, 5,164, + 35,150, 34,149,133, 17,136, 87,164,177,189,210, 2,119,110, 85,119,246,223,117,173, 83,134,133, 45,212, 19, 30, 81,210,163, 84, + 21,190, 19,166, 6,205,243,217,136,100, 93, 88,146, 17, 18, 83,215,204, 14,247, 81,121, 74,210, 27, 34,163,158, 19, 90,106,208, +202, 42,224, 7, 3,190,243,237,239, 32,101,200,108,122,204,214,250, 38, 85, 81, 50, 26, 13,200,210, 19,166,147,140,162,154, 19, +132, 9, 27,227, 77,148, 42,173,174, 65, 43,142,143, 15, 24,142,214, 73,146, 62,147,147, 67, 6,253,136,126,127, 76, 16, 38,244, +122, 3,171, 76, 86, 21,113, 20, 89, 49,169, 31,177,182,190,137, 22,154,195,131, 61,230,179, 19,124, 95,208, 27,142, 16, 64, 85, + 41,202, 34,101, 54, 63, 65,120, 78,193, 29, 38, 84,198,195, 83, 53,186, 42,144,126, 96, 89, 20,110, 44, 99, 5,183,193, 66, 77, + 34, 22,240, 25,188, 69,144, 84, 18, 39,188,126,231, 14,251,123,123, 76,142, 78, 90, 66, 93,115,127,213,181,114,120,104,219, 93, +172, 43, 69, 85,213,157,162,233,244,165, 58, 51, 40,235, 63,226,237,149,255, 78, 52,214, 98,215,102, 23,150,182, 38,125, 31, 25, +132,120, 97,136, 12, 2,130, 40, 66, 4,190, 19,148, 90,110,128, 5,201,132, 4, 97,204,230,229,235, 92,125,227, 3, 60, 95, 18, + 14,214,185,184, 46,169,133, 96,102, 96,191,210, 28, 79,107, 94,188,152, 81,166, 37,126, 16, 16,196, 9,101, 89,176,243,240,139, + 22, 46,100,148,181, 84,154, 78,225,120, 38,235,194,158,186,220,207,110, 53, 83,189, 65,159, 48,136,169,138, 57,219, 23,175,112, +255,222,103,172,173,141,185,126,253, 6, 79,159,220,227,222, 47, 63, 65,120,134, 44,157,243,217,167,127,205,206,203,231, 40,163, +185,243,198, 91,100,121,142, 16,146,170,170, 57, 58,218,227, 96,111,207,118,227,140,245,164, 63,126,242,136,141,141, 13,110,191, +118, 11, 63, 8,236,254,213,177, 60,122,194, 99,126, 60,165, 86,138,176,215,179,161, 48,117,133,244, 3,226, 36,118, 78, 12,175, + 19,117,110,227,174,223,122,243, 77,134,253, 33, 79,158, 62,117, 93,237,213,108,121,171, 3,171,157, 85, 91, 41,123,207, 52,247, + 86, 28,199,200, 75, 77,251,189,179, 73, 47, 54,198, 14,119,253, 12,101,229, 89,120, 87,115, 14,128, 68,176,152, 31,154, 21,149, +179, 85, 16, 47, 68, 61,158, 39, 8,252,128, 56,138,172, 72,161, 17,146, 56, 27, 93, 23, 71, 43,154,234,109, 69,228,225, 59, 53, + 97, 91,149, 55, 85,122, 27, 56, 35, 91, 22,180,193, 90, 17,180,214,173,112, 69,105,213,122,217, 77, 71,116, 36,125,223,109,252, +246,164, 20,248, 1, 65, 98, 57,198,101, 93, 81,107, 8,146,190,109,241, 58, 97,157,231, 73,162, 36, 33,233,245,241,163,136,217, +124,214, 62, 59,218, 88,245,127, 32, 61,203, 51,110, 56,245,158,253,184,215, 75, 24,244, 99,122,131,152, 65,191,199,112, 56,100, +109,180,198,112, 48,160,159,244, 8,130,128,178, 42,152,207,103,228,217, 28,173, 74,247,186,216, 17,130, 85, 79,186,211,180,209, +237,172,212,210,212,106, 59,175,194,118, 33, 36,154,131,131,125,118,143, 78,136,135,155,228,149, 38, 47, 83,234,186, 66, 41,203, +160, 47,170,138,121,105, 61,188,210, 19, 76, 75,150, 98, 7,197, 43,128, 23,231, 42,221,207, 18,245,156,161,233,104, 43, 74, 97, +209,187,203, 15,181,113, 10,105,217, 66,106,194, 56,198,151,146,225,112, 72, 20,197,204,102, 51,180, 82,164,243,185, 21,172,185, + 83,115,179,225, 26,221, 88, 55,109,124,106,156, 36,224, 44, 72, 6,131,169, 50,246,143,166,118, 97,239,156,182,227, 56,238,164, +239,185, 44,104, 52, 81,210,231,157,119,223,231,139,207, 63,181, 68,194, 54, 78, 85, 44,212,209,136,206,235, 39,150,254, 76, 44, +205,208, 95,181,161,119,219,241,175,230,190, 47,205,212,151, 44, 84,157, 72, 78,154,231, 73, 81,213, 21,158, 12, 8,163,144,186, + 44,219,207,107, 8, 89,116, 71,190, 14, 62, 34,140,161, 42, 50, 38,135,251,168, 34, 35,138, 98,100, 20, 1, 30, 81, 16, 32,138, + 57,151, 47, 95, 65,250,146, 11, 91,219, 12, 6, 3,134,131, 94,235,125,175,202,130,227,163, 67,254,214,119,127,147,121,154,178, +179,243,156, 65,127, 64, 20, 5, 76,142,143,209, 90, 89,207,242,104,147,209,120, 19, 63,138,172, 19,164, 44, 90, 23,130, 0,202, + 50,167, 40,114,202, 34, 69,149, 21,198,216, 67,138,209,146, 11,219, 87,121,252,232, 17, 89, 58, 71, 85, 14, 8,146, 91, 12,116, +174, 33, 30,172, 89,233,100, 85,218,103, 74,215,173,141,203, 52, 29, 44, 79,226,198,205,173,214,198, 6,107, 88,225,214,229, 75, +151, 80,186, 34,207, 50,170,170,196,247,131,118,158, 94, 85,182,131,214,104, 64,234, 90, 81, 85,170, 99,163,234,116,108,224, 63, +253,198,125,254, 63,178, 0,153, 6,107,226,217,205, 74, 6, 33, 65, 28,227, 59, 42, 92,216,235,225, 7, 33, 94, 16,224,251,161, +141,218, 21,182, 93, 44,252, 16, 63,138,185,114,231, 93, 54, 46, 95, 71, 43, 69,156, 12, 57,202, 51,166, 8, 74, 41,216, 59,170, + 56,153,105,246, 95,238, 19, 4,161,163,104,194,165, 43,215,248,244,167,127, 69, 62,155,160,170, 18, 85, 23, 24, 55, 63, 87, 77, +176,144, 57,189, 87,153,134, 81,209,196, 74, 75,159,181,209, 24,207, 15,185,117,231,117,142, 14, 95, 50, 59, 62,225,215,191,247, +155, 40, 45,201,138, 18,165, 5, 65, 16, 19,199, 17,181,210,236,238,188, 36,138, 99,198,163,117,226,126,194,207,126,246, 99,238, +127,241, 75, 94, 62,127, 74,145,165, 54, 19,160,174,219, 46,219,147,167,207,216,221,221,227,237,183,223, 34, 8,131,101,151,151, +128, 40,138, 72, 39, 51,158, 61,125, 6, 50, 96,109,107,155,108, 58,193, 51,224,135, 1,210,247,151, 17,195, 2,162, 56,226,202, +149,203,220,188,118,157, 95,254,242, 51,203,215,104,236,183, 90,219,136,228,186,182, 58,172, 51,200,157, 69, 81, 56,161,220,169, +102, 32,231,162, 36, 69,199,252,254,170, 57,206,105,152, 2, 75,179,242,230,189, 81, 4, 55,190, 66, 1,109,166,181,110, 66,238, +157,167, 84,120, 2, 41,155, 7,193,180,249,231,141,119, 82,118, 60,237, 77,165,219,172, 95,141, 61,174, 85,177,138, 69, 36,159, + 82,138,178,170, 23,138, 94, 79,216,234,189,241,208,183,124,116,111,225, 81,110,230,174,190,135, 49, 2, 37, 60,164, 31, 81,214, +154, 48,137, 17, 81, 76,169,236,171, 26,197, 17,253,193,136,193,104,141, 32, 78,168,218,192, 8, 11,199, 8,165, 71, 28, 5,196, + 81, 72, 24,248,132,206, 78,209, 75, 98, 6,131, 30,253, 65,143, 36,142,172, 47,210,101,250,214, 74,145, 23, 5,121,158, 82,148, + 57, 74,217,246,168,231,153, 86,221,111,161, 32, 29,128,129,235,233, 89,173,181,105,184, 26, 78,136, 98,103,123,145, 15,147,201, + 9,251, 71, 19,138,218,146,234,180,202,221, 44, 71, 59, 65,160,161, 82, 10,161, 21, 74, 65,133,116, 7,167,229,246,251,171, 32, + 51,175,194,199,174, 90, 41, 87,163,127, 5,226,220,214,180,215,153, 61,122,210, 90,149,162, 40, 98, 56, 26,113,116,116,132,214, + 22, 64, 83,171,218,157,186,173, 3,193,184,188,122, 99,132,203,101, 87,182, 26,113, 7,195, 40, 10, 81,229,156,131,163,105,123, +216,107,232, 83, 77,117,111, 59, 60,141,111,212,163,172,114,174,221,122,141,135, 95,124,209,130,130,218,214,170, 88, 33,189,189, +242, 9, 60,189,169,159, 62, 64,139, 83, 34,184,243, 27,182, 98,169, 25,223,126, 45,179, 56, 28,105, 99, 16,210, 35,242, 29,128, + 8, 59,211,140,130,128,164,151,112,231,181, 59,206, 38,104, 53, 30,218,133,219, 72, 25, 44, 2, 71,148, 70,101, 41,211,195,125, +242,233,137,173,240,165,224,205,155,183, 56,218,127,201,250,198, 6,233,108,134,239,195,124, 58,225,195,247, 63, 96,231, 96,159, +203, 87,111, 35, 48,252,249, 15,254,132, 47,191,248,140,253,189,231,100,179,204,146, 1,171,202,130,131,140,161,215,239, 51,159, + 30,183,228, 68,141,215, 94,199,162,200, 9,131, 16, 85,151,204, 38,199, 96, 52, 65,212,227,248,112,159,108, 54,227,232, 96,151, +124, 62,107, 55,107,207,243,109,228,171, 50,168,186, 36,136, 99, 8,236,230,164,141, 65,215,149, 19,188,218,206,219, 66, 52,231, +216,219, 94, 55,107,194, 35, 8,124,126,253,215,126,149,173,173,117, 14, 15,247,169,106, 11, 52, 25, 12,250,172,173,141,241,125, + 73,158,231,142, 94, 38,157, 96,179,219,241, 20, 11,247,144,249,143, 3,207,156,183, 46,191,242,205,173,167, 86,236, 39, 65, 74, +100, 16,224, 71, 9, 97, 50, 36,238, 15,137,135,107, 36,131, 17,113,175,135, 12, 66, 16,178, 5,208, 32,172, 96,206, 15, 99,110, +191,251, 13, 6,227, 13,123,136, 41, 10, 52, 33,135,187, 83, 30, 63,216,101,118,156, 49, 92, 75,144,158,164,174,193,143, 2,155, + 75, 33, 36,210,143,248,242,211,159, 80, 21, 57,170,170,209,149, 21, 55,118,139, 67, 86,108, 93, 13,206,184,217,208,165, 47,217, +190,116, 9,168,153,158, 76,184,120,229, 38,111,188,254, 6,195,225, 0,140,230,203, 71,247,185,125,251,117,178, 60, 99,184, 54, +102,119,103,135,249,108,198, 27,111,188,193, 96,216,231,203, 47,238,241,240,222,231, 76, 39, 19,138,178,236,108,230, 14, 95,236, + 34,179,211, 44,103,119,119,151,111,124,227,227, 22, 3,222,125,206,252, 48,198,151, 62, 79, 30,222,231,224,240, 16, 17,198,214, +203, 46, 37, 94, 39, 33,116, 1,252,177,152,235,245,141,117, 46,110,111,243,201,167,159,146, 87,101,219, 77,110, 3,168, 58,163, +233, 85,114,171,188,116,253,230, 31,175,134,184,180, 66,167, 78,221, 47, 56,155,247, 46,206,104,183,175,134, 0,156,218,232,157, + 15,175, 85,182,123,139,185,128,104, 51,111,229, 66,193,171,141,131,196,200, 78,133,212,120,235, 29, 1, 77,122,139,170,180,163, +160,111, 22,224,186,174, 91,177,139, 21, 83,169, 54, 35,183,237, 76, 56,130,148,112,194, 53,220,161, 67,117, 82,157,172, 95,190, +178,149, 60,198, 33, 88,173,157, 79, 6, 1, 90,131, 31,133,244, 7,107,200, 32,182, 62,197, 40,102,180,177, 69,212,235,227, 71, + 61,130, 40,164,158,207,168,148, 66, 10, 65, 20, 90,191, 99, 20, 5, 4, 97, 64, 20, 39, 12,135, 3,214,198,107,140,134, 35,146, + 36, 38, 12, 34,194,192,199,247, 61, 39,234,211,224, 50,133,181, 86, 24, 44,218,213,247, 44, 39,191,121,111,170,116,225, 45,196, +141, 77,126,120,115,157,181,131,177,104,163,218,184,191,195,195, 3, 74,237, 49,159,101,118, 94,102, 74,106,173,218,251,194, 52, +158,122,163,153,139,224, 20,118,244, 85,168,202,175, 34,202,157,130,207,172, 46, 88,103,169,129, 59, 27, 85,227, 53,245,132,205, +158,199,147,108, 95,184,200,209,209, 1, 89,150, 82,107,133,174,173, 53,165, 86, 85, 91,125, 54,163, 16,203, 36,176, 25,221, 90, + 41,130,200, 86,170,186,200, 56, 60,153,217,195,159, 94, 0,106,218, 8, 87,211,220,151, 30, 34,144,244, 71,107,244, 6,214,202, + 84,228,243,133,194,220,217,200,196,210,246, 42, 86,160,183,226, 20,107,156, 51,123, 23,203,213,251,233,246,186, 56,119,147, 95, +186, 86,230, 20, 43, 22,129,103,145,171,163, 1,219, 91, 91,164,179, 25, 69,145, 83, 85, 21, 59,187,187,148,165,101,177,247,251, + 54,119,186,174,114, 60, 25,158, 49,134,209, 80, 85,148,243, 9,213,116,202,165,203, 87, 24,143,215,217,221,121,193,193,193, 30, +101, 89,242,221,239,254, 6, 47,119,246,120,241,252, 57,101, 93,241,249,221,207, 17,158,100,239,197, 51,178, 44, 67,248, 30,170, +170, 40,203, 18,207,179, 85, 80,127,109,131,195,253, 29, 78, 14, 14,145,129,207,241,254, 30,126, 16, 88,113,100,111, 64, 89, 85, + 84,249, 28, 85,215,212, 74, 33, 61,159,217, 44, 71, 43, 40,138,212,197,244,218,145, 90,212, 31,161,165,111,121, 19,198, 80,207, + 78,192,147,200, 40,198,115, 7, 21,161, 42,119,208, 15, 90,155, 96, 99,227, 90,190,183, 61,238,188,126, 7,223, 23,220,253,252, + 51,138,162,112,238, 26, 67,150,229,204,166, 19,242,220,106, 60, 26,155,109, 89,170,211,162, 53,115, 54,124,230, 43,247,229, 14, +198,251,235,180,235,133, 16, 32,221,232,160, 9,183, 18, 18,164,107,183, 71, 33, 97,210, 39, 28,244, 73,214,198,108, 95,189,193, +175,253,246,247, 9, 98, 75, 79, 20,178,153,179, 59, 81,178, 31,224,135, 9, 31,124,247,183,137,251,118,144, 62, 24,141, 25,172, +197,196,113, 66, 85,104,100, 96, 72,167, 41, 39, 7, 83, 54, 47,142, 73,250, 49,170,134, 34,207, 73,146, 30,191,252,201, 15, 40, +102, 83,116, 89,162, 84,213, 58, 46,180,211, 72,121,171,251, 15,158,155,233,219,157, 44, 8, 67, 6,195, 17,107,163, 49, 39,147, + 67, 62,120,239,125, 62,120,239, 67,194, 48,226,222,189,187, 8,207,103,103,231, 5,239,191,255, 33,194, 8,238,125,241, 25,183, +239,188, 77, 47, 9,184,176,117,137, 95,252,226,199,136, 32, 38,157,157,180,148, 56, 33,237, 12,187,215,239, 83,213,165,165,202, + 9,200,178,140, 34, 47,185,115,231,117, 11,190, 81, 6,140,160,174,173,183,221,104,171,198,159, 77, 45, 64,201, 79, 6, 96, 12, + 73, 18,117, 50, 74,108,149, 89,150, 21,194,107,230,236,235,156, 28, 77,120,252,228, 41, 74,107,106, 76, 91,176, 54, 34, 93,175, + 3,121,107,139,219,139,205,166,190,154,249,234, 54,122,239,140, 27,162,171,114, 95, 77,107, 59,107,238,115, 42,237,231, 84,156, +170,215, 86,151,194, 17,125,124, 25, 16, 72, 43, 92, 19, 66,184,106, 64,183,179, 8,209,177,174,117, 97, 55, 75, 16, 5,225, 57, +107,137, 21,234, 89, 72,134,105,219,238,202, 37,163, 41, 23, 45,105,237,111,139, 22,106,147,195,219, 22,141, 77,213,239, 75, 60, + 97,147,213, 26,144,127,243,111, 84,109, 43,188,254,218, 26, 81, 47,193, 15, 2,171,224, 77,122,244,250,125,252, 32,160, 55,232, + 51, 57,220,195, 19, 26,223,247, 72, 98,139,167,140,147,136, 94,111,192,214,133,109,110,220,184,197,173,107,183,185,120,225, 50, +235,107, 27,244,146,196, 10,106,156,208, 79, 10,105, 97, 52, 82, 88,213,105,163, 86,149,118,174,236, 53,244, 63,151,219,190,240, +120,155, 86,223,211,204,100,106,199,151, 87,181,109, 3, 42, 93,163,234,138,131,131, 35, 20,130,121,150,211,139, 67,132,227,183, +105, 3,202, 24,148, 22,248,170,162, 54, 62,149, 57,187,221,254,170,138,225,171,120,213,231,165,187, 9,115,246,223, 11,135,206, +181,150, 68,211,198,216,250,190,207,214,230, 38,211,217,148, 52,117, 98, 37, 99, 25,214,117, 71,184, 98, 23,106,225, 14,108,180, + 96,153,193, 96,196,112, 56, 34,159, 29,114, 50,205, 92, 95,180, 9, 44,234, 4,165, 8,129, 31, 6,214, 50,179,190,197,250,214, + 22, 70,217,176,147,153, 11,153,160, 27,210, 96, 86,183, 95,113,206, 33, 72,156, 10,127, 57,157,153,222, 21,177,154, 87, 84,234, +167, 81,191,218, 44, 0, 71,141,206,163,121,219, 24, 91,113,217,206,222, 30,163,126,191,109,241, 53, 2, 84, 99, 12,121, 94, 80, +150,133, 59,132,203, 86, 96,213,188, 55, 65, 48, 0,158, 81,188,120,254,148, 97,127,196,209,228, 16, 33, 35, 46,108, 93, 96, 62, +207,217,219,223,229,175,127,250, 99,162,222, 8,140,237, 24, 29, 31,236,216,141, 92, 90, 8, 82, 81,228,248, 65, 72,210, 31,241, +236,209,125,210,116,142,170, 20, 6, 69,153,231,148,117, 73, 89,100,164,179, 9,233,108,130,210, 53, 65,224,147,101, 57, 66,120, +252,157,223,255, 35, 46, 94,186,198,227, 7,119,113,151,155,222,112, 64,145, 23,120, 81,130, 17, 18,225,180, 48,166, 42, 45, 13, + 79, 0,117,137,169,106,123,240,109, 81,169, 11,201,123, 55, 97,203,243, 4,235,235, 27, 28, 30, 30, 82, 22, 21,202, 64, 16, 68, + 72, 25,144,206,179,150, 3,210,235, 37,173,231,184, 1,101,157,167,213, 56,143,229,112,150,141,109, 25, 20,243, 53,237,110, 75, +244, 79, 91, 12,104,207, 41,222,163,136,160, 55,160,191,126,129, 59,239,127,196, 63,249, 23,255, 51,127,251, 15,254, 46,191,255, +135,191, 67, 86, 24,118, 95,188, 64,187, 20, 27, 27,152, 19, 48,222,188,196, 7,191,241, 59,148,101,102,245, 5,201, 0,165, 4, + 69, 81,147, 12, 35,178,105, 74, 89, 42,182, 47, 95,166, 55,140, 72,103, 53,121,150,242,248,222, 93,142,143, 14,200, 78, 14,217, +127,249,132,186, 44, 48,170,178,108,248,150,103, 98,187, 70, 75,191,211,146, 67,192,142,106,179,124,202,112, 96, 17,195,253,254, +144,225,160,207,143,126,250, 87,124,242,243,159,144,165,115, 12,240,230, 27,111,243,139, 95,252,130, 60, 79,249,222,247,190, 79, +210,239,163,180,224,233,139,103,212, 85, 77, 58,155,114,225,226, 21, 27, 14,164, 42,130,208,102,176, 55, 97, 63, 85, 85,129,231, +177,187,191,207,181,171,215, 88, 27,142,209,218, 80, 20, 53, 89,102,115, 15,164,244,137,123,125, 6,195, 49,170,174,169,138,148, +193,104,157,162,170,137,147,112,105, 29,171,171,154, 34, 43,156, 58, 94, 18, 69, 49,159,124,250, 41,179, 52,165,110, 51,238,109, +162,168,114,251, 79,151,124,106,140, 65,110,187,246,251,146,101,232,140, 77,220,235,176,174,187, 51,237,243,236, 73,171,139,110, +247,243, 27,175,122,183, 3, 32,221,236,188, 17,225,212,117,237,102,224,178,161,216, 56,206, 51,173,234,184, 13,125,241, 22,182, +187, 38,192,165,153,247, 25, 55,179, 70, 44, 90,183,181, 90,216,152,164, 91,152, 91,130,152, 75,123, 91, 88,224, 76,251, 0, 75, +119,170,234, 42,241,195, 32, 64, 32,241, 60, 73,210,235,217,211,156, 83,223,251,210,170,167,195, 40,162, 63, 28, 88,203,132, 47, +169,106, 13,170, 68, 87, 5, 65,224,183,149,250,250,218,136,139,219, 23,121,239,205,119,120,239,205,183,185,113,229, 42,155,235, + 99,214, 70, 3,214,134, 3,146, 40,114,170,126,151, 92,216,116, 41, 68, 67,191, 19,200,166,117,230,224, 23,221, 24, 41,227, 8, +117,218,104,235, 71,175, 45, 81, 77,213, 26,165, 12,181,114,127,174,172,160,105, 54,153, 82, 41, 48,158, 37,220,245, 34,223,110, +236,205, 70, 96, 44, 67, 57, 50,134,140,192,230, 5,137,211,158,245,243,170,243, 85,218,223,153, 91,207, 10,243,189,155, 84, 36, +206, 10, 34, 52,224,251, 18,165, 52,113, 20,219,156,228,170, 98,107,251, 34,105, 58, 35,207,178, 22,170, 98,180,245, 96, 55, 94, +117,219, 89, 90,184, 29,162, 48,180, 29, 24, 63, 32,142, 67,242,116,206,116,154,182,233,109, 93, 71, 72,183,141,230,249, 62,219, +151,175, 82,171, 10,207,179,109,214,249,244,120,249,112,203,114, 43,177,185, 63, 23,191,137, 62, 67,244,246,213,173,245,211,135, +160,179, 61,234, 75, 46,131,198, 55,223, 4, 70,152, 69,139,255,248,248,132,162,204, 89, 27,141, 80, 85, 77, 81,148, 12, 71, 35, + 46, 93,188,132,214,154, 48,244, 25, 12,122, 68, 65,100,193, 69, 74,227,249,190, 75, 57, 59,173,206, 55,128,170,106,122,131, 1, + 72,195,141,235,183,217,223,125,194,189,251,119,249,229, 47,127, 65,158,101,124,240,209,183,248,242,203, 47,216,223,219,101, 58, +157, 80, 87,133,123, 78, 77, 75, 56,171,138,156,116, 50, 69,215,214,207, 28, 4, 22, 17, 27,199, 33,218,216,170,184, 1,252,120, +126, 64,158, 21,172,111, 94, 36, 25,142,120,246,248, 1, 71,251,123, 24,109,175, 79,111, 56,166,214, 2, 17, 13,109,183,193,181, + 65,181,174,219,117, 65,122, 30,117,149, 97,116,237,198, 87,186,189, 70, 77, 39,190,121, 30,147, 36, 97,208,239,113,124,116,204, +108, 54,163, 42,173,173, 73, 25, 23,169, 92,214,118, 67,167,178,148, 67, 55, 75,111, 68,116,231,102,177,123,237,195,181, 76,252, +124, 69,139,125,169,184,106, 69,184,180,234,252,133, 14,196, 44, 52, 3, 77, 44,155,103, 95,187, 32,234, 17, 13,199,124,235, 55, +127,155,127,248,207,255, 39,130,254, 26,235,235, 33, 65,232,243,218,251,239,176,125,245, 6, 15,190,184,239, 60,229,118,195,185, +126,251, 45, 46,220,126,147, 40, 12, 65,122,132, 97,236,208,194,110,230, 29,249,140, 55, 7, 92,187, 54, 32,159,151,204,102, 37, + 47,158, 60,162, 72, 51,226, 36,225,112,239, 37, 59,143,239,163,138,210,230, 13,116, 52, 31,242, 12, 11,172,149, 0,232, 37,102, + 10,198,227,218,245,155, 28,236,188,100, 50, 57,161, 63, 24,242,240,225, 67,158, 63,126, 76,150,205,153,207,102, 60,126,120,143, + 52,157,161, 84,205,160,151, 16, 6, 33,127,242,167,255, 15,233,100,194,124, 58, 65, 8,184,126,243, 53,102,179, 99, 34,223, 39, + 78,250,244,250, 3,252, 48,224,230,157,183,233,143,134,246,224, 86, 43, 30, 62,122,200,205, 27,183,193, 8,151,243, 64, 27,114, + 99,220, 56, 35,138, 19,138, 44, 99, 50,157,144,149,154,103,207,158,179,181, 57,110,199,194,217, 44,229,217,179, 23,172,141,199, + 60,127,254,146, 48,234,241,244,217,115,118,118,119,168,149,237, 44, 55, 65, 48, 22,160,166,151,198,202, 66, 8, 59, 83,239,190, + 64,222, 25,169,106,237,134,124,142,186,189,251,121, 75, 42,102,113,250,230,123, 21, 51,171, 57,121, 24, 99,136,227,208,109,190, +118, 51, 85,170,118,109,250,134, 84, 42, 22, 39,183,134,247,206, 34,188, 68,105,237, 68, 83,180,108, 96, 85,171,118,110,175, 29, + 26,182, 37,198,181, 63,171,215,138,243,232,122,150, 61,185, 68,195,107, 42,154,134, 66,103, 48, 45, 27, 90,187, 74, 47,142, 34, +130,192, 39, 12, 67,187,193, 4,177,221,120,125, 31, 63, 12,201, 39, 71,132,129, 79, 20, 71,140, 7, 61,110, 92,185,204, 71,239, +188,201, 71,111,191,195,213,139, 23, 9,125,137,239,129,239, 11,164, 39,240, 61, 65,232, 91,177,145,148,129, 83,253,123,109,155, +182,157, 55,139,110,251,214, 86,149,174, 56, 69, 27,183,105, 87, 21, 85,173,221, 70,238, 54,115,109, 95, 31, 91,193, 67, 93, 85, + 76, 38, 83,226,254,144,205,141, 45,106,109, 16, 70,183,179,104, 91,241, 10,170,116, 70, 16,247,169,207,161,187,157, 53, 95,255, +170,244,182,198,239,222,229, 36, 44, 45, 92,162,137, 28,108, 14,141,139, 45, 50, 8, 2,148,170,241,131,192, 90,206,140,225,226, +229, 43, 20, 69, 78, 58,155,227, 75,175, 13,113,209, 14, 19,219, 38, 37,169,197,189,239,251,129, 85,127,199, 17, 73, 18, 81, 21, + 25,211,105,218,114, 19,154, 67, 64, 16,132, 86,109,237, 82,238,106,163,237,188, 81, 74,100, 24, 83,101, 25,233,116,114,230,193, +165, 67,120, 93,102,193,175,136,231,190,202,194,214, 84,242,231,113,246, 95,105,141, 91,101,209,155,229, 74, 48,148, 30,190, 0, + 35,173,253, 74, 43,205,201,201, 9,113, 28,209,176, 50,234,210,182, 25,149,214, 8, 25,172,248,223,151,191,167,210, 21,147,201, + 49,151, 47, 94, 99,158, 77,217,218,216, 70, 41,197,139, 39, 79,241,163,132,193, 96,200,195,135, 95,218, 0,157,147,163,246, 25, +111, 90,214, 69,154,145,206,230,182,139, 39,237, 92,210,102, 92, 7, 4, 81,130, 86,138, 40, 10,137,147,132,108, 62, 39, 72,250, +188,254,250, 91,148,101,205, 27,111,189,195,131,187,159, 51, 57, 57, 4, 32,138, 19,210,185,141,152, 53,194, 32,164,237,212, 8, + 3, 66,105, 40, 51,234, 50,199, 11, 34,100, 28, 91,134,133,182,163, 9,129,215, 82,249, 26,159,130,231,121, 12, 7, 9,215,175, + 94,230,210,229,109,219,125, 27, 12,217,216,220,100,109,109,141, 61,167,162, 22, 2,162, 48, 38, 77, 51,234,218,180, 66,203, 87, + 93, 59,115, 70,244,106,131,144,109, 47,221,169, 46,168, 88, 82,211,183,140,144, 78,228,176,141,179,117,214, 95, 35,156, 77,173, + 33,195, 5,120,113, 76,208, 31,241,254,223,250, 93, 54, 46,108,147,103, 21, 85,161,185,189, 17,178, 22, 74,202,245,139,124,252, +157,111,243,232,193, 35,210,249, 12,240,184,242,198,123,172,111,110, 83, 87,181,117,200,168,154, 34,207, 8,130, 16, 16,172,109, + 13,241,140,160,204, 33,205, 4,233,108,134,169,109, 37,156, 23, 5,233,244,132,103, 95,124,130, 42, 10,235, 89,215,205,198, 14, + 30,103,120,235, 77, 55,162,214, 37,154, 25,205,254,203, 23,212, 70,144,103,115,246, 95, 62, 97,127,247, 37,101,109, 71,168,243, +217,140,233,116, 74, 18,135,244,135, 3,222,253,224,155,220,191,119,143,167,143,191, 36,207, 11,187,134, 72,159, 65, 63, 98, 60, + 26,243,250, 27,111, 82,107,197,141,235,183,121,243,237,119,120,247,189,247,217,220,218, 38, 47, 75,164,244,200,138,156,163,131, + 35,110,221,188,229, 10, 28, 27,195,108, 4, 78,115, 98,117, 55,189,254,144,227,195, 3,102, 39,251, 40, 17,240,232,209, 19, 46, +109, 95,192,199,163, 42, 74,238,125,121,159,126,127,204,193,225, 17,155, 91,155, 28, 28, 30,242,240,241, 67,242,178,108,247, 25, +223,247,219, 34,184,174, 42, 91, 4, 55, 46,232, 70, 40, 39,206, 73,103, 91,170,172,220,205,112, 94,165,126,106,126,179,100, 59, +147,231, 86,105, 75,243,119, 22, 2,182, 48, 8, 48,218,158, 96,131,192,119,109,170,206, 92,191,219,134,111,121,237,139,144, 25, +227,218,233, 56,241,221, 34, 24, 70,180,209,164,141,162,189,201,197,110, 3, 62, 26,152,136,179, 21,136,149,205,188, 73,110,106, + 16,180,162, 67, 66,177, 21,189,108,219,166,145, 31, 16,199, 9,186,210,120,206,235, 30, 68, 49, 85, 58,195, 71, 17, 39, 49,215, +175, 94,228,155,239,188,201,235,183,110,130, 23,115, 50, 47,152,204, 82,166,233,148,163,163, 67, 14, 14, 15, 56, 62, 57,162,200, +237,124, 46,137, 2,250, 73,159,126, 28,227,251,178,105,102, 44,230,176,166,237, 18, 47, 84,252,142, 67,175, 28,245, 78, 53, 7, + 19,109, 80,202,180, 27,155,114,179,250, 90,213,228,121,129, 48,146, 10,195,225,241,132, 40,148, 86, 88,231,108, 96, 70, 8,210, +172, 96, 28,122,100, 34, 90,118, 69, 47,225, 76,205,185,237,192, 85,251,227,169, 26,180,163,237,104, 83,206, 76, 99, 44, 52,237, +102,214,164,149,249,190,111,175,183,235,164,224, 9,198,107, 99,252, 64,114, 50, 57,105, 55,229,166,149,106,175,185,106,225, 13, +102,229,103,148,161,207,168,223, 35,157,207,153,205,231,132, 65,180, 68,145,107,170,246,230,144, 39,164,189,190, 70,215, 68,131, + 33, 39, 7,123,148, 46,161, 77,152,166,203,176,120,111, 3, 25,196, 89, 73,233,226,204,246,251,121,116,252, 69, 22,243, 42, 18, +246,171, 55,245, 85,106, 84, 83,205,173,143, 71,108,174,175, 81,107, 77, 47,233, 51,157, 78, 24,141,134, 4,190,164, 44, 11,234, +186, 38, 75,115, 74,199,213,151, 65,176,132,184, 89,140, 40, 58,209,146, 90,115,233,242, 53,238,188,246, 58,105, 58,231,232,232, +152,254,112,192,108, 58, 97, 99,227, 2,247,239,255,146, 60, 47,201,231,179,246,254, 40,139,130, 40, 73,168,114,155,126,101, 0, +223,165,232,121, 82, 18,247,250, 32, 61,140,174,153,207,231, 72, 33, 73,103,115,174, 94,187,193,104,115,139,186, 40,248,233,143, +254,130,131,253,151,237,122, 1,214, 2,169,234, 26, 93,228,168,170,194,115,246,187,102,164, 2, 2, 97, 4,117, 93, 34, 92,162, + 97, 99,147, 93,204, 51,237, 24,204,151, 62,239,190,243, 22, 89,154,242,252,197, 75,178,162, 96, 48, 24,178,181,181,197,151, 95, +222, 67,107,205, 96, 56,160, 63,232, 51,157,206, 40,242,210,194,178,208,232,230, 94, 62, 71, 13,209,222, 51,102,229,207,186,135, +249, 51,108,198,171, 65, 49,141, 93,225,244,243,232,126, 51, 79, 98,156, 30,199,243,125, 68,104,217,250,239,125,231, 55, 57, 60, +158, 50, 30,175,163,131, 0,229,121,132,189, 0, 2,143,112, 52,228,173, 15,191,203,238,243,231, 76,246,247,185,244,218, 59,244, + 70, 27, 54,208,166, 42,200,203,140, 94,191, 79, 89,149,248, 50,228,224,229, 14, 39,199, 19, 42,163,137,147, 62,101,150,163, 13, +164,105,102, 59,128, 85,193,151, 63,255, 17,166, 40,172, 8, 88, 41,231, 18, 49,175, 52,109, 54,234, 48,219,115,170,173, 35,195, +209, 58,195,184, 71,173,172,130, 60,205, 50, 71,165, 83, 4, 65,200, 71, 31,127,135,207,238,126,202, 39,127,253, 83,138, 60, 35, +205, 82, 12,112,227,230,107,220,121,243, 29,190,249,141,111,243, 71,127,240, 71,124,251, 91,223,228,251,127,251,239,240,240,241, +151, 60,126,252,148,217,108, 66, 81, 22,104, 55,186,124,254,244, 49,227,245, 13,122,253, 65, 11, 22,210, 75, 93, 50,251, 60,244, + 6, 35,230,243,212,218,142,101,192,227,199, 79, 89, 27,246,145, 66,240,228,217, 83, 60,223,227,230,173, 27, 22, 76, 20,197,220, +189,251, 57,199,147, 19, 74, 39, 18,109,138,205,102, 99,215, 29, 56,155,127,150,103,230, 60, 72,200,121,109,246,179,230,162,171, +173,161,110,107,169, 43,102, 58,245,245,221,102, 91, 85, 22,194, 16,133, 9,117, 45, 44, 79,186, 85, 26,107, 43,106,235,120,138, +133, 83,132, 47,241,145,181,161,210,245, 2, 64, 99, 26, 91,154,116,243, 52, 75,180,107,102,235,218,205, 39, 26,251,220, 89,132, +188, 38,226,209, 96,108, 24,132,107,129,120,173, 0,112,145, 98, 39,125, 73,228, 73,126,231,183,126, 11, 33, 2,214, 55,182,248, +223,255,207,255, 3, 60,143,192,247, 89,219,186,200,124,191, 98,173,223,231,221, 91, 55,216,222,216,228,197,206, 1,147,124,215, + 86,211,117,109,163, 93, 93,155,119, 56, 24, 57,175,176,231, 58,113,110, 46, 92,247, 72,179,156,147,217,148, 89,150, 81, 41,183, + 85, 24,141, 49,142,227,108,186,180, 49,207,249,233,220, 70,164,112,109,121,215, 84, 84, 6,227,210,184,154,128,148,227,195, 3, +164, 16, 28,159, 24,198,163, 4, 41, 76,123,128, 80, 70, 51,153, 29, 51, 28, 39, 28,171, 16,104,104,109,250, 92,171, 99, 23,142, +113,214, 12,190,107,133, 92,180,136,205, 18,152, 67, 47, 85,245, 13,102,149,118,174,105, 49,138, 16,132, 33, 89,150, 49, 26, 13, + 17,194,235, 44,158,102, 41,101,176,113, 68, 72,199,253,151, 46,217,107, 56, 28, 46, 24,221,158,160,172,170,165, 92,245,218,241, +242,163, 40,162,215,235, 3,134, 43, 87,174, 81,104, 65, 62,159, 49,155,158,180, 10,251,243, 84,251, 46, 85,160, 67,212,111,101, +241, 95, 27, 64,179, 56,251,152,115,158, 73,150,126,238, 46, 94,242,172,197,209,184,107,156,101, 25,151,182, 54,136,178,130,201, +116,198,198,198, 58, 97, 24,242,226,197, 11,210, 6,171,170, 58,128,168,238, 97,165,251,253, 93, 87, 76, 72,159, 40,142,249,229, + 47,127,206,219,111,189, 65,156,244,241, 3,193,157, 55,222,227,248,240,152,188,168,169,107, 77,145,101,173,190, 65,107,221, 42, +128, 27, 79,178,237,130,197,196,189,190,115,176, 88,218,157, 47, 3,116,109, 72,231, 41,248,146,163,201, 9, 55,238,188,193, 79, +255,242, 47,200,103, 19,180, 81,248,161,196, 40, 67, 93, 87,142, 65,224,238, 3, 99,105,144,120, 22, 28,210, 72, 6,141,174,241, + 60, 27,170, 97, 92, 39,220,222,146, 98,113,223, 56, 27, 83, 16, 70,150, 34, 55,180,150,211,245,141, 77, 78, 78, 78,220,189, 1, +189,126, 15,165, 52, 85, 93,219,192,144,118,221, 89,174,198,141, 94, 86, 53,115, 78,180,235, 42,142,251, 85,207,216,121,115,122, +211,206,181, 22, 50,201,230, 48,102,207, 99,138,195,151,207,185,120,243,117, 94, 62,125,202, 86,125,145,251,105, 74,166, 54,240, +227, 4,141, 64,135, 30,127,240, 95,253,119, 28,236,254, 47,110,156,227, 58,122, 66, 16,202, 8,223, 15, 72, 6, 35,180,170,137, +146, 62,195,245, 17, 97, 16,146,205,230,204, 38, 71, 84, 69,110,103,240, 8,162, 40, 4,225, 99,132,231,198, 14, 11,146,156,118, + 57,234,242,156,172, 4, 97, 26,173, 8, 24,161,168, 84,137,240,237, 24, 45, 77, 51, 75,236, 51,198,230, 0, 24,195,112, 99,139, +147,233, 9,179, 89,202,201,116,234,130,181, 13,232,156,172, 0, 0, 32, 0, 73, 68, 65, 84,108,149,142,231,241,250,107,111,160, + 74,171,133,248,235,159,254,152,157,253, 67, 62,249,229,167, 36,195, 1,243,217,140,181,225, 58, 87,175,221,160,215, 79, 56, 57, + 58,228, 7, 63,252, 33, 55,111,222, 70, 43,101,133,211,206,225, 32,125,191,163,217, 18,108, 95,186,198,201,241, 30, 65, 24, 80, + 86,134,159,252,245,167,188,249,218, 45,134,131, 62, 59, 47, 95,240,250,235,175, 51,159,103,108, 95,216,230,219,223,252, 22, 15, + 31, 63, 65,186, 28, 16,221, 4,221, 4, 11,174, 75,154,166,139, 74, 93,124,141,249,231,234,255,119,165,244,156,161,140, 63, 59, + 23,246,116,123,246, 44, 33,212,162, 77,103,109, 30,117,173, 92, 66,146, 89,138, 66,237,182,151, 76, 7,211,185,164, 2,110,191, +191,215,249, 60,211,122,115,187,200,218, 38,142,181,121,145,154,135,173, 81,194, 47,233, 2,132, 69,252,133, 97, 72,224, 60,241, +113, 20,219,150,187,239, 51, 8, 67, 62,126,247, 93,254,193, 31,252,125, 46,108, 95,230,207,254,252,207, 81, 8,246, 15,246,153, +205,166,214,187, 25,199,152, 42,103,123,125,196, 55,223,125,139,121,161,201,106, 73,165,161, 84,149, 19,123, 5, 36,113,194, 96, + 48,162,223,235, 19,134, 33,190,231, 57,209,154, 89, 82,191, 75,105, 91, 62, 85,173, 90,241,159, 94, 17, 41, 26,163,157,200, 77, +119, 30,120, 22, 64, 21, 22, 86, 67,173,161,170, 43,202,218, 16, 74, 73, 20, 5, 92,189,122,147,178,204, 59,246, 13, 65, 89,100, + 84, 10,250,161, 68,200,128,218, 85, 63,230,220,205,231,213,130, 32,179,154, 25,192, 2,204,226, 9,207,182,218,196, 98, 20, 35, +218,249,186,221,204,155,202,185,151, 36,150, 65, 16,134,244, 7, 35,122,189, 30,105, 54,183,162, 46,167,142,111, 2,108,108, 27, +146, 54,221,169, 9, 12, 50, 24,198,235, 27, 54, 66,177,180,224, 30,221,188,230,134, 37,194,161,210,154,193,112,196,155,239,254, + 10, 71,199, 71,140, 55, 55,121,250,197,231,168,186, 92, 80,186, 92,165,110, 55,120,177,216,252,150,196,126,230, 84,134,189, 57, + 3, 44,179,106,105, 91, 78,112,107, 97,127,231,142,188, 90, 60,238, 25,217,221, 93,182, 67, 20, 6, 68,161,143,231, 73,202,218, +218,147,242,162, 32,138, 66,134,131, 30, 81, 24, 16, 6,161, 85,195, 27,131,244,195, 78,117,142,243,220,227,224, 45,246,119,244, +131,144, 34, 79,217, 63,220, 99,109,188,193,108,122,194,107,183,238,112,120,176,199,201,244, 16,223,131,233,228,200, 86, 38, 44, + 40,127,149,211,218, 12, 6, 67, 54,183, 54, 9,227, 30, 97,100,219,216,202,229, 87,219,209, 84,128,170, 21,183, 95,123,131,126, +191,207,243,103, 79, 57,220,125,129,214, 54, 24, 68,202, 0,225,121, 84,101,238, 28, 53,141,216,177,121,183,173,211,133,157, 82, + 99,180,194,107, 71,184,157,158,183, 88, 36, 5, 94,218,190, 72, 24, 6,220,253,226, 46,199,199,199,120, 88, 80,200,131, 7, 15, + 56, 58, 60, 34, 8,173,114,254,248,200, 66,140,234, 14,108, 70,116, 0,242, 93, 54,200,210,198,187,226, 38, 94,245, 42,127,149, +208,238,213,246,183, 14,235,189, 73, 10,115, 8, 84,194,132,245, 11,219, 12,183, 46,209,235, 15,172, 72,184,172,121,124,255, 41, + 90, 67, 20,245, 49,202, 42,196,123,253, 11,236,189,120, 74,212,239,219,228,200,141, 45,182,174, 92,163,191, 54,102, 48,176,200, +230,209,120,157,233,241,132,201,209, 9,186,182, 64,168,233,201, 33,121,158, 81, 21, 57, 26,195,211,207, 62, 37,207, 38,152,170, + 2,101, 83,219,186,124, 19,113, 78, 55,143,206,235,217,132,226,104,165, 73,211,185,173,218,203, 10, 85, 87, 36,142,243,113,229, +250, 45, 14,247,119,216,121,254,130,249,244,132,178,178,247,156,239,251,108,108,109, 17, 70, 62,166,174,137,147, 30,165, 82,244, +134, 99, 14,142, 14,185,126,243, 53,246,119,247, 0,205,245,107,215,248,224,221,119,136,147, 30, 89,150,130,214, 92,190,120,217, +210, 37, 61,225,226,125,181,253,222, 74,145, 21, 37,251,251,123,244,146,152, 60,157,179,177,117,129, 52,175,120,185,183,203, 90, + 63,226,209,163,135, 92,185,122, 19,165,140,115,153,192,189, 7,247, 56, 57,153, 88, 42, 98,109, 59,133,101, 85,145, 23, 69,155, + 51, 16, 70,209,233, 77,253, 85,241,125,171,109,246,102,147,107,254,219,205, 91, 95,165,204,117, 55,253,174,242,210,235,248, 11, +187,184,209, 5,131,222, 10, 82,154,246,185,215,185,217, 27, 65, 92, 83,209,121, 14,199,218,120, 62,237, 44,121,113,163, 55,127, +191,120,112,188,133,200,169,161,247,184,150, 70,155, 29,220,217, 57, 12, 46, 95,184,165, 6,249, 96, 4, 97, 24, 17, 5, 1,189, + 40,230,206,245,155,124,235,253, 15,121,251,245,219,248,194, 48,153,166,188,216,221,163,172, 20,105, 58,227,100, 50,177,109,225, + 40, 66,186,131,192, 91, 55,175,114,241,214,219, 76, 76,132, 10, 18, 82, 45, 17, 97,159,209,230, 37,174,221,184, 3,126, 72, 93, + 41,148,170, 40,178,140, 44,207,200,203,146,162, 40,168, 28,123,188,217,164, 27,205,113,173,244, 82,140,104,163,112,214,206,194, +214,216,211,186,212,210, 37,126,128,214, 40, 3,101, 85, 82,215,240,209, 71,223,224,131, 95,249,136,231,187,251,244,251, 61, 6, +253, 1,120, 1, 85, 85, 89,223,119,101,233,108,189,164, 71,102,196, 43, 55,244,175,170, 58,197,242,170,229,238,139, 5, 55,125, + 49, 59,166,157,167,219,107,107,239, 15,223,151, 8,237,224, 49, 6,140,131,149, 36,189,132,217,116, 98,209,165, 70, 99,148,107, +187, 58,250,160, 86, 11,230,124,147, 23,160,209,172,111, 94, 64,232,154,188,204, 73,211,194,182,240, 28,207,160, 9,255,105, 9, +137, 70, 83, 42,195,205, 27, 55,168,139,156,151, 47,158,187,142,137,251, 61, 28,247,125,113, 12, 89,158,103, 11,186, 20,185,206, + 38,110,204, 87, 88,218,190, 90, 72,183,202, 6, 88,132,185, 44,111,236,141, 54,164, 57,136,212,170,102, 52, 28,178,187,191,199, +198,230,133,118,113,196,169,209,243, 60,167, 42,109, 28,102,165, 20,158, 12, 58,105,111, 6,207,232, 5, 82,213,253, 69, 63, 73, + 72,179,220,230,168, 39, 61,174, 92,190,194,135,239,191,203,227,167, 79, 41,202,130,170,214,100,233,156, 44, 79, 91, 87,130,104, +232,145,142, 63, 16,246, 70, 92,188,116, 13,233, 75,242,233,148,186,170,152,167, 54, 17,235,157,247, 63, 38, 47, 10, 6,163, 33, + 15,238,125,193,193,222, 75,180,174,172,245,211,147, 32, 44,124,200,156,135, 82,245,150,237,132,198,216,223,197,104, 13,141, 2, +190,209,173, 24, 97, 89,240, 64,150,165, 4, 65,228,156, 42, 30,101, 89,114,176,127, 64,150,102,244,122, 61,162, 40, 34, 75, 51, +234, 74,147,103,249,105, 70,187, 89, 84,223,167,158, 21,195,105, 96,255,127,170, 55,175, 25,243,200, 69, 72,146,139, 30, 70,134, +120,126, 64, 60, 92,227,226,173, 55, 40,243,140, 34, 79,153, 78,142, 41,171,156,201,225, 49,233, 60, 39, 74, 70,110,106,225,232, +106, 24, 43, 88, 52,134,120,208, 35, 74, 2,118,158,237,144, 77,102,204,103, 83,138, 52,165,200, 83,140,214,228,121, 74, 85, 21, +174,192,178,207,242,203, 71,247,152, 29, 29, 64, 85, 58, 24,152, 90,116,186, 92, 39,160, 51,119,236,182,161, 22,197, 64,211,162, + 53,118,156,168,116,109, 81,188,181, 34,244,125,100, 24,147,207, 78,168, 84, 77, 89, 86,164,243,180,181, 63, 71,113,196,205,215, +222, 36, 8,236,248, 84, 74,143, 40,238,113,239,203,123, 40,165,217,221,223,229,141, 59,111,241,221, 95,255, 30,191,255,187,191, +199,103, 95,220,231,231,159,126, 74,150,229,236,236,237,176,182, 54, 98,115,235, 2, 85, 85,183,129, 46, 85,153, 91, 82,163,231, +183, 28,128, 60,157,243,248,193, 93,174, 94,185,194,241,100,206,238,193, 1, 85, 62, 65, 6, 9,117,109,216,221,223, 99, 58, 75, +217,217,123,201,203,157, 29,187,174, 43,237, 80,180, 11, 61, 90,243, 76,251,109,226,213, 74, 27,124,169, 37,218, 84,179,231,120, +213,187,159,219,221,176,155,175,213, 70,196, 53, 27, 76,199,187,222,176,225,187,129, 45, 75, 45, 91, 33,150,104,114, 97, 16, 80, + 20,133,165,198,181, 10,228,166,202,208, 75,107,159,205, 74,246, 23,223, 95,219, 42,181,219,214,109, 46,186, 49, 6,161, 93, 38, +183,239, 99,217, 51,246,231,104, 42, 63, 79,122,110,134,234, 55, 83, 53,146, 56, 38, 10, 67,110, 93,190,204, 63,254,135,255,136, +164,215,227,238,221,187, 60,120,250,132, 52, 51, 28,189,120,196,241,228,132,119,222,122,159,255,247,207,254, 29,243, 44,103, 48, + 26, 81,215, 21,145, 47,249,141,191,245,125,110,221,184,198, 23,247,239,147,165,115,210,188,112,177,122,118,244,245,249,131, 47, +233,247, 6, 28, 29, 29,162, 84,133,174, 50, 34, 81, 19, 75, 64,215,173,158,160, 65, 24,106, 87,189, 55, 7, 26,221, 57,221, 46, + 54,236, 5, 47,153,206,198, 46, 86,250,127, 6,131,244,124,164,172, 81,194,227,147,187, 95,128, 16,156,204, 11,226,237,109,122, +189,128,141,237,107,188,124,250,144,131,151,207,236, 34,154, 79,144,193, 26,218,120, 95,217, 46,126,245, 26,211,196, 63,138, 69, +203, 29,115,134, 80,172,169,128, 27, 65, 35,248, 24,164,239, 33,133, 65, 6, 18,163, 20, 90,213,182, 77,222,116, 39,154, 54,177, +240,150,252,197,184,230,124, 39,124,213,206, 81,141,108, 67,139,154,174, 77,163, 19,145, 82,182,149,111, 93,215,156, 28,238,113, +180,190,142,148, 78,139,161,150, 70,213,231,176,182, 95, 65,124,165, 9, 41,234, 70,195,154,142, 64,112, 97,199, 91,205, 91, 95, + 54,160, 47, 62,238,122,243,151, 54,140, 51,174,153,198, 99,247,232,152,219, 55,111,113,229,218,117, 62, 41, 51,164, 7,155,235, +235,232,186,162,174, 21, 69, 89,177,179,179, 67,254,114,119,233,251, 53,135,228,238, 69, 51, 90,219,153,183,231, 81, 86, 53, 79, +238,223,229, 87,222,127,143,207, 63,191, 11, 24,214,198, 23,240,227, 1,207, 30,125,137,192,163, 86, 5, 32,137,147, 30,170,170, +240,125,143,254,112,200,198,214, 37,158, 60,188, 75,127,212,167,172,114,138,162,194, 51, 18,207,243, 25,174,111,242,193,214, 69, + 62,249,201, 95, 80,164, 51,140,174,240, 3, 31,165,106,226, 36,166,200, 11, 84, 85,127, 77, 49,225,202,245,104,218,187, 66,129, +167, 90,240,143, 16,130,193, 96,200,193,193, 62,117, 93, 34,165,116,155,129,116, 93,140,154, 60,243, 40,203,218,233,131,188,191, +113, 85,253,255,199,155, 16, 43,135,112,209,137, 85,214, 6,163, 43,140,170, 56,126,241,204, 94, 81,167,203,177,107,143,205, 53, +159, 30,238,243, 18,143,209,250, 6,170,174,217,186,124,157,221, 23, 79,160,206, 40,202,156,217,193, 17, 85, 94, 82, 21,182, 18, + 47,138,220,218,194, 48,228, 89, 96, 95, 79,101,173,132, 81, 20, 83,148, 57,201, 96,232, 10,171,102, 18, 37,150, 56, 22,171,115, + 37,115, 70,123,170,155, 83, 34, 16,232,178,118,241,199,130,121,154,114,227,242, 21,158, 61,121, 68,224, 75,122,253, 62,202,161, +163,149,178,237,236, 23,143,191,100,118,208, 35,126,239, 35,126,252,163, 31,240,222, 71,191,202,116, 54,181,182,204,209,128,203, + 23,183,201,243,156,127,253,191,253,107,158, 60,126,192,228,232, 24,141, 97,109,188,193,207, 63,251,156, 7, 79,159,179,183,243, +140,171, 23, 47,242,141,143, 63,182, 7, 64,199,207, 55,120, 28,157,156,208,239,247, 88,223,188, 76,173, 44, 5,113,150,213, 32, +251,188,120,249,140,241,186, 98,255,112,143, 43, 87,174,211, 31,140, 22,124, 23,135,196,214,238, 4, 22,134,161,203, 13, 16,118, +166,126, 22,158, 98,181, 90, 50,103,204,220,151,162, 86, 59,213,115, 35, 86,107,132,105,205,198,234,117,208,179,205,194,210,221, +228, 87, 15, 10,129,239,159,242,198, 91,108,165,180,243,112, 85,183,109,216,238,108,138,142, 23, 94,181, 73,104,180,104, 61,209, + 90,247, 22,149,145,118,130,183, 38, 4,164,109,181, 59, 62,124,243, 86,233,218,205, 91, 37,113, 32,145,198,240,135,127,231,119, +248,248,131,143, 49,192,131, 71, 79, 56,153,167, 24, 35,216, 63, 58,224,249,243,167,164,243, 9, 89, 94,178,187,251,146, 48, 73, +172,152, 74, 43,100,173,120,246,249, 79,233,151, 39,220, 30,111,145, 69, 1,243, 34,103, 50,157,240,236,249,115, 30, 60,191,207, +113, 58, 99, 54,207, 17,210, 39,205,114,146,254,192,158, 36, 49,140,134, 49,107,177,196, 83, 85,123,160,105,212,145, 90,211, 42, +243,187,124, 0,131,193, 72, 15, 73, 3,161,113, 85, 84, 19, 4,237,198,106,173,239, 84, 8,110,223,126,157,195,227, 19,170,186, + 38, 8, 66, 60, 25,176,127,120, 76, 16, 4, 8, 63, 32,232,141,209,234, 17, 85,169, 57,153, 79,233,175, 13, 80,120,232,142,165, +238,111,220, 18, 84, 26,207,128, 22,221,123,111,177,105, 45,132, 96,206,226, 39, 12,190,176, 55,122, 28,122, 96, 60,198,253,132, +124, 62,165, 84, 37, 71, 79,239,115,240,252, 17,117, 93,209, 27,218,128, 15,229,217,106, 59,148,129,125, 25,100,141, 86, 30, 70, +219, 36, 36,164,164, 23,199, 14,157, 9,210,243, 45, 27,192,221,223,149, 3, 23, 37,137,245, 27, 23,121, 78,173, 13,190,123,221, +101,148,180, 73,126,205,115,166,189,211, 45,113, 15,111,129,138,109,181, 31,210, 85,244,221,120, 84,111,105, 54,190,218,110,255, +186,149,123,187, 40,154, 69,149,222,140, 93,204, 89, 54, 57, 64, 24,201,237, 91, 55, 57,153, 28, 51,159, 77,233, 37, 49,187,123, +123,100, 89,198,222,206, 30, 85,165, 28, 64, 42,116,150, 40,109, 15, 72,205,243,214,121,222,141, 49,100,121,142,239,123, 68, 81, +207,182,114,107,205,237,119,222,230, 39, 63,255, 25, 85,173, 41,202,140,121, 94, 90,232,136,178,215,187, 44, 10,162, 56,166, 72, + 83,166,211, 57,126,120,136, 82, 53,147,201,140, 32, 25,160,211,140,241,214, 38,210, 11,185,117,235, 53,254,244,223,254, 95,236, +239,238,162, 77,213, 96,199,136,252, 16, 97, 60,234,178,122,165,202,124,213, 2,253,234,219,119,113, 92,251,255,152,123,179,102, +187,146,244, 60,239,201,204, 53,236,241,204,192, 1, 80, 0, 10, 64, 1, 53,118, 87, 87,143,106,118,183,217,164, 72,118, 75, 10, + 43, 40, 57,194,146,232, 65,162, 47, 20, 33,135, 46,252, 23,120,233,123,219, 23,118,216, 97, 59,194, 23,158,168, 8, 91,150, 76, +134, 37, 82,166,201,102,147,221, 53, 87, 97, 40, 20,102,156,121,216,243, 94,123, 13,153,233,139,204,181,246,218, 7, 7,168, 34, +197,144,136,138,138, 66,225,156,179,177,135,181, 50,243,251,190,247,125,222, 75,151,207,113,116,216, 99, 52, 30, 18,168,208, 61, +239, 60, 33,138, 34,226, 70,200,104, 52, 33,203,115, 10,175,176,255,203,176,169,207,163,134, 79, 68, 12, 89, 7, 97, 50,218, 98, + 10,195,112, 52, 32, 75, 38, 52,187,203, 72,175, 43,114, 85,167, 36,157,205,216,223,121, 12, 88, 58,221,101, 52, 49,235,155, 23, + 56,218,121, 2, 8,215, 93, 76,103,100,105,226,220, 65, 85, 20,182, 68,235,162,162, 91, 74,191, 31, 4, 42,164,221, 93,246,190, +247,121,252,171,125, 94,161,240,172, 21,228, 25, 63,103,221,198, 41,188,240,242,254,157,219, 72, 41, 73,172, 97,150,101,180,219, + 29, 70,163, 17, 90,107,210, 52,227,193,131, 7,108,158,221, 96,243,226,128,100,146,240,225,123,127,196,160, 63, 34,203, 53,179, +100,194,104,120,192,131, 7, 3,130, 56,228,210,213, 87,201, 47, 36,124,255,123,223,227,227,143, 63, 98,111,127,143,163,227, 67, +142, 15,246,233,247,135,196,141, 6,231,206,158,165,221,108, 57, 23,146,207,155,104,196,107, 96, 93,229, 31,132, 13,222,249,234, + 53,110,221,189,195,147,221, 67,130,168,237,198,138, 8, 58,173, 14,237, 86,147, 89,146, 80, 4,130, 48,136,209,133, 23,248, 26, + 83,237, 99,106,211,179,223,159,129,207,156,176,170,217, 19,237,247,147,173,245,147, 80,131, 58,217,232, 36,140,255,121,249,232, + 11,143,227, 63,244, 82,176, 84,162,241, 74,187,218, 28,145, 71, 53,175,168,186, 4,181,177,128, 84,106,129,172, 84, 66,244,231, + 31,178,152,219, 82,202, 22,123, 16,204,199, 7, 30, 88, 83,127, 77,110,241,146,180,227, 38,191,241,183,255, 14, 87, 46, 95,101, +107,239,144,207, 30,222,103, 56, 30,147,101, 25,119,239,223, 99,119,103,139,209,120,196,104, 56,224,204,185,151,216,122,250, 24, + 37,157, 77,173,232, 31,240,253,175, 92,231,245,235,175, 16,199, 45,134,163, 17,195,209,128, 65,239,144,227,227, 3,146,217, 16, +108, 65, 39,128,165,118, 68, 28, 88, 66, 97,145,104,132,206,209,166, 96, 48, 76, 24, 78,114, 50, 20, 65, 24, 97,116, 86, 19,127, +205,253,228,229,102, 94,222, 56,166, 22,175,233,246,117,103, 79, 51,224, 43,123, 23, 33,235, 58, 29, 17, 23, 46, 95,231,184,223, +171,120, 2, 88, 55,107,183,214,137, 64,164,144,244, 14,182, 49,190, 61, 30, 7, 2, 29, 54,220,166,254, 28, 58,220,105,254,244, +133,131,164,169, 99, 43, 75,129,165, 93,184, 79,165, 84, 40,159, 83, 31, 42,103,247,107, 70, 1,107, 75,171, 92, 61,187,202, 70, + 51,224,210,153,101,206,173, 45,209,109,132,204, 38, 3, 14,247,247,233, 29,237,163,141,165,213,234,178,212,238,242,213, 55,191, +194,193,193, 33,218,184,207,187,244,128, 6, 81,196,202,234, 58, 42,140,177, 38, 35, 75, 83,210, 52,165,200,117,117, 88,138,227, +120,222, 57, 10, 2,172,128,184,217,100,245,204, 38,235, 27, 27,108, 61,184, 87,141, 69,168, 87,197,130, 5,248, 76, 73, 59,172, +188,226,207,168,211,235,247, 27,167,224, 97, 57,117,206,126,186, 95,189,118, 77,156,216,255,171,133,207,204,189,235,229, 73,175, +217,138,184,113,245, 10,201,108, 70,175,223, 67, 23,133,127, 63,114,199, 57, 40, 10,178,188,240, 1, 40,139,249, 14,243,191,179, +246, 28,140, 37,142,155,104,109, 88,223, 56,195,104, 50,229,246,237, 91,172,111,108,178,253,248,161,131,201,204,166, 11, 93,166, +134,119, 33,204, 38, 19,134,253, 30, 65, 16,211, 63, 58,102, 50, 25,115,249,234,235, 92,188,124,149, 32,140, 56, 58, 62,226,222, +173,143,201,139, 4, 21, 72,164, 84,158, 32, 23,184,150,239,139,132, 99, 82,156, 18,164,242,156,182,183,156,195,132,194, 48,228, +204,153, 51, 32, 93,102,118, 20, 70, 76,166, 78,195,161,181, 33,207, 10,138,220,197, 37,159,234, 58,248,183,249, 75,214,212,239, +190,170,117,247,158,114, 28,144, 32, 64, 69, 33,171, 27,231,216,184,120,133,150,207,167,207,243,204, 51, 9, 92, 17, 55, 73, 18, +140, 49,132, 97, 72,220,106, 51, 25, 13, 49,186, 32,138, 34,102,233,140,162,200,156,146,221, 99, 86,173,209,180,219, 29,162,184, + 73,150, 37,110,220, 83,100,104, 93, 48,155, 38,236, 62,184,141,206, 83,140, 46, 16,149,168,213,143, 83,121, 22, 58,246, 69, 39, +176,147,221, 50, 91,141, 84, 92, 1,152,205,102,190,205,111,157,248,207,104,146, 89,198,100,216,231,175,252,224,135,228,218,137, +171,251,189,125, 94,186,248, 10,237,165, 85,127, 50, 86, 92,121,249, 18,175,190,250, 38, 63,127,247, 93, 62,254,248, 67, 54, 55, + 55,217,220,188, 72,158,101,100, 58,229,206,231,159,115,243,147, 79, 56,183,185, 65,179, 17, 87,235,135,213, 5,179,196,141,143, +206,109,158,195, 34,248,232,147, 79,120,186,253,148, 15, 62,252,128,235, 87,174,112,118,227, 12, 65, 20,178,189,179,205,113,175, + 7, 30,200,102,173, 75,129,115,193, 64, 78,103, 86,169,223, 79, 82,223, 78, 83, 33,159,150,170,117, 50,148,227, 52,166,183,169, + 43,151, 79,216,216, 78, 90,227,202,159,209,198, 69,126, 90,107, 73,211,172, 98,188,139,122, 35,241,132,101,163, 10,135,241, 23, +152,170,252,245, 84, 65, 49,174,133, 58,199,202, 86, 51,119,255,143, 82,210,219,210,100,245,166, 41,175,162, 46,231,250,161,148, +172,180,150,248,149, 31,254, 10,153, 54,188,127,243, 83,142,251,125,132,128,222,241, 1, 69, 94,240,228,209, 67,142, 14,119, 25, +141, 71,172, 44,175,208,136, 27,172, 44, 47,145,103, 25, 45,147,240,250, 91,175, 34,130, 6, 79,118, 14,152, 38, 35,166,147, 49, +233, 44, 33, 47, 50,239,207,215, 72, 44,198,251,177, 91,113, 68, 43,114,109, 42,109, 12,218, 58, 21,228, 94,111,200,222,225,132, +163, 32,164, 29, 7,172,180, 2, 66,161,157,239,182,108,193,155, 57,180,199,250,147,176, 49, 6,171, 5, 70, 27,114,109, 22,102, +233,121, 53, 2,149,206,187,249,248,169,111,233,187,199,113,109,103,129,241,239,107,220,142, 41, 52, 24,155, 51,203, 45,131,201, +136,165,168,137,150,205,103,236, 97,167,133, 16,156,180,178, 9,192,150, 44,237, 57,108,127,225,251,165,152, 95, 9,129,148,132, +129,165, 25, 71,156, 91,233,242, 15,255,246,143,184,180,185,206,246,193, 17,253,209,152, 89,154, 49, 76,102,156,221, 94, 99,115, +243, 28,247, 30, 61,230,240,168, 71, 95, 91,190,254, 87,127,196,127,252, 31,253, 3,182,247,255,115, 30, 60,124, 72,160, 4, 89, +230, 68, 40,121,158,147, 23, 5,235,237, 54,227,227, 17,179, 36, 3, 43,253,181, 36,201,243,162, 66,165, 90,107, 17, 65, 64,220, +106, 16, 69, 13,174, 95,187,206,238,238,206,188,253, 94,239,118,213,156, 24,194, 31,164,140, 63, 88, 46,194,105, 78, 42,158,173, +255, 12,190,220, 76,253,121,168,222,133,150,123, 85,185,219, 5,159,250, 51,247,176,209, 28, 30,245,248, 40,189,201,227, 71,143, +200, 50,119,144,113,243,244,220, 91,252, 28, 52,199,136,242,243, 58, 29, 34,228, 34, 92, 45,214,184,168,212,184,213,100,123,123, +139,237,221,167,244,122,251,160, 36, 71,251,251,136,192, 35, 49, 75, 33, 98,158, 51, 25, 77, 16, 72,180,201,145, 6, 31, 98,164, + 9, 26, 49,171, 27, 27,140,198, 3,206,108, 92,224,206,205,247, 40,242,153,247,184,251, 13, 29,200,210,153,211, 12,148,159,193, +151,217,240,140,253,194, 34,189,188, 94,198,227, 9,123,123,123, 20, 69,225, 66,159,148, 34, 80, 33, 89,150, 19,132,202,235, 49, +204, 11, 99,117,255,141, 86,233,117,232,145,176,212,135,177,194, 88,172,116, 85,160, 41, 10,116,150,114,255,230,135,188,243, 75, + 63, 66,133, 33,211,201,180, 98,116, 40, 25, 96,116,129,180, 5,227,193, 49,217, 44, 97,121,227, 28, 27,155, 47,241,244,254, 29, +116,225,238,165, 82, 31,227,198,156, 33,185,206,153, 38, 9,205,102,135, 70,220,114, 34, 86,156, 70,161,217,238,186, 34, 74, 6, +222,181,194,169, 54,206,147,235,136,125, 65, 71,194,214, 55,118, 33,156, 3, 72,136,138, 80,103,172,161, 17,195,114,183,193,116, +102,153,101,154,220,102, 28,236, 29,242,123,255,207,239,112,241,210,203, 92,188,250, 26,199,131, 9,159,125,246, 41,211,201, 49, +198,184, 14, 97, 49,217,227,195, 92,240,116,107,155,171,175,188,202,217,179,231,249,248,147, 15, 81, 82, 48, 28,244,249,230,183, +190,199,225,225, 54,239,127,252, 41,191,246, 43,191,196,119,191,243,109,132,144, 76,167, 51,146, 89,202, 96, 48, 96, 50, 25, 51, +153,101, 28,247, 29, 71, 97,146, 76,248, 23,191,247, 59,204,178,156,254,112, 68,179,211, 69, 5, 14, 96,228,186, 40, 6,227,109, +223,133,245,184,242,205, 90, 74,219, 51,216,205, 23,136,230,190, 72, 76,119,154, 10,243,228,134, 95,206, 37,235,172,226,122,214, +236,226,129, 97,209,162, 81, 85,141,245,231, 41, 29, 56,198,214, 42,186, 18,245, 89,162, 67,133,247, 21,151,155,191,155, 13,205, + 89,194,214,206, 75,161, 50,133, 77,249,252,232,242,160,176,214, 93,225, 59,223,254, 5, 14,142,143,249,244,238,109,198,147, 41, +155,103,207,112,112,120,200,211,173,167,108, 61,121, 76,239,240,144, 52, 77, 89, 95, 63,195,245, 27,175,115,247,243, 79, 72,211, +130, 88,100,180, 27, 49,121, 97, 56,238, 29,177,127,180,195,104,212, 35, 73,166,228,254,132,186,128, 3, 45, 19,214,124,181,103, +188, 85,195, 65, 83,220,194,113, 60, 24, 50,157, 38,140,167, 41,195, 73,130, 12, 98,132,180, 96,168,236,108,182, 12, 2,168, 42, +116,175,246,246, 86,182,121,155, 92,248, 53, 76,114,229,218,107, 28, 15,199, 12,134, 35,180,209, 21,168,199,241,206, 45, 97, 28, +209,136,155, 44, 45,117,217,122,248,192,133, 99,224, 14, 12,177,180,132,113,155, 66,200, 23,139,180, 78,222,148, 11,115,102,159, + 96,102, 44,243, 28, 33, 81, 9, 44,149, 16,132,210, 5,226,116,218, 29,150, 35,197,143,191,255,109,126,240,206,155, 36,179,148, + 78,171,197,203,231,207,114,110, 99,131, 0,144, 42, 96,154,165,180,155, 13,154,173, 54,163,201,144,207,239, 63, 32, 51,146,165, +165,101,118,247,182,171, 4, 59,227,245, 23, 66, 8, 86,215, 54, 48,121,198,112, 48,112,234,217, 60,175, 20,211,229,181, 23,134, + 97,165, 1,208, 70,163,162,136,165,245, 13, 30, 61,248,252, 25,221, 66, 5,211,169,133,152, 87,153,108,162, 70,151, 19,207,223, +180,133, 56,141, 50, 87,155,153,219,211,127,118,161,107, 98, 79, 7,206,156,214,130,151, 66,144,167, 9,111,189,122,189,130,118, +228, 69,225, 83,199,138,202,250,100,177,200, 32, 92, 56,160,137, 90,219,211,251,163, 92, 71, 8,139,176,154,118,103,149,227,163, + 99,134,253, 35,138,162,112,112,142,195, 67,162, 70, 76, 58,157, 44, 28,254,165, 12, 0,235,187, 3, 78, 77, 44,132,164,179,180, +194, 43,175,189,197,222,214, 99,182, 30, 63,228,232,224, 41, 86,216, 74, 68, 25,199, 49,179,100, 70,121,210,168,146, 23,121,126, +245, 61, 23,200,189,112, 32, 93,117, 93,202,123,107, 99, 99,195, 57,118,112,100, 76,165, 2,186,221, 37,164,130,209,120,234, 79, +204,226,223,234,102,254, 44,165,110, 62, 12, 18,204,169,162,248, 74, 29,225,232,114,198, 20,172,174,159,229,204,203,215,153,141, + 71,110,230,174, 13, 65, 24,186, 3, 88, 81,176,191,243,148,233,112,192,108, 60,166,189,180,130, 12, 20,211,209, 96, 62,122, 21, +208,108, 52,171,241,183, 7,108,187,188,118, 32, 10, 93,124,174, 20,130,123, 31,189,235,224, 51, 69,225,216, 1, 53,178,168,100, +222, 5,126, 38, 4,234,180,187,230, 68,242,227,201, 49,115,217, 87,210,133,173,108,170,198, 3,182,180, 54, 12, 7, 67,250, 71, +187, 28,239, 63,161,119,116,128, 65,114,238,226,203, 72, 12,163, 97,159,183,191,249, 67,134,131, 35,116,145,114,229,234,117,210, + 52,227,157,183,223, 97, 52, 28,161, 36, 92,186,116,145, 87,175, 94,230, 43,111,188,206,234,234, 26, 91, 79,183,185,121,243, 22, + 66, 10,214, 55, 54, 8,163,152,127,254,187,191,203,225,193, 1, 23,206, 95,164,217,233,114,235,230, 77,192,242,225, 7,239,209, +110,183,233, 46,173,112,216, 59, 98, 52, 26,251,113,243, 92,179,230,226,124, 11,212,185,203, 87,126,235,100,150,245,139, 54,247, + 47,147,248,115,154,165,237,121, 45,254,211, 22,248,250,215,158,119,112, 88,176,183,213, 91,238,254, 38,171,219,221,170,192, 26, +107,231, 1, 39, 30,172, 17,133, 97, 21,202, 81,109, 42,190,131,163,252, 1,161,244, 34,135, 97, 72, 32, 3,174, 95,125,133,251, +247,239,243,238,123,127,202,176,239, 32,253,219,219, 79, 24, 77,198,116, 58,203, 4,129,196, 74,201, 75,151,175, 32,195,144,219, + 55, 63,101,109,101,153,241,104, 64,104, 13,185, 46, 72,146, 33, 69, 54, 69, 8,187, 32,252, 16,181,148,177, 82,183, 54,183,152, +153, 10, 17,168,141,118,137,105, 62,101,108, 60, 26,251,128,154,148,209,104,138,177,130, 48,168, 65,113, 16, 11, 34,146,146, 1, + 95, 89,154,132,240,126, 92, 0,197,185,243,151, 41, 68,200,238,254,126, 21,122, 99, 42, 23,129,115, 57, 52,154, 13,148, 10,105, +182, 90,140, 6,125,146,241,200, 29, 54, 60,109,110,185,213,192, 40,135,237, 60, 89, 69,138,231,164,185,149,223, 37, 77,125, 49, +181,243,245, 83, 8, 31,130,224, 8,123, 97,160,104, 68, 1,157, 64,241, 11,111,191,202, 87, 94,189,198,230,153, 85, 90,171, 75, +172,111,172, 17, 71, 10, 17, 72, 86, 58, 45, 86,218, 45, 86, 87,215, 88, 63,123,150,118, 44,233,180,155, 20, 58,227,222,227,167, +188,253,246, 55,216,219,219, 5, 41, 25, 79, 38,213,232, 69, 72,197,210,202, 42,141, 40,228,248,248, 8, 37, 37,105, 58, 35, 12, +162, 42, 24, 72, 41, 69,179,209,112,108, 5,225,128, 40,227,225,144, 11, 23, 47,243,248,193,131, 42, 5,239,153,234,185,154, 55, + 11, 44,167, 88,149,158,129,135,216, 19, 48,154,185, 13,233,244,141,191,254,152,115,145, 42, 39, 42,245, 5,162,220, 9,193,156, +165, 30, 1,235,254,219,235,245, 72,211, 20,176, 44, 45, 59, 49, 83,158, 21, 20,133,198,250, 64, 15, 91, 7,165, 84,247,184,169, +193,155,124,123,223, 90,167,112,215, 5,201,212,193, 88,154, 77, 71,110,203,138,204,177,191,203,112, 18, 41,200,243,220,117,209, +138,162, 58,244,170, 48, 64,133, 33, 87, 95,185,206, 71, 31,188,199,100,208,195, 26,237,147, 10,149,211, 58, 20,121,205,190, 39, +230,220,138, 83, 5, 4, 39, 98,127,191,176,170, 22, 21, 82, 64, 10,193,225,225,225,194,103, 93, 20,133,195,197, 22,206,154, 84, + 22, 23,127, 9, 20,114,167,158, 45, 74, 43,163,168,101,125,151, 25, 26, 72,197,225,238, 14, 87, 94,251, 42,113,171, 77,103,105, + 25, 21,184, 86, 59, 86, 48, 56, 62, 36, 77,167, 36,211, 41,131,253, 93,118,158,220,103,117,101,205, 81,213,138,220, 31,206,172, +203, 25,143,194,202, 77, 20,133, 13,167,115,209, 26, 21,132,228,121, 70,168, 36,247, 62,121, 31,157, 38,216, 34,199, 58,160, 70, + 13, 23,110, 23,227,105,159,211,122,175,131,158, 78, 82, 41, 79, 37, 70, 8, 65,110, 56, 17,212,228, 58,106, 73,150, 49,153, 78, + 88, 93, 95, 35, 77, 83,146,233,136,183,223,249, 54,218, 8,210, 44, 65,133, 77,186,203,235,188,253,230,155,116, 90, 13,118,119, +158,240,253,239,253,128,115,103, 55,120,245,218, 53,214, 86, 87,249,249,251,239,147,102, 57,179, 44,103, 58, 77, 88, 89, 89,161, +187,180,204, 31,252,209,159,240,254, 7,239,242,225,135,239,241,240,241, 67,250,199, 61, 46,156,191,128, 12, 35, 38,195, 35, 62, +254,224,231,220,186,245, 41, 43, 43,107, 12,250,131, 10,249, 93,198,117,151,218, 52,117,254,242,149,223,250,162,197,246,100,123, +163,190,136,168, 19,182,182, 23,142,109, 78,120,203, 79,109,166,188, 32,189,171,252,217, 42, 10,211,183,195,235, 49,116, 85,242, +152,153,143, 12, 74, 77,128,171, 50,131, 42,115,219, 90,119,113, 9, 31, 80, 47, 69, 25, 92, 79,133,141, 85,129, 66, 23,218,219, +222, 96,125,121,149, 91,183,110,113,176,191,235, 4, 34,105,202,116, 60,162,223,235,177,179,179, 69, 32, 4,179, 52, 33,203, 82, +110,223,252,132,131,221, 29,214, 86, 87,216,221,221,198,230, 9,182, 72,193,228, 4, 10,103,169,168,205,252,235,171,176,193,133, +166,184,136, 80,215,114, 47,140,169, 2, 72,140, 54, 20,214, 85,223,161,114, 42,232,254, 96,128, 65,161,145,204,102, 51,146, 68, +211,108,132, 94, 8, 55,167,165,201, 10,191,234, 17,134,149, 87, 29,180,133, 75,151,175,211,234,174,240,240,241, 99, 15,244,176, + 21, 57,175,172, 42,131,192, 1, 68,162, 48, 34,110,196, 40,165,216,223,221,118, 54, 11, 99,200, 11,141,213, 57,171, 75, 43,228, + 34,152,223,124,167, 28,236, 22, 70, 50,101, 23,103,225,154,180, 11, 85,186, 16,130, 64,224, 50,232, 3, 73, 67, 41, 46,174,117, +248,107,255,206,119,248,230,215,222,160,125,126,131, 40, 8,152,141,198, 28,245, 18,246, 6, 25,147,104,133, 75,111,127,151, 65, + 6,191,243,251,127, 64, 94, 88, 86,219, 14, 37, 26, 7,130, 78,103,133, 34,207, 24,140, 6,180,151, 86,153, 38, 99, 84,168, 8, +131,152, 78,167, 77,163,209, 96,255,112,191,122, 94,101, 16, 71,133, 42, 46, 95,139, 82,172,158, 57, 79, 24,197,100, 69,193,240, +232,208, 45, 66,101,170, 91,229, 36, 17,149,223, 30, 33, 74, 13,220,137,131,140,173,137,150,236, 51, 19, 65,107, 79, 42,221, 23, + 15, 64,139, 14,129, 90,204,234,105, 51,116,158,173,210,235,194,185,178,168, 91,234, 52,177,214, 56, 59,101, 86, 48, 25, 79, 24, +141,198, 20,133,187, 22,101, 24, 59,145,223, 9,111,186,123,246, 37, 55,221,255,189,166,234, 93, 99, 74,177,148,209,140, 6,125, +167,242, 53,154, 34,203, 42,135,130, 3,208, 20,149,229, 8,225,162, 94, 95,121,237,171, 88,109,216,217,218, 98,220, 59,174,198, +107,101,151,206,120, 84,233,188, 52,156, 99,161,191,208,202, 6, 95,216, 42,175,116, 16,194, 85,116,141, 70, 68,158,231,149,205, + 72, 41, 69, 24,134,168, 80,186, 52, 54,243,151,109,150,126,250, 94, 95, 6,241,216,178, 83, 41, 5,168, 0, 35, 4,217,100,192, +149, 55,191,142,182,150, 70,171, 73,158,205, 72,166, 19, 30,126,250, 33,143,239,124,194,163, 91,239,179,255,228, 30, 71, 59,143, +248,236,163,159,147, 77, 18, 26,237, 54,205, 86,199, 5,156, 52,154,213, 24,196,226, 14,234,148, 7,183, 44,117, 98, 98, 11,219, +247,110,187,142,128,246,201,152,245,185, 58,115,232,212,169,115,244, 23,180,226, 79,110,248,212,164,130,194, 7,198,240,204,189, + 88,194,186, 12,185,118, 12,145,209,160, 79, 50, 29,112,233,229, 87,120,124,255, 54,201,184,199,213, 43, 55, 88, 95, 93, 97, 56, +153,240,116,123,143,173,167, 79,104,117, 58, 60,218,218,226, 95,253,191,191,207,247,190,255,139,140, 38, 9, 63,253,147, 63,230, +218,181, 27,116,218, 29,254,248, 79,126,198, 44,203,184,127,255, 30,253,126,143,241,104,196,222,254, 30, 59,123,123, 20, 69, 78, +119,245, 12, 97, 24, 97,117,206,116, 60,165,187,178,194, 44,157,121,189,215,220, 62, 94,104,189, 40,148, 59, 89, 9,127, 81, 60, +102, 61, 37,237,207,166,180, 60,165,146,126,142, 85,110, 81,228,230, 19,200,164,172, 50,215,171,214,156,247, 13,151,226,183,147, +145,176,213, 44,189,198, 73, 47, 59, 20,101,212,166,245,232, 87,170,220,228, 57,103, 94,107, 77, 35,138, 25,141, 70, 28, 31, 31, + 50,155, 76, 40,178,140, 44,155, 49, 29, 15,153,140,135,100,179, 49,219, 91, 91,236, 60,121,204,222,238, 83,218,173, 38, 32,217, +223,217, 66,217, 28, 97, 82, 2, 9,205, 70, 72, 35,114, 92,248, 32, 80, 21,178,214,122, 91,135, 99,145,107,167, 10, 46,177,173, + 53, 54,187,241, 80, 73,237, 55,119,237, 83,163, 66,165, 24, 13, 7, 24,227, 66, 25,146, 52,101,154,104,150,150,151, 61,246,114, + 81, 42, 82, 42,172, 93,234,154, 64,169,136,107,215,223, 98, 48,157,113,255,209, 99, 63, 55,229, 25,228,164, 82, 1, 81, 24, 33, +131,128, 56,114, 33, 51, 27,155,231,120,240,249, 93,231,153,247,129, 57,198, 26,150,226, 16, 19,183,171,247, 92, 85, 89,247,242, +116,251,100, 73, 28, 60, 49, 75, 46, 63,127, 87,161, 67, 20, 72,130, 64,208,140, 66,154, 88,126,252,139,127,133,239,126,227, 43, +116,215, 87,208,227,140,131,189, 99, 38,193, 10,103, 95,251, 26,189,113,202,149,215,223,100,255,201, 19,254,203,255,234,191, 96, +247,224,128,131,225,148,165, 86,147,229, 88,209, 27,141,185,121,231, 22, 55,111,125, 66,175,223, 39,110,180,185,246,202, 13, 70, +227, 17, 97, 20, 99,173, 97,117,117,141, 65,175,135,209, 26, 41, 36,201, 44,241,221,157,146, 19, 31, 80,174, 48, 97,220,228,234, +107,111,208, 90, 89,229,224,233, 67,239,175, 86,149,133,115,145,140,103,107, 43, 75,141,103, 47, 78,162, 98, 79,130,103,120, 38, +165,109, 49,176,165, 86,144,215, 20,194,166,182,137, 47,108,228,246,217,110,126,221, 59, 15,130, 56,148, 92,191,122,153,131,131, + 67, 95,173,103,126,182,103,171,128,154, 32,138,171,231, 43,235,110, 57,107,231, 7, 75,251, 44,201,238,100, 39, 35,207, 50,226, + 48,244,145,203, 98,193, 85, 83,142,218,164,116,108,242,175,127,235,123,236,238, 60,225, 96,119, 27,107,114,162,184,137, 21, 2, +165, 4,201,100,186,176, 22,156, 86,152,124,225, 38,247,101,151,183, 90, 11,222, 37,108,197, 11,196,194,102,179,129, 16,138, 44, +205,249,203,160,146,123, 94,180,111,133, 26,198,175,209, 98, 94,116,136, 50,158, 85, 41, 54, 47, 95,227,218,235,175, 98,173,160, +191,243,148,159,254,243,223,230,222,205,119, 25,236,109,147, 39,206,151,111, 10, 75,220,110, 49, 58,218,229,222,237,143, 56,222, +219,166, 25,199,116, 86,215,157,130, 94,107,239, 12,104,250, 10,126, 30,133,108,172,229,240,233, 3,198,199,135, 14,224,164,181, +227,241, 87,227, 85, 83,241,130, 78,253, 40, 42, 32,205, 23,136, 18,159, 17,203,215,161, 79, 39,238, 13,127,253,229, 69, 70,154, +184,196,198,116,146,128,180,116,219, 75,252,135,127,231,239, 49, 26,244,249,131, 63,252, 3,162,214, 10,159,221,254,148,123,247, +238,112,231,179, 59, 60,124,120,159,163,253,125, 62,189,117,203, 69,182, 78,167, 92,124,233, 34, 79,183, 30, 35,140,102,125,125, +157,237,167, 79,217,222,217,102,154, 36,164,126,141, 41, 71, 93, 71,199,199,104, 4, 23, 94, 82, 40,254,104, 0, 0, 32, 0, 73, + 68, 65, 84,190,198,242,202, 42,163,193,176,178, 39,215,117,110,193,105,202,245, 47,106,123,215,253,230,245, 7,123,209,172,253, +212, 22,189,251,225,133,141,254,121, 30,248,114,174, 94,125,152, 60,203, 14, 87,118,222,126,209, 39, 68,124,178, 22,147,169,132, +154,115,114,149, 66,227, 90,166,185, 79,192, 17,190,101, 86,206,230, 93,212,169,164,119,120, 72, 0,196, 74, 81, 68, 17, 82, 74, +178, 60, 37, 47, 28,128,163,200,139, 74, 73,185,182,113,142,184,217,225,248,112, 23, 37, 11,172, 41, 8,162,152,184,225, 82,219, +194, 56, 64, 40,111,241, 51,186,186,168,140,117,173,235, 10, 38, 32,106,157,115,227, 96,162,214,211,241,140,177,149,114, 29,143, + 86, 92, 95, 89, 98,239,240,136, 76, 54, 8,195,136, 84,231,220,125,240,148,213,110,155,245,149, 14, 74, 26, 74, 82, 22, 82, 32, +140, 59, 36,157, 59,123,142,245, 51, 23,248,224,227, 79,153, 38, 9, 89,238,160, 44, 37, 59,191, 12, 76,113,138,115, 89,161,121, +181,113, 56,219, 32,140,121,249,218, 13,238,221,249,148,194,104, 50, 45, 8,178,130,201,160, 79,107,101, 19, 67,136, 8,148, 79, +138,115,136,204,211,198, 51,101, 37,185,216, 29,147,115,244,171,128, 64, 42,162,192, 17,253,154, 13,197, 87, 94,190,200, 47,124, +235,171,180, 86, 87,248,240,206, 99, 76,176,194,165,215,191,198,217,149,101,178,241, 4,140,230,247,255,175,127,202,214,206, 14, +199,253, 62,147,233,140,220, 88,118,219, 13,206, 47, 55,153, 76, 19,102,179, 41,173,102,196, 81,111,200,222,214, 35,242, 60,227, +210,203,175,112, 60, 56, 66, 23, 57, 22, 65,220,108,147,231, 41,179,116,230, 19,253,236,130,227,194, 10,129,241, 21, 69, 50,157, +176,220,234,160,132, 66,163,171, 76,129,242,117,154,146, 85,239, 71, 33,178,222,169,240, 89,230, 86,212, 5,166,210,139,190, 78, +155, 22, 10,255,181,231, 35, 97,171,251,246, 52, 95,186,125,142, 3,174,238,128,241,125,232,187,159,223, 99, 48, 28,158,162,178, +183, 32, 2, 16,174,163, 37,237, 92,204, 90,253,189,162,238, 45,125,254,129,191,178,189, 77,167, 94,129, 45,159, 73, 48, 11,226, + 22,235,103,206,208, 59, 56,224,248, 96,151,227, 67,103, 93,147, 40,194, 70,196,236,184, 71,102,245, 51, 27,250,139,214, 39, 43, + 79,175,222,159,215, 89,124, 94,209, 18, 69, 77,178, 44,101, 50,153,186, 66, 36, 16, 4,161, 34, 73,166,232,194,117,158, 76,185, +254,153,127,131,155,187,239, 66, 84,118,200, 23,188,134,250,215,165,209,110,205,209, 26,147,103,216, 34,103,101,237, 44, 31,252, +209,191,228,171,223,254, 58,163,163, 67,126,247,127,249, 31, 72,167, 99,208, 6,157,165,108, 92,184,196,108, 58,101, 54, 30, 96, +173,166, 40, 82,116,158,113,144,205, 24,245,118,185,184,253,148,183,191,255, 75,180,151,150, 40,242,156, 32, 20,200, 48, 38,203, +166, 30,185, 43, 48, 66,208,238,174, 34,124,212,181, 68, 82, 72,129, 53, 94,243,100, 23,181, 32, 11,117,117,221,234, 38, 74,203, +174,124, 86,203, 32,244,179,135,216,242,243,174,246, 32, 9,218,206,117, 6,229,101,108, 64,203,156, 52,203,216,121,186,205, 27, + 63,184, 66, 40, 4,201,108, 70,220,108,115,239,243,219, 60,121,120,215,125,159, 17, 52, 26, 13,194, 48, 64,197, 9,183,111,223, +226,171,111,190,141, 80, 33,253,193,152,111,191,243, 38, 15, 31,109,177,183,191,141,213, 5,157,165, 37,146,169, 75,132, 28, 14, +135, 28,247,142, 49,186,160,217,104,178,127,112,200,153,205,179, 72,225, 58,137,105,158,122, 88,154, 43,178,213,185, 90,251,189, +190,145,158, 12, 96, 57,109,179,127,145,128,238,139,102,244, 39, 79,230,245,138,252,180,249,125,249, 51, 74,169,170, 74, 87, 62, + 83, 86, 8,215, 14,166,166,110,180, 53, 46,252, 73,191,125,201,254,149, 82, 86,254,116,170,106,138,202,130, 36,107,127,111,145, +229,100,201,148,225,192,225, 29,103,179, 25,133,206, 25, 13, 7,164,201,148, 44, 77, 49, 30, 62, 18, 55, 26,116,151, 87, 24,142, +122,228,227, 1, 81, 96,105,182, 98,218,237, 38,173, 86,131, 70, 35, 34,244, 23,106, 57,223,118, 1, 42, 46, 20,160,208,154,188, +208,243, 4,181,194, 7,172,120, 82,158,241, 54,140,178,245,107,106,191, 47, 79,217,179,241,136, 66,187, 20,171, 60, 75, 25, 14, +199,244, 7, 67,162,184, 65,220,104,184, 16, 27, 25,114,233,242, 43,108,158,127,153,227,254,136, 59,159,223,115, 68,174, 60,119, + 86, 66,127, 16,170,136,109,202,139,104,164,123,159,130,200, 37, 46, 41,233, 56, 4,175,222,184,193,231,119,239, 82,232, 12,140, + 69, 97, 9, 67,197,153,213, 13, 18, 84, 21, 27, 88,222, 44,245,141,238,153, 77,228,196,255, 43, 41, 9,165, 34, 14, 20,177,143, +171,109, 55, 99, 46,158, 59,203, 95,255,193,183, 33,106,114,107,171,207,107,239,124,143, 43, 55,110, 16, 91, 67,150, 76, 73,250, +125, 6,253, 62,159,222,185,195,253,199,143,120,186,179,203, 44,207, 92,187, 88, 8, 58,141,144,179,171,107,156, 59,179, 10, 64, +146,205,232,247,122,244,143, 15, 40,140,224,236, 75, 23, 25, 28, 29, 34,149,100,150, 76,152, 12, 71, 68,141, 38, 77,159,133, 29, +248,107,208, 88, 75, 20,199, 8, 36,175,191,249, 53, 70,147, 17,105, 50,165,119,176, 83,125, 62,101, 71,169, 90, 44, 79,128,126, + 78, 31,239, 74,230,244,208, 50, 60, 68,158,242,157,230,196,194,204,233, 11,221,243, 82,217, 56,197,157, 82,102,161,251, 3,213, +203,151, 47,178,177,182,198,246,246,182, 23,170,233, 10,185,236,216,247, 13,172,159,153,150, 48,160, 58, 20,164,154,167,155,211, + 53, 52,229, 47,135, 95, 86,172,172,157,101, 50,117,194,178, 58,142, 87, 40,197,217, 51,231, 57,119,241, 26, 71,251,187, 4, 97, + 64,239,232, 16, 99, 11, 26,205, 54, 2, 65, 54,155,157,114, 8,122,113,149,126, 90,229, 42,106, 34,184, 47,155,126,231, 58,127, +165,109,207, 29,198,243, 92,163, 2, 73,224,105,123,149, 2,191,178, 97,253, 69,151,225, 44, 48,211,235,243,243, 47,122, 25,149, +174,199,206,237, 98,214, 3, 83, 92,114, 91,196,160,127,204,184,119,192,224,176,199,209,238, 46, 79,239,124, 72,150,140, 73, 6, + 61,148, 10, 80, 82, 50, 27, 14,152,141, 71,238,179, 47, 52, 66, 41,116,145, 17, 73,129,102,134,176,154, 31,253,242, 15,248,214, +235, 47,241, 87,191,118,133,141,151, 54,216, 29, 36,232, 92, 87, 89, 11,227,225, 17, 7, 79, 31,162,243, 12,171,139,106,174,238, +174, 49,243,101, 32, 2, 78,213, 47,234,180, 70,106,110, 46,243,140,189, 29, 43,189, 45,160,228, 97,204, 61,242,162,246,205, 37, +170, 60, 12, 67,154, 81,204,155,111,220,224,151,127,229,199,252,244,103,239,114,251,230, 71,140, 70, 99,102,105, 78, 86, 20,100, +233,148,241,104,136, 54,150,225,104, 76, 20,134, 28,247,246,201,138,156,191,249,227, 95, 69, 32,249, 23,191,247,123,108, 61,126, + 64,103,121,133,206,242, 10, 71, 7,187,140, 6, 3, 63,230,115,119,228,120, 52,100, 54, 25, 51, 26, 14,152, 12,157,107,170, 28, + 77, 86,123,225,201,217,230, 2, 60,166,182, 41,214, 41,112,167,193, 98,158,231, 57,175,195, 99,234, 32,148,147,143, 83,127,252, +178, 98, 95,240,158,151, 27,108, 41, 6, 80,202,243,110,165,159, 7,107, 95, 73, 74, 31, 7, 57, 63,105,137, 90, 34, 91,185,192, + 42, 64,103,217, 92,100, 87, 34,246,188, 71,189,172, 50,148,116,214, 55,171, 53,147, 34, 35,203, 51,164,214,180,154,109,166,211, +137,131, 75,100,153, 15,160,113, 33, 19, 75,107, 27,236,236,110, 65,150,208,105, 70, 52, 26, 49,173,166,139,239,140,163,144, 80, + 41,119,113,121,161,131, 46, 61,229,218, 86,243,243,234,207, 42,188,230,226,216,212,225,113, 75, 90,215,124, 42,164,148,162,221, +140, 41,150,187, 28, 31,245, 25,229, 25,113, 28,131,177, 68,141, 46,171, 27,231, 89, 95, 93, 37,140, 66, 86, 87, 54,216,218,221, +229,233,231, 15, 25, 77,198, 20,121,129, 54,144,231, 69, 69,207, 19,114, 46, 76, 3,220, 97, 64, 73, 10,107,209, 89,142,140, 37, + 89, 54, 67,155,156, 65, 43,230,235,223,252, 22,239,255,233, 79, 72, 77,226,188,158,133,161,107,115,142,180,168, 94, 75, 61, 38, +176,126,125, 85,201,107,118,174, 76, 45,149,238,129, 82, 68,161,162, 17, 40,226, 56,162,221,136,121,233,236, 58,239,188,253, 85, +150,175,188,201,149,235,175,242,118,171, 73, 58,153, 48,218,219, 35, 29,143,153,206,102,140, 39, 99, 90,237, 22,211, 52,229,201, +214,150, 99,151,251,252,234,217, 44,193,218,101,148, 18, 52, 26, 45,174, 95,186,128, 21,154,100, 58,227,248,120,192,147,123,183, +152,142, 71,156, 57,191, 73,255,232,136,194, 67,137,242, 34, 39,153,102, 14,103, 41, 5,173, 78,135,162,208,196, 81,139,140,132, +187,119,111,113,253,141, 55,200,211,188,186,158,203, 3,104, 9, 98,114,112, 27, 65,133, 29,247,139,134,180,174, 74, 55, 88,167, +190, 47, 57, 90,246,217, 10,125,190,158,213,105,113,146, 18, 28,242,140,219,224, 36, 68,170,138,202,173, 5,218,152,103, 43, 90, + 33, 29, 90,245,194,217, 51,188,255,254,187, 30, 89,108,177, 86, 84, 60, 4,169, 2, 80, 17, 66,248, 52, 54, 81,111, 91, 46,160, +216,170, 77,126, 81,121, 44,124, 64,145,179,146,158,191,240, 50, 81,179,201,112, 48,196,154,172, 18,136, 34, 29, 98,121,121,125, +131,139,151, 47,241,217,167,239,177,189,245,168, 10,203,137, 27, 33,195, 94,223, 45,254,226,249,235,209,139,218,176, 11,239,180, +177,207,232, 15,190,208, 1, 87, 86, 77,213,154,227,172,178, 69,102, 16,161, 97, 99,125,149,163,163, 30, 89, 94,212, 47,246,191, + 96, 16,205,179,226,203, 47, 62, 5,188,224,141,160,204, 50, 87,188,242,214, 59,236, 60,121,128, 18,130,219,239,253, 41, 75,203, + 43, 24, 96,188,191,141,148, 17,121,146,112, 52, 26,209, 93, 93,198,160, 73, 39,125, 26,237, 46,224, 10,153,184,187, 68,220,234, +242,215,254,214,223,226,157,175, 92,162,227, 15,241,231,150, 2, 94,125,231, 77,222,251,253,159, 85,159, 85,171,179, 76, 32, 21, + 90, 74,180,244, 65, 84,254,208, 97,132, 66,218,130, 42, 80,161,126, 80,172,237,210, 14,125, 91, 99,231,215, 70, 81,162, 10,114, + 61, 37,177,208, 8,103,119, 43,243, 0,172,168,220, 81,165,191,189, 44,174,180,213,124,235,155,223,225,131, 15,222, 35, 77,167, +136, 32,102,117,237, 12,253,209, 49, 82,226,214, 86, 93,208, 63, 62,114, 78,155,167,143, 89,234, 46,241,173,111,126, 23, 33, 36, +255,244,119,126,151, 59,119,111,179,118,225, 10, 26,193,238,211,251,132, 97,140,144, 9,198, 20, 8,161,136, 26, 13,242, 44, 39, +157,142, 73,147,137, 11, 38,211,208, 63, 12, 64, 8,154,237, 14, 43,235,235,174,253,126,154,111,252,180, 22,251,105,222,242,250, + 97,224,121, 45,244,106,211,246, 27,232, 98,240,138, 88, 0,191,212,127, 54,244,193, 42,117, 95,161, 82,202,167,223, 24,239,177, +244, 9,109, 69,238,210,211,188,144,161,158, 27, 44,132,163, 4,151,139, 75,224,177,158, 82,202, 10,177, 90, 38,173,149,207,173, +140,182,179,198, 98,180, 83, 57,106,147, 17, 70,146,233,196,197,246,101, 89, 78, 50,153,204,231,102, 86,115,230,236, 69,122,189, + 30, 38,157,210,142, 3,218,173, 6,157, 86,147,118,179, 69, 51,106, 16, 6,174, 61,105,152, 87,219,198,227, 24,203,133,220,248, +204,242, 50, 46,181,162,125,213,211,154, 12,212,211, 29,220,215, 60,124, 32, 12,104, 54, 27,180, 59, 77,250,131, 4, 35, 53, 43, + 43,171,172,159, 61,203,214,206, 46, 59,123,123,238,189,149,161, 19,219,105,235,177,180,206,142, 37,213,156, 65, 80,126, 6, 66, +200,138,187,141,239,226,228, 89,234, 14,181,214, 96, 80, 60,121,242,152,111,125,227,155, 36,163, 1, 55, 63,254, 16, 81,228,232, +194,192,108,134,106, 52,252, 77, 49, 87,241,159,122, 16, 52,245, 81,204,252, 0, 23,133, 1,237, 56,164,211,108,208,104, 70,220, +184,118,157,255,224, 55,254, 46,151, 95,185, 65, 16,134, 88, 93, 48, 58, 56,100,251,193, 67,246, 14, 14, 56, 26,244, 25,140, 70, +196, 81, 72,183,213,164,208,154,227, 94,143, 52,115, 86, 40,165, 20, 45, 37,232, 54, 27,132, 74, 48, 26, 13,209, 86,112,118,117, +157,241, 75, 41,147,241,132,100,150,113,180,243,136,201,100,200,245, 27,175, 18, 6, 1,178,217, 97, 52,157,160, 84, 64,220,108, + 83,228, 5,171,235, 27,156,221,220, 68, 69, 13, 30, 63,184, 71,123,121, 5,169, 2, 84, 96, 8,194,152, 60, 75,221,231, 82,131, + 26,149,135,150, 64, 82,113, 4, 28, 1,195,111,123,165,218,184, 18,131,178,160,196, 61, 41,136, 91,172,206, 69,109,147,175, 87, +202, 44,204,211,235,215, 85,245, 57, 44,228,148,204,103,251, 75,221, 54,227,241, 8,107,153,107, 61,204, 60, 83, 62,110, 52,202, +243,196, 60,141,238,196, 33,226,228,115, 95,180, 50,218, 42, 38, 51, 12, 3,250,253, 17, 29,107,208, 58,247,137,104,165, 88, 83, + 34, 85,196,234,218, 58,247,238,222,117,190,115,147, 57, 30,124,163,235, 58,102,214,248,212,177,103,153, 8,207,221,212, 95, 80, +189,139, 47,240,254,191, 72, 59, 84,142,174, 28,122,212,133, 11,245,122, 61,154,205, 6, 81,100,153, 78,167,167,118,105,254,117, + 54,248, 10,253, 45,190, 64,173,111,249, 51,141, 76,193, 18,183,219,228, 72, 90,221, 46,201, 36, 97,185, 27,114,180,245,152,113, +239,136,168,209, 65, 97,153, 26,195,234,114,151, 65,239, 8,210,148, 34, 84, 36, 66, 18, 11,137,140, 20,249, 44,161, 17, 53, 88, + 90, 90,117,215,147,128, 22,208, 16,208,141, 36,155,151, 95,230,209,237,155,168, 32,164,189,180,142, 12, 34, 80, 33, 66,166,126, +189,151,104,225,102,201,218,147,230, 92,209,225, 14,174,202,199,237,212,139,181,197, 52, 70, 49,119,158, 8, 89, 19,160,136,197, +251,169,132,103,149,254,125, 33,177,214, 9,233, 22, 2,116,140, 91, 67, 63,255,252, 54,191,240,131, 95, 35,255,201, 79,153, 77, + 71,180,150,150,209,153, 33,153, 76, 40,138, 12, 99, 13, 89,154, 49, 30, 73,226,134,195,186, 54,162,128,255,249,127,255, 39,124, +252,209,251, 12,199, 19, 90, 75, 41,247, 63,187, 73,174, 11, 54,207,157,103, 58, 29,187, 22,252,160,135, 57,202, 80, 81, 3, 71, +112,201, 73,103, 57, 97,224, 58, 63,233, 44, 37,153,140, 29,179,129, 5, 65,193, 98,139,170,180,122,213, 23,225,211, 84,241,230, + 4, 49,238,180,139,164,126,120, 56,201,135, 63,217, 46,175, 82,175,106,208,155,210, 51,108,125,251, 86,212, 84,167,174, 29, 44, + 61, 71, 94, 84, 20, 57,234,173,118,127,161,203,154,232,174,200,139,202,166,229, 90, 76, 94, 61,232, 55, 45, 99, 32, 20,150,209, +200, 35, 82, 85, 76,160, 66,116, 94, 48,153,140,231, 64, 22,161,176,182, 96,237,236,121,134,227, 9,249,184, 71, 43, 14,232,180, + 27,116,151, 90,116,218, 45, 26, 81,132,146,110, 67,215, 94, 40,100,124, 53, 99, 44, 11,144, 24,131,157,167,166,249, 25,251,156, +225, 94,183,188,137,234,212, 90, 23,148, 41, 41,137,163,128, 86,171,201,100, 50, 67, 8,184,241,234, 13,158,238,236,186, 78, 64, +158,147,102, 57, 66,230, 85,107, 13,124,123,205, 31, 36, 2,143,232,173,130,112,164,187, 30,202,228, 38, 55, 2,208,164,201, 12, +209,116,239,155,176,150, 79,111,125,198, 43, 55, 94,229,179,219,183,208, 69,134,176,150, 73,145, 17,212,114,238, 23,170,243,250, +181,178, 80,189,205, 95, 75, 32, 37,113, 24,178,220,105,243,131, 31,252,128, 95,252,225, 15,121,235,171, 95,157,115,251,141, 38, + 79,166,124,126,231, 51, 30, 61,125,236,103,228, 9, 81, 20, 35,165,228,225,147,199,252,236,221,159,145,164, 41,218, 64,161, 11, +154,161,224,237,107,151, 89, 95,110, 19,133,138,115,103, 86,233, 13,198,140,166, 51, 46,158, 59, 75,175, 63, 96,107,107,143,172, +200,153, 14,123, 60,125,112,159, 55,191,246, 13,194, 64,177, 90, 44,211,233,174,178,180,186, 74,191,215,167,187,180,204,113,255, +152,157,251,119,137,163,152,241,120,200,215,190,253, 93,110,127,250, 33, 97,160, 16, 68, 11,225, 58,229, 53,222,108,196,228,121, +177, 48, 94,210, 20, 8, 31,136,227,224, 72, 94, 88,230,201,134, 86,204,163,103,173,173, 11,228, 56, 69, 41, 95, 27, 59, 85,213, +250,233,115,200, 5, 21,119,237,108, 80,210, 19, 55,214,215,216,218,217,229,168,215, 39,215, 5,218, 3,115,176, 22, 25,134, 8, + 21,250,124,250,249,140,189,238, 15,182,166,102,103,171,157, 28, 68, 13,213, 38,144,172,173,173,113,220, 59,102,253, 76,215, 57, + 82,128,220,183, 98,165,183,203, 93,184,240, 18,239,253,233, 79,208, 89,234,184, 14,194, 32,131,128, 70,171,197,209,193,129,123, +159, 78,137,168,123,225,134,126, 90,149, 94,155, 61,215, 99,115, 79,163, 97, 62,239,151, 91, 67,139,234, 13,157, 78, 19,148,114, +238, 20, 71, 28, 59,203,238,238, 14,105,154,249,238,199,226,251,242, 23,141,145,173,242, 29,172, 56, 33,196,164,218,216,202,131, + 92,125,125,113,158,246,128,214,198,121,242, 36, 97,243,202,171,140,134,199,204, 70, 19,250,219,143,144, 50, 68,197, 29,102,147, + 9,177,144, 28,238,238,208, 89, 90, 34, 53,160, 34, 73,220,108,146,102, 41, 65,208,172,116, 65, 15,118, 70,228, 97,131,175,191, +178,202, 76, 73, 44,150,245,182, 98,105,125,133,229,141, 77,250, 7, 59, 52,219,173, 74, 29, 95, 18, 66, 33, 64, 6,238,192, 91, + 81, 30,124,226, 34,126,253, 42,199,170,198, 66, 16,133,224,225, 99, 74,205,117, 61,162,114,249,186,112,167,146,223, 81,138, 29, +189, 14,207,223, 47,126,195, 23,118,174,121,241,213,190,214, 46,108,203,138, 6,255,245,127,247,223,112,255,193, 99,166,211, 25, +236,239, 34,149,192,234,204,195,119, 28,160, 41,205, 82,194, 80,210,104, 54, 64,103, 28,247, 15, 28,160,104, 54,227, 96,111,135, + 52, 77, 64, 88,182,182,158,160, 4,204,146, 49,214, 26,150, 86,214,220,129, 58, 79,145, 50, 68, 11, 91, 65,160,220, 37, 44, 73, + 38, 67,212, 75, 87,174,253, 86,189, 69, 88,254,190,172,184,235,201,107,167,169, 84, 95,228, 57,126,230,235, 44,182,153,234,233, +105,207,125,252, 19, 21,124, 61, 74, 20,223,150, 53,117, 17, 82,101,113, 91,100,202, 83, 59,185,153, 90, 53, 95,190,214,234,123, +237,220,190, 21, 74,133,180,218,181, 79,140, 37,203, 83,146,233,132, 65,191, 79,154, 58,239,171,227, 22, 27,214,207,108, 18, 68, + 49,147,254, 33,145,130,165,149, 46, 43, 43,203,180, 59, 77, 26, 97, 84, 29, 20,108,237,162, 43,202, 12,115,227,158,207, 66, 66, +154,135,197, 24,175,126,119,141, 0,255,189,214, 83,225,202, 83,226, 41,177,139,162, 84,183, 99,152, 76, 19,182,119,118, 29, 42, +179,166,145, 42,103,218,162,220,208,107, 93,147, 32, 8, 80,202, 93, 19,229,115, 47,223, 39, 91, 94, 15,218,248,150,253, 60, 56, + 39,155, 37,244,122, 7, 0, 76,135, 3,226, 64,210, 93, 90, 99, 22,183,170, 48, 2,251,140,255,154, 10, 77, 41, 43,223,245, 60, + 85, 47, 12, 20,237,102,131,127,255,223,251,117,126,243, 31,252,125,206,158, 61,131, 64,187,220,227, 60,101,116,120,200,222,163, + 39, 76, 39, 99, 86, 87, 87, 24,244,135, 12, 6,125,126,254,238,187,252,225, 79,254,136, 79,111,223,162,223,239, 51,203,115, 10, +109, 9,149,224,213, 43,151,176, 86,115,112, 60, 96,239,120,196,104, 58, 37, 8, 20,221, 86,204,230,198, 42,157,118,147,195,227, + 99,114,237,252,234, 73, 50,229,184,119,196,234,198, 38, 97,163,201,203,175, 92,227,232,168,199,229,171,215,216,221,221, 33,155, +165, 92,186,114,141,160,217, 38,144,130,175,124,237, 27, 12,122,125,118,183, 30,249,155, 94, 19, 40,229, 16,161,204, 53, 43,129, + 63, 56,151,239,121, 5,241, 40,237,162,158,218, 55,103, 9, 44,206,120,221,124,221,214,252,234,182, 90,228,202, 5,219,156,210, +122,175,171,122,235,237,247,234,113,165, 64, 73,133, 82,130, 43, 23, 95, 66, 74,193,131,135, 15, 43, 49,105, 57, 75, 71, 74,231, + 81, 22, 39,204, 65,181,131,197,220,130, 52, 31, 37, 61,111,131,205,243,204, 19,184,142, 25, 14,122,104,163, 89, 94, 61, 67,119, +249, 12, 81, 28,145, 76, 38,244,123, 71, 20,121,138, 49, 69, 37,218, 12,155, 77,134, 71, 71, 53,221,128, 61,213, 14,251,194,249, +243,115,138,119,235,199, 80,226,207,225, 46,159,119, 97, 68,237,192,227, 30,117, 58,157, 80, 20, 57,215,175, 95,231,204,217,117, +164, 4,173,115,162, 40,174, 80,207, 66,252,249, 28,237,167,161,110,169, 52, 26,162,154, 19, 63,239,223, 42,129, 78, 8,159,214, + 38,232,172,158,165,181,178, 6, 24,210,100, 74, 51,110,179,255,232, 46,194, 8,116,145, 18, 55, 91, 20, 89,130,140,154,172,110, + 94, 32, 79, 18,166,211,169,235,164, 26,215, 73, 84, 97, 68,216,108,177,177,121,129, 75,175,190,205, 36, 41, 24,231,150,112,165, + 65,174, 5,137,129,105, 46,209,153, 32,153,142,177, 90,243,248,179, 79,176,217,204,143,103, 42, 28, 99, 21,121, 45,253,136, 80, +224,177,224, 42, 64,249,252,244,102,171, 5, 82, 17, 55,155, 72,239, 80,209,126, 92, 20, 70,145,127,125, 10, 21,200,170,219,105, +235,234,249,170,179, 33, 43,240, 66,185,129, 10,191, 62, 73,165,252, 56,179, 67, 97,220,251,190,183,189, 69,154, 78,201,139, 2, + 37, 93, 7,180,240,188, 15,107, 33,140, 20,175,189,241, 6, 55,110,188,134, 69,241,217,231,159, 97,116,193,242,234, 58,211,233, +136,229,181, 51,140,135, 61,198,227, 33,129,116,118,235,201,100,204,100, 52,154,143,162,152, 51, 89,202,123, 76, 27, 67, 80,103, +115,139, 19,155,105, 57,124,175,111,188, 11,109,140,231,136, 93, 22, 99, 86, 69, 37, 26, 57,141,187,187, 32,128, 57, 37,127,189, +254,252,202, 25,123,229,181, 53,134,236, 68, 27, 87, 91,235, 33, 6,207, 17, 30,149, 17,175,245,248,215,242,134,247, 85, 71, 57, +115, 15,172,229,240,120,159, 36, 73,137,226, 6,179, 36, 97, 58, 25, 59, 94,175,157,103, 33,183, 59, 75, 68,113,131,195,221,167, + 4, 66,179,188,220,101,101,185, 75,171, 21, 19,120, 14,118,125, 97,181, 98, 49, 37,171,156,107,186,234,188, 38,134,179, 22,171, +107,170,247,133, 74,140, 5,193,199, 2, 81,201,131, 83,130, 48, 96,169,219,113,185,205, 70, 34,164, 34,203,114,148,146, 85,100, +168, 91,103, 10, 55, 19, 5,148, 31, 97, 72,165, 8, 84, 48, 63,196,251, 11, 73, 41,229, 68, 44,170, 84,193, 11,178, 52,163,221, +110,131,133, 44, 25,211,159, 12, 89, 90, 94, 33,110,181, 16, 24,116,220,194, 26, 75, 97, 10,194, 48,152,135,243,148, 23,185,177, +181,106,109,174,246,174,115, 9,148,128,203,155,155, 12,182,158,146,123,228,230,193,161,131,140,116,219,109,100, 20,242,249,195, +135,252,225, 31,255,132, 39,219, 79,201,178,140, 44, 75, 73,115, 77,150,166,228, 89,142, 13, 36, 86,132, 44, 47,117, 73,211, 4, + 37, 27,180,226,152, 70, 28,209,104, 70, 24, 11,163, 36, 71,143,166,116, 91, 49,223,253,246,215,248,224,227, 59,236, 29, 15, 41, +140,100, 58, 26,240,254,207,126,202,149,235, 55,200,181,229,242,213, 87,248,227,255,239, 95,113,225,202,117,186, 97,192,165,107, + 55,184,127,247, 19,194,112,153,159,253,228, 15,217, 56,115, 22, 37, 36,218,186,195, 83,238, 55,119, 87,145, 91,194,208,205,160, +163, 40, 66, 23, 5,141, 70,236, 14,155,194,131,143,170, 46,137,172,196,139,243, 89, 97, 57, 71,180,167,116,144,197,124,211,197, +158,110,140, 19, 98, 65, 40, 87, 86,233,115, 29,131, 19, 70, 6,202,169,118,239,223,191,231,179,204,221, 34, 47,132,131, 23,133, +173, 54,160,124,133, 35,158,233, 16,212,227,148,235,243, 78,123,170, 56, 11,138, 66,211,106,181,156,144,209, 31,118,134,253,125, +191,168, 74,199, 0,151,101,165, 41, 43,221,137, 45, 10,151, 88,101,236,159,105,142,126, 18,122,244,252,118,250,191, 30, 3,174, +126,207, 22,133, 65, 74,151, 93, 48, 30,143,185,121,243, 38,113, 28,179,113,102, 29, 41, 87, 49,154,170, 77,255,103,174,212, 69, +221,208, 43,106, 35, 20,177,120, 37,136,231, 24, 41, 78,142,213,253,245, 16,117,215,185,242,181,111, 51, 60,220,103,116,116,196, +202,230, 57, 30,220,254, 24,165, 11,180,201, 88, 57,115, 22,109, 4,205,238, 26, 43,103,207, 96,108,200,116,154, 16,132, 19,172, +182,206,117, 35, 11,130, 56,118,192,153, 48,102,253,220, 26,237,165, 37,102, 89,193,126, 63, 39,138, 35,140,129, 70, 67,210, 89, +109,179, 52, 62, 67, 62,155,209,237, 44, 81,140, 7, 20,105,130, 53,134, 48, 12,208, 57,152, 60,243,133, 2, 85, 97, 87,142, 31, +221, 90, 38, 43,253, 78,150,166, 85,155, 62, 8, 2,172,177, 85, 55, 90, 5,110, 13,146, 42,116,155,165,209, 8, 99, 64,120,123, +110, 41,106, 60, 69,120,234, 66,179, 28,233,110,243,236, 6,241,210, 6,255,236,255,252, 39, 8,161,201,103, 89,117, 24,104,119, + 58,140,199, 99,180,182, 4,202, 29,220, 55,214, 55,104,119,187, 92, 86, 1,191,246,171, 63,226, 95,254,139,255,219,165, 8,182, +219,244,143, 14, 49, 90,163,243,130,194, 20,110, 68,154,103, 72, 9, 70, 23, 46,209,174,222, 89, 43,159,159, 54,174,253, 94, 79, + 36, 83,190,181, 90,199,232, 85, 21, 93,109, 3, 44, 55,159,231, 85,238,162, 6,129, 81,114,206,237,173, 31, 14, 78, 30, 8, 78, +250,149,235, 9, 79, 39,189,236,117, 31,226,169,145,173,190,213,126,242,241, 79,235, 48, 72,233,136, 70, 89,158, 19,120, 5,124, +150,164, 36,233,148, 52,211,132, 81,132, 46,114,210, 52,113,111,180,213, 94,176,103, 89, 89, 89,227,210,203, 87,249,236,206, 77, + 58,221, 54,173, 70, 72,187, 17, 18, 71, 17,129, 82, 56, 26,182, 19,137, 85,117,148,183,161,105,239,229, 46,219,235,101, 5,228, +158,167, 88,244, 21,215,255,123, 34,145,232, 52,210,159, 22,212,218,146, 49,205,246, 58,147, 89, 70, 62, 75, 61,218, 83, 35, 2, +239,157,182,154,208,131,121, 44,206,242, 87,142, 52,100, 20,184, 86,150,231, 63,231,121,238,181, 8, 22,130, 0,165, 2, 66, 11, +195,193,128,110,167, 3, 89,130,206, 82,178,100,198,245, 55,223, 98,231,222, 93,138, 32, 68,133, 1,141,176, 81,221, 17,133, 46, +144, 34,170, 4,114,162,242,195,155,133,248,199,210,153,144, 21, 57,135,251, 7,220, 44,114,250,163, 49,251, 7,135,180,218, 45, + 54,215,214,249,221, 79,254, 37, 63,123,247, 93,166,211, 9,227, 36, 33,203, 10,154,173, 46, 87,111,220, 96, 52,153,144,229, 25, + 71, 71,199,244, 6, 3,126,225, 7, 63,100, 99,165,203,254,227,155,196, 50, 32, 14, 37,145,146,228,105,142, 18,130,165, 78,139, + 70,220, 37, 8, 20,235, 43, 5,157, 78,131,219,159, 63,230,179,135, 91, 32, 91, 36,211, 41,159,127,118,135,201, 52,161,213,110, + 66, 16, 48,236, 31,113,241,226, 69, 30, 63,184,203,183,190,245, 3,100, 16,241,207,254,217,111, 99,172,118,202,215, 60,199,104, + 77,238, 15,129,101,213, 87, 20, 57,121, 14,237,118,147, 52,203, 8,163,200, 17, 14,131,192, 87, 56,146,181,149, 21, 38,137,211, +109,140,198,227,234,253, 50, 70,186, 60,233, 5, 37, 57,207,180,180, 23,174, 23,223,193,114, 27,223, 98,219,125,161, 91, 34, 37, + 42, 80,180,162,128,239,126,251,155,188,247,193,135, 12, 39, 9, 86, 4,142,247,239,235,110, 21, 5, 40, 21,121, 13, 8,115,101, +189,209,158,246, 53,191,134, 75,109, 8, 44,104,154,170,231, 95,223,136,157, 0,117, 62, 2,156,143, 14,204,188,227, 85, 35, 61, + 2, 36,147,233, 51, 4,190,231, 89,115,159,217,108,149,120,225,102,126,234, 33,224,207,209, 22,175,119,169,140, 41, 59,137,150, +162,112,215,198,116,154, 96,140,173,220, 61,127,174, 89,186,239,174, 11, 36,194,202, 74,201, 94,111,167,151,133,133, 16,206,237, +229,148,228, 39,170, 83, 97,231, 98, 52, 41,233,172,173, 97, 76,193,222,195,207, 89, 61,119, 17, 91,104,206, 94,184,196,254,195, +187, 68, 81,131,163,189, 61, 86, 55, 47, 96,116,206,195, 79,110,162, 34,201,250,185,151, 89, 93, 63,203,184,191,207,100, 60,116, +252, 0,109, 43,161,106, 40,192,106,141, 45,220, 1, 53, 79,115, 32, 36, 8, 37,157,149, 38,179,233, 42,211,126,143,246,202, 10, +199,187, 79,156,251, 7,193,108, 60, 69, 98, 92, 54, 70,161,107,196, 80,119,176,212,133,239, 38,149, 56,235, 64, 57,112, 13, 32, +164,139,238, 46, 5,213, 97, 20,185,255,247,150, 81, 21, 40, 2, 17, 98,140, 70,171, 0,105, 13,166,200,253, 24,215, 44,194,161, +172,197,216, 2, 99, 21, 6, 75,127, 48,229,124, 39,163,217,140,120,237,181, 55, 9, 90, 75,108,111, 61,230,104,127, 27, 99, 52, + 65, 24,144,101, 51,164,116,135,138,217,116,202,168,223,231,157,111,124,139,143,254,183,223,198, 90,184,248,242, 53,142,222,219, +167,217,110, 19, 70, 17,211,233,148, 36,153, 56, 97,120, 32,200,178,194, 61,119, 31,220, 37, 76, 77, 11, 35, 4,113,179, 69, 32, + 2,133, 40,149,226, 82,122,239,242, 34,117,169,218,132,107,113,171,167, 85,229,167, 17,224,202,197,164,220, 96,203,141, 88, 41, + 89,109,108,229, 70, 95,229, 85, 63,227,145, 21, 21, 69,170,172,252,235,234,198,250,205, 91,175,238, 22, 84,214,222, 27, 92, 23, +190,168, 42, 69,206,162,133,107,143, 34,160,219, 94, 34,104, 11,158,110, 61,102,117,253, 44,218,228,236, 60,125, 82, 29,110,178, +204,217,121,150,151,150, 81, 65,192,173,155, 31, 99, 77,138,141, 44,214, 58,162, 91,154,107,164, 84,142, 57, 46,231,115, 68,107, + 45,218,251,208,141,246, 27,123, 41,152, 43,219,154, 85,170,218, 41, 18,154,103, 87,153,121,219,188, 70,166, 51,101, 68,169, 49, + 52,226, 54, 82,134,228,249,196,159, 94, 93,197,168,252,169,181, 12, 71, 81,202,231,252, 26, 91,101,198,131,160, 17, 71,152, 60, + 7,165, 92, 42,151, 15,171, 40,133, 91, 65,224, 42,181,181, 70,200,103, 79,134,104,173, 25,245,123, 8, 1, 27, 47, 95, 67,250, +214,123,150, 58, 4,168,171, 36, 13, 34,116,177,139, 86, 59,148,157,148, 2, 93,122,182,189, 34,118,126, 80,131,157,195, 67,158, +236,237,242,217,131, 7,172, 46, 45, 33,138,130,255,245,227,143, 73,242,148, 98,150,146, 22, 57, 69,174,137,162,128,183,222,120, + 3, 29,181,153,152, 67,194,216,176, 26,182, 89,218, 56,199,225,209,128, 39, 79,119,201,199,199, 20,217,152, 70, 20,209,105, 55, + 57,183,190,138,176, 14,189,187,123,144,146,105,205, 74,183,197, 82, 28,241,205,183, 94,101,181,219,229,167, 31,222, 65, 55, 90, +204,166, 83,118,158, 62,100,216,239,243,221, 31,252,144, 44, 77,120,252,248, 1,191,248, 75, 63, 38,108,181,184,115,247, 54,151, + 95,121,141,157, 39, 15,171,249,110,217,121, 85, 82, 85,160,150, 82,195, 48,153, 76,231,170,120,165,136, 27, 49, 70, 55,153,165, + 51,166,179, 41, 81, 24, 58, 38,130, 15,143,113,215,181,155,249, 9, 69, 85,221, 63, 27,200,100,107, 21,123,233, 27, 63, 73,162, + 43,157, 20, 78,132,134,112, 20,197,149, 78,155, 31,126,239, 59,124,116,243, 14,131,233, 20,171, 66,132, 21, 8, 43,144,210, 98, + 69, 76,220,108,186,138,199,138,234,103,237,137, 68, 58, 83, 63,132,207, 25, 59,243,195,132, 20,167,186,102,234,136,213,231, 49, + 51,234,247,247,105,157,195,211, 32, 90, 95, 70,241,254,236, 33,233,197, 62,254, 47, 61,203,174,117, 28,231,207,207,187, 88,140, +121,198,150,248,103,241,203, 47,190,198,121, 22,134, 16, 2, 43,221,102, 47,101,224,148,224,117,210,154, 45,199,120, 69,181,151, + 11,127,240, 52, 62,115,161,189,186,138, 10, 26,220,255,248, 61, 90,157, 46,253,253, 29,132,216,198, 10,201,202,153, 11, 76,123, +251,132,129, 96,210, 63,118,247,252,185, 77,162,110,151,217,116,134, 72,199, 36,211, 25,130,192, 37,160, 69, 49,177,243,249,209, +235,205,104,228, 46,164, 42,159, 25,218,109, 24, 79, 50, 38,135, 41, 42,118,214, 57, 21,199, 68,237,101, 12,194, 59, 44,114,162, + 40,164, 72, 83,135,254, 45, 59,184,158,211, 96, 60,215, 71, 5, 1,198,111,212, 69, 49, 71, 99, 75,159,215,174,117,225,136,164, + 30,255,109,180,174,116, 89, 74,185,215, 30, 70,110,141, 51, 37, 56, 74,107, 87,212, 21, 5,162, 46,100,182,198,233, 38,164,229, +235, 95,255, 14,157,206, 18,147,153,230,224,184, 79,239, 96, 31, 97, 5,179,116, 70, 20,197, 76, 38, 51, 47,230,134,193,112,192, +112, 50,230,191,253,239,255, 71,238,125,126,135,222,225, 49,221,253,125, 90,173, 14,195,126,143,241,120,236, 14,181,218,197,180, +106,159, 63,159,231,218,239,115, 18, 35,234,150, 60,197,198,185, 11, 4, 82, 4,160,202,198,167,153,243,144,235,189,250, 90,251, + 93, 49, 79,249,122,222,134,126, 90,197, 93,138, 70,194, 48,244, 11,154,160, 40, 52, 38,207, 23,114,214, 23,226, 26, 79, 40,231, + 23,199, 28,139,194,187, 82,154,163,164,243, 67,159, 84,226,155, 90, 96, 76,153,167,155,123, 10,157, 41, 12,104, 81, 5,207,191, +116,238, 2,189,254, 17,107,235,235,228,121,206,206,206,150,159,119,105, 39,188, 80, 1,215,175, 93,231,168,223,227, 96,127,143, + 64, 65,187,213, 38,110, 68, 72, 37,200,178,212,193, 39,146,128, 78,179, 73, 28,187,217,100, 25, 19,171,181,169,170,101, 93, 19, + 34,158,156,139,215,233, 78,243,150,169, 55, 57, 9,129, 16,238,243, 82,101, 84,162,193,251, 73, 61,224,194, 90,116, 97,216,124, +233,101,238, 61,126, 74, 81, 20,200, 32, 64,168, 16,107,203,155, 88, 33,101, 88, 45, 44, 81, 20, 57,135,130,183,247,149,239,191, +138,156,216, 43, 68, 96,204,148, 44, 75,189, 16,205,137, 81, 98,165, 72,103, 99,180, 41, 48, 70,163,132, 37,153,140,233, 46, 45, +179,186,188,196, 36,205, 80, 50,168, 16,153, 74,134,228, 58, 67,226,102, 82,185,201, 17, 82, 18,169,208,205,169,252, 60,185,228, +166,107,107,121,247,227, 15,152, 78, 19, 86, 87, 86,248,224,253,119, 25, 13,199, 20, 58, 7, 93,208,105,183,120,233,194, 75, 92, + 60,127,142,118,167,201,210,250,101,254,167,223,254, 63,104,118,151,208,198, 48,153, 76, 41,138, 82, 45,170, 41,146, 17,103,215, + 26, 46, 83,249,224,144,187,247, 30,178,220,237,162,117,238,222, 39,169,220,162, 32,157, 80, 44, 14, 67, 46,158,223,224,179,135, +219,200, 80,145,205, 82,164, 28,241,199,127,248,251,252,250,223,254,123,188,252,202, 53, 62,187,127,143, 70,239,144,180, 48,204, +210,132,233,100,226,112,165,122,174, 87,112, 52, 68, 93, 89,220, 44,208,104, 52,176,214, 18,199, 49, 66, 56, 37,171,197, 18,199, +145, 79,254, 26, 19, 4,129, 11, 34, 18,130, 44,119,169,104, 69, 81,182, 6,213,124,113, 51,178, 2,209,216, 19, 40,247,122,103, +173,172,152,141,152,183,106,141, 23, 38,158, 61,179,206,215,223,124,157, 91,119,239,178,219,239,147, 89, 65,216,140,209, 58,132, + 44,199, 20, 1, 42, 8,208, 24,108, 97,106,194, 61,255, 27,169, 28,239,223,207,252,109,158,213,194,106, 36, 82,168,154, 38, 75, +204,133,172,214, 98, 69,173, 34,178,207,186, 35,202,123,184, 12,177, 56, 77,188,251, 34,150,198,194,198, 40,112,250,144, 47,216, +204,203,106,200,242,124,124,246,151,109,191,215, 93, 68, 95, 22,216,245,162,224,172,250,103,233,227, 13,221,104,194,135,163,224, +215, 6,161, 66,164, 10,161,116,176,148,104, 81, 99,145,166,192, 26, 85,141,194,140,119, 53, 88,105, 9,194,136,165,245,115,204, + 38, 99,116, 94,112,238,205, 55,152, 77, 71,216, 40, 66,228, 5, 59,119, 63,197, 26,104,182, 87,152,142, 6,124,229, 87,255, 38, +227,222, 33,105, 50, 97,178,179, 75,119,117,133,181, 11, 23,137, 59, 29,246, 31,221,197,164,137,235,248,165, 5,251,187, 91,172, +172,174,209,232,116, 24,141, 20, 90, 7, 68,205, 54,231,186,109,134,163,130,145,214,180,219, 93,154,221,149,106,108,154,231, 5, + 86, 91, 10,107, 80, 50, 64,121,231,147, 20, 1,214, 26, 47,240,149,126, 68, 3, 22,231,112, 10,130,176, 34, 19, 10, 33, 80, 65, +232,218,240, 85,241, 36,208,186,112,227,197, 44,247,118, 49, 93,105,205, 92,112, 16, 8,169, 8, 99,133,201, 51, 76,145, 98,116, +128,209, 2, 83,192,104,146, 34,172,229,165, 75, 87,249,236,243, 7,124,252,241, 7,236,237,239,145, 22, 5, 73, 50, 67, 10, 8, +125, 1,100,140, 65, 5, 1,119, 63,187,197,209,225, 49,195,222, 33, 82,186, 8,235,217, 44,113, 17,181,182,168, 52, 83,218, 7, +220, 96,172, 87,223,251, 14,133,181, 21,138, 45,110,180, 72,179, 28,117,249,198,107,191, 85,250,187,149, 10,188,202,208,253,107, +173,168,130, 62, 74,131,123,125,206,247,188,121,250, 73,128, 76, 85, 61,215,190,182, 96,107,170, 61,110,213, 70, 62, 97,161, 19, + 39, 50,209, 23,103,201,243, 27,110,193, 67,191,224, 63,180, 11, 17,178,210, 47,170,229, 99, 27,111,105,123,243,198, 27, 72, 20, +131, 97,159,132, 80,116,139, 0, 0, 32, 0, 73, 68, 65, 84,227,163, 3,142, 14, 14,232, 31, 29,146,207,166, 4, 50,224,210,197, + 75,156,191,112,158,163, 94,143,100, 50, 70, 97,104,196,129, 59,241,154,162,170,200, 10, 93, 48,153, 76, 24,142, 71,100,190,106, +183,214,121,192,243, 44, 35, 77, 83,210, 44,119, 89,187,185,118,179,223, 92, 59, 31,117,225,226, 80, 11,237,189,235,198, 96,141, + 83,227, 87,194,186, 42, 11, 93,160,125,178,154,174, 14, 5,110, 65, 52,198,210,238,174,178,179,127, 72,174,139, 57,113, 72,133, +126,214,230, 90,238,145, 71,123, 42, 37, 17, 74, 18,197,113,101,191, 42,219,159, 11,109,221,170,171,224, 90, 74, 69,158, 19, 80, +176,183,183,205, 44,205,220,141,101,253,236,216, 95,188,237, 86, 19, 25, 40,164,114, 55, 83,171,213, 34, 12,189, 8,211,186,249, +151,242, 32,135, 56,142,104, 54, 34, 90,141, 38,141, 40, 34,240,115, 51,172, 33, 77,198,220,191,119,143,217,108,198, 74,183,197, + 27,215,175,242,230,107, 55,184,112,126,147, 78,171,233,248,237,195, 33,135,227,130,135, 15, 31, 49, 75, 51,198,163, 17,147,201, +152,241,104,236,197, 38, 67, 38,211, 9,253,227, 67,199,203,247,215, 76,111, 48,160,223, 31,160, 45,196, 81,228,240,187, 8,154, +205, 38, 42, 12,201,138,130, 48,144, 12,134, 83, 76,161,209,185,198, 34,120,252,228, 1, 54,136,233,174,175,241,224,225, 3, 64, + 48, 30, 13,233,237,239, 82,164,169,231, 41,168, 42,107,160,209,104, 84, 93,153, 32,112,135,208,208,107, 28,242, 60,159, 7, 12, + 57,110, 49,194, 7,232,148,184,226, 82,224, 89,230, 0, 0, 14, 12, 36,231, 73,111,167, 77,138,133, 56, 49, 78, 21,243,141, 87, + 74,119,224, 14,162,136, 44,203,153, 36, 9, 91,135,199,164, 86, 16, 53, 91,196,205, 54, 97, 28, 59,129, 81, 28,251,216, 74,223, + 6,183,194,181,176,253, 3, 75,165,124,165,231, 84,197, 85,160,141,168,161, 94,173,255,243, 74, 64,231, 47, 90, 97,231, 10,237, + 83, 52, 59,245,195,239,151,154,149, 63,103,147,175,218,210,242,249,246,173,210,226, 36,236,159,127, 51,127, 33,224,237, 4,112, +235,203,188,150,231, 30, 0,228, 92,208, 37,202,116, 71, 41, 64, 73,148,138,170,170, 55,108, 52, 8,154, 13, 84, 20, 35,195,192, +117,102,165, 68,149,109,121, 51,223,228,100, 32,233,172,108, 32, 27, 77, 58,235,155,100,227, 33,237,165, 53,198,211, 41,217,168, +143, 21,130,217,112,136, 20,176,122,225, 42, 27, 87, 94,225,209,167, 31, 33,180,211,207,172,159,217,244,221,165,130,209,254, 62, +221,245, 77,164, 10, 72,210,148,184,217,228,229,215,191, 74, 24,197,164,105, 70,163,209,224,194,185, 37, 38, 19,195,112,148,145, +207,114,172,143, 91, 61,222,219,101,251,243, 79, 48,121, 6, 90, 59, 8,141, 53,196, 97, 8,194, 86,135, 20, 33,157, 85, 57, 8, + 84,117, 79, 24,173, 43,135,148,214,186, 74,232,196,111,226, 69,238,198, 99,110, 63,243,185, 18,254,250, 45,113,225,194,167,117, + 6, 97, 80, 27,255,136,170,163,168, 66,183,166, 5, 65, 64,179, 33,184,247,120,139,247,223,255,144,189,221,109,142, 14,246,232, +245, 29, 55, 33, 77,103,149,203, 35,142, 34, 94,126,229, 85,150,186, 49,121, 50, 98,150, 27,218,157, 46,107,235, 27, 28, 29, 29, + 19,133, 17,131, 97, 31,172, 33, 73,146,103,192, 81,243, 9,128,171,194,195,176, 65,216,104,146,103, 41, 65, 16,198, 78,128, 83, +218, 5,132,192,230, 26, 99,115, 71, 1, 50,174,250, 21, 66,248,225,252,226,156,238,121,204,248,250, 77, 80, 23,183, 21, 90, 47, +204,190, 69,237, 2,175,186, 2, 53,181,117,189,125, 78,109,211,182,214, 1, 49, 42,158, 86, 13,112, 33, 42,240,194,252, 20,190, +224,163,247, 11,166, 19,139,233, 10,184, 20, 6, 49,233,108,198, 39,159,189, 79,154,206,176, 58,195,100, 83,110,188,114,149,102, +163,133,214,150,199, 79, 31,243,116,123,155, 60,155,177,212,109,113,245,213,183, 72,124, 14,186, 49, 5,195,254,144,201,112, 76, + 16, 69,142, 66, 54,155, 49, 61, 56,102, 50,153,177,178,178,228, 17,180,174, 26, 52, 69, 81,145,226,180, 93,244, 81, 86,190,124, + 47, 90, 18,178,166,103, 0,247,103, 85,242,130,152,211,198,124,240,130, 16,146,118,103,133, 36,205, 25,142,134,174, 77, 30, 70, +168, 40,244,226,172, 16,109,164, 15,209,112, 39, 89,225,185,236, 90, 23,196,113,140,146,178, 26,143, 84,135,176,210,235, 31,134, + 24, 93,144,102, 51, 66,107, 57, 60,220, 39, 77, 83,172, 17, 21, 79, 95,161,153,142,134, 28, 8,151, 81,254,242,229, 43, 72, 4, + 71,131, 1,105,234,110,182, 86,179,129, 14,138,234,115,141,163,144, 70, 20,209,106,196,124,247,187,223, 37, 75, 51,126,254,238, +207, 24,245,143,105,168,130,235, 87,206,243,202,249, 51,108, 29, 30,145, 23,154, 70, 28,161,243,132,233,172, 96,150,103, 96, 12, +253,241,132, 34,137,152, 76, 38, 20,214,144,165,169,203, 27, 46,124, 5,130, 11,213,136, 59,174,170, 49, 86,147,204,114,119,125, + 97, 25, 14,157,194,180,213,137, 9,136, 24,141,134, 52, 26, 77,132, 20,196,113, 72,183,221, 96, 80, 76,208, 69,198, 44,113,168, +201,119,127,246, 39,124, 43,250, 1,107,107, 27, 28, 30,236,185,249,160, 46,136,194,144, 52, 75, 1,136,227, 24, 89,184,215, 26, +199, 49, 74,185,112,146,102,163,193,108, 54,171, 14, 82,113, 28,179,178,186,206,104, 52, 34,148,146, 8, 8,131,128, 52, 73, 72, +114,141,191,236,137,163,168,186,151,178, 44,199, 10,119,143, 73, 37,145,126,102, 47,125, 56, 69, 57, 58, 42, 89, 12,101, 28,170, +170, 34,140, 69,149, 3, 80, 8,193,214,113, 31, 21, 54,104,117, 59,116,186,109,150, 90, 45, 90,157, 46,143, 62,191,207,104,212, +131,169,152,207,201,133,196,228, 57,214, 80,177,237, 43,104,139,160,210, 70, 24,171, 48,122, 14,198,113,247,167,245,154,191, 57, + 23,162, 92,248,240, 12,138, 50,201,144, 90, 43,127, 49, 55, 91, 84,179,133,178,242, 63,181,162,149,254,103,202, 13,236, 57,221, +247,122,119,172,100, 74,252, 69,167,170,125,153,217,252, 11,109,194, 82,156,104, 41,216,121,242,156,152,167,198, 9,161, 28,102, + 53,142, 8,154, 45,154,173, 22, 81,171,229, 73,147, 25,217,116, 74,150,140,201,237,204,123,177,221,230,232, 75, 42,186,235,231, +152, 76,199, 60,250,232,167,180, 90, 93,198,189,125, 10,157, 49, 62, 60,162,187,190,142,144,130,229,179, 87, 65, 24, 76,158,177, +121,233, 34,187,143,238,209,108,116,232, 77,166,152,108,138, 4,166,211, 33,218, 66, 97,157, 16,236,120,231, 41,201,184,143,146, +138,102,167,203,176, 55, 96,187,213,118, 5,139, 17,164,238,198, 66, 2,157,149, 85, 84, 16, 17, 6, 1,133, 79,229, 67, 24,138, + 44,243,240, 49, 75, 24,134,100, 89, 70, 24,134,104, 63, 94, 20, 82, 16,133, 81,165, 87,146,158, 70,170,141, 65,133,110,175, 11, +130,128, 80,132,206,146,102, 53, 58,119,100, 79,112, 40, 95,155, 25, 71,200, 11,156,198, 8,223,209,116,113,180,129, 15, 35, 50, + 20, 89,206,163, 71,143, 24,140,190,206,159,190,251, 49, 23, 46, 93,102,118,119,226,214,158,188,192, 8,227,175,117,235, 58,169, + 82, 48, 29,245,185,122,233, 58,127,245,135,191,202, 44,115,227,197,155,159,126,204,253,207,239, 48, 73, 18, 26, 81,196,160,215, +175, 88, 78, 56, 3,245, 34,108,202, 58, 36,144, 12, 67,178, 44,117,194,191, 43,175,191,245, 91, 65, 24, 16,180,151,120,235,251, + 63,230,245, 95,248, 53,246,182, 30, 86,115, 3, 74, 48,138,243,117,184,139,197,183, 13, 79,170, 88, 79,206,181,235,109,166,250, +102, 95, 46, 46,246,148, 25,147,168,230,187,170, 38,124,153,131, 48,194,192,205, 23, 85,149,197, 46,170,141,201,214,172,150,198, +204,189,233,139, 93, 3, 81,117, 6, 92,165,238, 78,101,145, 10, 88,105, 53,105,197, 33, 87, 46, 94, 98,169,187, 68, 20,198, 52, +154,109,158, 62,221,102,119,119,135,253,189,167, 36,211, 17, 75,203, 93,222,250,202, 91,116,186, 45, 14, 14,247,221, 38,173, 11, +154,113,131,165,165, 54,173, 86,147,241,100,202,100,154,160, 84,128, 46, 44,179, 52, 37,203, 50,144,130,188,200,125, 24, 70, 70, +150,230,164,121, 65,158,187,232,202, 34,119,155,143, 46, 52,186, 48, 30,242, 97, 42,219,155,214,102,129, 29,160,125,212,105,245, +103, 94,192, 24,197, 45,130,176,197,214,206,182, 23,248,153,202,210, 38,164, 32, 12, 99, 98, 31, 86, 34,149, 34, 12,220,133, 27, +120,117,186, 53,238, 51, 40, 85,242,117, 97, 99,149, 56, 22, 56, 33,201,100,116,204, 44,153,186, 19,175, 80, 85,222,186,107, 51, + 75, 79,251,115,254,252,179,107,171,188,245,234,117,214,151,187, 40, 44,179, 52, 67, 96,137,194,144, 86,163,193, 82,183,195,234, +114,135,223,248,141,191,199, 47,255,240,151, 89, 91, 59,195,183,190,254, 13,152, 77, 32,157,241,232,233, 54, 27,107, 93, 90,113, + 68,111, 56,226,225,214, 46,211,201,148, 89, 58,227,184,119,204,222,225, 17,123,131, 9,195, 73,202,241,209, 1,121,158,187, 27, +171, 40,156,106,212, 24,114,237,102,113,113,224, 5,163, 30,195,235, 33,194, 24, 11,147,201, 20, 16,100,105,142, 53,174,237, 23, +248,152,222, 32,144,244, 7, 83,255,179, 78,148,147, 37, 41,201, 52,161,213,110, 81, 20,206,179,159, 12,123,254,125, 82,213,184, + 69, 74, 73, 24, 4, 11,157, 37, 37, 37,202,115, 1,138,162, 32, 77, 51, 79, 55,140, 64, 64, 20,134,110,164,100,220,125,160, 2, +167,134, 47,147,245,170, 64, 21,225,108,104,243,205,194,169, 99, 85, 16,204,163,137, 3,215, 58,199, 71,216, 10,207,244, 23, 74, + 33,131,128, 64, 69,200, 48, 36,106,180,136,187, 93,190,253,203, 63,226,199,127,227, 87,248,207,254,209, 63,226,165,183,191,201, +159,252,228, 15,209,153,193,234,194,117,166,202,209, 81,121,240,174,186, 98,204, 91,155,182,140, 72, 22,148,140, 25, 41,189,122, +221,143,146,130, 32, 68, 10, 5, 72,164,170,205,126,171,215, 70,181, 33, 87, 7,217, 26, 6,181,222,221,123, 30,191,189,116,113, + 45,102, 11,136, 47,156,185, 87, 97, 38,255, 26, 91,251,105,233,132,207, 83,232, 63,239,123,235,207,201,138,186,191,190, 38,148, +165,236,236, 72, 80, 1, 82,133,200, 40, 34,108,181,105,116,151,232,174,159,229, 23,255,250,191,203, 59,223,120,135,131,163, 99, +135,163,206, 51,116,158, 59,159,183,153,199,220, 6, 97, 68,107,253, 60,157,149, 85, 4,146,205,235,111, 50,203,114,178,241, 8, + 93,228, 76,143,246,252, 65, 57,103,237,226, 53, 86,207,189,196,131, 91, 31, 34, 50, 67,180,212,101,253,204, 57, 58, 43,171, 12, +143,246, 89, 90, 59,135,176,154,102,179,193,100,150, 18,199, 17,203, 27,231,233,110,156,161,221,238,162,148,100, 50,158,129,149, + 4, 81, 64, 62, 75,209,133, 91,219,148,146,220,122,247, 39, 20,201,132, 34,207, 48, 69, 65,150,165, 72,220,156, 89,248, 14,104, +169,189, 66,184, 17, 41,224,218,230, 94,155, 97,117, 78,145,205, 40,178, 12, 93, 24,108,161, 41,210,140, 60,203, 48, 70,147,231, +169, 15,108,242,228, 82, 37,252, 38,238,102,233,214,119, 39,117,225,210, 6,181,214, 4, 53,235,159, 46,114,186,203,203,244,134, + 35,246,119,119,216,122,252,136,217, 44,113,201,149, 94, 40,141,117,186,154,184,217,228,149,107,175,240,235,127,243,111,113,229, +202,117,158,110,239,242,243,159,253, 9,119,238,124, 2,198,146,101, 46, 75,100, 60, 26,185, 98,186,196, 44,159,134, 49,150, 78, +255,100,181,235, 44,170,171, 95,121,231,183, 26, 75, 43,252,250,223,255,135,172, 93,255, 26, 75, 27,155, 92,124,237, 45,182, 63, +251, 20,107,180,195, 45,122, 11,152, 61,225,237,176, 47,152,247,156,100,191, 83, 71,243,149,213,166,156, 43, 92,203,235,179, 20, + 0,148,173,216,178,253, 65,165,196,119, 31,114,185,201, 27, 47,182,179, 53, 11, 77, 57, 78, 40, 69,117, 96,171,220, 94, 37,221, + 9,173, 20,201,149, 9, 90, 18,129, 41, 10, 62,249,248, 35,238,222,189,205,195,135,247,217,222,126,196,193,222, 46,228, 9,231, +214, 58, 92,191,250, 50,231, 55, 55,105,197, 49, 71,251,251, 12,142,143,156,184,194, 58, 85,248,104, 52, 34, 75,115,119, 51,116, +218, 88, 99, 24,142,198,213,251,145,166,238,226, 49,198,144,103, 25, 69,166, 41, 10,235,218,236,198,162,141,203,118,169, 90,237, + 94, 33,235, 54,109, 91, 81,188,230, 27,189,167,122,121,152,194, 60, 12, 6,144, 49, 59,123,123,228,121, 86,181,122,181, 23,144, + 72,143, 77, 12,195,208, 91,216, 28,158, 83, 5,174, 98,147, 66, 34,188,117,173, 84, 66,215, 25,223,248,208,154, 66, 23,136, 34, +101, 58,237,187, 74,176, 48, 11, 16, 25,119, 34,117,157, 30, 83,104,210, 44, 37, 73,166,140, 38, 19,214, 86,151,121,249,194, 5, +246, 15,143,104, 53,155,116,218, 45, 86,150,151, 57,191,121,150,255,228, 55,127,147,111,124,253, 29,148,112, 98,199,126,127, 72, +119,101,157,183,111, 92, 35,153, 36,188,127,251, 54,135,189, 99, 38,211, 41,199,253, 33, 89,158, 49,153,142,201,242,130,193,112, + 68,127,146,208, 27, 12,153, 37, 83,103, 5, 43,244, 34,122,215,107, 42,148,112, 7, 40,176,149, 8,198,233, 55,220,117, 51,157, +204, 8, 35,229,230,215,186, 32,245,239,101, 24, 6, 20,133, 33, 77,253,166, 86, 20, 72, 99, 29,135, 89, 41,214, 86, 86, 72,134, + 3,178,116,230,248,253, 53, 59, 90,201, 30,112,158,236, 2, 33, 28, 92,197,169,227,243,106,163,207,178,148,188,112,244,187,178, +109,103,252, 97,218, 98,252,225, 32, 68,201,192, 87,236,248,123, 38,240,140, 1,181, 96, 79, 11,124,182,184,227, 10,232, 10, 53, + 28, 4, 78,109, 31, 54,154, 52, 90, 45,226, 70,147, 48,108, 16,196, 33, 75,103, 94,226,111,252,230, 63,230,245,239,124,141,161, + 86, 44,159, 91,231,222,205,123, 28,238,110,147,167,105,165, 8, 46,221,117, 37,208,163, 20, 42,205, 79,252,198,111, 60,243,181, +195,109, 60,170,234,182,217,178,138, 46, 15,233,118, 14, 21,153, 35,245,230, 10,125,225,181, 37, 98,129,158, 87,234,238,230, 68, + 53, 33,235,126,235,103,173,127,165,111,120,193, 9,240,156, 18, 94,212, 44, 99, 95, 54,180,106,161,226,174,165, 20,137,231,204, +199,235, 22,187, 58, 18, 94,212,108,228,101,173,230, 82, 39, 85,237,192,225,252,231,238, 0,163, 16,210,233,103,130, 70,147,176, +209,166,179,178,194, 55,127,244,235,252,221,127,252,159,242,218, 87,190,194,250,250, 10,183, 62,185,137,201, 92,206,187,242,135, +178,178, 96, 10, 84, 72,123,195,145, 18,219,221, 37,250, 71,251,164,199,187, 12,142,142, 88, 94,223, 96,150,204, 88,218,216,164, +217, 90, 98,220, 63,102,120,124,140,178,112,230,226,203, 12,143, 14, 80, 81,131,241,168, 79, 50,153,208,238,180,153, 38, 9,198, +104, 26,113,131, 84, 27,154,141,198,255,207,216,155, 53, 93,118,221,231,125,191,181,214,158,206,240,158,119,232,185,209, 24, 8, +128, 0, 41,142,162, 36,138,166,101,137,113, 60, 68,101, 91,113, 18,203,169,196,169,148, 99,187, 42, 85, 78, 85,110,146,155,220, +233, 35,164, 42, 23,249, 2,185, 75, 37,185, 73, 42,150, 35,185, 28,155,162,165, 68, 38, 9, 2, 32,230,161,129,158,251, 29,207, +176,167, 53,229,226,191,246, 62,231,109,192,174,168,170, 11, 32,213, 4,222, 62,103,239,181,254,195,243,252, 30,102,251, 71, 60, +122,112,143,227, 71,247,177, 77, 77, 89,230, 28, 93, 59, 34,132,192,122,181,196,168,192,122, 93,243,228,238,251, 52,231,167, 4, +111, 33,117,202,106,228,156,200,103,150, 23,249,216, 80,246,125, 63, 78,110, 51,109,146,156,195,128,145, 2,215,152, 76,200,153, + 74,236,131,168,184, 21, 94,134, 32, 1, 95,206, 38, 11, 92, 74,243,180, 86, 92, 2,131,146,158,109,226,160, 79, 65, 78,171,213, +138, 44,211,124,254,249,231, 66, 33, 77,246, 51,105,108,182,119, 83, 81,148,124,227, 27,223,100,127,255, 0, 93,148,252,209, 31, +255, 17,127,250,147,159,208,180, 45,171,229, 18, 31, 44,214, 58,250,182, 75,218,155, 47, 97, 73,164,181,153, 30, 66,148, 6,148, +247, 43,223,254,222, 31,188,244,157, 31,242,123,127,237,183, 89, 57,176, 94,177,127,245, 10, 71,183,190,194,163,143,223,149,234, + 32, 0,193,141,226,149, 47,171, 42, 71, 11, 74, 26,227,203,142, 94, 46,231, 93,200,203,112,113,239,102,171, 15, 47,211,144,127, + 60,140, 8, 7,251,151, 78, 99,224,161,251, 24,132, 50,214,186, 75,138,249, 8, 59,255, 46,181,195,130, 87,227,216,127,224, 91, +139, 80,193,108,185,220, 41, 31,219,100, 25, 89,158, 81, 78, 38, 44, 22,135, 92,189,126,157, 95,255,214,215,121,253,133, 91,204, +231,115,242,194, 96, 76,160,170, 12, 89,158,179,222,172,217,108,234,180, 47,181,108,234,134,243,229, 10,133,162,172, 10,148, 81, +108,234,102,244, 14,123, 55,236,154, 17, 69, 99, 20, 97,138, 15, 91,162,209, 22,223, 57,100,160,171,241, 50, 8,126, 80,171, 50, +118,240,113,199, 54, 20,130, 98,113,120,141,167,199, 79,211,133, 46,170, 78,180, 38,140, 58, 38,233, 56,135,253,211, 96,239, 16, +209,157,172, 39, 98, 90,155, 12,161, 29,131, 87, 58, 4, 41,170,180, 82, 28, 85, 37, 79, 30,223,195, 6, 59,118,187, 69,158,166, + 39, 3,164, 65, 43, 20,102,156,166,216, 68, 1, 91, 45, 87, 64,228,251,223,255,117,190,241,245,175,241,250,107,175,241,131,223, +252, 62,255,241,223,253,125,174, 95,191, 78,223, 89,158, 62, 61,161,107, 59,150,203, 37,117,219,242,228,124,197,147,147, 99, 62, +253,236, 46,117,189, 33,164,132,184,179,243,115, 66,140, 44, 55,107,234,182, 33,146,179,169, 55, 64, 24, 15,233, 8,120, 2, 62, + 72,200, 70,145,105,170, 60,217, 90,242, 98,199, 78,184, 29, 95,246,125, 18,205,165,105,131, 15, 49, 85,236, 48,153, 78, 88, 47, + 55, 41, 41, 47,226,189, 67, 17,232,218,158, 24, 34,191,247,215,127,151,227,147, 99,188,179, 20,121,190, 99,195,188, 44,150, 27, + 38, 31, 82, 92, 60, 99, 7,245, 94, 72, 84,182, 31, 87, 95,206, 59, 92,138, 17, 30,228,202,222,187, 81, 61, 63, 8, 82,135,191, + 94,130, 74,237,188,151, 89,158, 83, 77, 38,228, 69, 73, 62,153, 50,221,223,231, 7,191,253, 35,130, 54, 24, 13, 42,207,185,246, +194,171,236,223,122,149,179,139,150, 27,139,146,220, 40, 78,150, 61,239,191,241, 83,108,215,202,196, 46, 12, 23, 74,216,134,174, + 71,149, 10,204, 64, 72, 30,125, 18,214, 89,155, 12,147, 87,242, 57,167, 3, 81,107,153,202,201,228, 71,108,110, 3,230, 89, 17, + 81, 42, 35, 14, 10,251,168,182, 48, 16,145, 89,166,139, 44, 29,106, 73,133, 63,192, 87,226, 22,230,192,229,244,108,158,209,254, +164, 83, 40, 97,190,213,151,181,252,234,178,138,255, 89, 27,233,179, 93,246, 37, 27,225,206,164, 64,253,255, 16,196,141,178,130, +157, 95,195,100, 66,237, 80,222, 84, 52,105, 58,163, 68,221,158,166, 46,202,100,104, 99, 48, 69, 73, 94, 77, 40,231, 11, 14,111, +191,200,223,254, 7,255, 21, 71,123, 21, 7,251, 21,249,254, 29,222,123,243,109, 46,158, 62,193,245,157,116,233,195,196, 67, 41, +178,201, 30,135, 87,174,241,248,238, 71, 60,253,252, 67,218,147,199, 84,251, 87,216, 63,186,194,102,117, 65, 81, 78, 89, 28, 92, +165, 60,186,130,183, 61,183,191,242, 21, 94,253,222, 15,249,236,189,183, 9,174,102,117,122, 76,240, 61,161,107,192,100,248,174, + 30,185, 68,214, 7,188,181,188,244, 43,223, 70,147, 38,153,109, 67,244,129,118,211, 98,178, 18,239, 28,171,243, 51,172,179,108, + 46,206,121,114,239, 99, 92, 47,191,207, 90, 59,174,110, 20, 3, 36,109, 11,203, 26,126,105,173, 83,135, 43,235, 40,149, 38, 84, + 67, 99, 56, 56,176, 32,146,103,197,184,234, 28,178, 56,124, 90,145,142,235,225,212,220,120,239, 83,145,238,240,222, 74,134,135, +247,108,214, 75,108,211, 74,174, 68, 42,232, 7, 31, 59,113,139, 13,206,242,130, 23, 95,188,197,231, 15, 30,240,139,183,223,227, +207,254,213,143,233,154, 13,171,139, 11, 54,155, 13,222, 59,122, 43,200, 99,231,253, 88,148, 14,151,185, 74, 14, 50,163,115,209, +195,148, 5, 42,147, 76,122,243,157,191,242,183,255, 96,239,198,109,166,135,215,248,250, 75, 71,226, 61, 46,114,200,166, 60,255, +234,215,120,240,238, 91,248,232,136,222,237, 68, 50,200, 99,157, 25, 53, 66, 66,198,206, 96,135,209, 62, 28,166,255, 54,130, 28, +187,240,253,103,252,215, 35,183,125,119, 12, 63,168,136,141,185,228,153,223, 85,136,155, 81, 88, 21, 71,114,218,176,175,244, 59, +202, 89,191,147,205,172,210, 56,121, 82, 85,204,247,246,152, 78,167,236,205,103,252,230,235,119,120,229,214, 33,125, 80,212,205, +134,186, 89, 19,156, 67,105,200,115,195,100, 90,161,140, 97,185, 92,209,247, 78,198, 89, 46,208, 52, 45,193,123,242, 50, 31,153, +191, 74,233,212,228,170,116, 81, 15, 35,115,149,198,168,106, 36, 79,197, 56, 68,121, 12, 2, 9,149,246,213,124,241,215,176,199, + 68,129, 41, 56, 61, 61,195,121,199,179,217,233, 58, 77, 43, 80, 91,225,162, 92,236,217,248,160, 12, 99,204,144, 62,183, 24,183, + 21,236,120,177,123,153,224, 68,215,114,182, 60,197,246, 61,214,121,116, 10,180,217, 45,194,134, 84,183, 24, 67, 82,147,166,137, +141,179, 20, 85,197, 55,127,229, 59,252,141,191,241, 55,249,238,119,191,195,157, 59,119,104,234,150,213,114,197,195, 7,143,121, +248,232, 49,239,191,255, 62,239,127,244, 33,159,222,189,203,187, 31,126,200,233,114,197,189,123,119,193, 59,140, 22, 42, 87,219, +247,184, 32,118,180, 24, 34,157, 35,229,157,203,110, 95, 10,161, 93, 47,117, 36, 83,158,204,200,115,213,182,173,136,105, 82, 72, +144, 74,151,131,119,142,174,119,219,241, 90, 10,112, 24, 42,231, 44,203,104,234, 94,134,246, 49,101,219,123, 7, 58,227,243,135, +247, 57,220, 63,192,104,205,186,222,160,180,102, 54,221, 35, 47, 10, 92,114,103, 88,235,198,105,215,179,193, 68,131,251,100,247, +253,202,242,108, 39, 25, 46,142,214,202, 93,119,137,117, 14,159,166, 34, 67, 17,230, 82, 6,252,160,120, 30,120, 4, 90, 9,199, + 63, 47,167,124,243,135,255, 46,127,243, 31,253,151,252,157,191,246,151,120,255,179,123,180,171, 53, 87, 95,249, 38,251, 87,110, + 81, 86, 37,215,110,236,243,222,221, 51, 78,142, 47,248,232,103,127, 74,244,210,121, 68,239,211, 35,186, 99,117, 13, 81,238,246, + 33,173, 38,217,229, 76, 62, 17, 49, 83, 18,251, 9, 63, 80, 58,216, 1, 59, 60, 54, 36, 89, 70, 28, 0, 68, 70,114,211,119,125, +234,187,221,247,112,151,139,109, 73,212,245, 3, 92,103,123,241,146,160, 62,122,135,107,175,118,172,166, 91, 6,253, 22,228,244, +229,195,124,197, 23, 19,238,255, 77,151,251, 32, 72,223,253,199,168,103,200,126,250, 75,212,122, 81,113, 73, 28, 60, 76, 92,134, +159,105, 60,115, 49,219,100,202, 1,161,173,141,188,227, 89, 70, 86,149,100,229,148,114,190,199,183,126,240,151,121,238,107,223, + 34, 22, 21,214, 5, 30, 30,247, 44,207, 46,248,244,157, 95,224,186, 14,219,117,226, 12,241,146,168,118,227,197,215,216,172, 4, +131,236,172, 20,161, 89, 53, 99,115,126, 66, 81, 84, 4, 31,113,206,114,250,249, 93,162,183,168,124, 66,191, 89,146,207,247,112, +206,211,175,151, 68,239,153, 29, 94, 97,255,230, 29,162,143,172,206, 79,210,153, 0,157,237,185,253,242,107,244,125,143, 78,248, +108,239, 28, 85, 89,162,148, 98,255,234, 85,102,251,251,152,116,238,124,252,246, 79,101,244,237, 44,209, 59, 84,202,166, 24,222, + 1,107,123, 92,111,241, 93, 47,239,152,146,127,222,240,221, 26,109, 70,237, 81, 72,235,182,241,158,138, 67, 49,163,101,237,165, + 53, 69, 85, 73,206,187,210,227,153, 25,189,191,148,119,162,134,236,139,176,181, 36, 55, 77,141,138,158,174,179, 95, 96, 20,140, + 58, 51,163,184,126,227, 14,197,116,198,197,114,201,103, 31,127,196,102,189,162, 75,171, 66,157, 9,212,107,184,191,134, 39, 71, +171,173,104,124, 11,160, 74, 14, 0, 99,200,139, 2,243, 23,126,255, 31,252, 65,140,154,174,243,204, 23, 11, 14,142,230, 92,217, +211,120,165, 9,122,194,213,175,188,202,189,247,222,198, 59,139, 6,130, 10, 9,151,159,144,173,187, 30,144, 52, 98,218, 13,237, + 24,237,104,138,203, 81,168, 59, 99,200,225,226, 31, 30,204, 16,119,189,189,187,254,206,157,188,219, 29, 21, 44,201,136,159, 37, + 49, 67,252,146, 66, 97, 87, 53, 59,132,194,152, 56,192, 23,118,212,168,193,147,105, 1,146,252,254,111,125,155,231,174, 29,242, +248,244,130,227,179, 99,154,174,149,159, 65,177,115, 73, 36, 54,121, 81, 80,215, 45,109,211,139,210,210, 73,224,139,140,121, 53, +214, 58, 66, 80, 9,221,154,228,170,137, 2, 17,254, 13, 74,222,161, 75,143,232, 81, 37, 28,119, 63,247,241,115,147,192,154,131, +163, 27, 44, 87, 43,156,183, 91,127,114, 52,104,164,130, 83, 90,165,125,234,144, 8,163,183, 15,203,168,254, 20, 49, 99,166, 20, +202,168, 17,132,209,247, 61,196, 64,110, 12,125,215, 17,219, 13, 15, 31,220,163,169, 91,172, 21,242, 81,158,208,178,222, 75, 66, + 86, 81,138, 88, 16,181,165, 21,142, 5, 93,210,103, 52,173,163,247,138,227,167, 39,156,157,157,115,126,126,193,189,251, 15,248, +248,211, 79,248,232,227,143,249,228,179,187, 60,122,242,136,207,238,223,231,228,244,132, 39, 79,143,105,235, 13, 58, 90,180,138, +108,154, 70,124,176, 81, 81, 21, 25,189, 13,116, 86,118,245, 91,215, 64, 24,185, 11, 58, 93,236,121, 14, 68,127, 41,196,161,200, +139,157, 98, 83, 62,103,151, 70,222,218,104,116,216, 82,164,188,115, 20, 69, 65,107, 61, 46, 74, 37, 29, 19,123,160,111, 54, 68, + 5, 39,167,103, 28, 30, 94,197,218, 20,157, 24, 34,185, 49, 4,196,159,156,103,121,210,136,100, 8, 42, 66,112,156,101, 41, 36, + 66,109,242,100, 27, 76,123,112,116, 26, 87,203,101,159, 21,133, 20,130, 65,165,253,191, 35,203,244, 72, 19, 20,132,166,198,165, + 41,144,243, 50,217,144,247, 84,118,232, 33, 68,148,201,152, 92,189,205,228,232,121, 14,175, 28,240,163,223,249,139,252,201,191, +126,139,249,254, 53,174,220,126, 1,165, 12, 77, 15,171,139, 37,237,186,230,147, 55,255,156,232,196,197, 33, 36, 46,149,216,216, + 70, 20,237,105, 26,166, 70,109,139, 8,121,182,163,104, 48,121, 33, 25,221,105,138, 36, 69, 85, 33, 40, 79, 45,110,146,164,208, + 33, 58, 25,185,134, 1,172, 50,100, 64, 16, 6,191, 89,130, 53,233,173,118, 72,102,249, 41,161, 75,143,251,250,129, 68, 55, 20, +155, 50,190, 14,219, 81, 60, 34,218, 27, 14,173,237, 65,252,197, 49,248,165,113,248,191,141,188,250,165,172,249,237, 47,249,247, +169,173, 78, 64,111, 3, 73,244, 80,216, 72,219, 65,150,148,236, 58,175,136, 94,172, 89, 90, 25,178,172,144,226, 89,203,187,174, +141, 65,231, 5, 89, 81, 98,138, 9,197,100,206,247,255,234,223,162,110, 58,150, 39,231, 60,122,116,202,241,163,199,120,219,243, +193,207,255,140,208,203,133, 30,162, 71, 71,205,244,240, 42,135,215,111,211,212, 75,206,158, 60, 22, 59,114, 89,113,254,232, 51, + 98,223, 64, 4,219,110,168,102,123, 76, 15, 14,197,102,217,183,120,231, 57,253,236, 67,124,179,161,237, 26,116,112,216,182,165, +187, 88, 82, 78,231,168, 24,233,218, 46,253,121, 34,139,163,107, 76, 22, 7,168,116, 70,104,109, 36,106,212,139,214, 39,132, 64, + 81, 22,248, 16,249,252,221,183,232,235, 21,209,201, 84,204, 91,183,221, 85,167,243,187,172, 74, 2, 18, 48, 36, 33, 74,249, 86, +135,149,166,146,195,234, 41,244, 14,223,183,242,172, 69,143,235,186,228,200,216, 70, 67, 59,231,192, 57, 1, 42,141,116,211,128, + 11,253, 24,194,176,109, 90,183,117,160,117, 2,134,250,130,133, 50, 49, 3, 98,140,212,245,146,201,108,193, 39,159,124,194,217, +201, 19,250, 78, 38,114,178,255,151,221,189,184,156, 52, 69, 38,185, 35, 10, 45,231, 65,158,163, 77,145,222,227,156,188,172, 80, +202, 72,241,245,189,223,253,253, 63, 80, 68, 84, 86,224, 66,206,201,121, 77, 38,180, 57, 94,188, 57,165,233, 75,170,197, 21, 30, +124,242, 30,113,180,128, 25, 52,122, 59, 10, 32,238,228,211, 50,238,224,229,247,102,210, 33,106, 35,255,187,161,138, 76,177,149, +187, 17,155,195,222, 79,143, 47,237,176, 83,246, 95, 96,190,239,122,153,135,145,202,176,131, 83, 9,203, 58, 84,174,187, 66,188, + 81, 9,191, 3, 55,201, 82,245,158,105, 40, 50,195,126,161,249, 47,254,218, 15,152, 20, 5,239,127,118,143, 7, 79,159,208,219, + 14,231, 3,189,117,244,214, 97,157,140, 65,157,245, 9, 10,160,200,203, 66,208,164,109,159,210,214, 4, 20,160,146,157, 45, 36, +151, 65,212,154,219, 47,188,196,124, 58,163,217,108,190, 32, 54,124, 54, 67, 62,198,248,229,244,139, 29, 53,240,225,225,117, 78, +207,207,176,182,191,212, 79, 12,172,231, 93, 22,180, 54, 3,236,199,165, 74,243,178, 34,121, 16,156,232, 44, 75,182, 16, 81, 75, + 7,235, 68,220,215,110, 56,126,120,143,126,204,212, 78, 93,121, 42,118,212, 78,214,176,210, 9,218, 16,125, 82,240, 75,149,158, +165, 61,125,215, 91, 78,207,151, 92, 44, 47,248,232,227, 79,120,227,205,183,120,227,173,183,120,240,240, 1,239,190,255, 62,143, +159, 60, 74, 43,142,141,216, 1,173, 37,162,185, 56, 63,161,239, 59,188,143,180,109, 71,223, 89,138, 50, 39,132, 72,221,202,247, +179, 91,201, 14,148,196,144,138, 64,173, 2, 85,153,143, 47,250,176,218,136,113,187, 34, 25,166, 38, 33,122,242, 97, 77, 49,192, + 90,210, 75, 95, 22, 57,117,211,143, 34,152, 24,228,121,168, 55, 53,104,133, 71,243,202, 43, 95,165,105, 91,218,166,145,238, 81, +171,113,167, 87,148, 37, 85, 85,141,151,112, 94,148, 20,121,129, 54, 57,101, 89,146, 23, 57,104, 70, 13,197, 32,180, 35, 69, 73, + 86,147,106, 76,214, 83, 90,211,185, 86,132,121, 62,117, 92,218, 80,228, 37, 38,121,114,243, 66, 68,119,213,116, 42, 42,226,196, +173,214,166,100,239,198,243,124,246,228, 12, 63, 61,164, 90, 92,231,228,201, 99, 14,175,223,164,169,215, 92,156,157,209,180, 29, +101,153,243,249, 59,191,192,168, 72,112, 14,163, 34, 70,111, 69,168,222,245,178,198, 73, 98,201, 44,207, 81, 38, 29,164,121, 78, + 4,242,178, 36, 26,141, 41,139, 68, 46,148, 72,206,172, 40,119, 14,198,132,133, 13, 34,253,149,209,125,158,198,237,114,226,140, +231,138,201, 80, 89,142, 70, 46, 65,245,133,209,122,122,151,140, 65,101, 89,178,220,101, 59, 69,255, 22,214,163,118,146, 31,213, + 51,227,206, 93, 82,223, 23,239,232,221,247,118,123, 17,111,187, 42,149, 86, 4, 38,253, 85,167,124, 3,117, 73,232,182,253,125, + 25, 90,201, 4, 77,103, 57, 40,137,128, 54, 90,244, 46, 74,107,185, 52, 6,244,245, 80, 63,232,161, 48,145, 49, 60,218, 96,202, + 9, 47,190,246, 77,110,124,245,155,232,244, 51, 0, 2,131,137,145,143,223,252, 25,125,189,194,247, 54, 53, 71, 5,119, 94,255, + 22, 15, 62,252,128,249, 98,159,213,197,146,230,244, 49, 42,203,185,241,252,203,212,171, 11, 41, 24, 77, 65, 62,157, 83,159, 31, +163, 99,164,239, 26,138,170, 2,157,209,172, 46,168,166, 83,250, 8,147,233,148,166,171, 9, 68,230,135,135,244,155,141,192,110, + 82, 87,124,245,249,175,140, 83, 61,165, 52, 85, 85, 49,153,207,201,179, 92,198,252,185, 80,223,150,167, 79,185, 56, 63, 35,116, + 45, 93,151,236,109, 3, 91,101, 71,248, 88,148,213,248, 12,110,211, 4,183,156,145,241,110, 72,107,179, 33,206,123,248,118,135, +223, 35,233,159, 62, 9,157,164,192, 55, 90, 19,162, 0,106, 6,184,211,160, 13,219, 77,193, 86, 92, 14, 78,218, 5, 80, 13,133, + 64,189,233,200,180,231,233,211, 99,250,182,193,165,189,124, 8, 16,188,221, 38,145,178,147,156, 58,196,142,103, 25, 33, 6,166, +211,185,188,215, 89, 62,198,101,103,121, 57,197,118, 13, 49,120,154,182, 38,106,197,114, 85,179, 56,216,199,249,200, 87,111,151, + 60,126,112,141,219, 95,253, 22, 79,222,123,131,168, 68,249,234,250, 14,111,165, 59, 81,153,145, 81, 98,240, 34, 84, 73, 23,248, +110, 28,168,216, 82,118,199, 75,137, 78,165,182,200,199,129,176, 21,134, 10,118, 28, 39,233, 75, 97, 43,222,123,226, 14, 57,110, +232,210,191,128,174, 77, 23,223,110, 62,251, 16,199,106,148, 6,205, 56,117, 48, 64,169, 13,243, 50,231, 31,253,205,223,102,189, +186,224,237,143, 63,229,209,201, 9,117,130,129,244,189,165,233, 58,186,116,153,121,183,229,121,251,244, 96, 28,236,239,211,119, + 22,215, 73,190,186, 15,208,247, 62,209,250,228,115,217, 59,184,194,115, 47,190, 12,192,252,224,136,187, 31,190, 39,194, 35,226, +165,148, 44,249,252,182, 67, 62,161, 79,201,165, 56, 10,111, 80,204,230, 11,234,166,166,183,221,248, 32,201, 90, 76, 19, 73,227, +209,192,104,201, 24,157, 8, 90, 4, 37, 33,147,221,167,128, 99, 92,234,240,114,250,166,165, 40, 10, 76,138,174,245, 33,208,212, + 43, 86,199,143,176,222,141, 99,121, 53,230, 4,132, 17,113, 59,201,243,241,165,145,145,167, 34, 83,233,251, 77, 66, 48,153, 38, +156, 16,116,206,253,135, 15, 4,173,155,214, 36,214,245,137,122,167,201, 50,147,188,221,145, 44,207,152,239,237,209,213, 43,218, +213,177,172, 25,180,192, 40, 54, 77, 71, 94,148,114,153, 61, 3, 45,146, 98,110, 16, 99, 5,138, 49, 82, 86,165,231, 39,219,174, + 25,140, 17, 37,112, 58,116,109, 11, 33,143, 68,111,229,179, 73,172,105,157,233,164,180,213,244,214,143, 34, 47,130,199,247, 45, +203,147, 99,148, 82,124, 58,157, 74,103, 63,157,236, 68, 57,138,226,189,183,150, 92,105,172,245, 84, 85, 41,187,184, 36, 98,140, + 81,118,141, 67,158,188,202, 50,250,190,199,123,177,196,233,116,232,228, 69,153, 46, 75, 77,102,229,189,171, 38, 5,218, 20,244, +125, 75, 83, 55, 68,160, 40,103, 40,163, 5,149,217,247, 76,166, 19, 38,213,132,136,162, 91,159, 97, 52, 56, 27,121,231, 23,239, +114,229,246, 11,220,250, 74, 79,189, 94,142,233,104,206, 58,172, 19,180,166,219, 64, 86, 20, 66,226,138,144,101, 10,239,123, 14, +142,174,178, 94,174,240,206, 97,114, 57, 60, 51, 99, 36,125, 46,147, 29,111,140,158,216,117,210,137,121, 71,232, 45,166,170,198, +152, 99,173,205,200,230, 38,117,111, 49, 70,116,114, 80,168,152, 82, 94, 7,161, 94,218, 35, 15,211,129,184, 51, 21,210,122, 27, + 21,108, 98, 58,200,131,189,132,215,139,207,218,132,190,112,113,199,103, 68,192, 95,140,188,125, 86,124, 55,166, 8, 95,194,244, + 50,234,100,182,253,207,142, 31, 62,173, 72, 6,175,185, 78, 69, 77,112,126, 11,206,138, 17,188,147,238, 62, 8,153,108,248, 9, +181, 82,168, 76, 10,156, 4,151, 23,232, 76,102, 56,188,253, 2, 68,159, 92, 52,145,205,102, 57,118,169, 70,103,137, 88, 22, 32, + 42,110,190,252, 42, 49,159,114,248,220, 29,166,211, 25,119,202,138,139, 71, 83,206,159, 62,228,248,225,231,104,109,232,154,142, +172, 42,233, 86,167,105,194,148,161,157,164, 32, 26, 34,213,254, 1,229,116,198,193,108, 70,179, 89,161,173,172,236,234,205,122, +132,175,232, 24,121,242,240,115, 94, 79, 23,124, 76, 1, 71,218,228, 92,191,113,147,174,235,232,155,154, 79,158, 72,186,228,252, +232,170, 60,247, 7, 7, 44, 14,143,184,120,252, 57, 33, 41,247,173,181, 9, 78,211,210,197,228, 10,138,110, 28,173,235,180,111, + 87, 41,252,101, 16,139, 14, 78, 20,109,178,109, 80, 85,178, 5,199,244,121, 25,149, 38,187, 70,167,166, 5, 20,134, 97, 56, 19, +125, 28, 27,205, 97, 10, 26,249, 34, 91, 65,107,149,134, 66,210, 68,249,208,243,217,103,159,141,211,223,152,244, 85,187, 83,104, + 61,228,189, 39,251,221,144, 58, 26,147,234,191,109,107, 84, 16,144, 90, 4,241,210,255,133,255,224,239,255, 65,223, 55,160, 20, + 7, 71, 7, 92,189,114,200, 43, 55,230,244,125,207, 68, 65,223, 89, 62,123,114,206,100,126,192,234,252, 41,191,247,247,254, 51, +190,245,171,191,198,251,191,252, 37,209,167, 46, 58,205,252,181,145,100,156,184, 35,134, 51, 89,142,206, 11, 98,158, 97, 76, 62, +138,172, 98,138,205, 83,105, 31,185,133, 82,196, 75,227,232,103,189,154,187,123,137,209, 30,167,245,184, 23, 83,169, 19,229,153, +125,203, 46,144, 70,167,226,193,104,141, 86,145, 12, 40,138,140,107,243,156,127,252,119,254, 42,103,167, 39,188,249,254,199, 60, + 62, 59, 99,211, 54, 99,135,222,117, 61,109,215,211,118,162, 76,116,214,209,185, 68,247, 74,118, 51,159, 4,121, 77,219, 15, 59, +135, 52,141,144, 75,253,234,141, 91,188,250,250,215, 0,141,143,129,172,200,153,237,239,211,212, 45,193,217,103,212,141,162, 24, +222, 86,240,250,153, 67, 68, 51,157,238, 49,153, 78, 57,191,194,157,189, 67, 0, 0, 32, 0, 73, 68, 65, 84, 56, 27,173, 68, 91, +171, 14, 99,162, 80, 28, 20,199, 90, 37,149, 59,163, 14,194,239, 4,141, 12, 65, 53, 3, 24,197,217, 45,166,179,107, 54,172,206, +142,233,147, 26,123,155,239,190,141,205, 29, 4, 43, 82, 84,164,161,161, 54, 91,139,226,142,216, 39, 36,165,190, 41, 38,137,238, + 4, 62,136, 0,178,235, 58,185,252,173, 19,229,121,215,211, 91, 75,219,118,108,154, 13, 49, 4, 86, 23,167,146,174, 68, 32,166, +132, 38,235, 44,109, 55, 76,118,134, 23, 40,249, 67,149,188,136,121, 6,123,211, 34,197,154,138, 58, 95, 43, 77, 85, 86, 99,122, + 89, 94,228,152, 76, 39, 20, 37,148,101,182, 85, 95, 15, 10,109,149, 4, 51,218,200,184, 45,117,102,178, 54,145,151,211, 54, 13, + 93,189,161, 15, 96,242,156,106, 50,197,246, 61, 10,141, 15,226,202,152, 76, 42,148, 86, 88,231, 41,203,130, 44, 47,201,138, 50, + 5,190,104, 38,147,138,136,172, 78,242,162, 36, 47, 39,130,233, 69, 81,148, 19, 76,150, 37,158,181,132,228,120, 31,211,104, 63, + 75,140, 9,152,148, 37, 93,215,201,159, 75,139, 95, 92,167,239, 64, 70,253, 66,205,122,238,213, 95,161,105, 54,220,255,240, 93, +110,220,124, 46, 1,120,228, 77, 45, 39, 21,189,237,120,252,201,123,172,206,142,119,150, 55,106,236, 42,154, 90,192, 60, 33,186, +148, 46,103, 32,147,206, 34, 70, 69,112,194, 18,200,140,104, 77,156,117, 66,167,115,142,224, 44, 74,201, 69, 79, 90,105,104, 5, +222,166,177,104,176, 16,189, 0,109,184,140,130,101,136,159, 84,187, 0,158, 56,186, 77, 98,240,242,115, 5, 47, 2, 74,197, 51, + 19, 48, 53, 46,179,227, 56,133,228,153, 57,186, 73,150,177,221, 61,189,254, 2,104,107, 39,190, 38,209,205,164,152, 55,131,101, +111,236,210,245, 51, 10,252,180, 42,244, 97, 20, 4, 15,248,216,224, 7, 27,149,149,231, 61,185, 94,118,185,238, 35, 34, 26, 17, +127,234,172, 64, 87,178, 79,255,198, 15,254, 29, 38,139, 67,114,147, 37,253,135, 31, 39, 88,247, 63,124,135,213,249, 41,132, 32, +137,136, 87,111,211, 47,143,217, 52, 45,121,102,120,240,206, 27,105,114, 87,160, 82,246, 69, 94,100, 4,231,192, 20,248,190, 69, + 87, 19, 50, 83,145,207,167,242,253, 78,231, 28,222,184,201,191,255,247,254, 46,189,213,212,221,134,246, 98,141,171,107,250,166, + 22,194,103,148,141,201,149,180, 91, 86, 74,225,157,136, 64, 3,154, 92,105,214,155, 13,251,135, 71, 84,147, 41, 79, 30,221,231, +211,119,223,164,190, 56,167,171, 27, 17, 42,175, 86,216, 62,229, 89,244, 86, 22,148, 70,166, 60, 90,103,228,121,145, 62,139, 44, + 69, 4,139, 40, 26, 5,202,232,177,141,138, 74,206, 30, 17, 16,171,241,153,137,169, 49, 24,154, 40, 23,194, 56, 69, 66, 25, 50, +109,210,106,140,145,200, 55, 90, 56,227, 23,119,233,187, 53, 98,140, 65,114, 33, 92,154,246, 14,141,231, 78,120,153, 50,106, 43, +246, 77, 77,110, 28, 38,225,200,123,156,167,149,131,100,150,180,152, 31,254, 71,127,255, 15,218,122,141,214,134, 59,119,158,227, +214,205, 3,166, 85, 78,221, 88, 30, 28,175,120,178,234,105,235, 30, 23, 28,175,253,198, 95,226,246,237, 91,188,246,149,219,124, +122,220,112,246,224,174,188, 44, 67, 37,146,196, 62,227,107, 98, 68,168, 49, 63,186,198,205,151, 94,229,198, 75,175,112,253,206, + 11,156, 62,126, 66,196,239, 92, 8,151, 99, 82,227, 78,106,155, 82, 91,114,207, 46, 66, 86, 95, 2,209,196,203, 25,240,169, 74, +247, 67,170,212,176, 18,136,140,212, 45,173, 52, 26, 48, 58, 82, 25,205,181,253,146,127,252,119,254, 61,238, 61,120,192,219, 31, +124,202,211,243, 51,154,174, 77,227,118, 75,239, 44,109,111,105, 59,249,207, 62,200,120,211, 90,135, 77,202,111,231,124,178, 33, +121,188,143, 56, 23,136, 90, 46,129,249,222, 62,183,238,188,200,205,231,158, 79, 15,155,116,164,104, 48,166,224,202,181,171,116, +109,135,109,235, 47, 69, 87, 62, 43,248, 33, 29,232,183,110,221,230,254,195,251,169,235,141,151, 58,133, 65, 95,160, 47,141,224, +213,184,251,150,137,187,216,252, 68,197, 29, 18, 3, 25,156,235, 69, 97,170, 21,206, 7,186,190,103,125,113, 66, 95, 47,147, 26, +148,173,120, 7, 41,144,178, 60,151,110, 41,185, 15, 66,218,173, 87, 85, 53, 22, 13,219,136, 91,149,252,158,134,172,172, 70, 17, + 94,111,133,182,231, 67,192, 58, 65,199,186, 4,142, 25, 92, 15, 46, 56,140,145, 32,149, 16, 45,153,201, 83, 97,229, 19,240,199, +109,227, 62, 99, 28,213,199, 58,189,140,211, 42,163, 48, 30, 21,117, 18, 94, 13,152, 82,159, 42,122,249,123,239, 29,214,202,139, + 93, 85, 5,193,203,126,111,224,145, 7, 34,214, 75,194, 93,223,185,145,152, 56, 88, 93, 98,178,209,181, 93, 77,212, 6, 23, 96, + 50,153,162, 12,148,211, 10,162, 88,115,124,242,192,102, 67,108,100,158,177, 60, 59,197, 91,217, 89,247,222,147,229,197,142, 34, +190,199,246, 45,125,215, 18,131,163,109, 26, 20,208,182,146, 38,136,214,100, 58, 99,189, 90, 50,157,205,105,123,241,226,122, 39, +191, 23,101,164,227,201,133,175,221,117, 22,231,123,154,213, 5, 89, 81,240,198,159,252, 51,238,254,242,103, 60,248,228, 93,232, + 54,220,190,117,139,201,254, 21,124, 90,191, 60,250,248, 61,150,103, 79,211, 69,236,100,156,157,114, 19,178, 50, 3, 45,249, 6, +209, 11,113, 16,173, 18,227,223, 99,170,153,116, 69, 9, 91,107,178,156,168, 21,161,239, 80, 33,121,132, 83,113, 20,124, 32,203, + 11,121,166,179, 12,147, 23,163, 96,105, 0,223,171, 4, 97,209,227,101,158,194,163,162, 79,191,103,123,138,142,176,170,129, 4, +166,205, 40,143, 87, 12,251,235, 92, 82,180,118,194,240,244, 16,112,180,141,185,186, 36,162, 83,207, 8,234,134, 67, 88, 4,123, + 82,204,139, 72, 53,147, 98, 38,132,164,228, 31, 82, 44, 83,238,130,218,166,235, 13,142, 1,217,241,134,113,181,181, 61,207,212, +214,222, 55,140,100,147, 93, 75,103,178,146,168,246, 14, 89, 92,189,198,226,218, 45,190,246,107, 63,100,190, 88, 36,235,161, 23, +177,175, 18,127,200,211, 79, 63,160,222,172, 48,218,176,127,237, 38,203,167,143,241,161, 71, 25,131, 65, 51, 89,236,211,173, 87, +228, 85, 78,223, 54, 40, 34,222,118,168,244, 57, 13,163,243,114,111,143,122,121,142, 71,113,120,253, 22,127,235, 31,254,215,124, +237, 55,127,200,107,223,253, 1, 63,255,241,191, 96,121,126, 76,232,107,112,242,174, 4, 13,202, 24, 38,243, 3,174,222,121, 9, +149,132,144,121, 81, 81, 85, 51,154,182,198,246, 13,211,233,140,117, 93,163, 35,172,207,158, 82, 22, 21,117,189, 18,232,139,119, +100,121,197,226,224,128, 44, 47, 36, 20,169, 44, 41,247, 22,152,106,134,169, 38,168, 92, 64, 90, 74, 25,242, 66,220, 77, 89,158, +141,171,194,108,136,100,245,162,149,177,206,161, 18,113, 46, 12, 88,214, 16,200,242, 60,225,102,147,118, 43,136, 48,118,151, 88, +122,121,210,243, 69, 93,216,151, 9,231,226,142,190,108,176, 11,235,228, 64,216,198, 43,171, 49,155, 3,165, 4,110, 86,148, 48, + 20, 6,189,195,121, 75, 86, 20,100, 42,137, 69,188,119, 92, 92,108,176, 55, 28,217,193,132,131,171, 11,138, 50,103,185,233, 89, +175,106,108,168,232,172,229,222,241, 25,142, 57, 55, 94,250, 26,199,247,239,242,244,195,183,209,198,143,246, 2,141,132,137, 40, +147,145,149, 21, 7,183, 95,226, 63,252,199,255, 13, 89, 81,209,219,158, 39, 15, 31,115,182,110,121,250,206, 79,233,187,142, 16, +133,154,150, 21, 5, 93,219,142,170,246,221,250, 57,124, 73,244,107,216, 77,114,219,197,195,166, 42, 44,164,144,154,161,210,218, + 85,255, 74,247,168, 40,116, 32,207, 50,158,191,118,192, 63,252,189,191,204,135, 31,127,194,187,159,220,229, 98,189,161,237, 29, +109,239,232,250, 30,235, 29, 54,117,235,206,185,241, 66, 15, 99, 40, 75, 28, 17,159,182, 23,136,195, 48,254,150,124,240,140, 91, + 47,188,196,222,254,193, 8, 25, 25, 44, 56, 42, 26,130,242,100,101,201,139, 95,125,141,207, 62,132,229,233, 83, 66, 84, 59, 15, +201,238,223, 39, 37,167, 41,120,238,249, 59,220,189,251,105,122, 32,118, 5, 61,113,188,208, 73,190,230,164,143,150,207,211, 15, +236,129,124, 28,117, 26,147,139,125, 35, 58,130, 23, 47,118,196, 83,215,107,148, 50,116,245,134,118,179, 36, 6, 39,135, 92,166, +192,167,137,140, 50,163, 29,111,248,204,157, 11, 20,121,158,108,108,189, 88, 76,242, 20,247,234, 61,206, 75, 17, 24, 16, 5,173, +117, 18, 9, 27, 92, 24, 29, 15, 33, 4, 17,213,164,255, 60, 20,119, 42, 81,235,138,178, 18, 50, 90,148,233,131,236, 4,183, 30, +222,221,240,146, 33, 90, 52, 18, 41,139, 28, 8, 9, 7, 41,227,125,107, 59, 50, 99,232,250, 78, 66, 87, 34, 20,166,160,137, 46, +185, 22,130,236,163,123, 1,195, 40,163,164,163, 26, 42,232,129,149,144,250, 87,141, 33, 32,106,252,168, 20,190,239,104,250,150, +199, 79,159,114,116,184,143,181, 75,130,117,163,170,126, 62,157, 81,247, 29,101, 53,197,213,146,202,182, 92, 55,236,205,102,216, +174,103,179,188, 96, 50,155,210,108,234,113,159,166,149,194,119, 82, 88,154,244,125,175,215,107,170,170,164,179,210,233,110,234, +205, 96,145, 16,192,204, 14,250, 55,246,129,249,254, 76,198,223, 58, 99,125,113,206, 79,254,143,255, 69,246,246,101, 73,187, 57, +231,239,253, 39,191,199,143, 94,127,137,255,225,143,222,160,109, 26,180, 86, 84,179, 61,116, 86, 82,150, 51,162, 23, 17,224,197, +197, 41, 93,189,161,107,107, 97,191,163, 48, 69, 69,158,101,172,151, 23,104,165,201, 39,179, 20,109, 41,226,159,124, 50,163,111, +106,209,221, 20, 37, 38,125, 71,133,150,136, 85,109, 68, 5,159, 37,145,157,235, 59,217,195, 78,167, 4, 39, 58, 22, 77,132,232, +241,125,122, 78,148, 78,137, 91, 70,214, 70,113,187,183,150, 43, 12, 17, 75,142,153, 17,126, 75,112,132,180,134,242,105,226, 98, +146, 6, 68,143, 99, 79,181, 83, 24,200,122,103, 23,170,181,221,207,139,126, 38,169,173, 35,168, 16, 4,123, 26, 83,113, 49,234, +125, 92,114,152,248,203, 59,250, 1, 67, 10,248, 20,200, 49,232,144,212, 48, 49, 72,207,206,240, 39, 83, 49,146,229, 21, 24,195, +244,240, 42,249,124,143, 96, 50,246,142,174,161, 76, 70,179,217,144, 38,189,227,121,146,105, 77, 32, 96,138,140, 24,146,205,181, + 42, 9, 24,190,246,205, 95,227,163, 55,127, 74,189, 60,101,115,126, 12, 65,145,151, 37, 62,244, 76,166,251,184, 96,113,125, 71, + 94,206,152, 95,191, 73,112,142,189,131, 3,154,190, 71,103, 57, 81,101,252,203,127,242,199, 76,247, 14,184,114,235, 5,238,191, +255,150,176, 56,148,146,231,209, 6,188,238,121,242,224, 51, 94,254,238,175,139, 14, 41, 57, 35, 8,142,166,222, 96,180, 33,203, + 11,190,245,205,151,248,241, 31, 63, 0,109,232,154, 53,121, 94,176,184,126,133,107, 47,188,138,235, 59, 30,127,252, 14,121,189, + 33,134,158,152, 77,152, 45,246,184, 88,175,200,148,194,247, 61,221,234,156,220, 24, 86,167, 79,201,141, 73, 82,155,129, 31, 32, +133,188, 8, 86,183,161, 90, 38, 43,164, 57, 73,124, 10,219,247,105,205, 19,208, 64,166, 53, 46,110,163,188,197,134,173, 46, 5, + 16,238, 82, 77,159,205, 66, 25,154,205, 1,207, 27,194, 51,211,167, 84,240,169, 24,228,142, 14, 17,157, 75, 65,231,156, 39,116, +242,238,149, 85, 5, 10,250,102, 67,240,158, 76,155, 76,126, 80,111, 89, 45, 47, 88, 46,111,114, 95, 53,172, 27,143, 77, 41, 98, + 89,158, 19, 54, 53,205,122,205, 36,219,227,238, 39,143,216, 52,107, 94,248,214,247, 57,121,240, 25,193,245, 72,200,143, 60,184, +160, 68,145,183,119,200, 55,127,244,183,200,202,169,140,124,187,134,174,217,160,179, 50, 17,173, 82,130, 80,100,100, 90,239,102, +171, 15, 9, 82, 38,170,203,252,246,193,182,182, 83,253, 12,148, 58,183, 51,250, 31,108, 12, 3, 32, 96,232,218,132,197,173, 40, +116,206, 87,111, 31,241,159,254,245,223,225,173,119,222,231,163,123,247, 88,215, 29,155,174,163,237,123, 58,219,211, 89,135, 75, +126,232,221,110,209,123,143,141, 91, 40,140,115,142,222,246,233,247,185, 17, 37,168,203, 41,175,126,237,235, 44,246, 15,198,160, +132,224,125,210, 13, 12,190,229,109,184,199,243,175,188,198,103, 49,178, 62, 63, 75,202,199, 93, 33,207, 24,171,197,173, 91,183, +184,127,255,222,206, 97,160,158,137,220,228,210,255, 78,171, 20,151, 42,207,160,136,223,216, 90,250,198,157,143,218,174, 44,188, +151, 78,179,111, 86,216,102,147, 24,222, 10,204, 96,203, 24,194,184,119,144,161,232, 49,184, 70,172, 84, 96, 19,113,175, 76, 63, + 94, 89,149, 88,235, 70,160,138,181,150,182,109, 37,236,103,231,115, 25, 31,236, 49,130, 85,158, 25,101, 50,161,182,169, 12,219, +123,242, 92, 14, 90,235, 60, 58, 72,145, 50,138, 2, 83, 82,147,112,161, 21,133, 1,188, 37,154, 84,173,135,136,237,251, 81,197, + 60,144,168, 98,140,152,164, 21, 41, 39,229, 56, 26,140, 97, 8, 6,218,249,115,167,233,134,188,148,113, 71,156, 40,213,124,145, +231, 76,166, 83, 90,231,104,187,142,229,114,195,180, 50, 56,219, 75,213,157, 23,180, 93, 55,230, 63,139, 64,174,160, 98,150,166, + 34, 25, 58,182,130,141, 53, 2,197,200, 76, 70,211,118,227, 5,144, 87, 21, 10, 40,136,248,190,199,197, 64, 85,148,232,244,157, + 5,165,169,138,130, 88, 41,154,166,145,117,135,247,156,158, 28, 99,187,158, 98, 50,161,179, 2,216,201,139, 10,173, 34,166,184, +201,231, 93,206,113,132, 59, 47,220,225,222,253,159, 81, 78,166,228,213,132,194, 64,219, 53,244,237,138, 96,123,154,229, 90, 54, +137, 74, 99, 55,141,140,128,171,146,122,179, 74, 23, 65,196,219, 22,116,134,170, 42, 76,111,211,164, 66,163,210,200,210, 90, 43, + 62,143,114, 66, 62,221, 35,120, 59, 34,110, 1,178,114, 34, 14, 3, 23,208, 89, 1,190, 79,153,211,253, 51,221,122, 42,226,181, + 76,227,134,127,143,183,219,145,243, 46, 71,223, 15, 90,138,212, 21,101, 89,114, 40, 40,157,252,246, 94, 86,139,121,177,163, 11, +138,130,224,221,153, 84, 26, 99, 80,169, 80, 45, 10,233, 12,189,119,224, 18,173, 77,237,140,104, 71,184, 76,144,245, 84, 18,142, +134,180,235, 29,236,174, 18,172,178, 5,226,196,200, 86,212, 58,252, 36,105,127, 62, 57,186,193,245, 59, 47,112,242,244, 17,122, + 50,161,107, 90, 38,121,197,100,190, 71, 84,242,220,102, 90, 99,135, 78, 57, 74,199,253,244,241, 35,124,178, 95,109,214,231,196, +222,163,243,140, 55,127,242,207, 8,182,167, 44, 39,204,143,174, 98,219, 6, 83, 77, 81,141,193, 69,232,211,132, 55, 43, 74,250, +182,198,213, 13, 93, 83,163,103, 51,174, 60,247, 34,143, 62,255,132,122,179,230,252,244,132,249,222, 30, 97, 8,159, 82,146,198, +136,145,226,173, 62, 59,225,209,221,143,184,118,231, 69,209,129,116, 45,117, 83, 51,153,239,113,176,127,192,100, 50,149, 44,133, +211, 99, 10,173, 8,197, 4,221,119, 60,190,127,143,168, 52,175,126,243, 59,224,191,202,197,147, 7,156,159, 61,197,247, 27,158, +220, 59, 70,155, 92,208,209, 74, 83,205,246, 49,121,198,162,154, 16,187, 22,223,181,233, 60, 11, 99,225, 63,128,188, 6, 24,215, +176, 99, 19, 93, 70, 68,103, 57, 33,233, 91, 98,210, 85, 13, 65, 51,131,248,122, 88, 69, 74,186,218,176,184, 18, 18,157,222, 9, + 79,218, 42,233,216, 70, 18,127, 73,168,217, 64, 9,244,222,203,179,229,135, 34, 51,236,228, 97, 52, 9,143,238,137,209,144,197, + 32, 35, 15,235, 29,103,231,199,124,240,145,225,202,181, 27, 84, 85, 69,211, 52,137,170,163,113, 73,184,212,186,137, 92,106,125, +143, 15,129,107, 47,188,202,195, 95, 94,160, 50,201,157,213,131, 58,211, 24, 94,249,181,223, 98,122,112, 72, 93, 55,180,109,143, + 14, 13,143, 30, 63,150, 7,192,185, 45,175, 61,249, 6,141,210, 98, 15,218, 29, 81, 4, 46,237,216,135,203, 58,236, 84, 59, 3, +128,198, 36, 33,129,218,193,153,234,144, 70,239, 70, 46, 33,165, 34,133,130,210,104,126,229,165,235,252,221, 31,253, 5,254,245, +155,111,241,217,163, 71,212, 77, 71,107, 45,189,243,244,206,138, 48, 40,161, 69,157,115, 66, 7,139, 97,244,186, 59, 79, 26,215, + 8,164,196, 89, 47, 99,120,175, 8, 42, 99,239,240,128,219, 47,189, 76, 89, 85, 56,111,229,192,208, 26, 27,100, 66, 32,234,100, + 80, 33,133,221, 36, 33,199, 75,175,127,157,187,239,191,199,250,252, 84,210,174,118, 22, 49,121, 81,240,149, 87, 94,230,227,143, + 63, 22, 5,232, 51,240,140,173,239, 54,140,127,111,140,140,194, 51,163, 9,189, 35,230, 2,252, 48,202,226,209, 24, 37,182, 24, + 27, 60, 74, 73, 7, 61, 96, 83,187,166,198,182, 53, 42,248,113,172, 62,168,119, 51,165,177,189, 37,166,160, 14,149, 58, 26, 82, + 94,120, 8,162, 25, 24,148,192,195,216,122,179,217,164,189,117,113,105,205,224,131, 8, 32, 51, 35,157,242,152, 57, 16, 3,153, + 54, 34,114, 74,184, 85,107, 45, 65,107,156,149,110,201, 37, 71, 2,201,159, 28,189, 30, 97, 70, 42, 17,151,162,130, 34,215,226, +107,198, 19,130,165,200, 75, 26,111, 41,243, 34, 77, 11,196, 82,147, 23, 57,125,234, 6,147,206,106, 84,174,135, 16, 8, 74, 22, +130,163, 98, 62, 56,136, 26,165,195,152, 68, 55,124, 27, 93,215,161,215,107, 38,139, 67,172,237,105, 90,141,210, 19, 22,243, 61, +202,178,148,139, 91,233, 84,216,165, 4,191, 16,201,203,146, 34,203,136, 70, 49,153, 76, 57, 57,126, 2, 38,103,146, 25,218,182, +193,232, 28,239,122, 34,233,185,235, 58,116,166, 9,126,208,124, 72, 49,101,116, 70, 81, 85,244,245,154,197,222, 62,139,197, 30, +171,213, 90,188,173, 90, 49,157, 77,232, 92,148,203, 50,173, 36, 98,132,197,254, 17,214,101,220,221, 88,230,133,161,200, 69, 44, +151, 85, 21,235,186, 97,125,113, 33, 17,148,222,129, 50, 56,107,177,189,167,216,155, 19, 77, 78,191,217,160,243, 60,137, 72,193, +247, 94,158,149,180,175, 52, 69, 37,163, 92,215,201,120, 61, 61, 39,209, 7, 92,179,193,148, 19, 17,215,209, 67, 94,146, 21, 5, +182,174, 69,192,228,122,217,137,218, 94,216,230,166,148, 51,100, 32, 69,170,173, 80, 50,120, 71, 72,224, 27,231,211,133, 54, 28, +168,131, 24,119, 48,141,166,201,143, 8,183, 18, 38, 59,129,154, 98, 34,254,177,179,187, 15,131,162, 35,147,194, 28,155, 46,101, + 21, 81, 74,214,114, 74, 41,148,217,190,167,158, 40,239,162, 15,224,211,110, 53, 36,200,211, 78, 50,221, 56,130,213, 59, 9,120, +105,236, 30,188, 56,105, 48, 18,229,123,245,246, 75,204, 15,175,178, 60, 59, 97, 54, 63, 68,103, 25, 7, 47,221,230,236,244,148, +253,195, 35, 33, 2,196, 32,163,101, 45,206,139, 1,238,114,245,232,136,186,204,217, 63, 56, 66,103,138,243,167,143,232,218, 30, +179,119,128,243,158, 60, 93, 77,155,122, 13, 23,199,152,114, 74,153,103,244,227, 4,209,211, 93, 92,200,250, 77, 41,166,179, 57, +139,163,171,114, 46, 38, 59,231, 24, 14, 53, 89, 80, 78, 29, 81, 25, 22, 71, 87,201,242,140,227,199,143,121,243,159,255, 19,170, +131,107, 60,247,149,175,114,120,227, 38,205,209, 85,190,241,157,239,161,180,226,232,232,128,247,222,121,155,199, 31,188,201,170, +174,185,115,231, 5, 30,126,238,217, 59,186,134,137,138,139,243, 11,206,158, 60,226,244,209,125, 76,140,216,190, 67,103, 18, 23, + 29, 99,196,119, 27,172,209,168,124,159,162,156, 80, 28, 28,145,153,156,199, 31,190,157,138,178,132,155, 69,161, 85, 42, 34,181, + 34, 6,143, 11,150,188, 40, 32, 10,224, 39,216,128,245, 81, 84,254,206, 75, 65, 31, 44, 24, 41,224,213, 96,173,212, 6, 51, 92, +215, 81,246,251,113, 88,171,196, 32,231, 68,220, 22,121,151, 46,245, 65,111, 17,116, 18, 60, 2,153,161,152,204, 40, 38,123,172, + 47, 78,100,189, 20,163, 8, 20,147, 72, 52, 4,105,220, 50,239, 44, 38,203,177,125,131,235, 29,231, 39, 79, 8,193,137, 96, 37, + 37,108, 13,150,148,224, 29,245,122, 35, 87,133, 82,132,232, 40, 23, 7,163,245, 7, 45,190, 83,101,114,102,215,158,227,206,107, +223, 98,111,255,128,179,179, 53, 39,143,239,179, 89,159, 99,219, 22,215,181, 34, 86, 24,179,166,227, 37,206,242,110,216, 75, 24, +147,213,182,106,210, 81, 85,184, 19,103, 56, 64, 82,116,138, 13,221, 85,156, 10,164, 65, 38, 9,185, 86,148, 38,227, 55,191,241, + 60,127,245,215,191,195, 79,126,246, 11, 30, 30, 63,165,238,172,236,207,221, 96, 87, 11,116,105,103, 19,119,168,111,206, 58,172, +149,125,115,103,163,236,208, 93, 24,201,107, 62, 42,138,233,130, 23, 95,121, 29, 93,108,119,115, 34,126, 9,163,162,187,239,123, +249,179,166,162,205,167, 73,131,140,155,114,238,188,252, 10,159,190,215, 38, 32,132,188,208,215,174,221,224,198,141, 91,188,241, +214,207, 71,235,218,174,248, 66,118,111, 91, 91,204,240,208,120,239,209, 42, 75,193, 61, 50,186,201,115, 61,114,199,197, 77, 32, + 93,170,243,253, 54, 32,196, 54, 4, 55,120, 55,185,100, 21,138, 49,138, 61, 58, 29, 14,104,131,242,126, 7,224,162,211, 68, 36, +237, 42,147,127, 61,238,124,231, 38,229,189,143,153, 98,195,254, 59,141,207,195,128, 32,141,208,187, 30,149,108,129,195, 63, 71, +167, 42,185,222,244,105,103, 94,226,189, 70, 41, 55, 50,146,213,142,178, 80,199, 64,166, 36, 78,210, 24, 65,189, 42,165, 36, 14, +145,116, 33, 32, 69,141, 49, 25,174,173,201,114, 77, 89,230,244,189, 31,121,248, 46, 14,249,198,189, 92,236,163, 23,126,187, 50, + 82,227,190, 85, 10, 44,103, 59, 92,223,226,209,244,105,156, 63,159, 77,169,235, 90, 4, 57, 99,244,109, 78,223,116,100,101, 73, +168,229, 80,148,157,114, 46,206,138,222,178,222,172,152, 77,231, 16, 3,235,181,199,104, 35, 54,177,224,241,214, 50,219,147,169, + 80,219,117,148, 89, 54,130,137,170,249, 2, 61,157,145, 25,195,190,201, 88, 47,151,201,250,164, 33, 4,108,232,153, 76,230, 68, +173,200,179,130,182,174, 57, 59, 57,193,114, 5, 61, 45,121,120,239, 83,166, 69, 73,116, 82, 68, 76,167, 83,234,205, 26,235, 28, + 89,154,158, 77, 39, 21,109, 93,227,194, 18,141,134,178, 66, 35,252,124,147, 23, 2,183, 34,226,189, 18, 74, 37,242,215, 16, 13, + 69, 89, 98,187, 14,101, 52, 58,203,112,182, 69,117,129, 0, 20, 70,211, 55, 29, 42,234,164,242,150,117,145,174,166,178,130, 81, + 98,111,199,203, 30, 61, 58, 55, 10,138,242,178, 74,217, 21, 74,138,195, 29,161,210, 54,131, 34, 36, 23,132, 20,161,193, 89,176, + 18,206,237,147,170, 94, 33,197,192,176, 19,143,131,202, 89,128,155, 99, 62,121,140, 91,219,227,229,228,200, 48, 78,208,198,233, + 64,186, 24,131, 26, 14,242,237, 25, 23,119,224, 91,227, 59, 77,130,244,144, 66,178,162,230,224,214,243,232,217,130,213, 90,236, + 95,117, 93,179, 56, 56,228,193,199, 31, 50,153,237, 49, 63,186, 62, 34,164, 65,177,127,112, 64, 91, 55, 16, 21, 23, 39, 79, 57, +189,184,224,112,177,199,143,126,247,119,249,222,215, 95,230,127,253,167,255,156, 55,255,228,159,115,118,124, 76,110, 10, 86,231, +167,168, 24, 80,125, 39, 46,139, 76,210,252,242,114, 74, 87,175,232,214,107,208, 6,151,154, 14,231,182,225, 41,145, 72,119,113, +202, 47,255,236, 79,152, 31, 28,114,116,227, 57, 92,219, 99,140,226,124,121,142,111,123, 38,179, 25, 46, 4,170,194,112,255,189, +159,241,240,227,138,124, 50,225,231,255,226,255,226,187,191,249,219,132, 31,252, 69, 30,222,253,132,186,243, 76,170, 9,159,191, +255, 22,147,217,158,232,167, 92,207,131, 15,222,165,111, 86, 76,247,246,165,184,110,164, 88,115,193, 19,108, 35,194,105,215,227, +250, 6, 93, 78,169,235,134,201, 94,193,213,231, 95,230,244,222,199, 50,177, 12, 1,157,153,209,143, 31,163, 98,255,250, 45, 54, +171, 11,156,181,152,172,164,172, 38, 28, 93,187,150, 82, 55, 97,115,126,130,109, 54, 82, 56,244, 29, 90,103,194,108,239, 54,224, +210,244, 38,203,100,247,158,154,231, 65,247, 17,113,233, 78, 96, 20,109,142,148,200,212,208,128,168,238,163,146,105, 72,150,222, +137,220,104,122,103, 49, 90,227,108,135,114,201,142,153,118,241,153,117, 22,147,231, 18,241, 25, 35,189,237,185, 56, 59, 27, 17, +123,243,197, 62, 93, 39,163,103,147, 14,234,188, 42, 96, 37, 73, 93,179,131, 35,130, 2,147, 41,188,151,253,188,201, 74,190,254, +131,191,204,222,193,129,204,250,219, 53,245,250,140,174,149,180, 42, 63, 28, 84,105,151, 48,140,147, 92, 8,151,246, 13,195, 62, + 44, 68,208, 81, 93, 2,213, 12, 42,246, 1, 47, 57, 92, 94,227,152,126,184,128,140, 38,250,128, 73,222,232, 92,121,254,210,183, + 95,230,183,190,245, 85,126,242,231, 63,227,201,233, 9,117, 47,222,243,206, 90,185,212,173,160, 57,189,119,120,151,130, 84,162, + 8, 41,172,115,216,222,211,245, 46,197,164, 58,130,219,134, 71, 22,147, 61, 94,120,245,117, 24,226, 51,147,246, 33,203, 76,234, +200,212, 37, 74,208,208, 77,196, 97,140,230,229,210,213,202,240,237,239,253, 6,239,191,245, 38, 90, 43,158,187,115,135,243,243, +115,222,120,235,231, 56,103,199,139,239,210,142, 38,170, 52, 58,122, 54,223, 30,162, 26,246,127,134, 44,106,148, 15, 68,207,184, +174, 32,253,255,114,157,209,245, 29,202, 54,120,219,143, 15,222,238,197, 43, 47, 19,146,129, 14,219, 16,145, 36,114,116,130, 56, +146,181, 77, 31,200,203, 28,149, 4,123,206,187,237,120, 52, 72,246,182,245, 29,244,137, 63,111, 51, 98,234, 78,117,178,192,141, +161, 10, 59, 34, 34,249,108, 53,125,111,153, 76, 12,155,218,147,231, 37, 33, 56,116, 52, 18,198,144, 16, 59, 67,245,107,148,102, + 54,157, 74,119, 27, 60, 74,103,108,234,134,162, 16, 75, 79, 76, 69,142, 82,138,206, 89,124,136,148,101,158,124,202, 34,236,180, +206, 74,170,158, 23, 10,160,140,222, 24,173, 42, 32,197,238, 64,255,146,122, 34, 82,102,197,184,151,117, 38, 77, 44,214, 53,101, +145, 97, 93,143,235,123,202,178,146,162,176,146,245, 84,189, 89,227,157, 64,125,116, 12,180,169,216,173,202,146,174, 93,163, 77, +193,193,213,107, 4,160,239, 58,209,177, 32,227,245,106, 90, 73,174, 61, 2, 40, 9,198,160,179,146,255,252,191,253,239,248,249, + 31,255, 51,254,244, 95,254,145, 8,214,188,195, 7, 77,136,158,197,222, 62,182,109,200,116,134,119, 45, 23,199, 79, 88,157, 93, +112,239, 73,141,114,142,197, 98,159,183,255,236,199,204, 22,251,244,109,139,221,172, 49, 69, 65, 62,153, 98, 55, 27,138,233,140, +222, 89,116, 8, 20,113, 34, 29,104, 83, 19,163, 99,114,112, 69,158,165,190,163,247, 14, 92,130,199,132,128, 46, 39,168,104,136, +198,144, 77, 11,201,138, 70,130, 42,212, 64, 94, 76, 69,112,182,216,147,231,205,121, 92,240,224, 44,193, 9,166, 83,246,221, 30, +111, 59,140, 86,232,172, 16,190,126, 90,227, 13,138,226,232, 29, 58,203, 83,119,239,112,125, 75,116, 1,163, 21,190,107,241,151, + 36,202,140,174,146,160, 6, 0,137, 26,237, 82,146,230, 21, 70, 84,237,144,121, 64, 4, 53,236,216, 47,217,226,146,246,104, 80, +188,234, 65,166,183, 5,219,124,193,237,163,212, 37,224,166, 34, 1,106,140,225,240,214,115,204,110,220, 98,115,242,132,235, 47, +188, 74,177,216,103,249,232, 1,174,239,201,243,130,114, 54, 35, 6,207,242,228,152,114, 34, 73,123, 81,105, 38,179, 41,103,109, +205,197,241, 67, 50, 13, 55, 94,122,141,175,255,214,143,248,213, 87,175, 48,191,243, 50,255,253,147, 83,138,217,125, 78, 62,255, + 72,214, 63,121,193,252,106, 70,104, 55, 44, 79,159,208, 36,129, 98, 57,219, 67,231,149,104, 67,172, 37,203,115,138,170,196,104, + 41,242,108,215,115,247,189,119, 56,188,113,155,197,108, 74, 80,154,165, 63, 38,159,204, 56,212,154,207,223,123,139, 96, 59,170, +195, 43,248,174,166,111, 26,174,238, 31,225, 81,196,174,230,173,159,254, 9, 79, 30,223, 99,179, 92,115,254,240, 83,113, 0, 52, + 29,171,211, 99,153,100,205,246,216, 91,236,211, 52, 23, 20,101,142,142, 21,209, 7,154,245,121,138, 14, 55, 20, 69,137,183, 29, +118,185,196, 21, 45, 69, 89,176,172,215, 28, 92,187,129,201, 43,156, 93,146,231, 89, 10,104,114,228,211, 57,123, 87,174,179,218, + 52,152,162, 16,205,144,235,105, 87, 61,247, 87,231,204,174,220,192,152,140, 43, 55,158,231,241,231, 31,209, 53,205,104,171, 46, +247,175,160, 54, 25,120,209,121,216,182, 29, 27, 21,239,182, 81,201, 36,173,213,136,185, 77, 28, 9,209,139, 57,225,123, 88, 11, + 74, 51, 63,188,138,235, 58,218,174,147,201,128,120,209,137, 49, 80,228,197,152,191,224,157, 76, 38, 50,103,123,138,178, 74,138, +209,136, 11, 30,229, 68,221, 13,208,157,244,100,229,132,178,154,140,151,145,182, 33,117,247, 29, 89,150,147, 77,102,216,149, 67, + 43, 15,153,230,240,165,175,178,119,253, 38, 93,211, 18, 9,156,159, 29,167,156,104,141,119, 30,215,181,226,197, 75, 88,189,173, + 71,239,139,106,246, 24,159,137, 96,221, 65,204,142,248,188, 52,118, 85, 59,216,167, 44,117,236, 25, 74, 70,120, 70, 83,233,200, +239,124,251,235,252,234,107, 47,240,227,127,253, 6, 39,231, 23,212, 86, 70,149, 93, 26,223,202, 47, 17,114,141, 23,186,247,216, +224,113,214,210,247, 61, 93,215,139,128, 46, 68,188,143, 73, 12,165,153,204, 15,120,254,229, 87, 65,103, 35, 54,115,248,153, 92, +242,154,238,166,156, 41,149, 66, 85,180, 78, 10, 76, 18,224, 64, 2, 80,110,222,188,197, 43, 47,188,200,219,111,255,146,247, 63, +120,159,166, 89, 75, 37, 10,151,186,241, 93, 33,221, 86, 45, 25, 71,166,251, 48,254,210, 70,141, 93,198,144, 92,164, 52,163, 2, + 28,133,176,138,187, 6,111,187,241,243,189,132,245, 77,246, 60,177,124,196,113, 31, 63, 70,230, 42, 9,198, 25,108, 74, 74,107, + 76,250, 94,131, 19, 92,175, 31, 83,219, 96, 82, 78, 40,138, 41, 69,145, 39,129,157,197, 58,143, 9, 89, 18, 61,169,109,250, 94, + 98,159, 75, 76, 34, 99,154, 95, 85, 85, 88,103, 89,215, 46,141,200,183,246,200,209,118,167, 34, 89, 38,159,203,100,182, 79,219, + 54,156,158, 95, 80,228, 66,115, 19,193, 18,152, 44,167,222, 52, 96, 36, 46, 54,203, 50,177, 39, 70,228,187, 78,147,131, 1, 63, +169,148, 30,253,249,234,153,116,180,193, 35,139, 74, 41, 81, 49,226,209,228, 64, 52, 74,194, 31, 14, 22,163,227, 99,248,115, 74, +218,157,128,101, 68, 32, 35,234,127, 23, 35, 69, 81,224,108,143,201, 75,178,188,196,152, 12,219,247,104, 34,157,237,100,220,105, + 61,237,102, 13, 90,227,243,156,216,247, 76,167,123, 28,220,124,158,135, 23, 1,125,235,101, 50, 35, 65, 53,104, 45,221,140,117, +100,123, 19,202,131, 5,237,234,148, 44,155, 18,154, 53,203, 39,247,249,249, 79, 26,126,237,123,223,224,218,237,231,120,242,240, + 51,166,199, 2,237,153, 92,185, 66, 83,215,226,122,169, 38,212,155, 13,224,164,216,212, 25,237,122, 73, 94,230,228,249, 28,147, + 85,180,205,169,248,168,123, 75, 94, 85,178, 46, 75,223,143,237, 58, 76,102,232,235,150,201,254, 2, 91, 55, 4, 21, 49,121, 70, + 81,150,178, 2,219,172, 19, 35,163,199,118, 77,226, 44, 10,168,197,183, 50,221, 32,121,211,125,240, 24, 72, 46, 15, 57,103, 84, +112,194, 91, 0,148,115,152,164,192, 15, 56, 84,212,226,249, 86,131, 69, 76,143, 0,146,113,138, 20,197, 22,154, 37, 37,181, 75, + 10,114,162,219,166, 81,142,108,236, 45, 3,227,146,131, 37,237, 83,135,169, 84,220,217,241,127,169,152,106,107,222,217,118,114, + 8,191,255,224,197,175, 9, 86,181,200, 89,249,192,106,185,162,176, 61,235,179, 99, 76, 81,162,140, 97,125,118,198,163, 79, 63, +230,224,230, 45,218,122,133, 49,154,253,120,136,214, 50,193, 57,125,120, 31,215,247,204, 15,175,243,193,123,159,203,132, 40, 26, +190,254, 27,191,195,189,255,233,127,148,212, 72,219,210,156, 62,102, 54,159, 19,141, 88, 42,189,179, 84,243, 61,186,182, 37,116, +231,236, 29, 94, 35,186, 62,229,138,151, 40,109, 56,190,119,151,211, 71, 15,184,118,227, 22,235,139, 11, 62,254,248, 67,174, 30, + 93,197,219,142,227,251,159, 82, 47,207, 40,103,251, 20,211, 25,231,199, 79,184,114,231,121,138, 98,194,227,187, 31,145,149, 37, +179,163, 43,168,182,229,241, 39,239,179, 57,123, 58,134, 47,133,190, 39,248,158,102, 89,227,250,154,213,233,147,148,134,105,209, +232,196,120, 7,103, 27,202,249, 62, 49, 56,114, 3, 69, 49,197,111,106, 54,231,167,228,213,132,122,189, 38, 95,236,211,119,155, +212,217, 71,242,106, 66, 83, 55, 52,245, 93,180,138,184, 32,194, 77,103, 59,116,150,227,173,149, 38,197,228, 60,168, 87,204,175, +221,230, 32,203,201, 51,195,163,187, 31, 81,106,205,166,105, 48,229,148,201,193, 30,251,121,198,249,147,135,233, 29,247,232,129, +227,158,222,121,159,166,155, 62,132, 75,107, 86,121,182, 50,170,197, 2,147, 27,154,149, 76,176,134,251,114,120, 46,109,215,146, +151, 69,210, 17,201, 26, 55,243,174,151, 17,153, 78,162,142, 40,187,205, 76, 39, 54,120, 12, 16,253,184, 15,202,139,156,233,116, + 70,215,214, 18, 91,231, 28,211,253, 3, 46,214, 75,162, 50,228,229,156, 87,191,251,125,136,145,174, 94,177, 90, 45, 89, 47,207, +119,242,184,165, 83,223,221, 31, 12,187,223, 81,245, 30,183, 23,210,229,209,172,122, 6,204,162,198,204,111,118, 16,176, 49,141, +139,115, 45,163, 96,173, 2,149,134, 31,253,234,107,124,227,165,155,252, 63, 63,251, 5,199,231, 75,218,116,137,143, 29,186,243, + 35,137,203, 37,155,154, 79,236,108,235, 44, 93,223,143, 0, 26,231, 60, 62,113,220, 81,138,233,222, 33, 47,190,250, 58,166, 40, + 70,108,173, 26,119,197, 97, 20,246, 13, 97, 30,195,139,107,173,197,107, 77,151, 58, 17,147,246,104,218, 40,222,255,232, 35,206, +143,143, 57,121,250, 68,208,172, 33, 25, 59,241, 59,182, 8, 70,133,238,128, 54,189,100,169, 8,106, 75,239, 75,151,176, 73,118, + 58, 83,228, 73,113, 26,100,135,212,247, 68,215, 17,146,126,226,217,220,231,221,159,121,152,140,236, 68, 99,165, 75,219,164,121, + 82, 82,130,166,239,220,104, 13, 90, 16,171, 99, 28,105,114, 28, 25,163, 69,160,150,145, 44, 76, 34, 54, 11,131,127,126, 7,198, + 16, 19,118, 52, 36,205,128,243,158,243,243, 53, 81, 23,162, 54, 31,196,133, 81, 95,210, 96,164,108, 45,186,206,209,116, 23,148, + 69,206,222, 98, 38, 1, 41, 49,160,117,206, 16,212,187,183,191,160,235, 59,233,192,245, 54,210,179,200,114,177,219,245, 66,125, + 26,138,169,109,245, 61,228,154,196,113,228, 63, 20, 85, 33,133, 62, 40,165,241, 86,209,183,138,144,121,234,186, 96, 50, 21, 75, + 95,158, 44, 42,222, 58,242,201, 68,226, 94, 11, 89, 95,204,230, 19, 17,130,134,136,239, 26, 52,162,103, 8,108,198,149,134, 41, + 74,218,205,122, 28,249, 85,213,132,195,107,215, 68, 53,139, 98,255,230,109,154, 77, 13,222,147,103, 21,101, 9, 94, 41,170, 73, +201,115, 55,111,176,152,237,113,245,202,117,170, 42, 99, 58,157,210,245,150,201, 12, 96,195,241,219,111,178,167, 12,207, 31, 29, +242,254, 7,239,162,179,140,229,106, 45, 84, 35,167, 48,121, 65, 81, 58,108,221,163,156, 99,179, 57, 37, 83, 17, 91,247,244, 62, + 82, 76,231, 68, 47,211,173,114,239, 0, 85, 84, 52,245,154,204,128,206, 10,242, 73, 37,221,114, 85, 98,173,199,148, 21, 49,138, +111,184, 61, 63,195,187,142,124,190, 64, 89, 75,223,108,208, 69, 65,244,160,243,156,232, 28,249,100,134,201,139,132, 80,214,100, +222, 74,162, 87, 18,186,129,136, 5,163,119,105,167,169,229, 45,218,161,116,237,146, 7, 7,112, 85, 24,248,117,218, 80,236, 29, +146,229, 57, 54,229, 10,204,102,115,121,127,251, 78, 86, 5,232,145,139,176,155,176,198, 86,233,178,179,150, 81, 91, 16,212,176, + 74, 28, 69,191,113,220,221,203,152, 63,185, 89,130,128,238,181, 82,148, 7,215,176,109,205,139,191,242, 45, 62,255,229,155, 66, + 90,244, 29, 89, 54,167,174,123,202, 16, 81, 24, 44,158, 95,252,203,127,202, 55,127,248, 35,174,191,248, 10, 23,199, 79, 57,123, +252, 0, 85, 84,204, 38, 21,231, 39, 39,168,224,200,202,130,102,189,230,157, 55, 62, 96,113,116,192,100, 58,167, 71,166, 70,155, + 51, 79, 94,228,180,117, 67, 49,147,207,169,156,204,112,182, 23, 81,161, 87,244,205, 10,147, 21,180,155,154, 96,206, 8,109,205, +187,255,239,143,137, 94, 88,236,222,119, 76,247, 14, 56, 59,125, 66, 94, 78,152,237, 29,176, 60,126,194,116,230,105,235,134,253, +107,183,233, 55, 27, 84,166,152, 46, 22, 88,231, 56,127,114, 76,166,100,202, 72,242,175,120, 47, 49,150, 33,126,235,103,147, 0, + 0, 32, 0, 73, 68, 65, 84,145,241, 66, 47, 83, 55,235, 3,173,247, 18,143, 92, 77,136, 86,180, 36,193, 73, 86,133,202, 12,218, + 59, 40, 52,186,207,209, 40,234,211, 39, 84,211,153, 56,117, 38, 51,170,204,224,162, 34, 79,130, 92,219, 53,204,247, 15,101,130, +231, 39, 41, 22,184,166, 62, 57,134,225,156,246,142,147,205,146,217,124,159,163,219, 47,210,110,150, 20,243, 25, 6,133,239, 91, +124,121,192,244,232, 26,205,217, 9, 33,133, 30,133,116,207,146, 66,150,134,103, 35, 38, 33, 53, 73,255,161,148, 65,101, 37,117, +221, 18,130, 5, 47, 40,229,129, 34, 24,135,230,201, 90,178,114, 2, 78,161, 99, 36, 11, 78, 48,121, 58,203, 8,174, 79, 88, 76, +233,194,108,218, 57, 5, 31,164, 74, 67, 49,157,207, 88, 28,236,209,187,142,102,179,130,232,201,171,169, 96, 42,209,220,249,198, +247, 80,121,133,237, 90,188,214, 50,198, 14,113,199, 56, 47,201, 53, 90,105, 73, 2, 75,151,176, 74,132,167,225, 2, 28, 46,191, +225,178,215, 73, 73, 28,158, 25,175,135,103,140,253, 99,230, 91,234,148, 53,145, 60, 6,254,202,175,125,141, 87,111, 94,229,207, +223,120,139,211,243, 37,173,243, 88,231,147, 40,110,184,208,229, 2, 23, 17,220,224,137,246,116, 86,178,207,219, 86,126,245, 54, +161,252,162,248, 44,103,139, 67,158,255,202,171, 40,147, 39,144,137,194,169, 65, 97, 26,198, 76,242,203, 62,237,237,203, 63, 8, +253, 68, 81,158, 68,101, 41, 84,225,224,234, 85,154,174,195,159,157,226,172,144,224, 37,248,101, 11,154, 25,184,248, 90, 15,158, +126,189, 3, 60, 48,137, 80,149,246,212,128,245,110,228,130, 15,209,109,193, 57,202, 76, 83,119,237, 54,130,240,223,240,127,187, + 76,129,225,187,113,206, 97,244,206,119,160, 52, 70,169, 49, 83,219, 90,187,165,132, 13, 63, 51, 34,236,176, 93, 75,112,158,162, + 44, 49, 69,150, 14, 71, 81,153,102,137,181, 62,216,210, 66,240,137, 84,231,197, 51,171, 4,185,218, 39, 46,187,210,195,103,172, + 47,157,170, 49,249,125, 5,145,171,137,193,211, 54,109,218,253,217, 17,196,227, 98, 36,246, 93,210,102, 4,130, 11, 99,238,124, +212,194,179, 47, 39, 21,125,107, 89,175,219,157,176,133,203,120,200,241, 32, 87,105,175, 91,228, 56,140,168,110,181, 22, 11, 86, +140,212,117,141, 41, 36, 66,213,118, 34,208,243,222,210,180, 66, 64,235,109, 47,140,252,245, 5,104, 67, 53,157, 97,178,146,166, +105, 89, 44,166,116, 93, 77,179, 92, 10,104, 36, 69, 74, 18,163,140,152,163,199,181, 45, 89, 89, 81,100, 57,139,197, 33, 83, 19, +184,121,109,159,151,255,202,143,184,121,253, 10, 85, 53,225,236,244,148, 7, 15, 30,240,244,244,148,183,127,249, 11, 30, 63,126, +194,197,122, 69,151,128, 35, 89, 94,224, 81,216,118,195,164,154,112, 84, 85,108,186, 14,242,156,182,235, 8,182, 97,243,244, 33, +138, 64,187, 90, 82,149, 5,161,235,105, 92,143, 34,144,103,133,136, 45, 21,162,169,233, 91,178,178, 36, 43, 43,130,202,201,139, + 10,215,247,100,101,142,106, 35,209, 54,226,205,159, 78,112,125,143,201, 53, 89, 54,167, 44, 43, 86,155, 53,198,228,216, 70,254, +251,232, 83, 99,224, 3,125, 16,157, 73,244, 33,229,130, 27, 84,148, 67,116,240, 36, 71, 21,183,120,217, 24, 19,113, 49, 38, 60, +103,216, 74,204,119, 9,114,218, 48, 59,186,138, 79,174, 14, 83,150, 20, 38,195,246, 22, 99,114,178, 89, 65, 17,231,184,122,141, +247,189,124,231, 73,168,183,203,143,103, 87,185,126,169, 27,223,157,173,139,198, 97, 36,108, 2,154, 48,230,163,155,168,136, 89, + 69,145, 23,152,178,226,209,103,159, 11, 3,221, 59,206,238,223,103,249,248, 49, 58,207,113, 77, 75, 8,158, 98, 58,193,118, 45, +239,253,249, 79, 56,189,255, 57,251, 55,238, 80, 78, 38,116, 93,205,253, 15,223,193,117, 27,166,211, 25,127,246,135,255, 27, 95, +253,238,111,114,116,227, 57,178,204, 80,204, 22, 28, 46, 14,248,232,211, 15,241,222, 51,223,191,194,242,233, 35, 92,221, 80,237, +205,105,235, 84,196, 16, 41,102, 11, 22, 87,142, 88, 47,151,248,213,138,216,119,252,248,127,255,159, 49,153, 32,130,171,178,164, + 42, 14, 56,125,122,159,249,209, 85,192,177, 58,125, 66,166, 21,182,109, 41,231, 11,178, 34,163,113,176,126,248,153,196,192,102, + 5, 58,207,132,243,129,193,246,141, 48, 9, 18,253, 13, 43,161, 74, 33,207, 69,152,171, 21, 89,169,133,182,215, 59, 84, 89,162, +130,176, 38,242, 65,195,148, 11,207, 98,178,191,143, 15,112,176,191, 79,125,113,198,100, 49,199,118, 22,227, 17, 30,188,109, 41, +230,115, 80,153,112, 67,240,184,214, 82,204,166,216,190, 99,178, 56,144,130, 63, 70,130,237, 40,138, 18,235,122, 46,158, 62,144, +226,249,202, 45,150, 39,143,137, 26,234,139, 51, 14,174,222, 64, 21, 83,150,247, 62,148,169,204,240, 61, 15,162,239, 49, 88,204, +108,207,111, 34, 89, 53,197,118, 29,190,171, 9, 33,146, 23,165, 56,205,124, 0, 31, 49,166, 20, 1,118,140,116,109,195,245,231, +158,103,185,188, 32, 3,112,182, 39,207,115,124,155, 82,140, 70,230,178, 92, 2,193,121,154,186,230,234,205,155, 20, 85,197,141, +235, 11,188,179,172, 46,206,133,139,107,114,136, 80,236, 31,242,252,107,223,192,228, 57,206, 89,234,141,140,217, 69,233,157, 20, +238, 68,220,224, 5, 38,224,113,104, 50, 66,144,238,207,164, 17,244, 32, 44, 24,254,208,121,150,225,158,205,102, 31,168, 59,195, +152,219,139,178, 80,167, 49,132, 81,145, 34, 51,252,238,247,191,193,203,215, 15,249,233,219,239,114,124,177,150, 93,184, 31, 46, +245,173, 48,206,122, 47,248, 83,239,101,204, 27,124,218,175, 91,186,222,210,119, 78,226, 94, 19, 23, 66,105,205,116,126,196, 43, +175,127, 93, 68, 64, 32,182, 44, 32,186, 33,157, 42,209,219, 50,177, 97,149,101, 65, 8,158,222,246,228,153,128, 40, 38,149,248, +159, 7, 81,222,174, 15, 54,160,184,241,220,109,130,247,172, 47,206,240,110,184,216,253, 14, 57,110,123,201,199, 4,130, 25,198, +124,146,238, 22, 68,196,152,132,143,104,177,103,121,229, 71,107, 83,149, 27,214,203,243,157, 49,208,151,231, 60,147, 82,221,118, + 67,123, 6,200, 79, 8, 17,103,211, 5,236, 35,121,110, 80, 90, 44,109, 38,217,246,134, 88, 92,175, 52,166,170,200,242,156,178, + 40, 83,101, 10,222,249,203,252,108,173,200,116,158, 72,131, 73, 45,140, 32, 38, 93,114, 29,216,190, 39,102, 85, 42,156,134,174, +222,143,107,130, 33,201,111,184,168,157,239,233,122,217, 99, 9,111, 64, 34, 90,135,213,192,192,129,215, 74, 73, 88,141,113,151, +199,236, 94,145, 23, 25,101, 89,176,217,212,255,246, 80,237, 4, 22,233,218,142,108,190,128, 86, 44, 88, 58, 4,233, 20,203,146, +190,237,216,155,207,200,114,161, 12, 42,163,177, 77, 67, 52,154, 98, 58, 19,136, 9,157, 80,231,154, 13,121, 53,165, 42, 13,103, + 79, 31, 18,134, 85, 64,215,203,187, 86, 24, 10,147, 81,230, 5, 55, 14, 22,188,246,202,203,188,250,202,171, 92,189,114, 68, 54, +153,243,232,179, 95,112,239,225, 67, 62,249,252, 83, 30,125,126, 95,190,243, 40,130,207,224, 4,236, 19,188,172, 70,226,238,193, + 3,184,224, 57, 61,125, 74,232, 29, 74, 27,246,239,188, 68,116,142,254,226,140,110,181, 68,107, 17, 70,246, 93,155, 64, 84,194, + 14,176,209,166, 76,119, 5,222,226,189, 67, 11,228, 0,163,229, 29,192,121,156,237,133,205, 94, 77,161,174,241, 93, 79,232,122, + 52, 80, 30,236,179, 89, 94,176,152, 47,216,212, 27,178,178, 32, 4,135,171, 91, 76, 85,166, 51,200,165,116, 56,145,176, 73,151, +230, 80,105,106,166,180, 92,142,243,253, 35, 54,235,117, 18,129, 14,234,198,144, 82, 91,147,134,103, 27,228,142, 46, 75,102, 87, +175,211,174, 86,184,182,147,245,161,113,152, 20,182,163, 50, 77,183,218, 80, 45, 14,217, 92,156,130,239, 18, 77,143,173, 56,110, + 55,114,117,135, 26,169, 7,167,199, 72,132, 19, 75,168, 79,228, 50,165, 53, 58,229, 38, 68, 4,172,115,229,246, 11, 52,235, 37, + 87,111, 61, 71, 95,183, 76, 23,123,156, 63,252,140,126, 85, 83, 93, 57, 32,223, 59,226,224,232, 10, 58,192,217,249, 9, 89,211, +129,247,156, 60,186,199,201,227, 7,180,245,138, 44,175,176,125, 71,240,150, 60, 43,113,161,229,141,255,251,255,228,250,243, 47, +115,251,229,175,179,119,112, 72,223,183, 2, 21,242, 61, 23,247, 62, 97,126,116,141,233,193, 1,203,227, 83,113, 34, 36, 43,149, +175, 47, 56,237, 90,129,186,104, 18, 42,248,156,195, 91,207, 99,148, 98,117,246,132,117, 8,244,137,143,241,244,163,247,152,236, +237,179, 56, 60, 98,117,126, 54, 6,185, 52,199,143, 49,101,133,242, 1,165,197,201, 68,128, 24, 44, 89,150, 19, 8,244,109,131, +209, 97, 11,118, 73, 62,127,121,246,133,172, 22,173, 69,225,152, 47, 22, 52,117, 43,169,105, 42,210,246, 13,209, 71,154, 20,123, +124,124,113,134,173, 87, 40, 5, 89, 49, 33,102, 17,173, 34, 36, 90,163, 46, 10,209, 74,232,140, 98,146, 37,127,186,162, 89,175, + 41,170,138, 16, 28,109, 43,193, 78, 98, 75,189,192, 7,207, 34,191,201,193,181,231, 56,123,252, 0,147,103, 52,109, 3, 10, 22, + 87,110,176, 60,121, 50, 6, 8,145,184, 7, 74,171,157,105,132, 18,209, 49,164, 84,206, 20, 45,174,181,228, 42, 36,224, 77, 89, +205,176,109,147,116, 28, 25,202,119, 92, 28, 31, 19,108, 47,150, 54,217,209,165, 81,172,243, 40,187,225,252,226,140,232, 44,125, +103,153,204, 23,120,219,224,219, 13,123,251,251, 44,114, 69,115,113, 65,115,113,142,237, 91,148, 23,186,211,141, 87,127,133,147, +243, 51,202,114, 34, 35, 45,160,109,219,145, 32, 6,138,205,234, 12,163,227, 40,208, 50, 81,227,198,140,112, 63, 50,122,119, 19, +216,132,238,227, 47,153,245, 7,210,220, 24,205, 58,166, 26, 41, 9,152, 0, 74, 13,191,251, 27, 95,231,165,107, 7,252,244,237, +119, 57,185, 88,210,165, 32, 22,235,131, 64,101, 6,171,154,115,120, 39,208, 20,235, 29,125,194,191,118, 93, 71,215, 89,249,229, + 44, 54,101,110,163, 21,139,195, 43,188,244,213,175, 17,181,162,183, 2,191,232,109,155,128, 44,169, 91, 54,154, 34,151,160,145, +233,180, 20,214,122, 20, 60,232, 16, 54, 99,157, 8, 76, 76,102,100,172,239,253, 88,189, 77,170, 10,165, 20,207,189,248, 34,159, +125,226,217,156, 47, 83,241, 98, 80,218,239,116,233,122,136, 1,130, 32,159,137, 73, 7,178, 28,176, 59,248,221, 8,133,201,196, +158,215,247,236,205, 42, 46,206,207, 46, 93,232,207,118,228,113,199,105, 48, 92,206,195,229,206,232, 88,144,113,238,192,234,118, +222, 83,152,124,236,212, 81,160, 82, 74, 86,215,123,166, 51, 67,136,242, 89, 75, 84,135, 65,231,122, 27,169, 27, 2,222, 37,223, +104, 98, 97,199, 24,232,157, 37, 88,199,102,179,150,139, 36, 47,105,221,150,210, 52,216,108, 96,187,167,142, 41,150,179,237, 68, +209, 28,162,236, 85,135, 92,243, 49,145,109, 80, 28,251,196, 25, 80, 58,233, 65,242, 81,125, 76, 16, 0, 69, 81, 21,212, 77, 61, +134,198,124, 49, 83, 91,145,153,140,197,193, 33,231,203, 85,154, 22,196,116, 16,201,147,237,218, 38,249,225,115, 98,204,196,173, +161, 20,139,131,125,250,174,195,164,208,139,253,249,140,190,107,105,234, 13, 69, 46,202,239,214, 71, 22,211,138,233,228, 64,146, +197,181,102,177, 88,176,183, 55,231,202,149, 43, 88,107, 57, 59, 61,227, 15,255,240, 15,121,122,124, 76,239, 93, 98, 44,216,244, +188, 91,194, 78, 40,207, 16,116, 17, 99,196, 39,178,219, 46,228, 60,142,241,146,178, 18, 57,254,248, 61,170,217,148,250,226, 20, +237, 21, 62, 6,200,140,144,193, 84, 18,232,121, 9, 6, 10,182, 67,169, 82,220, 30,209,163, 98, 78,187, 94, 98,108,207,180,156, + 72, 7,141,194,214, 13,217,164, 76,197, 68, 96,126,112,200,242,248, 17,205,234, 12, 99, 50,106,231,168,230,123,236, 29, 94,161, + 93,111, 88, 47,143,137, 14,233, 86, 93,143, 87,113, 27, 20, 37, 3, 83,124,244,130, 9,205, 10, 17, 80,230, 37,218, 52,168,144, +145, 87, 83, 1,237, 52,235,244,189,123,166,179, 57,171,243,179,244, 89, 4,242, 98,194,234,248, 24,239,122,166, 7,251,228,179, + 9, 33, 68,138,201,148,104, 29,206, 89,242,178, 32,120,139, 41, 38,184,214,166,127,191,223, 82, 29,119, 86,139, 99, 42, 98,132, + 24,117,194, 67,169,241,204, 80,169, 57,136, 99, 6,183, 17, 77, 33,194, 12,105,215, 43, 22,215,110,209,247,158,217,193,130,227, +135, 79, 41,231, 11,170,131, 43,156,124,122,151,105,221,209,157,159, 51,217,219,227,197,215,191, 77,140,240,224,163,119,105,154, + 53,121,105,208, 33,146,155,140,217,245, 3, 66,215,225,131,101,177,127,192,201,131,123, 60,250,224,151, 60,248,224, 29,204,100, + 70,119,113,142, 93,159, 17,108,155,138,151,138,222, 5,170,171, 87,232, 47,150,100,113,104, 2,197,177,211,183, 45,121, 53,101, +121,246,132,104, 45,255, 31,107,111,214,107,217,118,158,231, 61,163,155,221, 90,187,173,230, 84,157,150,189, 72,217, 82, 68, 67, +145, 34,201,177, 13, 27, 70,236, 0, 1,114, 23, 36, 65,126, 67,174,114,175,235,252,134,252,132, 24, 72,144,139, 64, 18,226, 8, +233,164,216,162,104, 89,148, 68,137, 61, 79, 91,221,110, 86, 55,155,209,229,226, 27,115,238,181,235, 20, 69, 58, 73, 1, 4,139, +181,139,187,214, 94,107,206, 57,190,230,125,159,119,247,234, 25,147, 15,196,126, 11,198,208, 86, 13,219,231,159, 1,138,241,118, +195, 62, 14,104,109,184,185,122, 73,119,216,224,186, 22, 69,133,107, 42,108,221,162,181,230,208, 15, 24, 99, 36, 17,113,127, 43, +252,134,110,205,118,115,205,116,123, 91,112,169, 5,225, 58, 14,242, 57,215, 53,126, 26,217,222,222,160, 51,168, 82,184,107,103, + 81, 74,104,152,227,126, 75,246,129, 20, 38,172,171, 68,211, 17, 36,159, 32, 5,143,153,237,189,218,200, 68,166,174,192, 58,116, +219,160,135, 17,165, 51,104,203,170, 91, 51, 21, 61, 71,234, 7,208,137,253,245, 75,236,227,183, 89,157, 95, 50,110,174,153, 54, +215, 50,101,169,106, 86,151, 15, 9, 67,191, 76,110, 93,101, 65, 89,170,166,195, 84, 77, 17,168,190, 2,162,168,242,115, 2,101, +229,247, 74,194,192, 92, 99,201, 49, 81,119, 39, 76,227, 68,211, 86,244,187,196, 88,114, 26,108,202, 25,130,167,170, 91, 84, 78, +252,228, 47,254, 13,251,231,159,148,184,205, 1,163, 21,235,183,222,145,212, 28,231,184,122,254,140,241,176, 67,229,204,245,179, + 79,136, 41,177,221,220, 48, 22,155, 81,101, 29, 67,127, 16,219, 86,169,128, 81,142,203, 71, 15, 57, 63, 63,231,111,190,189,165, +170, 91,116, 18,165, 61,179, 42,187, 24,129,238,141,167,239,101, 14,223,133, 36, 28, 91,218,102,100,108,230,110,151,169,148,194, + 41,248,167,223,252, 42,239, 60, 88,243,173,239,124,151,155,205,182, 28,202, 34,130,243,197,190, 38, 2,185,184,196,236, 77, 81, + 48,176, 97,154, 24,167,145,195, 24, 24, 7, 25,191,199, 52, 43,201, 53,167,231, 15,121,231,139, 95, 38,170, 12,175, 41,217,199, +215,236,102,211, 32,227, 92,111,166,123,154, 0, 93,132,114, 66, 41,131,170,114, 69,144, 21, 23,142,186,177,194,228, 54,206,242, +133, 47,127,149,159,252,224,123,236,174,175, 75,152,197,241, 8, 62, 45, 33, 3, 2,221,209,247, 68,135,179,143, 63, 31, 61,184, + 51,137,117, 87,113,123,125,181,228,159,243, 90,194,213,252,111, 28,147,178,244,226, 5,190, 35,252, 29,219, 15,103, 16, 16,101, + 92,153,138,221, 79, 27,141,181, 8,129, 79, 57,170,186, 89, 10,131, 80,132, 75,218,154,101,175,152, 82, 20, 48,201,236,227,212, +242,247, 98, 28,241,227,196,216,247,212,198, 72, 81, 88,170,218,156,239, 54,152,119, 19,140,242,136,141,119,241,137,222, 23, 24, +196,146,173,124, 23,254, 35,197,161,252,185,181,154,190,247,168, 58, 46, 34, 40, 33,238,149, 28, 3,173, 75, 88,142,122,195, 68, +163,225,201,211,183,121,241,226, 51, 8, 35,217,219,242, 25, 5,200, 1,149,196, 83,222,239,119, 52,174, 70,163, 88,175, 87,144, + 34, 58,131,142,129,166,109,249,234, 87,191,200,111,254,202, 55,248,244,147,143,249,225, 79, 62,226, 43, 95,251, 58,127,253,189, +191,230,185,134,143, 62,254,132,159,252,224, 7, 18, 13, 89,246,255, 70,155, 18,121,171, 22,198, 93,158, 3,109,114, 38,167,112, + 55,145,152, 5,171, 71,107,173, 99,193, 78,154, 29, 4, 25,244,189,162, 73, 38, 4, 35,137,170,233,152,250, 30,109,196, 14, 86, +181,107,198,195, 1, 87,215, 69, 21, 61,145, 83, 32,231,106,137,189,156,167, 82,121, 26,202,161, 97, 4, 30,164, 19,109,219, 49, +170,137,147,211, 83,110, 55,175,208,198, 16,134, 30,219,118, 88, 99,192, 53, 76,125, 79,213,182, 84,125, 71, 31, 54,160,196, 3, + 79, 74,100, 93,145,125, 95,196,184,185, 60, 8, 87,133, 82,231,228,249,101, 13,218, 54,210,117,231, 68,187, 58,197,135,162, 37, +170, 91,222,122,255,156,195,102, 67,191,219,115,241,228, 61, 14,135, 45,121, 18, 33, 31,197, 22, 25,250, 3,227, 52,208,180,107, +204,234, 4, 63, 12, 60,184,120,196,243, 31,239, 49,121, 6,113,177,208,230,142, 39,107, 51,224, 68, 33,221,250, 82, 48,135,176, +220, 15,234,181,172, 11, 20, 40, 43,133,209,216,111,241, 49, 82,107,139, 81, 30,101, 58,118, 55, 87,156, 63,122,204,201,249, 67, + 76,219,242,234,217,199,124,231,127,255, 3, 46,223,253,128,102,221,177,187,125,201,245, 39, 63,230,226,233,123, 12,219,107,174, + 62,253, 33,167, 15,158,144,114,100,243,233,199,212,221,154,221,245, 43,170,182, 99, 26,182,228, 97, 36,142, 3,221,233, 57,167, +143,222, 98,183,189, 69, 77, 35,105,200,132,113,192, 89, 77,181, 90,211, 31, 14, 40, 96,117,118, 70,136,208,173, 90,246,219, 45, +174,178, 28,174, 95, 18, 82,160,182,162, 95,209,109,131, 51,208,191,124,129, 31,182,164, 18,217,155,148,130,144,104, 86,122, 73, + 27,171,234,138,186,233,216,221,188,162,223,202, 84,160, 62,185,100,154, 6,218,245, 57, 85,221, 9,202,117, 28,150,156,243, 16, + 60,166,114, 84,117, 39,207,193,186, 38,246, 61, 89,121, 66, 73, 16,100, 63, 21, 84,238,184,196, 16, 91,173,101, 79,111, 53,214, + 53,164,209,131,171,200, 90,163,117, 38, 14, 35,174, 86, 40, 87, 17,235,204,176, 63,208,157, 93, 74, 36,117, 10,226, 46,113,134, +208,143,164, 52,177,191,126, 73,119,241,144,238,201,187,248,205, 53,195,254, 22,101, 12,174,235, 88, 63,122,155,147,203, 7, 84, + 85,205, 20, 35, 85,221, 8,177,116,115,205,199,127,241,167, 40, 63, 98, 87,157, 8, 64,251, 3,182,110,136,227,129, 16,189,232, +110, 80, 98,117,205,226,216, 24,139, 5, 54, 12,131, 52, 5,191,250, 79,255,211,223, 85, 90,227,172, 97,120,245,140,219,207, 62, +100,127,251, 74,186,188, 28,101, 84, 94,117, 60,120,250, 46,221,201, 9,111,189,245,132, 7,151, 23,220,222,222,114,125,117,197, +180,185,230,213,135, 63,100, 56,236,217,223, 94,211,158, 63,164,106, 26, 81, 32,150, 46,201,213, 13, 74, 27,218,213,154,127,240, + 59,255, 62,230,242, 93,110,174, 95,144,134, 81,170,104, 53, 83,159,204,145,250,244,206,175,174,143, 20,214,199,202,230, 57,222, +115, 6,161,216,226, 57,174, 13,252,179,111,126,157, 39, 15, 78,249,179,191,250, 30,183,219, 29, 67,217,159,251, 20, 23,150,187, +159,185,238, 37,210,115,242,179, 24,110, 98, 28, 7,198, 33,208, 15, 35,227, 56,201,250, 32, 43, 50,134, 7,111,189,195, 91,239, +189,191,120,178, 23,101,126,217,137, 27, 35,108,119,231,220,189,220,248, 88,208,178,113, 6,228,112,103,205, 19, 12,161, 95,186, +233, 16,100,239,173,142,132,130, 49, 4, 86,235, 19,134,113, 36,166, 48,243, 7,142,120,195,106, 73, 59,154,213,232,202, 26, 33, + 55, 41,161,179,169,130, 72,244, 97, 96,213, 52,236,182, 59,194, 76, 39, 42,133, 85, 62, 10,135,190,195,206,170,123,221,198,146, +150, 87, 62,135,197,173,112,164,236,159,213,246,233, 72, 79, 97,141,101, 10,129,102,125,206,122,125, 78, 93, 53, 56, 39,233,108, +139,111,255, 8,173,173, 22,154,220,157, 71, 61,165,128, 54,154,171,231,207, 16,126,151, 28, 8, 75,134, 60,199, 43, 74,181,236, +227, 41, 96, 35,209,119, 32,238,134, 52, 99,133,239,132,141,179, 5,105,158,126,196, 24,138, 54, 65,149,207, 76, 23, 37,126,185, +102,115,129,249, 24,179, 88, 65,173,171,120,235,201,219, 60,123,246,113,241,154,139,183,209, 58, 87,192, 58,186,196,137,218, 2, +195,145,117,147,206, 50,206,211,113,228,131,119,223,230,131,183,159,242,107,191,252, 13,166,113,162,247,129,195,190,231,247,255, +224,247,248,254,247,190,199,199, 31,127,196,102,115,131,247, 19,193, 11,181, 44,248,129, 16, 38,166,209,151,140,235,105,249,111, +225, 43,140, 2,165, 41,228,195,249,253, 76,217,151,160,143,185, 27, 23, 1,229,140,192,229,181, 78, 94,238,199,128,214,134,186, + 93,147,162,232, 1,230,232, 90,128, 48,202,120, 55,197,128,115, 21,145, 68,138, 19, 36,179,144,251,180,182, 40, 39,190,228,156, +163,236,191,125,228,244,242, 1,253, 97,203,180,223,139, 0,179,233,112,109, 67,189, 58, 37, 7, 95, 56, 5,226,108, 9,253, 64, + 24,123,116, 78, 16, 19,201, 79,114, 77, 26,177, 21,186,118,133,114,142, 24, 3,182,228, 83,168,242, 60,113,171, 83,230,105,165, + 53,197, 66,105, 96,119,115,141,173, 59, 92,183,194,147, 5,177,107,172, 64,102,198, 1,235, 68,225,109,170,134,213,250,132, 48, +121,234,170, 34,161, 24,118,183, 18, 83, 93,178,220,103, 63, 60,121, 14,132, 41, 34, 43, 85, 81,157,156,241,232,131, 47,147,141, +197, 56,177,216,229, 57,183,161,232, 49,230, 92,116,180, 33, 78, 61,109,183,198,186,134,155,231,159,178,187,125, 73,189,186, 32, + 4,207,187, 95,250, 26,219,205, 45, 99,244,156, 62,120, 72,179, 62, 71,229,196,254,250,154,151, 31,254,144,245,197, 3, 92,211, +138,166, 73, 27,252,102, 67,127,123,197,225,246,134,102,213,178,187,189,194,186,138,170,169,153, 38,113, 15,180,235,115, 78,159, +188, 75,232,123,194,176,199, 89,185,126, 43,235,132,202, 88, 75,128, 75,181, 62,161,110,197, 62,151,181, 20, 97,227,126,143,169, + 43,153, 67,100, 69,232,119,108, 63,251,144,112,232,209, 90, 8,144,171, 7,143, 56,123,231, 3, 65, 72,123,207,116,216,115,184, +185, 37,142, 3,251,219, 43,182, 87, 47,216,111, 94,149,156, 14, 69,152,122, 73,253,155, 70,156,107,100, 42,180,106,139,208, 21, +234,110, 45,147, 36,239,101,255,236,229,186, 71, 41,234,166, 37, 76,163, 64,105, 10,133,112,121, 80,104,141,173,107, 17,109,154, + 74,214, 34,193,139,237, 51, 7,193, 18, 43,193,253,198,113,148,251, 64,203, 14, 31,165,240,125, 79,221,173, 49,174,194,104,203, +184,219, 67, 14,164, 24,105,154,142,195,237, 13, 97,216, 3, 10,215,173,112,141, 96,211, 73,137, 48,244,220,124,246, 33,207,191, +255,215, 98, 73,107, 26,148,169,136, 99, 47,233,163, 41, 74,200,147, 49,212,221,186, 60,143, 84, 1, 79, 9, 16,171,170, 26,208, + 18,152,100,183, 87,175, 64, 27,182, 10,252,245, 43,206,207, 47,240,253,129,113, 47,166,123, 89,138,142,132, 32,163,232, 97, 28, + 24, 71,233,176, 66,191,231, 71,223,249, 83,210,112, 96,181, 90,163,227,196,119,255,232,127,225,139,191,246, 31,112,249,228,221, + 2, 61,185,179,165,220,188,124,201,248,165, 39,252,234,175,255, 61,206,223,122,143, 63,249,253,255,158,143,255,252, 79, 9,169, +199, 58, 17,180,228,146, 57,126,143,170, 84,212,159,243,159,201, 97, 87,108,193, 37, 54, 85,151, 8,204, 74, 37,254,227,223,248, + 59,116,149,225,219,127,249, 93,182,135,158, 16,115,217,163,251,114,120,139, 10, 55,248,184,164,172,249, 98,109, 11, 33,226,189, +168,220,167, 49, 48,134, 64,140,130, 63, 69, 91, 30,191,253, 46,143,223,125, 87, 58,202,196,189, 67,123, 30,169,205,236,121,239, +135,123,157,121,140,113,121,237, 51,239, 55, 22, 59,140,214, 66, 64, 51, 71,145,178,199,200,217, 37,118, 49,103, 30, 63,121,202, +103,159, 38,166,188,151,125,114, 25,224,113,196,202, 71,149,192,148,172,139,143, 95,223, 29,206, 25,106,227,216,110, 54,203, 90, +227,245, 46,253, 88,237,126,140,226, 53, 11,165,237,238,107,139,250,251,216,138,120,151,125,123,148, 57,173, 73, 89, 17,146,166, +106,219, 37,215,253,158, 96,232,104,132, 61, 51,152, 83, 60, 66,102,230, 36,196,177,146,184,101,180,101, 12,241,232,235,247,121, +249,119, 4,194,132,153, 83,213,102,183,133,145,117, 7, 49, 99,172, 94,222,187,202,185,165, 80,138, 94, 44,134,126,242, 84,141, +187, 87,212, 40,149, 37, 24,165, 28,236,198, 24,218,118, 77, 93, 87, 24,235,184,185,121, 41, 33, 45,106,182,172, 9,199,217,148, + 92,113,173,192, 40, 25, 97,234,148,112, 10,106, 99,248,250, 23,222,227, 63,252,251,127,159,182, 93,241,233, 39,159,241, 71,127, +252,175,248,238, 95,127,151,126,216,211,247, 59,134, 65, 56, 10,115,144, 80, 94, 20,222, 44,194, 75,165,194, 82, 21,101,117,167, +182, 94, 28, 39, 69,127,241, 58,154,242,206,217,255,166,228,209, 99,199,138, 20, 67,126, 26, 49,211, 65, 66,109,124,128, 20, 10, + 34, 51,145,163, 39,231, 80,214, 85, 53, 26,208,170,164,181,149,207,203, 54, 45,174,107,232,183,215,132,254,192,250,193, 99,154, +211,115,246, 55,215,248,105, 79,115,114,194, 0,180,103,103,236, 94,189, 68, 69, 17,186,141,126, 96,123,115, 69,211,180, 18,187, + 55,217,146,242, 86, 66,157, 74,214,181, 49,150, 52, 13, 40,109,113,117, 45,100, 69,235, 74, 71,175,177, 86,163,147,131,249,190, + 84,178, 94,168,187, 21, 33, 78, 52,110, 45, 7,204,110, 67,156,122,180,181,162,228, 47,193, 50, 70, 27,250, 41,224,154,134,126, +119, 35,158,238, 18,147, 59,219, 20,141,171,151,251, 46,229,140,113,142,170, 59, 97,117,249,128,195,208,179,221,220, 98,218, 83, +186,139,154,126,181,166,174, 42,110,158,125, 76, 12, 1,171, 32,102, 17,136, 42, 3,171,147, 7, 40,109, 24,135, 3,206,153,114, +175, 67,142, 35,253, 56,240,232,237,247,249,248,251,127,201, 79,191,243,109,214,151,151,196,152,121,244,254, 23,217, 95,157,224, +163,151,113,116, 85, 99,141, 99,236, 26,177,155,166,196,184,219,163,188, 39, 97,240, 54,208,174, 79,208, 4,134,205,142,253,203, + 79,138,221,179, 66,105, 77, 93, 53,104,107, 8,227, 68,189, 94,163,180, 97,127,245,130,237,228, 81,149, 21,108,108,191,195, 96, + 48,166, 69,103,205,112,123, 69, 24, 15, 16, 60, 83,140,116,235, 19, 78, 31, 61,145,206,247,176, 19, 58,161, 21, 93,212,233,227, +135, 96,157, 76,248,250,137,182, 89, 17,149,194, 84, 14,191,223, 17,166,145,122,117, 2,214, 16, 61,140, 87, 55,216,170,146,103, +158, 82, 36, 31,105, 47, 30, 96,141, 99, 58,108,153,174, 95, 81, 59,135,239, 15,228, 32,216,222,156,131, 20,134,133, 22,152, 82, +196, 31, 14,212, 93, 71,208,153,230,228, 12,114,194, 79,129,228, 39, 76,219, 10,154, 88,101, 92,101,200,211, 28,197, 90,138, 88, +149,217, 93,191,100,117,249, 80,206,162,104, 9,126, 98, 56, 28,152,218, 14, 84, 70, 21,171,243,238,229,167,203,234,184,223,109, +201, 42,115,120,249,156, 28, 3,198, 58,140,171,104,219, 21,155,225,192, 52, 77, 24,173, 24,198,129,238,244,130,172, 45,221,217, + 67,198,131,188, 15, 42,131,138,153,221,205, 21,198, 57,148,171, 48, 95,249,205,127,244,187, 57, 37,210,208,243,209,223,252, 91, +114,152,196,194,166, 53,193, 79,178,231,242,158,195,237, 13,239,125,240, 62, 79,223,125,159,237,126, 79, 28,123,254,242,255,250, + 67, 12,137,174, 93,221, 9,219, 82,230,249,135, 63, 68, 27, 75,119,122,134,182,142,211,139, 75, 80,162,248,109,234,150,199,143, + 78, 25,189,226,236,201, 7,188,252,244, 67,198,237,117,177,229,132,101, 31, 59, 71,131, 46, 97, 28,233,200,247,157,103,122,142, + 42, 21,156,198,106, 88, 25,197,127,246,143,127,157, 48, 14,124,231,111,190,207,213,238,192, 24,228, 96, 30,167,145,113,242,244, +227, 68, 63, 72,132,103, 63,142,178, 51,159,252,226, 61, 31, 38,207, 56, 5, 17,198,121, 33,135,101, 20,218,214,188,247,149,175, +114,254,232,113, 81, 97,231,227, 37,170, 88,185, 22, 83, 20,139,109,237,248,144,114,175,101,120, 47,161,142, 90,223,195,189,206, + 10,252,249, 48, 79, 71, 63,187, 16,143, 42,214, 39,167, 12,195, 72, 88,132, 34,234,232,223, 23, 68,165,210, 51,228, 37, 45,121, +188, 74, 41,114,240,132,105, 16,100,164, 82,159,123,134,223,127,221,249, 30, 39,224,245,175,191, 46, 10,211,250,206,157,155,230, +152,194, 34, 10,169,234,138, 97,240,216,170,163,105,219,130,116, 77,139,106,219, 26,161,125,165, 16,165, 32,137,177,164, 32,205, +239, 71, 36,229,194, 11, 24,122, 14,219, 91, 32, 19,162, 64, 97,142,187,243,227,124,236,188,156, 65,226,209,151,176,154, 34, 98, +179,230,181,124,173,153,249,124,119,224,105,163, 5, 98,162, 53, 90,217,187, 80, 29,173,105,219,142, 7,151, 15,121,240,224,146, +203,139, 11,186, 70, 96, 16, 42,121, 42,107,168, 92, 77,229,156, 28,238, 86,126, 70,227, 12,117, 35, 19,138,186,170,105,170,138, +182,177, 60, 56,127,192,127,249,159,255, 23,124,245,107, 95,231, 15,255,240, 15,249, 31,255,167,255,129, 63,249,211,255,155,159, +124,248, 99,118,187, 91, 14,135, 61,195, 48,138,168, 50,132,163,236,229, 18,166,115, 52, 60,191, 39, 26, 76,249,136,115,157,238, +168,126, 41, 45, 97, 47, 71,233, 55,159,251, 79, 86, 71,233, 83, 5,190,162,178,184, 48, 20,162,202,141, 97, 34, 77,253, 29,179, +159,187,162, 65,149, 2,171,106, 87, 50,193, 43,126,110,165, 21,174, 93,145,208,144, 34,205,234,132,140, 98,216,239, 73,211, 40, +157,105, 8,146,163,238, 35,232, 84, 86, 44,137,112,216, 23,184, 73, 47,221,117, 57, 64,181,150,168,215,153,169,111,170, 6, 87, +213, 88,109,133, 86,199,140, 51,246, 40,109, 9, 62,146, 52, 24,165, 81, 37,111, 61,244, 66, 81,108,215, 29,219,235,107,178, 31, +168,154,150,250,228,148,170, 89, 21,241,219, 28, 35,108, 32, 76, 96, 44,209,143,132,105,148, 28,244, 16, 74,252,231,146, 49, 69, + 44,130, 55,116, 69,119,118, 70, 72, 9,165, 37,130,214, 88,203,230,229, 11, 82, 24,176,237, 25,239,124,237,151,201, 85,203,116, +216, 44, 72, 88, 5, 52,103, 15, 56,108,111,201,113,228,252,233, 59,108, 94,188, 66, 91,232, 78, 31, 81,185,138,148, 60, 15,222, +254,128,195,246,154,235,103,159,178, 94,159,177,189,126,133, 31, 14, 36, 63,144, 99,102,191,185,198,239,182,165,168, 21,222, 62, +174, 34,101, 69,115,122, 42,161, 61,109, 39, 34, 57,100, 66, 83,159,156,138,230,200,143,165, 48,169,192,104,246, 55, 47,201,193, + 11,113, 19, 79,229, 42,134,221, 6,223, 31,104, 78,207,152,250, 3,177,223,163,114, 68, 87,141,136, 99,173, 37,107,199,212, 31, + 32,121,148, 49, 84, 93, 71,101, 45,118,125, 34, 80,150,144, 96, 28,136,136, 29,205, 26,195,238,230, 10,162,167,106, 87, 36,173, +153, 14, 91, 84, 14,184,186, 22,107,234,216,227,247, 59,218,211, 53,202, 84, 52,103,231,160, 53,174,233,200,106, 62, 87,196,233, + 5,154,156, 2,166,106, 81, 74,227,234,138,106,125,130,109, 90,154,238,100, 41,188, 46, 30, 63,102, 28,122, 9, 66,178, 22, 91, + 87,248,221, 94, 80,225,211, 40, 19,156,186, 22, 20,117,153,104, 77,135, 65,130,169, 82, 20,176, 84, 1,208,168,156,133, 35, 17, +147, 16, 85,141,240, 72, 82,191,165,191,189,197,186,170,208, 56, 21,227,126, 67,138,129,186,110,240,126, 92, 10,214, 20, 60,195, +126, 71,219,173,138, 5, 61,225,167,177,220,109, 82,220,171,255,228,191,249,111,179, 86,134,208,111,121,254,195,191,160,114,142, +171, 23,207,229,205,107, 86,180,171, 21,187,155, 43, 50,145,186,187,228,226,233, 83,108,101,185,125,241, 2,171,197, 14,164, 82, +194,213, 45,202, 88,166, 97, 39,213,222, 56,112,241,197,175,241,203,191,241, 15,104,214,103,196, 20,217, 95, 95,209,180, 45, 31, +124,225, 93,190,240,165, 47,240,209,179, 45, 47, 63,249,132,255,243, 95,252,119,140, 87,207,137, 94,198, 26,186,196, 3,222, 75, + 40, 91, 30, 20,101,180, 91,118,210,141,117,172,155,138, 47, 60,189,224,159,124,243,107,252,240,167, 63,229,207,191,255, 67,182, +135, 3, 57, 33,129, 36, 94,194, 86, 38, 47,201,107, 50,138, 20,145,156, 80,227,164,243,155, 66, 40, 73,108, 98,105, 19, 43,180, +193, 52, 45, 31,124,249,171,172, 78, 78,203, 46,250,110,220,190, 36, 49,151,131, 26, 40,236,242,124,151, 17,191,132,170, 72,170, +210, 44,192,178,206,150,189,179,196,231,205,221,252,124,136, 58, 39, 29,246, 52,141,146, 51, 92, 32, 49,179,170, 59,248,137, 79, + 63,250,136,195,230,150,232,131,236,197,203,104, 25, 85,200,114,200,247,152, 31,162,218, 24,242, 52, 49,142,135, 37, 81,236, 77, +157,250,177,241, 90, 41,222,184,107,255, 92, 1,240, 26, 74, 86, 21,142,187, 4, 31,204,137, 83,154,179, 7,143,133, 58,101,101, + 69, 97,141,163,114,245,189, 32,158,121,197, 18, 82, 32,229, 89,161, 46, 98,191, 28, 19, 97, 26,120,249,217,199, 88, 13, 99,148, +116,181,251,137,118,199, 83,130, 18, 81,153,131, 36,179,149,110, 84, 38,239,234, 30, 2,119,206,176,159,247,229,179, 8,112, 24, +194, 17, 75, 94,126,150,186,174, 89,173, 78,120,120,113,201, 55,127,229,239,242,206,147,167,156,156,156,144,128,155,237,134,207, +158,125,198,237,102,195,230,230,150,205,174,167,110, 59,201, 60, 46,185,240,171,182,227,226,226,130,203, 7, 15,120,250,244, 29, +158,188,253, 14,191,247,251,255, 51, 63,252,193,119, 25,203,225,237,189, 95, 2,132, 94, 47,244,142,187,236,123,201, 79, 63,231, +215,231,146,162,254, 54,241,254, 49, 89,173, 80,211, 68,214, 85,148, 48, 70, 81,213,107, 76,211, 10, 20, 36,133,146,137, 93,144, +187, 37, 7,160,110, 86, 12,227, 64, 12, 3, 68,121, 15, 99,206,172, 30, 62, 17,203,156,247,140,195, 30, 91, 53,116,235, 83,198, +195, 22, 63, 5,140, 21,219,165, 42,220, 10, 9, 33,145, 32, 23, 85, 44,165,162,131, 48, 76,135,173,220,103,206, 80,219, 90, 98, + 94, 21,226, 88,137, 35,190,239,177,174, 22,136,139,214,216,170, 34,135, 40, 68,184,172,197, 89, 80, 57,146,210, 24, 87, 17,134, +158,169,236, 52,171,182,197, 15,131, 36, 20,182, 77, 9,161,242, 88, 39, 65, 58,209, 7,105, 52,172,240,106,253,126,131,223,221, +144,149, 76,113,150,235,171,170, 56,127,242, 62,125,223,203, 33,128, 98,220,223, 82,117, 93, 17,163, 25, 92,211, 17,188,231,189, + 47,124,153,103, 63,253, 9, 55, 47, 62, 22, 86,190, 50,156, 63,125,135,155, 23,207, 48, 78, 70,223, 85,211, 80,117,231, 24, 39, + 19,171,166,105, 9,227, 72,221,118,156,156, 95,130,214,188,250,232,199, 76, 67,207,230,229,103,156,191,247, 62,166,228,181,223, + 60,251, 8, 93, 57,113,194, 4,143,137,153,144, 35,171,179, 11,114, 85,227, 55, 27,146,159, 88,157,158,178,189,190,194, 57,195, +254,246,134,186, 91, 51,141, 7,114, 12, 52,171,115, 92,219, 97,170,138, 48,236,232,247, 7,204, 76,203,203, 25,239, 39, 30, 60, +121,159,221,238, 26,235,106,134,205, 43,172,109,209,206, 48,110,182,212,103,151,164,169, 39,196, 72,123,249,144,243,199,111, 17, + 67,196,185,134,253,254,134, 92, 16,220, 50,141, 72, 16, 71,148,173,200, 33,112,122,113,201,161,239, 25, 15,123,210,208, 99,234, + 10,165, 52,245,106, 45,244, 70, 32, 78, 19,126, 56,200,243, 49, 76, 75,196,237,184,223,147,226, 36,250,147,170, 69,187,138,179, + 7,111,145,114,196,144,192, 88,233,210,115, 18,152,216,212, 75, 58, 92,215,137,152,179,170,100,252, 29,139, 80,184,236, 12,141, +210,196,113,196, 52, 53,201, 7,108,229, 68, 19,165,213,146, 77,146,149,194,186,134,230,244,148, 20, 34,219,231,159, 64, 12, 40, + 99, 75,240, 86, 36, 76, 19,205,106, 77,127,216,161, 11,150,154, 18, 54,148,203, 64, 45, 39,129,109,165,232,239, 61,151,212, 63, +252,175,254,235,172,173,225,246,217,103, 92,127,248, 61, 50,208,117, 45,231, 79,222, 97,243,234, 57,227,161, 71, 33,121,206,205, +234,140,105, 60,208,157, 92,240,248,237,247, 56,125,240,136,151,207, 62,193,162,160,114, 12,125,207,208, 31, 72, 83,207,228,101, +127,248,248,131, 47,243, 43,255,248,159,115,123,179, 97,218,111,209, 70,211,117, 39,252,250,175,255, 93,246,222,240,234,122,203, +179, 31,124,151,111,255,193,191, 32,239, 55, 4,239,165,211, 57,202,166, 21,196, 99, 46,150,153, 2,214, 48,134,135,167,107,190, +251,157,111,241, 15,191,249,126,114,229, 16, 0, 0, 32, 0, 73, 68, 65, 84,119,248,231,255,240,183,248,238,143,126,204, 95,255, +248,167, 92,111,183,140,147, 39,101, 33,144, 29,198,177,116,226, 98, 73,243,243,254,113,246,162, 23,232,140, 15, 17,239,163, 16, +198, 10, 45,236,244,242, 49,239,127,249,203,168,178, 3, 60, 78, 16,155, 65, 55, 10,169,174,102,114,219,241,206,159,162, 58, 63, + 62,172, 36, 75,157, 59,117,186,214, 12,227,184, 0, 93,154,186, 94, 8,100,249, 40,141,201, 88,203, 56,142,203, 3, 61,198,136, + 81,138,155, 87, 87,188,122,241,140, 88,148,245,162, 98, 15,229, 80, 55,119, 7, 92,241,135,231, 50,186,126,211,115,253,243,128, +159,227,241,249,155, 65, 64,175, 19,231,244,145, 35,225,248, 16,137, 41,211,158,156,114,114,118,129,171,101,148,103,140, 65,101, +141,181,142,166, 84,241,139, 85, 46, 70, 66,244,229, 80,143,152, 66,210,154,198,129,161,223,179,223,222,144, 67, 96,240, 98,155, +155, 99, 57,238,113,228,243, 93,201,161, 85,194, 89, 93,252,242, 44,204,246, 69, 0,104,140, 0,150,172, 94,128, 62,115, 33,213, +247,158, 16,211, 66,254, 3,168,170,138,223,252,205,223,226,119,126,231,183,104,140,225,253,167,239,178,221,237,249,151,255,219, + 31,242,226,229,115,254,189, 95,249, 85,190,241,213, 95,226,242,242,130, 15, 63,123,193,247, 62,252,148, 67,127,192, 24,203,195, + 7,151,156,159,158,224, 39,207,217,197, 5,255,230,223,126,135,255,245, 95,254, 30,195,110,203, 56,141, 71,251,238,244,185,131, +252,245,145,249,231,176,162,127,219, 52,229,141, 49,144,199,161, 65,119,244,122,212, 29,206, 84, 73, 14,170,116, 58,198,210,172, +214, 12,187, 45, 41, 78,210,233,180, 39,178,211, 43,122, 17,177,201, 86, 98, 91,179, 14,223, 15, 40, 29,101,149,149,101, 71,237, +234,150, 80,198,216,202, 88, 66,191, 35,142,162,160, 78, 37,167, 62,163,202, 88, 82, 99,187, 21,201, 71,217,169,103,137,196, 68, +137,253,171,110, 59,140,214,152,218,209, 52, 29,155,155, 27,214, 39,231, 12,253,158,245,229, 5,253,245, 21,193, 71,186,147, 83, +250,253, 86,232, 96, 65, 88, 1,227,190, 71,233, 76,213,201,212, 64,151,153,151, 63, 28,208, 85, 37,207,131, 24, 22,111,187,113, + 21,145, 92, 86,133, 98, 73,171,187, 85, 73, 32,108, 56,123,252,148, 97, 24,249,244,175,190, 77,244, 99, 33, 31, 90,233,244,186, + 21, 81, 91, 84,140, 66,228,172, 42, 50,153,208,247, 66,246, 76,145,140,166,105, 91, 76,213,209,118, 29,183,207, 63, 18, 97,102, +213, 96,154,150,155,103,159,210,158,156,177,191,126, 73,117,126, 65,183, 58,103, 28,123, 84,140,108,111, 94,209,174,206, 57,121, +235, 29,234,174, 1, 63,209,111,182, 12,227, 1,103, 20, 97, 12,248,105,207,176, 59,200,202, 73,107,148,145,207,119,220,110, 57, +121,240, 80,198,253,222,139, 75, 35, 69,200,177,172, 28, 12,126,183, 97, 60,108, 65, 25,234,238, 4,234, 10,231,196, 94, 56, 29, +118,146,153, 48,202, 14, 59,251,145,170, 93,115,250,228,125,118, 87,159,225,199,158,250,244,130,112,216, 18,134, 3,209, 39,206, +158,190, 71, 10, 2, 20,178, 77, 39,250,159,153, 49, 80,132,179,105,154,196,175, 29, 38,113, 78, 88, 65,145,199,146,142, 88,175, +207, 80, 57, 73, 52,116, 86, 37,175,196,162,200, 88,231,216,222,188, 34,123, 47,177,224, 57,163,141, 35, 14, 91,148,169,229,239, + 84,181,172, 73, 10, 47, 65, 43,168,170,134,213,217, 41,251,237, 45, 41, 38,170,174, 91, 38,132, 74,107,180, 17, 98,166, 54,154, +113,183, 67, 27,141,182,181,112, 47,252,128,107,106,252,174,167, 90,119, 18,122,149, 18, 41, 39,170,182,193,185,134,201, 71,153, + 92,110,111, 37, 95, 94,107,162, 23,146,171, 82,220, 11,163, 50, 90,211,180, 34, 10,220,221,190,148,103,171, 54, 75, 70,129,144, + 6,245, 18,229,171, 78,223,253,154,152,205,146, 48,148,231,113,112,213, 84,152,170,166,118,142,238,244, 28,101, 29, 77,221,138, +202,214, 57, 44,138,203,247,190, 72, 28, 7,250,190,167,114,150,253, 97, 47,194,139,195,129,182,182, 4, 44,167,103,231,116,111, +127,145, 47,253,202,223, 43, 12,116,141,194, 8, 2,211, 86,180,235, 19,198,113,228,195, 63,255, 87, 60,255,203,127, 77,152, 38, +241,171, 46, 48,145, 84, 44, 96, 34, 66,202,128, 5, 30,156,156,240, 23,127,254, 39,252,147,111,126,131,223,248,181, 95,226,118, +187,231,251, 31,126,202,213,237,134,195, 56,210, 15, 3, 62,102, 38,239,233,135,158, 97,156,152, 70,217,149,207,135,185, 32, 96, + 19, 62, 21,122, 92, 17,140,101, 36,148,230,173,119,222,227,241, 59,239,242,250,217, 55,191, 71,166,160,104,115,121,125,249, 72, + 12,167,181,198, 57, 39,172,243,146,144, 20, 99, 42,251, 90,121, 16,121,239,165,147, 77,169,248,246,115, 81, 92,139, 95,218, 57, + 39, 94,233, 35,235, 85, 78, 18, 50, 35,225, 43,177, 68,142, 6,198,253,158, 23,159,125,202,112,216,147, 99, 16,122,209,231,178, +216,203, 52, 33,166,251, 20,180,215,118,233,247, 4,102,234, 46,152,228, 24,153,121,140,242,189, 79,110,227,141,246,174, 16, 34, +182,170, 57,187,120,136,171,171,226,189,148,149,128,209, 86,110,226,114,128, 44, 84, 61,165,136, 69,169,157, 83, 66, 37,208, 41, +113,253,234, 25, 77,235,100, 63,181,221,115,232,195,145, 54, 64,196,107,175,255,124, 57,103, 92, 73,104,203, 71, 73, 88, 11,123, +127, 22, 94, 42,133,177, 74,194,145, 22,175, 60,244,125, 88, 14,245,227,159,249,157,119,222,225,173, 39,111,243,219,191,253,247, +121,249,226, 21,223,254,214,191, 70,107, 77, 87, 32, 53,171,213, 10,107, 44, 62, 70, 62,189,186,101, 28, 5, 78,210,216,138,135, + 23,231,124,225, 43, 95,227, 7, 63,250, 17,127,246,237,111,137,162,121,156,238, 29,230,199, 54,189,191,173, 51,255,119,233,212, +127,230, 65, 95, 66, 75,140,169, 0, 69,189,234, 8,211, 40,190,115,231,228,107,182, 90,178,205,181,209,197,206,213,200, 1, 61, +121,146,239, 69,245,157,228,224,110, 87,107,114, 74,248,113, 36,132, 9, 91, 85,164,105, 2,235,202, 92, 90,147, 81,216,170,146, + 49,165,150, 3,198,212,141, 92,187, 73,214, 48,198, 58,178, 18, 70,194,176,223, 74, 24, 84, 18,125,130,173, 87, 84,149,208,254, +180, 85, 56, 99,208,149, 99,127,117, 35, 33, 79, 74,238,213,172, 65, 47,140,109,208, 81,120,217,245,106, 37, 5,129,177, 76, 51, + 30, 57,103,166,161,199,213, 53,186,106, 73,195, 94,246,232,100,252,112, 0, 91,139,110, 40, 41,170,202,209, 61,122,155,202, 25, +174, 95,189,146,174,154,204,230,217,135,244,155,155, 82, 24,170,133, 50, 23,124,192, 24,201, 89,207, 41,129, 17, 97,165,159, 38, + 48,178,154,137, 5, 89,122,249,232, 29,110, 94,124, 74,158,122,148,109,105, 79,215, 92,125,250, 33,109, 43,193, 36,196, 32,130, + 45, 52,166,233,120,252,193,151,217,111,183,228,113,135,174, 58, 78, 31, 60,150,131,113, 28,216,148,241,117,191,221,144,198, 3, +174, 93, 19,166,177, 0,120, 64, 87, 22, 99, 42,246,215,175,176, 69, 16, 71, 74,212,231,151, 50, 53,219,221,202,202, 32, 71,252, + 52,144, 49, 11,202,219, 85, 21,198, 90,252, 56,160,148, 28,148,202, 84,232,170, 42,248,223, 3,132,132, 89,119,196,126, 68,169, +132, 91,173,201, 73, 97,107,203,246,249, 11,234,213,138,106,181, 22,209,169,214,140,227, 84,114, 11, 20,149, 49, 12,123,185, 63, +172,150,209,121,214, 21, 57,140,210,160,141, 3, 90, 67,123,122,137, 50, 22,211,212,194,188,200,153,254,246, 26,107, 13,190,239, + 73, 41,138,159, 61, 70, 82,240,100, 37, 65, 71,221,122,205,246,246, 26,163, 20,209,139,120,212, 88,199,201,229, 35,246,219, 91, +218,245,154,201, 15, 24, 52,253,110, 47, 5,134, 54, 98, 5, 79,145, 56,150,164, 65, 99,132,187,223,116, 66, 68,108,106,234,102, +205, 84,112,202, 49,120,201, 49,152,167,128, 69,247,161,146, 88, 76,133, 80, 56,200,186,170,238,164,153,209,134,108, 13,214, 89, +249,188, 98,196, 79, 7,172,171,202,230, 44,162,172,152,130,163, 31, 48,117,221,252,174, 51,137, 48,141, 88,138,184, 37, 74,108, + 99,158, 70,246,155, 91,110,175, 95, 17, 38,207, 52,246, 69, 13,171,104, 86, 29, 99,127, 64,165,196,246,246, 26,149, 69,121,190, +189,189,165,169, 42, 48,150,147,179,115,188,159, 24,110, 95,241,234,217, 39,156, 93, 62, 34,219,138, 7, 15, 31,224,170, 26, 31, + 67, 73,154,153,232,206, 31,240,226,163, 31,145,252, 40,123,242, 89, 2,173,100,204, 62, 43,224, 29,138, 47,127,240, 62,223,251, +235,191,196,198,129,191,243,181, 15, 88,175, 87,124,248,233, 11,158, 93, 95, 51, 76,158, 97,148,221,120, 63,120,250,126, 96, 63, +244,244,253,196, 56,200,254, 60,198, 40, 35,167,152,137, 33,225, 99, 34,198, 25,249,106,104,215,231,252,242, 55,127,157,211,139, + 75, 36, 19, 70, 14,232,217,170,101, 75, 76, 36,115, 10, 89, 65,213, 6,239, 23,194, 93, 46,225, 56, 33,220,101,147,207,157,250, +228, 5,192, 81, 85, 21,206, 90,186,118,141,179, 66,163,115, 78, 70, 72,218, 80, 2, 80,226, 61, 44,235, 28,251,154,114, 94,198, +243, 74, 41,218,174,227,252,225, 35,214, 39,103, 12,211, 32,160,130, 69,189, 62,123,154,242,189, 4,168, 95,100, 76,251,250,193, +145, 95,163,109, 29, 23, 3,111,250,158, 75,231, 77,166,233, 78,208,243,195,162,168,200, 83, 73,194,139,169, 4,189,148,104, 87, +165, 50,137,180,208,228,230,177,123,229, 28,239,189,255, 1, 93,183, 38, 68,207,110,187,101,242,199,216,220,226, 79,207,234,115, +218, 0,163,149, 96,115,143,202,180,101,170, 48, 39,203,149, 49,175,124,190, 37,155, 91, 27, 97, 96, 31,145,255,142,187,231,182, + 91,113, 24, 70,254,213, 31,255, 17, 87,215, 87,244, 67,207,118,191,101,179,221,240,242,234,138,171,155,107,110, 55, 55,108,183, +183,188,122,241,138,241,176,197,105,232,125,100, 76,153,111,253,241,255, 65,191,223, 50, 76,163,140, 9,203,161, 62,187, 11,142, + 69,146,111,234,202,255,127,249,165,144,156,244,102,133, 50, 78, 68,155,109,135, 53, 21, 97, 20, 44, 42, 41,226,170, 70,250,249, + 56,128,173,113,182, 34,250,137, 56,141, 84,237,170, 80,177, 68,241, 61,175, 46,102, 27,228, 28, 68, 52,167,152, 69, 63,161, 52, + 84,117, 35,214, 36, 63, 22, 24,135, 22, 29,197,216,203,222, 82,107,180,107,208,192,212, 31,150,253, 50,198,208,173, 79,169,155, +150,126,191,197, 57, 43,144,163, 16,200, 70, 19,167, 73, 62,107, 35, 49,154, 90, 91, 97,132, 71,143,181, 21,202, 88, 86, 23,151, + 66, 26, 11, 1,237, 68,156,149,163, 76, 26,108,213, 96, 42, 89, 13,164, 40, 35,209, 48,142,228,163,159,171, 89,159,209,156, 94, +162, 82,160,223, 9,155,126,232,119,140,251, 77,201, 82, 40,233,130, 89,220, 39, 25, 68, 17, 30, 50, 88, 75, 46, 57, 15,185, 8, + 66,115, 12,229,218, 21,161, 85,115,114,142,171, 91,252, 97, 75,247,232, 9,231, 15, 30,113,216,238,121,235,139, 95,199,251,145, +113,123, 43, 0,176, 36, 62,253,205,243, 79,152, 14, 91, 82,130,232, 7,198,126,207,254,250, 5,211,110,195,246,234, 5, 97,154, + 72,209,163,141, 33,145, 68,213, 62,201,251,158, 99,102, 58,220, 66,158,157, 36,138,170,109,203, 84, 82, 51, 28,118,228,156,169, + 79, 46,100, 69, 48,238, 33, 38, 84, 78,133,121, 48, 9,196,169,237,164,249,106, 27,180,210, 76,125, 79,142,130, 19, 71,219, 66, +217,172,120,240,222, 87,217,223, 92,137,128, 24,141,170, 44,204, 84,207, 20,201,209, 19,166, 3,113, 24,228,251, 28,118,104, 45, + 24,243, 56,179,216,135, 3,202,104,170,166,193, 53, 43, 40, 20,198,208,239, 25, 54, 55,132,126, 47,238,146,114,224, 26, 43, 96, +180,170, 91, 97,171, 74, 48,227,193,227,199, 65, 98,177,199, 81,126,150, 36,227,251,126,119, 75,215,173,177,182,162,223,222, 50, + 13, 61,218, 57,180,169, 74,200, 84,194,212, 13,117,187,150,247, 52, 70,186,243, 75,108,177,136, 91, 99,161, 80, 66,115, 74,226, +190, 72,178, 91, 79,177, 76, 12,163, 76,143,179,130,170,109,229,185,173,133, 99,226,202,251,175,148,194, 54, 53,205,250, 20,239, + 3,198, 73,209,107,235,134, 24, 34,198,138,183,191,110,215,152,136,250,221,224, 39, 73,144, 9, 94, 82,147,148, 66,165,196, 52, +142, 84, 86, 18,103,114,140, 12,187, 45,155,155, 43, 76,221, 74,166,242,245, 21,166,118, 28,110,174,216, 92, 61,103,232,247,140, + 67, 79,229, 12,187,219, 91,166, 97,196,185, 10, 63,121,108,244,108,111,174,121,247, 75, 95,193,117, 39,140,211, 72,206, 48,236, +247,248, 98,129,113,206,177,127,241,169, 92,160,139, 66, 92, 14, 48, 82,198,104,203,147, 7,231,188,247,228, 17,219,221,134, 56, +236,249,123,191,242,117,158, 61,127,193,199,207, 94,177, 27,122,246,135,129, 93, 63,210,247, 35,125,223,115, 24,122,134,126, 96, + 28, 71,166,201, 19,125, 42, 81,169,146,141,238, 83,190, 19,189, 41,195,197,227,167,124,240,181, 95, 42,161,138, 37,174, 80, 73, + 44,233, 44, 4,155, 69,129, 25,137, 40,245,222, 47, 57,206,179,103,219,135, 99, 58,220, 76,170, 58,122, 64,151,238,125, 62,252, + 99, 10, 82, 77,134,105,241, 86, 47, 10,225, 50, 5, 88,172, 98,179,197,143, 59, 21,241, 60, 38,174,219,150,139,203,135,180,221, + 10,231,106,162,247, 24, 3, 42,107,224,223,109,239,250,249,223,171, 5, 81,187, 36, 82, 41,245,198, 29,251,221,129, 47,235, 0, + 87,246,127, 20,212,235,236, 67,159, 19,134, 84,177,154, 9, 69,106, 14,181, 60, 2,202, 68, 81, 37,251, 24,216,236,247,220,110, +119,220,222,108, 10, 79,252,110, 85,115,103,129, 84,247,138, 14,117, 71, 80, 89,194,127,102, 33,230,220,186, 43,238,162,178,164, +102, 43,211,152,194, 53, 56, 94,163,196,121, 47, 92,248, 6, 31,253,228, 39,236,246, 27,198, 97,162,239,123,130,159, 24,135,158, +195,126,199, 97,191, 99,187,221, 50, 13, 3,195,208, 83,187,154,171,155, 43,222,253,210, 87,248,243,111,125,139,253,118,139, 47, + 7,250,113,177,240,249,131, 91,221,203, 66,120,253, 84,214,218, 20, 92,172, 89,172,133,191,208,103,157,149, 88,147,144, 7,238, +140,111,182, 70, 51,244,135,187, 4, 49,146, 28, 8,128, 50,150,148, 35, 57, 6, 84,202, 69,237,157,239, 60,216, 86,172, 76,174, +170, 68,152,148,210,114, 15, 64, 22, 45, 14, 37,124, 72,105,218,213, 10, 63,121, 97,178,135, 88,246,205, 82,104,168,226,227,150, + 81,112, 70,187, 90, 58,107, 91,203,218, 75,203,250, 38, 22,139, 97, 24, 39,252,161, 47,182, 55,177,117, 90, 39,148,176, 56,138, + 55, 57, 78,226,157,247,227,132, 31, 5, 93, 27,195, 68, 14,114,152,200,158,124,196,143, 3, 57, 4,210,228,203, 53, 41,247,163, + 42,157,189,107,107,140, 43,176,147,171,231,197,178, 39, 69,139,109,107,210, 56,150,124, 3, 3,218,136,150,164,164,167, 25, 39, + 54, 54,107, 37, 93,208, 58, 43, 66, 76, 43, 19,129,217,118, 21,253,196,184,187,165,233,206,193, 89,252,110,199, 68,164,118, 53, + 73, 65,236,123,161,244, 41, 67, 74, 35, 57, 68, 84, 14, 52, 39,103,164,225,192,184,219,150,252,109, 81,108,163, 69, 33,238,170, +154,241,176, 21,149,189, 53, 18,227, 73,198,184, 6,109,138,125,211, 88, 17,160,141, 35,214, 89,206,222,122, 7,103,100,125,104, +235, 22, 63,138, 95,122,206,163,207, 89, 44, 95, 97, 26,241,135,189,220,207,126, 4,165,152,166,158,105,191,167,238, 86, 2,253, +105,239,172,207,246,244, 20,187, 90,163,109,141,237, 86,242, 62, 36, 48, 77, 71, 78, 89, 68,117,197, 83,158, 70, 17,155, 37, 47, + 93,235, 60, 50,207, 74, 44, 93,113,148,200,106,227, 42, 25,229,219, 26, 93,166,160,106, 22,110,134,128, 31, 6,166,177, 71, 27, + 9, 22, 74,209,163,148, 89, 38,121,169,136, 65,167,126, 71, 70,179,190,124,200,225,230,134, 56, 13, 52,167,167,212,235, 19,186, +211,243,114, 70, 36,140, 85,168, 36,238,134,122,125, 42, 54, 83,239, 81,206, 72,145,172, 32, 36,201,104,168,218,150,147,139, 75, +148,117, 24,227, 4,106, 84,213, 40,231,112,117, 43, 19, 46,165, 48, 85, 77,214,153,122,181,194,143, 35,195,126, 79,189, 94, 9, +123,161,109, 5, 36, 86,183,232,170,161,110, 86,216,174,193, 88, 99,127,183,182,182,236,178,197, 11, 61,119, 8,190,216,169, 98, +140,228, 16,168,156, 69,229,204,238,230,213,124,226,114,245,242, 57,211, 32,135, 38, 9,234,170, 46, 65, 39,242,128,110,155, 70, +198,164,251, 61,117,221,242,252,167, 63, 96,154,122,170,238, 4,101,140,188,249, 5,248, 81,175, 78,121,249,209,143, 37,163,118, + 86,125, 23, 90,144,214,154,202,104,222,122,112,193,111,255,198,111,114,187,235,153,246, 87,228,156,248,248,197, 21,219, 97, 96, +191, 63,176, 59,200,193,126,232,123,250, 97, 88,124,230,163, 23, 53,187, 79, 16,202,126, 55, 37,200, 81, 24,244,182, 89,241,133, +175,124,131,183,222,121,151,144,227,145,194, 61,139,205,109,182,150, 45,108,120, 81, 97,207, 15,223, 80,186,231,249,128, 19,226, +154,185,247, 32, 94, 24,246,249,206, 3,157,146,208,236,124, 8, 12,195, 32, 86,184,153,122,231, 61,241, 72, 68,167,142,108,126, +115,135, 57,127, 63, 17, 82,221,129, 96, 92,221,112,118,118,193,219, 79,159,242,107,223,248, 6,219,253,158,170,170, 24, 75, 62, +251, 47,218,229,189,222,173,207, 93,244,235, 35,250,123, 7,232,113, 58, 93,204,104, 87,209,174,214, 11, 93,107, 30,217,205, 52, +188, 59,141,128,236,183, 99,138,196,114, 45,230, 36,252,245,148,226, 81,114,165,196,184, 14,251, 61, 41, 77,132,123,135,250, 93, +166,252,253,117, 66,177,142,149, 0,133,187,194,104, 78,230,186,163,167,169, 35, 22,119, 46, 7,120, 40, 43,139,187, 67,253,238, +208, 29, 14,226,178,152,134, 99, 81,155, 95,128, 46,177, 20,200,126,154, 64,105, 14,135, 3,104,203,233,217, 37, 63,249,209,247, +229, 58,154, 99,131,143, 88,208,175, 31,218,182,110,168,187,174,176,241, 53, 70, 91, 81, 95,107, 77,221,117,196,156,113,117,139, +209, 86, 68,138, 85, 85, 70,216,241,103,124,186, 26,109, 92,121,112, 24,114,242, 50,125, 82, 37,116, 71, 43,252,208, 47, 78, 14, + 91, 85,101, 44, 92, 75, 34, 86,201, 20,200, 57,163,173, 65,149,181,135,240, 8, 12,182, 28,118,218, 56,146, 23,166, 54, 89,118, +242,112, 52,253, 50,134, 20, 51,214,153, 5,125,153,147,236,176,179, 50,232,156,240,126,162, 89,159, 74,234,218,236, 44,209, 98, +149, 37,137, 77,205,104,131,182, 6,215, 84, 12,125,191, 60, 87,210, 36,206,136, 28,198,194, 66, 80, 24,107,150,235,200, 24, 45, + 58,147, 16, 37,228,168,236,187,231,130,111, 89,131, 20,118, 65,138, 81, 0, 62, 94,166,151, 85,179,102,191,187,197, 31,118,168, + 74,172,190,211,225,192,180,223, 82,107, 75, 44,186, 13,137,173,238, 74,102,187,145,125, 71, 18, 5,179,115, 86,198,254, 41,137, + 85, 42,196,146, 17,239,200,126, 18,141,135,173,216, 93, 95, 49,236,110,209, 37, 4, 42,236,183, 68,157, 48,198, 17,147, 71,187, + 6, 69, 70, 87, 21,227,110,131,138,210, 73, 74, 71, 39,207,147,170, 28,198,126,216,201,228,192, 24, 17, 31,230, 88, 64, 90, 34, +214,210,214,201,136, 26,104,218, 86, 50, 18,108,141, 94,157,208,180, 43, 65, 11, 23, 17,171, 92, 11,250,232, 25, 80,166,109,229, +153,100,235,154,243,119, 62,224,209, 23,190,194,197,211,119, 56,125,244, 4,109, 29,175, 62,252, 9,164, 72, 30, 71, 14,215, 47, + 25,111, 94, 17, 14,123,198,205, 53, 49,121,113, 65, 4,143,113, 21,182,169,209,174, 42,170,253, 17,235, 26,180,117,203, 68,168, +106, 58, 41, 2,235,150,122,181,198,181,107,185, 86,167, 65, 10,116, 43,157,116, 12,190,220,191,153,166,235, 22,123, 98,158, 60, +166,170, 68,231, 83,186,250, 28, 68,167,212,172,215,164, 8,174,169,152,134,189,224,191, 21,146,124,103,197, 99,175,180,165, 62, + 57, 21,186, 93, 63, 74,102,129, 49, 37,116, 69,188,238,214,105,177,200, 25, 71,127,123, 45,216, 91,171,165, 8, 69, 34,154,179, + 82,114, 63,205,137,154, 5, 13,155,201,216, 74,152, 30,201, 7,252, 52, 82, 85, 85, 17, 37, 3, 86, 17, 14, 7,140, 50,234,119, +231, 78,245,110,135,154, 72,196,162,216, 83,146, 55,157, 37,176,195,123,143,202,176,185,190, 98,119,125, 77,191,185,101,232, 15, + 12,251, 61,187,219, 27,246,219, 91, 54, 55, 87,164, 24,216,221, 94,179,187,189,229,176,221,112,216,221,178,219,110,137,211,196, +179,143,126,194,230,197,167, 84, 77,195,217,163,199,100,165,232, 86, 43,208, 22,107, 13,155, 79,126, 92,118, 9, 44,176, 25,149, + 21,219,155,107, 46, 78, 78,249,244,249, 11, 82,134,143, 63,250, 17,251,161,231, 48,120,118,251, 61,219,195,129,253,225,192,208, + 31,232,135, 65, 72,112,163, 39,248,192, 20, 11,201,108, 57, 72,138,164, 74, 41,214,231,151,124,233,151,126, 89, 56,219, 90, 47, +169, 97,186,116, 44,174,236, 81, 77, 17, 82,205, 7,198, 49, 93,237,206, 70,148,143, 60,246,102, 25,217,207, 7,250,241, 3,123, +206, 67,159, 57,231,199,193, 47,247, 44,108,206, 45, 10,208,153,210,198,226, 71,190, 75, 11, 91, 50,229, 99, 66,199,196,186,169, +249,173, 95,251, 85,190,255,195,239,145,115,228, 63,250,103,255,156,205,205, 75, 54,219,237,207, 13,109,249, 89,135,123, 94,136, +126,234, 40,234, 85,125, 78, 89,173, 11,253, 47,163,104,154, 21,182,174,238, 40,103, 37,216, 98,166,225, 29,191,119,243,244, 34, +198, 57,184, 37, 45,162,190, 88, 40,100, 58, 11,255, 64,124,246,133, 61,127,212,201,206, 76,131,121, 79, 76, 78, 84,206, 96,116, + 49,126,228,187,168, 83,238,125, 94,250,232, 8,157,197,116,185,104, 29,242,242,112,158,209,158,119,113,155,178, 27, 59, 94,177, +136, 80, 80,151,196, 63,121,136,132,148, 75,124, 36,116, 37,182,114,115,253,106, 73,103,122,125,111,190,216, 55,181, 40,157, 5, +103,233,137,217, 23,182,125, 81,225, 55,173,236, 30, 67, 16, 37,172, 82, 18, 15, 89, 80,173,117,183, 46,146, 10,185,238,151,185, +139, 86,212, 39,103,203, 1, 61,175,188,100, 4,110,138, 54, 68, 17,162,132,202,228, 66, 1, 20, 58,154, 64, 49, 4,177, 43,110, + 20,178,164,253, 25, 99,136,201,151,189,186,198,247,187, 34, 40,147, 3, 32, 5, 65,112,198,121, 28,159,228,247,202,150,238,204, +218,226,137, 22,152,136, 93,173, 57,127,235, 41,166,233, 24, 55,183,146,100, 55,201,232,222,212, 98, 73,178,206,201, 88, 59, 38, + 14, 55, 55,228, 48, 45, 66, 83,109,172,160,120,251,253, 34,220, 19,107,155,145,255,127,241,148, 7,223,203,103, 88, 10,143,153, +239, 80,181,181, 0, 63, 10,233,176,170, 92, 57, 8,100,122,112,184,189, 38,142,131, 68, 75,143, 7,252,208, 83,183,141,116,250, + 37,171, 93,105, 5, 70, 48,163,217, 57,153, 46, 84, 53,196, 76,240, 35,227, 48, 16,167, 81,158, 49,182, 42, 55, 79, 20, 97, 93, + 41,116, 4, 29,170, 57,127,235,169, 92, 83, 5, 77,157, 67, 44, 66, 62, 45,239, 77,242, 18, 46,101, 4, 68,149,166,161,104, 36, +214, 98, 43,156,198,133, 34,152, 10,192,132,194, 79,152,113,180, 74, 25,234,149,140,148, 87, 23, 15,139, 80, 95, 51,245, 3,222, + 15,130,196, 53,150,135,239,127,145,211, 71, 79, 88, 61,120,200,250,193, 99,161,198,149, 49,244,188,246, 66,101,129,118,189,251, + 62,202,213, 68, 12, 89, 43,134,126, 75,242,131, 20,192,202,224,170, 10,215,201, 78,221,117, 39,130,183, 86, 6, 99, 53,186, 36, +137,234, 82,105, 87, 77,131,237, 86,116, 39, 23,216, 50,249,176, 93, 71,213,173,200,126, 44,197,173, 34, 28,246, 66, 13,212, 74, +248, 16,211, 72,152,119,218, 5,139,110,173,132,243,104,115, 87, 88,205,228, 69,148,198, 85, 21,202, 58, 92, 85,129,130,118,125, + 90,176,174,213,178,182,171,219, 14,162, 76,160, 82,136,128, 64,151, 66, 10,140,251, 3, 58, 73,120, 80, 8,129, 28, 36,139, 67, + 87, 53, 85,229, 74,188,178, 20,183,211, 56,146,189,168,229, 83,150, 40,234,186,145, 17,123, 78,119,177,221, 49, 6,234,110,133, + 15,113, 81,222,123, 31,208, 40,148,169, 92, 54,186, 42, 15,163, 80,160, 28,186,140,200, 68, 68,164,141,166,109,133,197, 27,124, + 98, 26,101, 39,227,189,151, 81,189,149, 49, 82,246, 35,171,147, 83, 34,136, 74, 59,138, 61,237,228,228, 4,235, 44, 7,159,136, +185, 80,180, 92, 77,189,106,184,120,252, 46,221,233, 37,103, 15, 30, 82,119,107,214,167,167,124,252,103,127, 68,216,221,146,115, +184, 3,207,164,204,245,139, 79, 57,105, 27, 98,132,186,174, 24,251, 45,181, 17,181,237, 52, 77, 12,227,184, 16,225,252,228, 9, + 94, 68,112,169, 28,230,243, 77,190,140, 38,181,229,236,225, 83,222,251,194, 23, 36,240,100,238,224,202, 27,172,203, 7, 63, 87, +179,179, 34, 61,197,184, 80,212,142,249,232,233,136,166,118, 39, 16, 11, 50,242, 42,129, 33,198,152,123,244,178,101,164, 59,179, +217,103,220,170, 18,146, 89, 42,241,175,199,136,214,121, 4,239,189, 95, 48,171,243, 40, 57, 6, 25,135,174,234,138,183, 31,158, +243,253,191,249, 46,155,195, 30,239, 61,239,125,240, 69,126,240,189,191, 98,187, 59,208,247, 35,199,197,220, 47,162,152,254,124, +247, 30, 63,135, 71, 61, 38,184,133, 4,174,169,105,186, 53,202,222,241,252,117,113, 22, 28,103,192,207, 41,105,199,223, 71,171, + 59, 75,153,214,119,133,139, 45,147,130,231,159, 61,147, 49,105,140,159, 19,240, 29,227, 82,180,202, 52,165, 3, 75,197,173,144, +239,248,186,247, 82,178,238,212,237,105,241,176, 79, 62,148,110,189,136, 21,179, 94,248,242,115,129, 51, 3, 85,142,127,213,117, +141, 82, 98,235,201,139, 37, 76,246,170,151,143, 30,227,189,103,115,125,117,111, 84,254,250, 4, 69,148,188,229, 16,201,243, 13, + 61,145,115,162,114, 13,193, 71, 92, 85, 9,246, 53, 76,196, 40, 2, 43,235,172,120,144, 11,247,193, 24, 75, 44,228,185,156, 3, +228,162,250,213,242, 26,181,117,228,233,128,159, 60,174,145,152,215,249,189,141,229,122,167, 96,123, 82, 89,109, 88,107, 8,197, + 22, 20, 39,209,125,100, 35,216, 79, 99, 68, 36, 90,117, 13,195,237, 13,214, 58,130,151,140,131, 20, 37, 48,199, 53, 53, 33,133, +101,197, 81,175, 86,178, 75, 14, 94, 68, 87,195, 1,237, 42, 50,170,116,151, 35, 74,207,162, 71, 39, 99,102, 91,225,180, 33,146, +136, 94,138, 29,241,163,231, 50,182,207, 98, 77,165, 36,215,217, 10,215, 52,119,247, 90,140, 36, 47,235, 62, 99,181,168,155,141, +146, 88, 87, 99, 36, 72, 68,137,210,222, 15,123, 81, 85,231,132,214,118,177,221,106,227,176, 93, 71,152, 2, 42, 70,236,170,197, +168,138, 76,100,218,109, 36,144,200, 40,146,177,204, 97, 4,139,179, 34, 69,177, 61,133,128, 63, 28, 72,222,203,206,182, 8,250, +156,109,104, 26, 73, 23, 75, 49,225,125,164, 62, 59,195,239,183, 36,239,169,187,149,236,126, 55,183,242,220,210,242, 60,142,227, +136,174, 43,121,253, 41, 98,235,150,156, 53, 85,123, 2,113,162,223, 92, 19,194,116, 84,220, 74,126,135, 43,185, 2, 74, 25,218, +211, 83,153, 40, 93, 62, 64,215, 53,182, 93,227,180,198, 7, 95, 16,192, 70, 0, 80,198,144, 82, 96, 60,236,229, 90, 73, 9, 63, + 28, 24,119, 27, 14,183, 27,180,134,230,226,193,146,195,174,141, 33,249,136, 31,123, 82,156, 56,121,240,136,148,181,172, 24,154, + 53,193,247,184,110, 69, 46, 98, 54,101,107, 9,231, 41,153, 9, 41, 6,201,174,139, 17,109, 13,166,178,132, 97,146, 21, 76, 6, + 21, 70,108, 41, 94,134,205,141, 8,135, 99, 92,132,203, 42, 73,152,144, 2,148,117, 34, 86,179, 22,219,212,114, 14,204,153,231, + 41, 97,108, 69,138,129,105,242, 84,109,135,117,150, 97,191,163,105, 86, 36,149, 8,195, 88,252,227, 65,166, 54,206,129,117,212, +171, 21, 83,193,165,147,165,152,215, 85, 3, 33, 72,161,163, 13,193,135, 50,242, 87,139,223, 92, 44,183,242, 76, 9,105,126,222, +204, 52,189, 73,114, 20, 98,148, 32,164, 28,197, 94,170, 16, 18,100,185, 79, 45, 80, 48,142,110, 97,108,235, 82,125,172, 86,107, +198,113, 96, 42, 55,236, 56,142,184, 82, 65, 43,149, 72,217,139,220, 41,138,122,155,156, 49, 10,214,171, 53,155,156,197, 2, 48, + 14, 88, 45, 33, 14, 4, 79,240, 94,114,110,199,158, 56, 57,134,155, 27,169, 90,180, 41,227,232,128, 5, 78,215, 43,156,179,104, +173,168, 92, 37,209,149,211,192, 38, 78,120, 47,140,222,186,174,208,185, 98,119,243,146,148,194, 29, 25, 46, 68,124,144,195, 60, + 22, 47,232, 34, 96,155, 31,160, 74,113,114,118,193, 59, 95,250,146,252, 12, 71,156,115,217,177,136,240,205,154,146, 72,150, 67, + 1,124,136,203,217, 20, 74, 89, 76,162, 28,181,214, 82, 85, 85,233, 44,147,140, 54,181,161,109,170, 69, 76, 39,126,217,226, 31, + 95,186,118,241,251,106,173,113,165,160, 80, 41,149, 15,210,209,212,134, 97, 28, 8,161, 88, 29,138,189,111, 62,224,231,209,104, + 42, 10,122, 91,215,212, 64, 99, 18,127,246,103,223,166, 31,101, 21, 17, 99,100, 56,236, 81,100, 42,103,152, 38,125,151, 61,254, + 26,150,247,245,238,251,103,217,161, 94,223,167, 23, 18,170,160, 85,115, 46, 1, 26, 50,126,180,152, 5, 76, 19, 99, 90, 16,185, +119, 42,244, 35,251, 92,177, 83, 37, 53, 71,168,138, 14, 98, 6, 16, 37,163,142,160, 43, 63,199,202,149, 51, 85,101,151,232, 77, + 85, 56,180,234,136,121, 48, 23, 87,220, 67,214,136, 47, 54, 33, 93,169,210, 80,219, 6,227,172, 64, 31,128,113,232,101,172,103, +220, 50,206,227, 8, 74, 52,142,227,162, 63,200,121,246,252,203,251, 21,124,144,170,252,104,186,243, 57,140,155,182,104,215, 20, +100,109, 22,129,214, 20, 36, 86, 84,233,162,228,181,242,112, 46,158,109,167, 5, 12,227,199,210, 93,207, 32,169,201,163,180,162, + 89,159,160, 85,226,176,221, 18, 99,194,232, 8, 89,147,198,177,216,129,140, 92,247, 85, 35,202,239, 24, 72,125, 47,120,212, 73, + 58, 64,173,197,161, 48,141,195,178, 67,143, 57, 99,181,232, 37, 92,201, 53,239, 86, 43,134,195, 30, 87, 58, 13, 93, 10, 85, 99, + 42,148, 74,139,125, 53,233,132,209,150,225,112, 16,222,133,130, 20, 2, 57, 38,124, 56,160,181,145, 38,193,128,171, 90,156,177, +101, 29,209,202,244,161,164,119, 85,117,203,216, 79, 98, 7, 42,152, 91, 17,202, 89,177,149,185,134,172, 52, 62, 39, 12, 48,237, + 7,185,145,231,156,130,152,100, 20,156,133, 2,103,234, 70,186,224,190, 47,208, 28,181,140, 93, 83,140,210,217,106, 83, 10, 38, +201,249,182, 93, 3, 73,161, 79, 90,226,112,144, 3, 44, 75, 97,225,251,219, 5,157, 45, 9,108,101, 38,180,151,136,232, 92,162, +122, 83,142,212,205,169,248,236,147,103,119,115,189, 4, 52,105,224,240,234,153, 76,227, 92,205,161,223, 75,166,248,194,130, 40, +175, 5, 32,102, 70,223, 75,129,149, 7, 98, 12,178,222, 48,118,113,250,184,102, 77,187, 58,161, 41,224,149,238,100,205, 20,164, + 80,148,142, 59,224,131, 76, 59,199,253,150, 49, 38, 98, 24,197,101,226,106,166,225, 64,242,178,110, 2, 69,211,173, 9, 83, 47, +201,122,109, 71,213,157,130,211, 76,251, 61,113, 24, 80, 90,227,195, 36,162,198,202, 80,153, 83,137, 21,237, 58,226,212, 19, 75, +154,162,239, 15,203,179, 82,135,128,107, 87, 12,251,145,232, 7,148,213, 88,219, 72,168, 82, 85,147, 38,177,246, 78,195, 30, 5, + 84,174, 34,135,137, 48,236, 89,159, 95,128,115,164,113,100, 56, 28, 88,157, 93, 98, 84, 46,174, 36,150, 41,169, 80, 15,181, 48, + 48, 74, 94, 5, 42, 17,211, 40,215,132,159,240, 36, 82,168, 80, 10, 9, 35,170,220,130, 28,214,214,112,178,126, 64,156,196, 46, + 61,238,246,104, 39,141,151, 46,118,232, 28, 5, 68,163,157, 45,215,130, 88, 57,181, 49, 76, 67,143, 53,154, 80, 38,225, 49, 6, +180,213,196, 36,120,226, 48,149,231, 68, 17,100, 83,105,140, 66, 4,164,218, 96,107, 39, 43,190,113,196, 26, 45,251,155,105, 44, + 17,114,214,150, 40, 56,176,214,208, 52,103,146, 62, 54, 78,232, 70, 14,166, 76, 68,107,119, 39,188,202, 18,167,106,173, 45,234, +234, 76, 93, 87,172,234,154,151, 37, 43, 59, 21, 26, 85,242,158,132,151, 49,119,152, 72, 74, 18,205,194,140,209, 36,131,134,151, +251, 87, 92, 94, 92,208, 31,122,166,105, 36,133,204,233, 90, 70, 87,135,221, 65, 84,163, 39, 39,152,213,154,243,199, 31,176,185, +126,206,245,237,103, 75,148,102, 90,108, 92,119, 25,198, 50,142,213, 75,168,194,201,217, 25,159,254,244,167,212,133, 89, 61,231, +112, 27,123,196,249, 86,122,177,184,220, 37,194, 73, 36,232, 44,162, 51, 71, 1, 39,226,237,149,239, 49,179,219,149,146,180,174, + 76,201, 21, 47, 1, 54, 51, 20,134, 35,170,156,117,142,170,170, 80, 40,198,105, 98,115, 59, 44,157,120, 88,162, 75, 53, 77,211, +200, 13,114,164,184, 79, 33,113,121,178,162, 81,145, 63,255,139,239,136, 56,107,154, 74,167, 15, 97,216,242,240,226,148,205,118, + 95,144,184,211,231,198,190,111, 82,180,191,233,144, 63, 14,147,153,223, 99, 81,226,151, 66,195,106,180,181,133, 43,144,153, 74, +118,249,220,145,223, 81, 97,213,178,135,141,113, 6,246,132,101,197, 49,143, 56,245,145, 56, 47, 70, 24,246,253, 2,238,121, 61, + 89,238,120,140,110, 52, 56, 87, 82,169, 99, 42,246,107,125,143, 91,159,231,252,117,197, 17, 64, 72,145, 77,197,234,228,156,126, + 24,201, 33, 96,148,102,236,123, 80,241, 46, 26,211, 88, 92,211,242,228,225, 91, 40,149,249,248,199, 63, 42,171,141,227, 81,250, +113,108,182,220, 7,227, 56, 46, 58,150,159, 49, 14,161,174, 27, 66,138,101,148, 89,248,242,202,226,227, 88,186, 35, 33,236,205, +233,124,214,213,248, 97, 36, 71, 47, 96,163,130,218,213, 42,139,149,212, 74,186, 83, 80,165, 24,202,101,143,108, 21,202, 9,246, + 56,250,132,213,166,208,252, 34,132, 88, 70,251, 94,236, 99,182,102, 26, 7,121, 99,149, 16,186,100, 34,160, 9,113,162,106, 79, +136,211,132,113,150,105,146,177,126,213,117,140,253, 32, 5,112,140, 4, 21, 48, 40, 9, 37,162,116, 45, 73,194, 86, 68,248,102, +136,253,142,156, 11,210, 21, 45,133,212,148,113,173, 0, 90,194, 56,149,184, 86, 95,196,152, 19,253, 32,226, 56,227, 4,231, 41, + 7,168,172, 6, 82, 41,204,181,118,144,228,103,203, 74,152, 13,218, 72,215, 29, 66, 57, 28,149, 70,169, 64, 86,147,240, 50,148, +194,213, 13,126, 60,144,115,146, 67, 60, 75,183, 71, 78, 76,195, 1,165, 12,205,233, 9, 83,144,181,161,239, 15,100, 63, 44, 19, + 14,121,198, 33, 25, 12,165,128, 77, 73,118,230,198, 24,210, 52,148,235, 83,254,238,176,219,210, 89,199,238,246, 26,103,141,136, +149, 83,194, 84, 14,229, 5,206,149,198, 3,170,178,242, 94, 90, 91,148,221,147,168,236,181, 38,145,208,182,194, 86, 21, 85,211, +226,186, 78, 24,225,198, 82,183, 45,174,110,169,154, 26,109,170, 34,130,126,201,238,246, 10,180,102,119, 53,162,172, 35, 6, 79, +216,111, 72, 89,209,118, 45,245, 74,104,110, 97,242,104, 45,170,235,186, 54, 12,219, 91, 17, 79,150,184,219,172, 20,251, 87, 55, +212, 77,141,169, 90,249, 28,181,220,123,140,194,100, 55, 85, 77, 56,236,201, 94,156, 14, 42, 37, 84,101,152, 98,160,173, 27, 66, + 24, 81,105, 66,185,122,209,189, 56, 87, 19,167, 9, 91,201,253,169, 93, 77, 56, 92, 99,157,101, 10, 17,140, 98,183,189,161,114, + 21,218, 88, 17, 44,135, 9, 99, 44,245,170,163,170, 42, 14,219, 45,121,242, 68, 50,214,233, 99,177, 80, 17,237,170, 69,215,144, +185,155,196,218,170, 38,101,141,173, 26, 80, 3, 62, 69, 52,224,199,145, 20, 3,253, 86,225,170, 90,168,135, 41,147, 14,101,138, +165,164,240, 27,251,131,172, 6,212, 26, 83,116, 21, 50,129,128,186,149, 53, 18,193, 75, 61,111, 52,218, 86,228,232, 33, 38,140, +179,168,194,212,239,214,235,187, 53,102,209, 32,105,175,241,131,151,107,247,242,225,131, 76, 74,236,247,123,241, 69,151,132,167, +217, 86,112,204,125, 94, 66, 43,172,101,183,221,202, 40,131,153,148, 3,206, 90,218,182,165, 91,203, 72,200,143, 19, 67,121,152, +167, 24,137,153, 5,109, 9,144,141,154,123,222, 69,184,163,114, 70, 35,123,171,203,139, 11, 66,142, 76,227,200, 48,244,156,173, + 59,166,201,139,186, 56,137,234,207, 53,141, 64,243,235,134,243,211, 51,198,194,105,150, 67, 34,210,247,123, 66, 12,164, 56,143, + 87, 29,221,122, 77, 93,215,244,135, 3,219,155, 77,121, 56,189,198, 31,215,234,104,111, 74, 17,129,148,124,242,124,140, 33, 61, + 2,179,168,251,172,243,187,144,148, 55, 24,130,185,235, 12,151,172,101,165,142,128, 45,175,131, 69,212,231, 20,208,188, 70,122, + 67, 65, 61,135,195, 20, 97,159, 88,188, 50, 86, 25,126,253,215,190,206,205, 26,201, 54, 75, 0, 0, 32, 0, 73, 68, 65, 84,205, +134,237,126,207,245,205,142,253,232, 23,203,221,155,188,229,233,181,108,245,159,213,189,139,135, 93,149,201, 65, 65,252, 58, 11, +218,144,185,139, 82,157,211,168,230,195,124,166, 59,205, 48,159,227,174,127,222,113, 11,171,125,134,249, 20,174,119, 8,244, 37, +199,252,117,139,215,241,161,174,138, 15, 84,171, 84,186,114,150,113,214,113, 64,208,113, 26,214, 44,134,114, 77,199,234,228,156, +113,242, 12,253, 1,171,149, 92,203,214, 8, 94,210, 24,124,185, 1,219,174,195,218, 74, 70,223,198,136,224, 49, 75, 39, 32, 98, + 74, 41, 52,239, 89,253,170, 90,174, 81,239,223,248,158,186,170, 45, 22, 48, 1, 77,184,186, 70,105,135, 34,209,239,110, 23,207, +243, 92,148, 44,144, 24, 37, 84, 42,237,236,162,231,240,147,167,106,107, 73,105,139, 1, 84,150,189, 34, 25, 91, 75,140,168, 50, + 70, 2, 48,130,172,179,148,177,152,202,225,234,142, 56,141,140,251, 29,166,114, 24, 43, 22, 47, 91, 50,164, 33,211,111, 55,146, +251,236,106, 41,144, 80,197,205,209,200, 52, 47,149, 14,184, 64,127,178,204,189,139, 54, 68, 45,110, 5,215,118, 40,237,176,221, +154,105,115, 85,130,160, 44,211,184, 45,241,158, 53,117, 85, 49, 14,135, 37,108, 38, 83,118,248, 33, 16,167, 94,208,172, 40,225, + 52,204,176,170, 34,185, 80, 86, 14,121,138,118, 67, 27, 17, 20,230,162,116, 87, 57, 72,161, 93,236, 92,202, 57,121, 52,232,146, + 28, 24, 37,215, 91, 70,245,242,181,105,154,168,187, 86, 30,184, 49, 10, 30,182, 64, 79,140, 17, 53,244,108, 59,245,211,192,126, +179, 93,160, 72,178,243, 78, 37, 37,112, 6,109,149, 16, 39,165,169,219,182,160,120, 69,231,160,141, 38, 34,197, 94,140,177, 16, + 10,197, 43,173,170, 6, 87, 86, 46,117,211, 80, 85,181,216,166,178,164,232,245,195, 64, 85, 57,188,151,201,158, 31,123,136,137, +172, 50,206, 85,244,251,173,172, 5,170,122,249,115,163,172,224,136,167, 1, 85, 85, 52, 39, 39, 76,189,176, 4,106,103,232, 15, +123,114,148,231,179, 2,154,245,169,216,235, 80,248, 73,124,219, 49,120,116,153,180, 85,221,186,192,110, 44, 41,140, 24,224,176, +187, 69,219,138,126,115,139, 53,142,186,109, 73, 74, 97,157, 43,235, 17,207, 52, 76,100, 13,149,171, 81,214,138,245, 48, 68,140, +162, 76, 10, 18,168,132,159,166,226, 0,113,216,210,168, 25,109, 24, 15, 61, 33,136,230,193,152,106,113,191,132, 24,139,218,223, +226, 71, 41, 90,133, 29, 80,180, 36, 83, 40, 40,235, 40,214, 61,231, 80, 57, 75,232, 80,153,204, 25,231, 36,246, 55,197,242,125, +181, 88, 4,103,157, 71,121,173, 89, 33, 1, 63, 22,226, 36, 2,224, 16, 60,196,128,171,203,218, 64, 21,158,129,214,203,202,192, + 86, 21, 42,139,152,122,190,142,140,117,232,202, 22, 17,172, 20,172, 49, 39,121,237, 57,163, 78, 79, 79,179,177,174, 8,175,132, + 5, 94,215,117, 65, 99, 74,151, 61, 39,134,205, 15,222,105,154,238,135,152,148,165,190, 49, 34,116, 51, 90, 14,249, 56,239, 38, +230, 78,176,188,153, 49,132,229,247,170, 36, 95,163, 64, 31,113,163,181, 82,212, 77, 77,202,130,114,205, 33,241,248,241, 67,110, +111, 55,101, 44,163,151,189, 68, 46,112,101,235, 92,161, 80,201,235, 92,173, 86, 75,188,105,211,180,244,195, 64,206,176,219,110, +217,237,182,164,169,255,156,239,250,115,221,104,193,155,170,252,198,227,249,115, 4,182, 55,158,223, 71,225, 51, 63,103, 89, 93, + 0, 32,247,255,254,155, 44, 99,111,250,183, 94,127, 45,199,127,231,209,197, 25,239, 62,185,100,179,221,113, 24, 6,174,110,183, + 12,211,231,129, 38,111,130,208,188,254, 58,222,100,119,123, 61, 85, 15, 83,172, 97,202,220,237,146,139, 48, 80, 23, 15,184, 88, +156, 18, 70,105,156,177,119, 32,152,215,152,248,203,117,100,164, 90,159,250, 93,233, 36,243,210,253,190,233,245,222, 17,241,242, +178,211,254, 89,157,241,204,221,183,214,209,118,107,178,182,248,224,169,235,134,253,110,131, 51,138,201,143,162, 21, 8, 98, 63, + 18,127,168, 65,235, 59, 53,119,244,129,170,150, 73,203, 76,196,243, 97, 44,206,137,180,140,231,223, 84, 56, 45,175, 69, 59,108, + 83,139,154, 90,139, 56,199, 84, 78, 10,161,156, 24,125, 95,178, 17, 28, 42, 75,154,215,140,140, 84,170, 66, 31,233, 59,102,113, +166,113, 78,146,195,180,198,199,113, 97,192, 27, 83,129, 81,104, 37, 59,247, 28, 99, 25, 67, 10, 45,203, 52, 43,172, 49, 12,219, +237, 66, 0,140, 36,170,238, 68,196,144, 33,226,167,190,116,159,162,202,151,107, 33, 20,193,153, 65,105, 43, 99,200,163,251, 59, +149,189,190, 82, 70,214, 12,214, 10,183, 90, 91,170,213,154, 48,246, 40,163, 9,135, 67,193, 27, 87, 24, 87,108,115,204, 58,153, + 84, 10, 5,241, 26, 83,188,232,179,207, 61,149,166, 68,235, 12,218, 81, 53, 45,126, 26,228,224,205,185,140, 62, 5, 98,148, 98, +144, 3, 73, 73,138,225, 44,114, 93, 16,195, 74,137, 93, 45, 43,116,229,138,189, 78, 9,119,220,139, 14, 97,154, 36,169,142,152, + 80,214, 98,173,198,106, 43,137,138, 69, 12, 56,236, 15, 66,153,155,111,112,117,103, 43, 68, 41,148,171,201, 89,209,173, 79, 48, + 77, 35, 20, 57, 99,113, 93, 39,205,214, 65,112,168, 18,166,114,130, 3,129,103,249, 81,108, 93, 33,162,171,154, 41, 38, 76, 18, +151,142, 81, 26,219, 84, 82,156,228,204, 52, 12, 66,236, 43,215,137,109, 86,132,126, 91,226,141, 37, 53, 80,107,205, 52,140,100, +173,201, 97, 4,165,105,186, 85,137,212,173,202,251,164,200,195,192, 56, 78, 40,147,168,171,154,164, 28, 49, 76,146, 47, 30,228, +240, 83, 41, 20, 27,157, 47,161, 80,250, 46,108,202, 89,185,222, 38, 65,184, 38,173,113, 85,205, 52, 12,229, 90,138,248, 65, 86, + 42, 77,183, 46, 20,193, 36,153, 1, 25,198,221, 70, 26,173, 36,103,151,117,142,105, 28,200,229, 51,136, 62,162,109,105, 42, 42, + 71, 14,178,110,182,110,158,206,200,148,137,210,220, 4, 31,150,230,204,160,176,117, 89,169,198,178,126,205,226, 44, 8, 67,225, + 37, 40, 9,176, 81,128, 31, 4,110,163,180, 41, 5,115, 83,172,134,229,185,105,156, 4,202,228, 84,162, 83,101,108, 63,147,196, +165, 24, 17,202, 93,206, 72,241,146,196,134,167, 75, 17,159, 10,220,204, 56,119,231,122, 10,242,254, 46,141,161,117, 46,207, 15, +153,170,114, 71,157,203,220, 85,231,123,132,171,227, 7,187, 41,157, 23, 57,211,156,172, 57, 28,246,165,143,212,228,164,238,212, +197, 71,113,170, 40, 85,246, 21,119,135,250,189,110,235,232,127, 59,107,139,210, 87,212,239,111, 63,125,139,171,171, 43,188,143, +139,197, 68,110,182,185,210, 85,203, 65, 48, 31, 28, 57,229,123, 29,238,146,205,157,197,115,251,243,196, 96,233,232, 80,254,197, +100,100,159, 63,224,223,212,225,190,233,235,121,161,122,253,130, 69,192, 47,248, 58,148, 82,188,245,224,132,166,170,152,250,129, +253, 48,114,152, 60, 49,203, 65, 52,163,103,127,158, 56,238,103,119,234,234,158, 72, 80, 78, 28, 85, 42,203,197, 69,125, 47, 12, +229,120, 39,191, 92, 83, 71, 25,240, 75,128,143,214, 56,107,201,170,196,108, 78, 19,253,246, 22,227,172, 8,147, 20,111,156, 52, + 28,167,142,221,229, 88,155,207,173, 27,238,189,158, 34, 94,170, 91, 17,233,120,239, 89,157,156, 46, 74,227,152,226, 81, 65,122, + 36,158, 76,249,158,151,159, 50,246,173,171,154, 76,146,125, 99, 41,110,195,228,239,189, 87,175, 59, 40,140,173,208,182,146, 3, + 43,140, 18,110, 1, 40, 39,212,189, 56,141,196, 52,149,117,142, 66, 97,202,136,176, 88,238,112, 34, 30, 42,126,239, 84,186, 82, + 83,176,146, 33, 4, 80,113,185,151, 99, 20, 20,103, 93, 75, 44,165, 42,130,186,170, 91, 49,238,110,209,182,150,245, 78, 12,203, + 26,193, 56,131,105, 86,139,208, 44, 76, 3,166, 20, 49, 51, 54, 89,151,135,142,173,220,226, 90, 32, 20,119, 64,140, 40,107,101, +119,238, 39,201, 87,112, 21, 49, 4, 76,229,100,170,166, 37,179,156,178, 38,209,214,201, 94,185, 36,192, 41,173,164, 11,212, 74, + 70,221, 57, 9,176, 67, 59,172, 43,137,107,185, 4, 3,165, 40, 99,232,166, 19,139,214,145,174, 38, 23,203,174,201, 81, 96, 48, +101,204, 61,187, 82,100,194, 99,138,202, 95,192, 48,218,150,206, 61,196, 82,140,100, 17,240,161, 56,185,120, 68, 54,144,189,120, +158,109,187, 34,151,213, 69,240, 35,126,156,216,190,248,152,148,203,154,206, 20, 5,181,213,216,118, 45,156,249,186, 33,197,192, +176,189,165, 61, 61,195,214,174,164, 45, 86, 88,173,136,101,229,151,208,248,253, 78, 86, 90,206, 17,134,129,186,173,151,231,156, +178,150,105,156, 36, 34,183, 68,199, 78,135, 29,227,126,183, 20, 63,200, 98, 20, 87,117,160, 21, 81, 89,116, 18, 24,139, 43, 42, +252,113,216,210,158,156, 9, 51, 36,201,148, 66, 18, 39, 13,126, 26,228, 25,175, 53,227, 97, 79, 93, 94,187,107, 90,146, 50,212, +117, 67,191,185,149, 34, 94,105, 98,152,152, 14, 59,113, 21,116, 45,218, 84,203,117, 50, 14, 67, 17, 17, 42,209,179,196, 32,162, + 61, 35,250,164,170,112,249,229,240, 44, 65, 66,211, 64, 24,229,186, 21, 97,182, 34,132,169, 8,113, 11,141,173, 36,183,105,103, +150, 51, 39,229,194, 14, 40,137,133,193,143,133,140,215,144,179, 39,166, 66, 13,205,119,115,100, 17,184,105,140, 50, 36,226,172, +116, 46, 34, 86,185,174,181, 49,132,105, 64, 91, 41, 34,195, 32, 73,154,174, 59, 97, 60,136,215,190,233,218,133, 77,111,172, 22, + 60,110, 17, 80,162, 53,209, 79,114,175, 78, 99,209, 32,201,251,144, 98,196, 89, 43,175,167,132, 50, 73,129, 20,203, 53,228,200, +193, 99,173,173, 69,180, 18,131, 8,123,150, 69,169,186,183,139,158,247,190,138,187, 17,102, 76,130,225, 91,173, 79,184,184,184, +224,176,219, 21,185, 49,139,122, 48, 33, 35,122,133,189,235, 8,231,152,206, 55,224, 80,142,255, 44, 38,217,105,228, 44,177,170, +198,184,162,216,150, 29,172, 84, 56,234, 78, 92, 5,101,252,117, 63, 64,114, 57,224,103,102,187,254,249, 32,150,165,243,203,111, + 72,160,252,127,113,176,254,194, 5, 64,254,255,246,111,253,172,239,191,219, 29, 8,110, 98, 28, 3, 67,177, 80,213, 90, 18,219, +156, 53, 76, 62, 83, 57,177,246, 76, 33,222,255, 64,142,138, 45,117,180, 34,120,125, 42,112, 15, 21, 27,197,194, 49,139,209,178, +206,100,125,132,157,205,243,167, 38, 7,147, 46,185,211,177, 84,220, 40,177,158,169,164, 8,227, 40, 22,163,236,232, 15, 91,249, +122, 58,238,192,255,182,247, 91, 23, 17, 30, 64, 88, 46,239,255,135,182,119,123,182, 45,187,235,251,190,227, 58,231, 92,107,159, +107,247,233, 86, 95, 37, 97, 33, 1, 78,217,152,150, 64,232, 90, 96, 4, 50,134, 22, 32, 83,101,236, 36, 85,182,137,157, 34,148, + 19, 76,128, 0,126,224,159, 72,133, 84,156, 84,229,217,111, 49,149,188, 17,192, 72, 72, 8, 12,182,193, 6, 74, 18, 82, 75,106, +245,233, 62,221,231,182,215, 90,115,142,107, 30,190,191, 49,230,220,187,143,132, 69,146,166, 84,146,104,245, 57,251,172, 53,231, + 24,191,203,247,251,249,242,142, 85,235,190,219,208,186, 82, 18,187,157, 44, 5, 45, 74,129, 42, 21, 49,100,236,247,123, 28,203, + 81,226, 68,171,136, 20, 53,195,115,234,202,145,231,244, 74, 46, 81,185,208,186,207,222, 40,233, 44, 86,235, 98,149, 82,221, 88, +143,170, 50, 74,153,201, 79, 40, 10,202, 82, 56,101,165,226, 51,154,222,255,210,138, 32,137,251, 77, 49,136,210, 57, 33,205, 11, +252, 64, 18,149,119, 14, 73, 46,198, 84, 43, 82, 34,147,221, 24,142, 70, 81, 11,106, 81,152,143, 71, 88,203, 61,164,117,158, 29, +158,223,179,120, 87, 21,185, 68,164, 90, 96,221, 64, 49,147,228,164, 43,109, 96,148, 70,140, 39,248,129,216, 81,130, 86,232,199, +205, 81,222, 83,105, 18,232,207, 38,181,141,142, 8, 81,239,166,200,241,125,173,107, 36,111, 38, 70, 22, 66,221, 82,202, 72,167, +146,160,138,240,217,151,133,187, 99,101,228, 89, 98,122, 86,173, 69,236,107, 22, 0, 17,166, 57, 5,241,157,179, 83,111, 9,134, +186, 86, 20,205,213,159, 17, 77,145,210, 6,181, 40,185,192, 34,178,100,114, 87,244, 96, 8,129, 41, 53,208, 20,245, 26,122,154, +224,252,196,221,121, 45,200, 49,193, 78, 59,114, 14, 36,190,249,250, 83,111,195,120,182,135,214,134, 12,138, 38,118,205, 12,198, +210,206,146,174,231, 12,118, 2, 95, 41,165,192, 15,212, 51,148,148, 17,107,128, 53,252,190,171, 82,192,114, 34, 32,236,200, 63, + 67, 41, 9, 58,106,118,123,161, 98, 57, 62,228,251, 37,144,177,106, 20,156, 85, 8,167, 83, 79, 24,211,198, 96, 24,207,144, 42, + 71,238, 41, 39,185,140, 21, 78, 15,239,241,121,149,110, 86,247, 9,157, 70,174, 25,195,110,135,179, 43,215, 16,194, 66,253, 78, + 12, 72, 49, 33,207, 71,228,156,225,167,157, 92,182, 21,110, 28,145, 66, 68, 90, 2, 74, 58, 2, 90, 97, 62,175,176,178,230,136, + 61,151,130,103, 74,156, 23,248,113,192,241,225, 34,211, 5,230,115,104, 89,177,150, 82,224,188, 68, 77, 75,113, 62,142, 35,194, + 50,179, 72, 30,216,253,198,152, 96,132, 46, 87,115,129,117, 86, 52, 40,169,227,169,195, 50, 19, 2,100,120, 54,198, 82,232,132, +176,150, 69,130,213, 8,121, 17,218, 39,109,125,214, 13,253,188,174, 57,119,135, 71,152, 79,208, 85, 97,119,229, 26,187,247,221, + 14, 70,175, 17,200, 69, 44,106,203,131, 7,112,251,189, 4, 6, 81,168,189, 44,212,168, 53,158,201, 48, 76, 84,203, 87,198, 55, +147,215, 47, 1, 22,185,240, 78,148, 36, 55,165,181,169,218, 74,176, 70,123, 49,148,196, 45, 86,244, 74,191,138,183, 24, 77, 85, +170, 72,176,186,126,227, 38,174,221,184,138, 47,252,249,159,203,173,201,202,182,200, 45, 90, 21,247, 19,181,208,251,221, 60,188, +125, 7,184,217, 99,111, 81,152, 93,133,172,184, 19,222, 13, 19,110,221,186,133, 59,119,238,224,116,154,153, 32, 94,202,155, 4, + 94, 91, 63,248, 54,178, 84, 89,166,133,213,194,113,111,150,139,237, 47,180,113,109, 26,253,250,136,168,209,175,127,153,126, 99, +221,253,255,159,127,121,163, 48,104,131, 84, 50, 98, 15,163,208,226, 87, 85, 82,185, 82,248, 83,170,186,176, 62,120, 19,211,172, +126, 99, 73, 95,253, 31,212,234, 66, 71,219, 50,214, 47,195,107, 46,106, 18,218,227, 65,156,112, 73, 17,222,143, 20, 28,126, 35, +197,146,122, 84, 86, 56, 95, 24, 99, 45, 47, 6,176,115, 50,134, 34,199, 38,166,107, 29,110,179, 40, 86,197, 36,178,150, 28,214, + 16,188,219,100, 62,109,188,164,208, 25,104,163, 16,194,210,215, 86,186,170,139, 57,244, 0,247,197,211, 30,243,204,168, 77,227, + 6,228,144,160,141,146,253,188,130,115, 35,209,153,162,220,213,218,176,123, 47,153, 18,144, 86,128,101,250, 51,172,117,125,117, +209, 0, 52, 20,232,104,161, 30, 70,228, 76,156,176, 31,119,244,223, 43,192, 57,238,173, 21,106,239, 70,115, 18,111,188,182, 98, +251,108, 28,134, 12,104, 22,211, 90, 93,180, 37, 66, 51, 42, 18,208, 92,179, 56,135, 28,104,169, 83, 50, 10,174, 69, 10, 35,109, +101, 39,159,197,167,110,164, 24,227,207,158,195,178,121,229, 54,216,220,158, 35,175,183,153,114, 93,160, 38, 86, 19,177,232,117, + 85, 39,170, 22,199,139,192, 81,170, 38, 3, 92,107,122,177, 57, 69, 17,228,112, 74, 40, 57, 72,166,248,208,249, 22, 57, 37, 24, + 71,113,152, 86,128, 25,175,226,250,211,207, 34, 11, 1,209, 58, 71, 17,109, 91,131, 72, 92,110,137,180,117,169,193, 3, 57,194, + 24, 47,110, 6,242, 65,116,101, 46,184, 49, 6,199,187,119,232,201,182, 22, 49,109,152, 12,146,234, 85,114,130,223,237, 17, 67, + 64, 13, 97, 29, 41,139, 64, 85,187, 1, 37, 71,140,251, 61,242,210,206, 77, 73,193, 52, 2,140, 1,177,217, 16,134,251, 26, 23, +202,226,198,121, 39,161, 54, 20, 46,150,154,145, 78,179, 36,152, 41,140,211,158,154,134, 40,246,188,249,196,115, 88, 50, 44, 84, +129,240,251, 13, 89, 2,181, 34,137, 62,165,251,255,115, 38, 28, 43,132, 46,166,229, 52,131, 66,176,150,104,231,252,128, 24, 35, +188,115, 36,252,213,194,181, 17,184,195,142, 33,138, 93, 80,193,248,145, 54, 49,235, 17, 79, 92,227,168, 74, 60,111, 35, 28,166, +156,100,116, 79, 66,160, 22,183,147,170, 21, 41, 71,185, 51,184,254,114,214, 9,245,143, 90,159,162, 10,156,159,128,156, 97, 70, + 22,194,241,112, 20,235,119, 64,142, 4,228, 40,205, 41,150, 21,114, 93, 19, 81, 49,229, 52, 11,123,191,194,250,145,191,127,206, +253,231,138,145,133, 67, 19, 28,115,205,109, 80,218,138, 45,113,146,173, 21,157, 17, 41,103, 24,235,135, 95, 81, 18,244,206,113, + 71,100, 66, 84,228,127, 46,210,246,215, 82, 89, 57,131,123,139,179,171,215,177,219, 95, 65, 74, 17,175,188,242,114, 23,151, 84, + 33,192,245,177, 55,149, 38, 28,191, 26,131,210, 14, 31,163,121, 64, 8,114, 17,154,202,105, 62,100,106, 61,160,100,116,234, 45, + 45, 16, 49,144,167, 94, 30, 97, 5,106, 7,101,171,222,182,251,226,188,161,106,233,166, 50,210,237,165, 55,210, 17,188,249, 95, +171, 8,174,253,124,205, 69,200, 74,233,242, 24,185,255, 11,234, 2,217, 12, 23, 48,175, 6,126,183,199,213,107,215,165,170,206, +184,113,243, 49,248,137,241,139, 90, 55,232,226,166,176,104,191,150,252, 44,109,135,162,154,162, 84, 93, 28,231, 27,163,241,244, +173,199,225,140,198, 28, 2,172, 54,120,230,137, 39,176, 59,219,227,252,252,156,162, 10, 40,105,120, 21, 45,137,221,218,165, 54, + 73, 93, 10,219,255,107, 15,100,197,215, 42, 88,234,133, 72, 87,106,126, 20,166,221, 30, 90, 25,212,210,246,189,156,107,173,235, +151, 53, 46, 85, 41,244, 10, 85,105,211, 65, 39, 41, 82,220, 85, 36,236,167,110, 62,146,203,233,113,111, 30,175, 95, 8,135, 69, +173, 32,141, 76,102, 67, 70, 68,160, 33,210, 3,190,132, 89,166, 65,124, 97,106, 3,228,136, 82,159,169,124,229, 66, 42, 95, 15, + 69,209, 10,218,104, 12, 3,217, 14, 60,104, 44,118,187,125,199,227, 54,129,105,109,184, 93, 99,248,125,180, 24, 69, 73, 93, 82, + 82, 69, 57,231, 80,228,123,170,149,235, 38, 99, 44,199,144,150,107, 0, 5,185,100,187, 26,141,130,197, 54,194, 4,179,197, 40, +246, 82, 74, 56, 20,141,211,206,238,127,216,157, 33,246,195, 63,247,202,180,234,214, 7,147,157,175, 21,117, 19,188, 60, 50,140, +113, 27,246,190,172, 21,188,196,254,214,194,125,174,106,197,143,192, 88,208,131,238, 69, 36, 84,161,106,102, 68,166, 29, 96, 60, +199,191, 57, 44,168, 37,138, 43, 66, 82, 17,219,184,114,243,220,212, 77, 50, 32, 39,129, 45, 71,158,238,137, 90, 55,236,245, 34, + 73, 87,150,158,240,225,236, 10, 42, 52,252,200, 9,199,180, 63, 19,116,177, 36,212,201,100,178,150, 36,191, 46,133,155, 10,149, + 83, 36, 63, 97,216,239,184, 2, 40, 66, 66, 12, 84,191,231, 24,176, 28,238, 75, 33, 82, 16,115,128, 1,189,239,125,143, 91, 50, +114, 78, 88, 14,231, 56,157, 63,224, 30,181, 22, 32, 39,156,223,123, 3, 57, 38,132,195, 1,105,225, 36, 36,204, 39, 10,182,106, +145, 51,147, 43,128,146, 51,130,140,225,141,177,112,206,194, 89,122,186, 75, 45,200,129, 19,150, 18, 35,166,179, 43,208, 70, 33, +158, 22,228,101,134,181, 22,110, 28, 96,157,133,245,140, 68,214,214, 82,121, 13,197, 21,140, 68,222,242,157,161, 7, 59, 47, 51, +223,122, 43,223,117,131, 68, 89, 11, 35,205,149, 27,185, 62,137, 33,200, 62,189,160, 40, 41,168,229,172, 94, 78, 51,140, 54,156, + 68, 21,230,145,167,176,192,106,186, 31,170,130, 20,188,238, 66,147,166,157,195,238,202, 85,228, 66, 63, 55, 74,162,197,249,120, +146,100, 55,130,124, 74,150,180,180,178,153, 42,214, 76,119, 1, 52,252,126,191,198, 63, 43,208, 30, 60,142,208,198,116,114, 91, +201, 25, 69, 41,104,203,117, 98,146, 73, 75, 77, 9,121, 14, 80, 37, 67,123,203,117, 81,164, 64,155,241,210,150,188, 10, 8,163, +164,242,140, 79, 37, 49,205,176,130,105,161, 49, 32, 37,137, 48,150,130,167, 2,253, 51,171,133,222,125, 93,229,182, 45, 92, 59, +181, 41,140, 86, 10,234,198,227,111,169,253,197, 18,232,124,169,124,153,115, 46, 40,109,127, 83, 86, 62,182, 42, 5,243,124, 92, +189,185,235,109, 41,119, 37, 71,135,171, 15, 80,242,102,197,179,169,149, 22,123,147, 21,251,152,233,106,245,154,248,224,240,103, +128,188,148,192, 48, 24,126,185,137,126,204,121,158, 59,116,228, 63,233, 47, 77, 15,174,247, 35,139, 62,109,152,155,219, 85,235, + 82,144,180,237, 67, 83, 18,162, 85,141,249, 77,173,183, 86,246,194, 58, 97, 43,184,170, 34,230,105, 59,155, 38, 76,218,237,247, +152,231, 5, 57,205, 66,125,178, 8,203, 17,126,216, 97,119,245, 42,140,124,249, 70,177,128, 57, 29, 30, 82, 24, 97, 89, 16,245, +171, 85, 90,217,157, 85, 88, 34, 87, 39, 74, 0, 45, 79,220,188,137,199,206,206,240,198,189,187, 56, 63, 28, 81,148,194, 59,223, +254, 86,168,148,241,210, 87,111,227, 16, 34, 14,226,135, 92,139,143,202, 62,214, 24,218, 50,154, 26,183,174,130,182,134,104,237, +223,185, 86,111, 82,172, 87, 81, 37,183,203,186, 42,142, 3, 7, 63,194,218, 1,203, 50, 35,151, 32,124,239,218,201,102,245,194, +164,133,151,174, 17,162, 20,138, 66, 10,139,196,124, 86,104,237,190, 97, 34,222,163,196,126,195,196,142,191,200, 78, 74,107,141, +170,120,120, 51, 53,142,172, 0,165,168,174,238, 26, 18, 77,202, 93, 78,185,127,247,107,135,174,229,103, 55,112,102,160,157, 16, +192, 48, 14,196, 63, 42,133, 16,102, 44,167,153,159,120, 87, 6,114,100,143, 28,101,194, 36, 42,118, 67,118, 67, 46,236, 10, 42, +128,146, 22, 1,176, 12, 72, 65,252,201,138, 93, 53,180, 88,242,180,163, 69,176, 71, 56, 2, 21, 9,165, 84,134,153, 40,177,248, +213, 42, 8,202, 2, 45,164, 53, 84, 30, 70, 74,183,238,183, 82, 12, 40,200, 91,198, 97, 82,229,109,134,145, 12,238, 13,196, 68, + 73,234, 30, 49,167,150,135,190,146, 85, 65, 46, 40, 53, 97, 3,253, 19, 16,157,172,231, 52,221, 53,195,180, 7,156, 70, 58,156, +144,230, 35, 69,106,122, 51, 50,147,132,183, 6,243, 49,146, 4,216, 42,197,214,149, 43, 45,185,239,218, 73,180, 46,189,212,165, + 97,136,219,115,221,124,222,226,113,111,170,120, 13, 42,197,107, 10,200, 53,139, 94,211,160,192,244,203, 69, 43, 45, 41, 89, 20, +235, 66,186,114,227, 61,140,159,216, 73,149,140, 24,131, 40,227, 7,140, 35,125,214,202, 40,132,121, 65,134, 98,206,188,102, 49, + 82, 50,225, 71,203,241,200, 95,203, 8, 76, 72,154,160, 44, 35,112,227, 44,204, 48, 64, 41,133,249,156,120,109, 63, 77,124, 94, +149, 70, 70, 69, 9,252,231,180,229,103, 27, 67,160,215, 95,166, 17, 75,138,216,159, 93,101,144, 87, 46, 12, 62,170, 5, 37,102, +216,221, 14, 49,156,160,229, 93, 45,125,202,166,132,159, 79, 64,202, 34,221,121, 21, 80,143,117,131,176, 56,170, 60, 27,220,149, +231, 24, 37,222,216, 98, 9, 1,206, 51,102, 90,149, 2, 37,168,225, 90, 42,198,113,162,224,173, 22,146,247,192,142,189, 77, 62, +232,200,140,130,243, 70, 47, 20,105,245, 20, 23,140,124,255, 41, 70, 64, 85,126,111,181,194, 13, 35, 45,145, 0,172,227,168,219, + 12, 3, 47,243,102, 83, 22,189, 76, 3, 96,181,238, 91,107, 77, 91, 33,148, 92,162, 26, 49, 4,148, 18,145,226,194, 2, 96,216, + 65, 91,135, 20,232, 94, 25,252, 64,164,110,201, 29,160,131,170,101,114,144, 68,187, 70,231, 74, 5,237,107, 28,198, 4,153,166, + 86, 57, 87,100,181, 18, 98,231, 62,148,166, 37,107,195, 80, 62, 31,122,149, 97,242,182,144,241,156,238,130,178,214,157,224, 2, +158, 99,211,149,169,186,233, 34, 91,151,160,250,248, 70, 65,131, 4, 26,221,115, 96,181, 53,112,195,136,157, 80,122, 98, 76, 8, + 97, 70, 8, 1, 70, 41,120,163,225,252,216,115,171,189,183,120,233,115,127, 2,212,140, 28,203,133, 81,231,229, 49,252,229,127, +103,124,166,130, 31, 7,164, 12,252,149,119,126, 43, 25,204,206, 98,240, 94,188,222, 43, 51,156,187, 63,221, 71,125,107,124,169, +128, 54,164,211,210,154, 99,197, 54,206,108, 72,209, 45,223,189, 20, 6, 50,220,254,242,151,112,247,181,215,176,219,239, 48,207, + 39, 17, 34, 38, 33, 83, 37,190, 4,178, 87, 27,166, 29,115,158, 67,160,146, 90, 43, 76,187, 51,156, 93,185, 6, 63, 12,176,206, +245, 42,238,155, 31,223,225,229,219,175,226,193,131,115, 92,189,122, 5,113, 89,112,255,245,215,113,251,254, 3,196, 92,161, 74, +193, 83,143, 95,199,131,135, 71,204, 49, 33, 36,130, 66,154,162, 65,183,113,164,168,211,223,242,236, 91, 49,158, 93,129, 51,182, + 87,173, 89, 58,214,118,169,231,148,132, 60,149, 59,171, 93,201,231,118,231,246,203, 8,167, 35,213,206,146,213,204,110, 53,117, +208, 3, 84,237,185,219,189, 40, 82, 43,126, 86,235,117,202,161, 69, 0, 19,103,118,143,206, 25,164, 84,254, 63, 73, 40, 51, 66, +185, 99, 21, 45,227,252,142, 57,229,101, 76,159,180,234, 42,124, 78,109, 74,247,200, 55,188,111, 76,233, 66,200, 77,145, 0,162, +113,156, 16, 66,196,217,217, 25,162,140,205,141, 49,136, 75,192,225,156,118, 74, 70,234, 42,233,158, 23, 33,222,169,213,154,167, +101,212,107, 28,204,224, 24,110, 33,126,236, 2,141, 97, 28,129, 92,152,162, 88,169, 90, 47,169,244, 9, 79,227, 33,144, 47,193, +232,227,134,103,101,167,199,113,172, 50, 22,222, 13, 28,175,134,176,129,229, 64,166, 37,101, 53,255,203, 65, 98,157, 39,118, 84, +116, 6,168,144, 44,107,254,115,218, 90,134,190, 40, 13, 88, 3,228,138, 82, 34, 90,245,172,128,213, 66, 38,247,181,177, 14,198, +239, 96,167, 17,200, 25,167,251,111, 0, 37, 65, 59,185,112,141,131, 19,174,124,109,188,129,206, 60, 72,194,116, 87,235,175,171, + 13,236,184,231, 88,223, 89,249,231,216,144,148, 78, 15,163,176,174,182,137, 87,138, 66,153, 84,210,164,228,158, 46,167,173,199, +176,191,194, 8, 85,173,122, 1,128, 90, 97,172,195,238,230, 77, 32, 46, 92, 93, 10,216, 42,166, 4, 85, 51,247,237, 57,139,232, +140, 35,122,109, 61,255,179, 49,152,231, 35,167, 82,129,223,163, 86, 64, 56, 74, 96,139, 54,200, 37,193, 15, 99,143, 69,173,155, + 21, 86,142,140,182, 53, 45,163, 61, 70, 32,103, 40,237,224, 28,159,113,229, 44, 12,200,130, 88,230,133,246,227, 84, 80, 53, 16, + 14,135,126,254,213, 82, 96,173, 70, 46, 12, 81,201, 41,178,227, 5, 96,156,135,209, 10,203,124, 36, 0, 8, 10, 37, 39,114,212, + 1,132,195, 57, 25,243,126, 92,223,211,134,193, 78,146, 58, 41,178,166,113,156, 24,144,229, 44,194,178,136,208, 45,174,107,146, +246, 29,201,196, 44,203,168, 25,198, 72, 72, 13,159,183, 42,133, 51,215,136,236, 92,211, 18,228,249, 32,121,174, 59, 52,100, 42, +105, 90, 65, 38,142,174, 90,138,144,242,248,123, 59,137,195,237,236,126, 65,134,135, 48,195, 57, 6, 39, 45,243,188, 65, 91,211, + 37, 70,187,155,130,245,142,116, 67,201, 23,224, 20, 80,214, 75,138,164,191, 92, 88,188,181,117,222,118,231,155, 69, 33,223,136, +166,144,117, 24, 74,221,156, 51,153, 23,190,232,203, 28,197,238,250, 47,125, 58,214,182, 19,215,109,254,169, 59,119,187,141,167, +139,177, 60,140,156, 7, 44,121,202, 26, 68, 76, 94,189,122, 3,111,127,215, 55,227,157,111,123, 43,254,232,243, 95,132,222, 93, +131, 1,112,184,253, 37, 28,143,231,152,166, 61,142,135,115,140,227,128, 87,191,252, 69,220,127,245, 43, 56,157, 22, 25,193, 94, + 28,175,127, 61,203, 21,139, 11,133, 97,119,134,231,191,233,155, 97,135, 1,222,251,245,242,149, 98,164, 93,196, 74,169, 30,119, +218, 4, 81,218,232, 46,144,209, 13, 15,187, 97,185,231, 13, 24,166,171,171, 75,193,233,120,196, 87,191,252, 18,150,211, 65,198, +135,108, 50,156,181,140,102, 20, 63,249, 69, 37,180,194,245, 27,183, 58,181, 76,155,149, 76,116,243,241, 91, 56,187,118,141, 74, +237, 90, 17, 94,123, 9, 15, 15,231, 98, 7,227,169,184, 44, 17, 7, 81, 89, 15,214, 98,178, 10,231, 11, 73, 73,146, 61,215,168, + 0,221,155, 93,181,194,213,235,143,225,153,231,223,214, 19,230,140,248,196,203, 37, 81, 35,247, 67,134, 34, 25,241,165, 26,173, +240,213,175,124, 9,203,233, 33,140,196,103,134,176,244,231, 64,139, 29, 74, 73,197,157,150,136,170, 87, 47,185,145,113,218,118, +101, 65,188, 46, 24,134, 32, 62,111,231,136,204,252,127,243, 87,239,170,183,172,247, 13,242,183,141,246,183,249,238,173, 3,207, +153,223,151,179,174,175, 95,218,238,189,213,187,236,244,148, 92,248, 30, 26, 28,237,183, 78,145,170,225,136,195,225, 97, 79,172, +187,114,229, 26, 30, 60,124,192, 17,185,192,112,180,101,224, 74,149,139,176, 20,230,185,163, 84,118, 55, 90,203,133, 53, 66,193, +144,177,110,164,248, 96,221, 46,162,214,220,179, 3,172, 0,129,226,178,136,143, 20,178, 90,147,207, 67, 91,153,180,212, 46,254, +106, 88,133,246,188,148, 90, 24,210, 82, 43,180, 50,208,206, 33,199,163,140, 76, 91, 33,109,229,117,217,192,140,132, 4, 87,197, +127,223, 86, 97,181,174,130, 90,217,205,241, 16,214,196,205,214, 28, 16, 23,217,137,182,243,165,141,242,203, 74, 98, 67,189,228, + 26, 81, 10, 90,211, 10,167,106, 65, 70, 21, 34, 30,227, 78, 33, 99,217,156, 3,187,121, 59, 72,246, 58,199,171, 74, 27,228,194, + 53,141,130, 98,135,166, 52,114,142, 24,134, 65, 46, 33,218,178,172,181,152,103, 78,203, 74, 76,208,158, 22, 50,141, 2,103, 44, +130, 4,196, 40,227, 49, 77, 3,194,188, 96, 62, 30, 96, 6, 94, 28, 42, 3, 74,212,217, 70,113, 50,166, 4,207,125, 58,158, 80, + 98,146,236,116,195, 46,222,211, 6, 88, 82,166,250, 27, 96, 23,108,180, 52, 82, 44,212,172,243,240,211,200,240,151,211,204,207, + 91,181, 75,130, 23, 79, 56,158,122,129,145, 83,234,232,230,146,137,207,181,150, 19,197,210,236,142,242,185,133,211, 9,202,114, +180,156, 75,150,100, 63,174,128,232, 25,183,112,178,234,128,176, 4, 80,105,237,100, 39, 28,161, 5,135, 90, 75,165, 77, 84,206, + 81, 35,231,176, 18,177, 24,159, 79,238,140,195,188, 96,218,237, 58,145,179,136, 46,195, 58, 90, 13,115, 18,123,167,110,239,155, + 67,152,143, 93,180, 27, 99, 98,242,165,116,190, 57, 23, 12,131, 39, 85, 21,100,168,215, 94,236, 86, 56,239,122, 6, 69,143,147, +142,156,188,148,202,191,223, 2,182,140,209, 72, 45, 3, 34, 5,137,142, 22,174, 65, 23,124,242,158, 44, 98,199,214, 45,133, 83, + 9,241,180, 49, 98,180, 70, 94,130,188, 11, 26, 70,242, 25,154,104, 57,201,184,253,194,121,166, 0,163,148,250,149, 34, 47,110, + 85, 27, 95,245, 95, 56,199,212,130,207,180, 34,144, 49,189, 19, 27,247,123,216,113,135, 97,183, 67, 85, 14,118, 58,195,120,227, + 38,222,245,237,239,195, 59, 94,120, 31,158,122,251, 59,128, 56,227,214, 91,223,134,159,248,153, 95,198,247,125,207,135, 96,158, +124, 59,238, 63, 60,226,193,237, 47,195, 40,133,249,240, 0,167,243,115,120,207,248,188,211,225, 28,243,241,161, 84,185,229,235, + 10,220, 46, 95,234,198,112, 42,240,252, 95,121, 23,185,216,114,129,180,130,160,169,131,137,115,149,112, 14, 1,119,148,141,253, +169,231, 66, 55, 1,213, 38,131,187,117,108,125, 12, 93, 10, 94,127,229,101,188,252,133, 47, 8, 96,132, 15,237,150,196, 22, 99, + 92,233, 51,151,228,230, 41, 71, 0, 5,187,253, 85, 56, 63,210,178,148, 19,142,199, 3,144, 51,118,103, 87,160,181,198,225,252, +128, 7,247, 31, 98,137, 25, 75,140, 56,133,136, 37,150, 77,151, 0, 44, 21, 36,147,109,247,244,235, 70,147,128, 0,173,241,228, + 83,207,174,233,105, 27,145, 88, 45, 43,142, 85,119,103, 68, 69, 76, 81,186,161,138,211,249, 67,156,206, 31,136, 91,161, 18,202, +225,185,147,170,149, 35, 40,138, 36,203, 70, 32, 38, 35,119,179,138, 27,123, 22,247,134, 90,151, 83, 90, 39, 35,165, 92, 16,152, +125,189,196,185, 71, 61, 35,143,178,230,117,197,122,175,136, 37, 58,211, 17,253,155, 82, 75,192, 43, 2,205,177,221, 99, 90,149, +150,173,204,106,115,107, 25,236, 44, 88,208,247,177, 61, 8, 72,138, 23, 37,239,144, 27, 6,242, 16, 20, 69,170,178,192,231,127, + 55, 50,233,130,196,253, 22,174,113, 26, 15, 31, 45, 42, 82, 17,185, 82, 75, 22,177, 79,219,151, 87,122,207,101,117,164,218, 4, + 74,158, 81, 73,221,185, 40, 62,208, 26, 40,185,143,223,187, 80,180,212,141,189,115, 29,125, 43,173, 55, 12,235,118, 60,108,200, +129,114, 64,179, 67,170, 12,142, 17,207,239, 74, 98,225,250,203,143,123, 17,215, 1,206, 15,112,222, 51,116,101, 3,234, 81,219, +108,249, 75,110,145,170, 86,173,140,145, 17, 51, 52, 68, 9,239, 97,135, 81,244, 5, 32, 33,111, 55,194, 79, 87, 48,236,206,176, +191,122,141,104,220,193,195, 88, 15,227, 60,246, 87,175,145,189, 33,225, 46, 70,107,140,251, 51, 64, 46,145, 86,248,101,185,132, +107, 34,178, 84,105,122,212,173,229,133,238, 28,127,205,112,126,206, 46, 58, 4,148, 24,201, 53,240, 94,172,118, 89,210,226, 82, +183,254,214,148,201,180,151,220,129,184, 44,112,227,128,218, 70,214,162,226,206, 34,228,132,192, 81,198, 73, 34,107,107, 69, 73, +137,148, 63,209,112, 64,241,137,154, 15,135, 62, 86,166, 0, 58,117, 91,167, 86, 26,110, 28, 37,201,143,107,207, 6,107,137,167, + 3,179,228,119,123,126,134, 34,126, 43,221,210,200,231, 63,134,136,184, 4, 84, 80, 4,215, 10, 96,166,243,197,238,104,176,206, +179,148,179, 70, 88, 39,220,179, 47,167, 83,239,232,115, 74,220, 55,135,185, 83, 33, 83, 74, 64,202, 80, 61,224,138,122,135, 24, +196,162, 91,214, 21, 75, 46, 45, 10,187,192, 59, 9,103, 1,119,244, 76,109,203,136, 33, 34,200,138,132,197,155, 92,186,168,178, +227,166,198,140, 33, 71,116, 35, 52,167, 70, 90, 22, 32, 39,201, 99, 15,162,168,111,243,172,138,180,204, 20,137,230,218, 11,217, + 44,197, 45, 63,127,134, 84, 65,236,125, 45,123, 68,203,121,225, 36,216,171, 53,146, 70,211,142, 12, 25,185,183,134,168,214, 74, +159,217, 55,220,171,171,117,180,254,150,231,222, 10,227, 61, 82,228,158, 70, 25,131, 88, 43,198,113, 7,101, 12,134,235,183,240, +248,219,191, 5,183,158,124, 10,238,236, 10, 71,137,167, 19, 94,250,179,127, 11,227, 38,252,222,239,255, 33,254,228,202, 21, 60, +118,235, 41,164,176,224,238, 87,190,136,176,204,208,134,176,134,227, 67,118,116,147, 51,120, 32, 69, 67,201,249, 66,144,202,215, + 20, 71,105, 37,100, 33,133,167,158,127, 59,252, 52, 94, 72,215,218,114,211, 85,223,201,229,126,121, 23, 57, 56, 57, 34, 47,107, +103, 33, 23, 64,151,148,201,195, 10, 40,228,148,113,239,245,215,240,250,107,183,145,230, 0,109,170,116,228, 25, 53,173,135,177, +150, 47, 69, 65, 33,166, 72, 1,148,124,129,212,111, 84, 28, 15, 15,145, 66,194, 52, 78,220,149,185, 65, 58,251,140, 59,175,124, + 5, 55, 30,127, 2,251,155,183,144, 0, 28, 14,231, 24,198, 9,211,110,143,229, 52,227,206, 43, 47, 67,213,140,212,246, 49,155, +241,166,117, 78, 68,103,235,184,103,220,157,113, 15,212, 25,243,186,199,239, 86,169,136,181,225, 94,212, 26,118,175, 30,192, 44, +222,210, 92, 41,192,210, 89,203,159, 45, 35,132,128, 69, 44, 78,167,116,234, 35,175,182, 67,110, 36,186, 42, 66, 77, 35,130, 15, +163, 13,114, 76,125,231,215, 58,223,245,115,198, 35, 69,146,151,187,241,203,127, 79,107,141,162,234,155,158,247,173,207, 62,213, +220,181, 9, 37, 23,204,105,102,151,173,152,117, 77, 65, 90,233,217, 0,198, 16,175,138,170,225, 7, 15, 40, 22, 67, 97, 14,178, + 51,213,168,134,160, 18, 93, 40,184,137,129, 21,126, 46, 5,227, 72, 20,236, 34,252,238, 42,140,252, 84,202, 5, 62,137,113, 3, +114, 90,144, 69,153,219,126, 62,165, 34,106,137, 80, 72,114,144,181,110, 64,189, 73,237,175, 42,253,186,198,115, 23, 87, 21,187, +239,237, 42, 75, 21,190, 3,202,200,200,190, 52,157,201, 58,205,226, 5,156,249,153, 24,203, 24, 88, 59,145,232,102, 84,135, 65, +109, 47,220,106, 28,204,186, 10, 7,148,129,202,252,124,156,155,100, 60,235, 48, 94, 57, 67, 10, 17,214, 59, 82,238, 34, 99,136, +181,185, 33,157,222,250, 75,235, 38, 96,213,186,103, 98,123,233,182,214,164, 62,153,190,105, 11,101, 57,121,210,214,162,122,234, + 69,134,105,236, 35, 78,165,184,162,211, 90, 65,139, 98,159,121, 23, 14,126,240,228,159,203,136, 24, 74,113,103, 74,143, 33, 82, + 73,216, 79,103, 8, 89, 24, 24, 41,147,161, 62, 14, 24,198, 29,105,156, 22, 88, 78, 6,225,116,148, 51,140, 63,239,124, 56,107, +247,251,101, 0, 0, 32, 0, 73, 68, 65, 84,239, 8,104,165, 13,180, 2,242,145,182,196,132,140,112, 58,192,250, 17, 73,166, 45, +241,116, 98, 7, 58, 12,200,224,106, 42, 75, 81,101,140,197,184,191, 66,187, 88,145,176, 31, 9,250,136, 33,200,168,182,160, 64, + 73, 49,145,101, 21, 88, 72,156, 75, 11, 16,101,204,158, 24,221, 11,161, 19, 90,203, 9,135, 54, 28,239, 47,243,204, 80,159,101, +238,145,198, 74,113,170,232,156,227,103, 43,159,107,138, 77,228, 88,133, 47, 96,225,189,165, 7, 93,105, 20,163,186,232, 44, 75, +205, 61, 56,139, 26, 19,178,201, 29,223,109, 28, 57, 5, 78, 85,228,196,128,147,156, 51,192, 21, 57, 66,187, 23,148,130,246, 6, + 49, 37,232, 10,178,230,173,197,233,112, 32, 85,111, 71,135, 75,170, 11,156,227, 5,110,220,136,113, 28, 49,207, 39,177,123,242, +236, 88, 26,207, 68, 6, 73, 33, 44,156,136,150,128, 26, 91,166, 65,238, 77, 65,145,137,145,202, 60,183,138,116,230,109,250,192, +117, 14, 3,116,138,100,155,104,200,238, 95, 38,147,237,188, 50,222,195,141, 3,148,209,171,134,204,104,129,228,108,102, 91,150, +116, 66,211, 2, 93,190,177, 11,157,221,133,181, 22,143, 61,243, 28,158,124,219, 55,225,234,141, 91,120,229,203, 95, 68,138, 39, +204,243, 2,141,138, 24,102, 88, 59, 0,113,193,227,207,189, 21,198,144, 93,235,156,129, 86, 6,103,215, 30,195,114, 56, 32,206, + 11,238,165,132,135, 15, 30, 98,127,245, 58,178, 84,238,170, 18,138, 97,149,198,224, 7,188,113,239,174,140, 27,213, 35, 47,241, + 45, 12,103,219,137,229, 92,240,212,179,111,195,213,235, 55,186,104, 72,111, 33, 39, 27, 60,233,214,111,109,164, 82,154,231,185, +255,247, 70,213,195,166, 83, 44,146,117, 91, 66,194,107,175,223,193, 27,175,223,161,160, 75,138,134,138,210, 89,239,198,104, 25, + 73,234,174,154,110,209,170, 74, 2, 58, 8, 27, 97,178,215,213, 43,215,165,115,229,168,101,116, 14,206, 57, 60,120,112,159,251, +181, 92,113,253,198, 77,156, 93,127, 28,103,215, 30,231,200, 78,107,248,113, 15,235, 7,156,206, 31,192,141, 35,166,221, 30,119, +239,188,138,211,241,128, 43, 87,174,225,234,141,199,113,239,141, 59,200, 49,114, 31,110, 12,174,223,124,172, 23, 20, 45, 92, 39, +245,203, 65,117, 54,123, 27,189,167,174, 48,230, 56, 47,133, 32,163, 50, 25,197, 41, 5,109,233, 51,135,140, 2, 27,128, 98,220, +237,225,156,195,195, 7,119,225,156,133, 53, 30,168, 10,199,211, 9,126,156,176,219,237,112,247,206,171,189,120,107,127,181,148, +188,111,148, 15,208, 94,114,165, 21, 84,174,125,127,255, 38, 52,237,165,156,245, 38,250, 44, 69, 24,209, 85,132, 80,166,160, 4, +134,235,104,165, 37,170, 82,201,106,129,147, 4, 22,147,165, 67,156,172,181, 72,105, 65, 76, 74,214, 21, 44, 78,115,206,212, 77, + 24,226, 44,115, 78,178,155,165, 39, 91, 85,192, 14, 30, 41,132,238,221,109,186,141,203,127,206,174,148,120,196, 58,106,251,255, +203, 45,171,155,145,103,111,250,204, 46,100,205, 63,170,112,146,106,150,207, 47, 63, 51,101, 45,170,168,123, 59, 37,173,189,103, + 74, 51,159,218, 57, 25,255, 42,156,157,237, 81, 2,211,190,172, 88,217, 98,140,152, 79, 11,220,224,217, 53,157, 30, 80,191,225, + 29,114,169,176,195,142,251,102, 41, 60,221, 56,193, 13, 99,239,222,181,214, 24,134, 17,231, 15, 31,246,169,132,243,142, 4,181, + 90, 96,161, 49, 14, 3,134, 97,132,241,132, 46, 41, 25,167,134, 72, 78,189,149,247, 45, 87,217,213,203,202,106, 62,157,160,181, +193, 48, 14,176,198, 98,201,132,149, 24, 41,242, 75, 44, 56, 29, 14, 61,248,202,136,176,169, 88,141,147,120,142, 75, 12, 72,129, + 23, 94,213,180,115,181,113,179, 5,247,161,203,137, 9,101,227,110,135,211,225,128,186,176,184,107,158,101, 15,199,220,134, 24, +113, 56, 63,172, 83, 66, 71,181,123,205,137,113,175,185, 32, 37, 22,214,214,176,113,208, 74,163, 42, 77,218,167, 8,216,180, 76, + 23,167,221,180,190, 95,181, 80,241,223,166, 74,194, 14,200,162, 42,167, 80, 80,220, 76,149, 4,181,148, 2,225, 47,137,255, 76, +204,177, 23, 42,198, 88,129,168, 68, 57, 71, 10,156,176, 16, 80, 25,192,162,116, 17, 46,137,130, 19, 43,102,206, 85,244, 67, 25, +218, 0,203,233, 40, 89, 16, 21, 89,219,126, 38,180,179,185, 55, 94,146,132,153, 1,140,195, 64,101,121,160, 6,105,183,219, 35, +135,136,180,156,216,180, 89, 10, 97,189,196,246, 62,188,123, 23, 86, 70,229,196, 36,104,104,129, 24,149, 66, 44,172,214,166, 79, + 31,170,102,161, 63, 88, 6, 87,161, 86, 56, 17, 35, 54, 86, 75,173,133,223, 7,202, 42, 92,149,213,102, 77, 21, 69,137,106, 93, +238,176,150,140,104,157,225,108, 53, 3,121,166, 37, 14,146, 6,233,228,247,171, 45,224, 69, 85, 6,208, 80,224,106,234,215, 69, +157,244,121,188,100,192,106,135, 39,159,125, 30,215,110, 62,134, 36, 35,194, 36,216,197,144, 34, 6,231, 48, 78,103, 64, 45, 56, +205, 39, 24, 59,226,230,219,222,137,235, 79, 62,131,179, 27,143, 97,152, 38,204, 49,224, 11,191,255,219, 56,127,227, 46,190,227, + 7, 94,132, 25,247, 61, 20,229, 15,255,175,127,137,227,235,175, 66, 41,238,120,174, 92,189, 9, 44, 71,220,186,126, 13,159,249, +253, 79,227,225,189,187, 50, 10,253, 26,249,211,232, 26, 28, 40,107,176, 63,187,142, 91,207, 62, 15,109, 12,206,206,246, 23,254, +119, 12, 92, 17,111,159,236, 76,215, 96, 23,117, 33,219,124,235,157,215,205,103,104, 45, 30,220,191,143,215,190,250, 50,142,231, +231,178,103, 86,178, 75,150,209,126,161, 0,107, 16,220,160, 2,199,238,195, 56,118, 65, 72,201,165, 23, 12,237, 96, 86,130,169, +156,166, 51, 2, 62, 36, 28, 38,166, 40,214,149,210, 71,136, 79, 62,245,180,172, 7,215, 17, 76,217,234, 13, 20,186,138,189, 66, +146,235,100,100, 69,225,148,186,248,191, 71,237, 2,169, 90, 75,183,151,213, 77,238,121,227,182,183, 9,234,237,151,191,130,154, + 19,156,245, 24,134, 1,169, 37,168,149,196, 16, 20, 57,228,151,121,134,117,244,130, 47,203,140,253,126, 39, 41,128, 90, 48,143, + 86,188,169, 5,199,243,115,142,166,196, 38, 86,115,249, 75,100,192,115, 45, 98,172, 65,174, 50,218,172,111, 38,238,245, 11,205, +232,205,231, 32,171, 1, 33, 90, 53,241,223, 86, 93,221,212,211, 74,124,198,131,136, 59, 43,170, 8, 39,249, 82,167,196,196, 63, +235, 71, 24,177,171, 65,145, 78, 86,132,255,112,124,120, 14,109,101,204, 45,234,108,242,201, 45,209,146, 57,200,231,208, 52, 14, + 43,122,217, 24,207,247,176,235, 54, 30,125, 57,247,145,249,230,207,176, 37,220,213,139,233, 51, 93, 60,219, 81,166, 88,133, 79, + 85,138,124,109, 24,241, 25,227,210,255,231, 90,211, 69,225,166, 29,134,221, 30, 90, 53,235,159,146,113, 33, 73,111, 89,158,167, + 20, 35,187,212, 90,176,204,146, 23, 33, 78,152,166, 48,231, 36, 44,178, 64,240, 3,140, 49,216,239,247, 88, 2,119,217, 89,184, +230,227, 56, 18, 51, 10,250,139,173,113,240, 50, 17,169,181, 34,156, 78,162,218,182, 52,249, 85, 42,163,149,248,217,155,207, 57, + 44, 11,217,233,198,226,112, 56,174,211, 65,163, 59,190,115, 28, 60, 98,206,164,240, 13, 35,178, 20,253,109, 28,222,159,175, 10, +238,175, 35, 39, 95,170, 69, 0,111,178, 35, 90,179,145,165,139,111,211,188,148, 98, 31, 7,231, 37, 34, 85, 22,137, 70, 27,132, + 64, 69,246,176,223,211, 91, 29, 2, 82, 73, 12, 1,145,179,185, 52, 6,126,165, 22,132, 97, 37, 4,153, 64,219,222, 1, 54, 66, + 95, 74,129,171, 5,205,239,128,219, 57,221,233,154,188, 76,201, 15,105,120, 85,109,116,143,149,206,178, 42, 96, 83,169, 17,162, + 76,145, 64,235,164, 22,241,180, 54,134, 46,121,121, 6,154,110,165,101, 22,180, 95, 35,132, 83, 95,215,233, 38,180,150,245,199, + 54, 14,155,171, 47,221,179,238, 33,133,179,149, 84, 61,158,157,180,199, 86,164,174, 3,115,206,147,248,151,104, 35, 51,214,193, + 26, 35,207,144, 80,228, 44,137,124, 90,105,138, 72,219, 78,190,226,194,232,187,244,120,230, 10, 59, 14, 44, 32, 82,232, 5,190, + 86,156,214, 37, 17, 10,247,149, 98,159,150,229,126,102, 88,237,144,107,165, 21, 15,196,176,243,123,202, 4,118,109, 51, 46,196, +102, 9, 5, 88,168,175,229,237, 85,171,144,189, 2,214, 77,240,227, 14,103,215,174, 3, 2,227,176,158,108,218,209, 59, 44, 33, +224,137, 39,159, 22,190,122,129,177, 14,126, 80,184,126,243, 6,194,221,219,120,245,206, 87,240,250,176,195, 32,161, 0,121, 57, +192,170,132,207,254,222, 39,240,215, 62,240,253, 72,110, 68,124,120, 23, 74,105, 2,238, 99,224, 11,102, 72,120,122,245,206,107, + 24,207,206,240,224,222,189,175,137,250,220,174,165,181,179, 24,166, 17,215, 30,127, 92,118, 42,232, 47, 13, 71,168,232,234,193, + 46,158,176,182,239, 92,187, 96, 67, 42, 39,198, 39,178,194, 74,153, 35,177, 55, 94,123, 21,135, 7, 15, 24,174, 32, 99, 46, 35, + 15, 92,251,117,140,236,136, 83, 34, 86,177, 86,218, 40, 56,170,177, 82,145, 57,161, 3,209,206,146,115, 6, 50,129, 35, 33, 48, + 82,114, 24,175,112,244,103, 12,180, 6,172,177, 56, 29,142, 8,243,140,123,238, 85, 92,185,118, 3,186, 99, 53, 55,254,132,138, +110, 3,161,213, 38,118, 11, 86, 43, 96,106, 59,216,172, 69, 77,107, 17, 67, 8,132,237, 54, 17,134,249,152,126, 16,134,101,129, +209,154,196, 55, 0,185, 22,177, 32, 22, 17,150, 84,201, 0, 23, 79,118, 27,209,139,216,112,154,118, 8, 33,193,143, 99,255,204, +195, 18,176,155, 38, 20,163,224,253, 0, 99, 86,101,234, 95, 86, 20,199, 17, 49,214, 61,120, 42,111,186,204, 59, 22, 88, 4, 99, +109, 66,210, 5, 41,186,176, 88,145,177, 92,169, 50, 46, 85, 18,202, 81,169, 98, 45, 21,125,140,214,220, 17,198,170, 62,169,202, + 41, 32,139,160, 84, 41, 0,177, 74, 40,137, 56, 49,202,210,193, 74,189, 64,149, 65,122,123,126,149,161, 96, 48, 36,198,169, 58, +235, 17, 67,134,179, 14, 41,230, 55, 21,186,151,187,117,244,136, 97,125, 65, 28,136, 75,212,192,102, 98,237,126, 23, 93,187,126, + 64,107,122,113,181,182, 20,158,142, 20,153, 85, 99, 4,186,194, 49,114,140,137, 20,180, 24,232,183, 13,129,239,182,117,128, 49, + 44,110, 23,130,109,160, 50,140,247, 93, 71,163,172,101,192, 72, 41,240,211,136, 20, 35,188,248,134, 33, 7,218,225,120,164,182, + 32, 74,167, 62,141,208, 90, 99,186,114,182, 82,227, 80,113, 60,127,136, 97, 26, 25,119,139, 10,239, 60,187,111, 25, 27,103, 52, +193,107,146, 2,129, 5,133,243, 30,117, 48, 24,188,239,223,137,177, 26,199,195, 57,150,211,140,120,100,120,142,150,130,213,201, +158,189, 24,221,115, 2,166,118, 97,196, 8, 85, 40, 64,165,112, 74,173, 98, 84, 17,138,165,166,179,145,142,121, 89, 78, 76,157, +148, 72,219, 90, 11,172,165,154, 61,132, 32,206,139,136, 20, 22, 70,225,138,142,194, 24,205,221,114,173, 68,192, 66, 73,129,144, + 81, 82, 16, 96, 11, 80, 53,207,217,156,228, 50,146,233, 80,137, 9,218,208, 14, 87,228,125, 77, 18,116, 2,165, 96,189,151,181, +133,146,124,111, 42,184,249,121, 82, 27,211, 44, 97,227, 48,244,116, 74, 99,169,114, 39, 3,162,202,215,168,200, 36, 80, 64,141, + 73,144, 80,107, 3, 81,107,145,128, 23,141, 20, 69, 4,106,128,249,116, 98, 51, 36, 52,188, 24, 35,134,105,130,159,246, 29,127, +157, 19,227,102,167,113,224,115, 83, 43,142,167, 0,109,148,160,200, 61, 49,227, 53,116,139,174, 42,133, 16,156,102,203,116,142, +205, 80,206,200,149,145,192, 53, 73,182,128,156,225,173,160,217, 10,184,203,233,196, 8,234,230,138,169,156,236, 45, 33,116,161, +222,178, 44,189, 67,103, 65, 68,155,163,117, 3,191, 19,231, 0, 48,211, 32,165, 44, 24,105,221, 53, 70, 70, 64, 56, 90, 19, 13, + 29,194, 2,117,243,169,103,171, 81, 21, 39,233,166, 90,120,139,115,252,144,199,113, 47,182, 16,133,152, 72, 12,210, 98,189,242, + 35, 83,147,134,253, 21, 44,167, 35, 66, 88,112,118,245, 58, 98, 8, 24,167, 9, 75,100,213,179,219,237,128,156,113,152,103, 76, +195, 0, 55, 56,196,200, 3, 86, 1, 24,118,103,248,238,239,253, 62,252,199, 63,253, 83,124,229, 63,252, 1,194,233,136, 36, 93, + 92, 73, 9, 15,223,120, 13,243,178,224,252,120, 64, 60,206,152, 79,199, 71,178,211,169,116,180, 61, 24,229,250, 99, 79,224,236, +218, 13,102,106, 79, 19,172,181,184,121,227, 6, 69, 17,105, 29,125,181,127,111,187,160, 86,253,181,203,220,116,113, 81,193,253, +123,119,113,239,206,171, 88, 78, 7, 24,235,168, 2, 93, 24,252,161,187, 26,158,199, 32,127,157,117, 71,171,213,218, 5,182, 98, +193, 88,223,163, 81, 33,246,193, 62,218, 23,128,134,247, 3, 82,161,138,147,144, 20,133, 16,163,224, 83,169, 54,221,157, 93,197, +181,155,143,117,132,175,146, 23,113, 62,157, 99,158,249,153, 37,129, 93, 48,124,196, 67, 91,218, 92,152,152,149,225,188,131,243, + 35,174, 94,189, 78,107, 71,163, 2, 10,126,119, 62,157,176,132, 5,165, 38, 70,241, 2, 24,252,128, 16, 34,194,178, 32,231,200, +157, 57, 0, 63,140,128, 54, 8,243,194, 49, 85,201,221,150,145,114,194,224,188, 84,212,138,182, 16,169,240, 57,166, 94,247, 69, +218, 40, 28,206, 31,114,140,245, 13,118,233,198, 24,120,177,220, 80,149, 26,229,249,102, 16, 80, 11, 48,170, 21, 61,116,161, 95, +106,210,177, 55,167,131,177, 34,122,138,161, 3,107, 46, 20,149,114,243, 25,229,186,219,162, 49, 11, 82,179,186,192,192,202, 62, + 57,133,136, 24,103, 73,119,146,189, 48, 20, 15, 13, 17,194, 41,105,227, 90, 30, 51, 15,162,138, 34, 29,105,110, 16,151, 10, 73, + 80,180, 12, 44,105, 19, 38,121,111,219,216,254,242, 7,216,125,232,117,101, 80,160, 23, 1,186,119,232,218, 90, 88,235,224,199, + 61,166,113, 66,169, 21, 73,246,209,220, 33, 22, 73,125, 99, 2,213, 50,207, 40, 18,221,220, 20,202,181, 16, 99,105, 6,138,223, +106, 37,126, 87,105,210,177,164, 69, 99,112,199, 56, 50,172, 35, 6,248, 97,224,202,233,238, 93,160, 22, 24,231,225, 6,223,223, + 75,235, 28, 71,145, 49, 33,201,212,196,121,102, 75,107,240,224,111,163,211,113, 55,246,212,200, 20,147,104, 37, 26,196, 73,117, +119,198, 18, 22, 10,237,156, 23, 49, 97,225,133, 49, 12, 84,145,167,132,105,162,207, 60, 74, 71,174,181,134,119, 44,236,219,229, + 96,181, 65, 88, 22,174,171,114,238, 86, 77, 94,198, 36,162, 89,177,105,245,241,174,156,137, 90,243,178,204,226,120,224,212,128, + 43, 19,101, 52, 11, 4, 77,165,126,202, 25,214,106,217,119,243,252, 51,138,244,180,156, 18,243,228,229, 61,174,165,116, 65,155, + 53, 6, 85,101,204,243, 76, 61, 75, 33,208, 40,201, 37,229,100, 95, 77, 43,112, 70, 8,139, 76,232,164,163,150, 2, 56,199, 40, +104,212,181,160,204,133, 2, 62,107,157,252,121, 77, 23,255,101, 17,220,105, 45,107, 1,177,254, 26,109, 46, 4, 17,181,127, 37, + 81,145,163,210,186,197,105,154,172, 74,101,106,170, 5,153, 76,198, 6,255,126,146,221,125,201,161,167, 37,110, 18,116, 56, 81, +170, 70,136,111,233, 66,244, 50,208,128, 72,224,243, 86,154,144,154,140, 0,133,214, 97,139, 53, 81,206,102, 40,238,198,105,245, + 77,162,254, 95,169,135, 74,217, 46,184,141, 49,116,113, 57,137,175, 50, 37,117,108,164, 82,224,231,154,195,194,179,209,123,225, +152,180, 63, 75,237,205,135,222, 20,239,234,169,183,125,115, 5, 42,118,187,157, 0, 76, 52,118,211, 4,165, 20,238,221,187,143, + 97, 28, 97,180,193,241,120,232, 29,157,181, 86,126,112, 30,124, 87,111,222,196, 52,237, 48, 55, 88,128,177, 56,157, 78, 24,199, + 1,199,195, 17,110,156, 48,237,175, 98, 26, 44,238,223,125, 3, 85, 91, 60,241,196, 19,152,151, 0,173,128,121, 89, 24,154, 96, + 13, 16, 23,220,216,239,240,215,191,237, 91,240, 45,207, 63,135, 63,254,143,127,132, 95,251,245, 95,199,157, 87, 95, 99, 69,154, +178, 80,129,202,163,119,167,114, 48, 25,163,113,243,137,167,113,253,230, 99,172,126, 44, 85,150, 55,110, 92,239, 93,122,104, 29, +149,140,123,219, 24,170,237, 44,154,202,189,136,197,231,149, 47,125, 25,111,188,118, 27, 80,249, 66, 55,219, 42, 52, 35, 54, 47, +107, 9,144,105,249,236,106, 3,133, 99,148,226, 38, 57,238, 52, 99, 28, 71,156,142, 71,164, 28,161, 45,171,185, 32, 2,179,246, + 69, 57, 67, 15,166,147,162, 69, 9,115,154, 74, 85,142,108,173,103, 52,225,245, 27,215,169,138,191,247, 6,150,249,176, 9, 77, +145, 84,171,134, 21, 48, 78,212,221, 65, 50,223,233, 1, 55,198, 66, 91,221,201,124,109,244, 90, 37,150,176, 66,118,178,112, 23, + 59, 66, 84, 10,197, 10, 71,207,126,220, 97, 28, 39, 64, 14, 87,213,236, 27, 45, 49, 72, 44, 74, 86,160, 15,203,178, 32, 38,218, + 77,156,236,210, 24,162, 18, 55, 5,201,127,218, 95,205,137,160, 52, 11,212,230, 37,175,165,160,170,198, 99,175,125,124,142,114, +177, 72,172,138,187, 57,136, 63,191,109,162,180,209, 72, 2,126, 80, 90,245, 11,171,136,127,182, 51,224, 69,104,214,240,165, 90, + 27, 56,199,189,165, 54,242,207,228, 36, 56,202, 12,101, 72,139,203,114,232,246,149,137, 88,219, 26, 35, 64,113, 25,222,139,209, +218,194,140, 58,125, 82,196,133,162, 29,128, 92,234, 13,239, 91,187, 82, 77, 14,182,214,137, 27, 6,102, 24, 59,146,133,224, 7, +196,200,231,171,161, 49, 83,140, 92, 9, 88,233,232, 4,212, 19,150,128,146,138, 0,165,216, 13,101,173, 48,237,118,210,197,144, +154,168,229,130,207, 57, 82,100, 40,157,190, 23,245,127, 56,158, 48, 12,131,136,217, 12,197,130, 82,168,107,173, 58,217,204, 25, +118,133, 33,198,126,128,166, 86, 52,202,138, 38, 44, 11,172,229,251, 72, 74,215,218,101, 26,109, 58,226,212, 90,141,184, 4, 40, +197, 17,127, 46, 25,222, 15, 88,150, 5,222, 59, 76,211,142,239,114, 46,116,196,180,104,227, 24, 89, 28, 74,151,202,149, 23,237, +107, 13, 11,218, 99,126, 5, 74,212, 63, 63, 41, 30, 8,105,203, 93,227,225,253,208,215, 34,243,210,232,106,226,252, 48,235,153, + 64,118,130,216, 97, 51,117, 49, 13,193,221,166, 47, 40, 44, 24, 90,241, 83,202,230,231,223, 8,141, 27,134,187, 36,174, 69,140, + 92,142, 74,172,171, 57,103, 40,171,187,154,221,136,176,173, 23, 9,194, 31,175, 98, 83, 83, 90,117,155,102,197,186,202, 72,162, + 89,232,192, 50,149,123,211,208, 68,205,236,220,215,181,159, 18, 65, 89,183,186, 41, 43, 89, 14,153, 54,245,237,180,182,249,245, +105,117,144,149, 71,161,125,177, 38,186,137,234,197, 28, 11, 99,116, 39,218, 21,113,183,212,182,106,104,248,226, 77, 26,247,122, + 62,232, 94,188, 87, 69, 44, 47,202,138, 37,238, 19,152, 26, 54,105, 38,205,142,185,230, 53,180, 51,179, 57, 90, 90, 20,116, 91, +221,233,205,180,177,121,216, 59, 30, 89,165,254,179,242,179,217,172,114,222,242,214,119,212,138, 74, 12, 94, 5, 82, 98,183,218, + 67, 91, 68, 57,137, 90,169,250, 3,176,219,237,112, 60,157,122,130,219, 48, 49,191,215,141, 19,119,160,168,216,237,246, 8, 49, +162, 84, 6, 31, 92,189,126, 3,203,241,128,162,128,135,111,220, 69,201, 9,198, 90,140,187, 29, 30,123,236, 22,222,120,253, 14, + 30,222,127, 3,163, 82,120,250,241, 27,240,206,226,185,103,159,199,167, 62,243, 41,220, 59, 63,199,221, 59,119, 16,101, 55,211, + 68,108,109, 52,218,232, 98,171, 79, 28, 48, 86,225,153,103,159,131, 25,105,253,130, 37,229,106,240,142, 76,110, 17,199,108, 71, +147, 90,107, 86,222,109,223,190,233,222, 94,250,179, 63,197,131,251,111,116,203,214,186,187, 87, 23, 88, 60, 20, 66,240,103,108, + 84, 34,165, 40,254,208,198, 96, 89, 2,198,105, 15,173, 21,230,211,130, 24, 78, 28, 1,213, 42,149, 27,171, 46,235,249,226,198, +152,224,156, 21, 4,104,197, 48,140,240, 34,242,129,113,140, 26, 60, 30,122,135,160,141,198, 50, 47,168, 57, 10,156, 65, 93,200, +109,111,121,215,237,146,106, 22,172,166,220, 84,208,112,110, 32, 40, 65,118, 61, 77,213,218,247,180, 72,156, 24,104,215,197, 48, + 37,243, 98, 3,248,188,228,148, 96, 61, 19,155,140,160, 94,169, 17,152,248,114, 90,141, 16, 4, 40, 99, 44,230,211,188,198, 32, +110,212,214,126, 28,144,226,130,211,241, 32, 74,221,191,248, 98,215,114, 65,213, 66, 12,163, 31, 6,185,216, 76, 23,221,212, 82, + 59, 29,143,113,158,232,207,115, 35,203,117, 49, 90,139,249, 20,245,126,227,194,183,233, 78,251,121,201,247,206,189, 40, 48,114, +169,180, 17, 98, 3,214, 84, 1, 29, 85,201,158,215, 70,175,172, 7,249, 50,166,105,194, 44,254,225,214,137,148,182,135,109, 35, + 62,189,218,252, 90,113,217,132,141,132,199,160,143,169,183,241,158,206, 15,176,214,195,141,163, 48,208,185, 99, 85, 50, 21,224, +123, 21,101,101,154,250, 69, 91,115, 97, 87,104,200, 26,208,206, 99, 24, 38, 30, 36,133,197, 9, 52,127,190, 97, 28, 73,220, 43, + 89, 0, 28, 96,106, 85, 74,152,231, 5,251,179, 51, 1, 24, 37,174, 44,106,134, 1, 15,113, 35,244, 51, 55,248,206,153,143, 41, +209,198, 37,147, 29,165,208,199,201, 16,143,118, 5, 16, 67,192, 48,142,136, 49,244,221, 37,207,181, 4, 99, 13,173, 76,173, 64, + 18, 63,183,213,134,174, 8, 9, 2,225,202, 96, 17,235, 33,191, 19,107,140, 20, 72, 76,218, 75, 57, 99, 24,124,159,234,181,213, + 72, 88,102,185,116,116,143,111,173,165, 9,160,200,237,247,110, 32, 53,111, 24,113, 58, 29, 17,101,226, 54,202, 26,106,158,231, +126,118, 52, 14,122, 91,201, 41,128, 19, 80, 17,205, 70,217,215,106,153,246,100,177,153,214, 42, 46, 15,153,216,109, 69,192, 49, +165, 14,204,130,102, 51,163, 42,221, 55,109, 29,208, 39,138,214,162,214, 40, 29,115, 97,172,246,182,155,109, 80,175, 64, 93, 21, +127,158, 44, 5,177, 52, 62, 86,201,222,217,244,181, 83, 69,126, 4,107, 68,193,185,245,146,165,240,222,245,187,159,180, 67,185, + 8,107,234,231, 90,167,204,201,132, 73,195,116, 18, 91, 46,220,105, 91,105,210,180, 86,125,181,220,120,236, 10, 10, 69,200,151, +237, 89,234, 83,136,156, 87, 62, 3,234,198,106,102, 69, 80, 25, 87, 88, 91,109,191, 46,127,246, 82,163, 8,105,209,197,156,106, + 51, 9,227,213, 33, 10,125, 37, 76,137,190,240, 66,135,222, 48, 67, 65, 92, 64,170, 9, 80, 75, 47, 36, 27,181,181, 57,176,212, +173,231,222, 94,141,182, 60,108, 53,149,155,141,140,211,186,140, 54, 98,178,198,224, 56,207, 20,125,165,132, 24,162, 68, 27, 70, +164, 40,137, 77, 50, 78,219,157,157, 97, 28, 71, 76,251,171, 56, 30, 30, 80,101,169, 12,158,126,246,121, 60,124,112, 31,119,190, +250, 21,156, 14, 7,104, 99, 72, 89, 59,157, 16, 68,141,234,141, 6, 20,199, 81,188,180,163,192, 34, 32,163,135, 71,119,233,219, +238, 25, 0,158,125,246, 89, 60,249,236,179, 0, 8,178,184,123,255, 1, 74,173, 24,167,145, 60, 94,107, 68, 73,171, 46,120,158, +139,248,178,141,209, 40,185,226,238,157,219,120,229, 75, 95,232,169,116, 85, 68,102, 77, 67,168, 5,250, 98,157,229, 72, 20, 20, +124, 53, 69, 59,113,156,172, 82, 41,166,147, 2,181,129, 75, 80, 48, 77, 35,149,246, 70,118,254,194, 38, 79,185, 21, 50,182,175, +218,252, 48,245,189,120, 43,110,134,145,225, 5,199,195,195,158,250,229,189,195,114,156, 31,153,151,238,156,147,241,237, 10,208, + 49,155, 29, 43,133,123,128,181, 94,236, 19,194,209,110, 15, 92, 46,152,246, 59,196, 16, 81,228,101,111, 15, 98, 78, 9, 74,243, +103,176,198,226,202,181,155,164,165,201,165, 30,195,204,203, 48,241, 33,236, 22,175, 20,161, 12, 17,167, 85, 14, 82,227, 29, 78, +135, 35,106,166, 79,116,123,224, 60, 50, 83, 94,108,140,109, 36,182, 62,236,171, 7, 61, 39,254,218,165, 38,148,154, 59, 89,141, +169, 93,130,137,148, 44,227, 34, 30,249,134, 60,109,200,203, 21, 58,179,138, 39,183, 1, 66,173,192, 42,133,169, 94,253,255, 54, +105,118, 53,151,222, 97,107, 65, 40, 15,110, 66,106, 94, 94,233,148, 26,252, 72, 27,225,182,215,210, 17,181,141,102,181, 50, 5, +234,166, 72,115, 24,166, 61, 9,109,198, 96,152,118, 72, 49, 33,166,216, 45, 89, 57,208, 71,172,228,251,177,134, 4,195, 16, 2, +198, 97,236, 93, 36, 97, 75,166,175, 38,140,214, 88,150, 32, 92, 7,177, 60,106,141,148,104,243, 83,150,118,180,156, 50,172,179, + 24, 5, 93,218,114, 33,170,240,246, 99, 78,112,150, 25, 16,214, 58,161,150,213,190,103,110, 32,168, 44, 20,182,139,144, 18,134, +217, 12,195,216, 39, 99, 45, 24,164, 86, 18,198, 26,186,180, 37,104, 53,220,168,179, 78,126,159, 34,168,224,180,250,242,229,210, + 95,117, 37, 77,209,222,166, 50,232, 1, 27, 74, 64, 49,121, 62, 97, 28, 71, 28,230, 19,121,251,185, 64,171,213,115,173,205,170, +181, 1,152, 69,193, 75,123, 3,189,130, 98,230,189,210,152, 79, 39,120,207,213, 92, 53,210,253,241,166, 64, 41, 5,161,217, 41, + 53,197,128,168, 96,198,128,232, 66, 90,127,104, 68, 51,176,106, 60,106, 7, 75, 21,233,250,202,118,124, 43,226,188, 34, 69,107, +107,152, 74, 33, 50,188, 97,160,251,223,211,130, 88, 86,142, 58,133,229,196,212,194,222, 4,168, 62,166,108,182,184, 6,220,106, +239, 99, 91, 21, 53,102, 65,201, 69,172,179,182,175, 65,141,113, 50,229,145, 66, 75,241, 62,208, 74, 34,126, 7,207,233, 88,230, +148, 66, 43,197,140,200, 90, 41,210,172, 69,138, 45,161, 69,202,187,210, 38, 61,106,243,123, 55,248,147,210,252,110,173,113,189, + 99,231, 20,166, 64, 85,211, 47,125,126,191, 23,215, 2,219,247, 60,167,210,197,146, 69, 2,139, 20,140,136,147,179, 8,147,141, +176, 31,128, 84,194,122,167,201,148, 38,119,182, 69, 19,228,181, 6,139,239,139,105, 97,105,165, 64, 61,247,142,111,169, 45, 47, +184, 86, 25, 43, 57,203, 75, 90,198, 3, 74, 14,113,165, 21, 82,169, 48,168,120,112,247,181,206,251, 53,146, 54, 83, 10,122,167, +236,189,235, 96, 10, 55, 76,180,186, 84, 5, 5,118,104,198,168,238,211,245,222, 99, 57,205,228,130,167, 36,233,148,107,176, 71, +206,140,191,107, 52,167, 34, 80,128,206,226,150, 81, 20,122, 44,108,237, 23, 23,140,130,179, 35,222,241,205,239, 0,148, 70,200, + 21, 89,107, 12,222, 95, 24,159,111,187,242, 34,151,162, 86,236,120, 62,251, 31,254, 61,169, 83,149,161, 54,166, 9,232,154,226, +176,212, 11,236,251, 54,110,109,161, 15, 97, 9, 93, 13,175, 54,190, 96,109,124,199,224, 26, 99, 16, 83, 64, 76,164,176,181,174, +116,220, 79,136, 33,118,146,151, 49, 86, 58,199,218,163, 53,155,141, 44,151,184,226, 63,165,195, 51,130,247,236,130,191,237,206, + 74,246, 92, 61, 7, 91, 46,243,182, 7,229,231,191,198,221,106,181, 86,143,237, 5, 33, 99,217,194, 88,215,211,147, 56, 53,160, +103,178, 40, 13, 20, 17,117, 88, 30, 36, 77,247,128, 84, 58,136,165, 86,218, 87,140,247, 56, 28,206, 97, 69,145, 31,101, 68, 93, + 75, 33,212,225,146, 13,241,178,229,138,216, 77, 45,209,162,169,127, 31,157,184,167, 0,239,118,124,166,171,112,214, 37,230, 23, + 21, 48,134,184,222,148,151,254,179,181,139, 94, 9, 89,174, 19, 4, 37, 22,148,150,153,120,225,165,107, 99,184, 62, 50,239, 42, +242,245,231, 55,170,101,158,211, 89,130, 90,177,155,174,244,151, 83, 27,211,173,120, 57, 39,164, 48,119,125,134, 17, 64, 72,202, +172,242, 75, 19, 30,109, 46,224, 27,143, 63,137,156, 11, 66, 88,196,246, 2,225,201,139,211,192, 59,148, 34, 65, 45, 57,111,130, +102, 12,114, 72, 80, 86,112,156, 69,222, 37, 85,123, 1, 89, 82, 90,127,118,165,100,159,107,214,236,122,219, 70,225,149,221,180, + 2, 61,228, 34,208,219, 78,219, 90, 80, 78,206, 9, 49, 44,242, 25,202,138,161, 20,174, 1, 36, 85,173,253,124, 37, 19,145,202, + 34,215,247,162, 58, 69, 54, 1,109,154,210,246,228,100, 65,180,245,132,176,200,141, 97,129, 3, 80,208, 90,106,215, 89, 48,117, +183, 94,248,253,226,114,224, 68, 83,177, 73,104,191,126,206, 25, 74,186,104, 24, 33,155, 85, 64, 11,119,161, 52,123,171,156, 43, + 37, 70, 40, 41,144,149, 91,197,185, 49, 70, 56,109,104,231,149,207, 70, 41,133,130,204,233,132,214,114,249, 66,186, 66,197,115, + 85,136,107, 45,199, 33,183,149, 89, 59, 15, 69,179,208,236, 97, 85,232,113,109,141,185, 21, 8,207, 18,191,221, 58, 96,231,125, + 63, 91, 57,125,227,229,153, 34,245, 41, 53, 7,193, 45,227,114,172, 98,143,218,109, 78, 13, 62,175, 89,132,130,166,191, 71,125, +223,140, 22, 50,165,132,210,166,123,131, 3, 84,105, 66,184,154, 75,145,246, 56, 47, 65, 66, 73,214, 41, 70, 72,109, 0,197,210, + 57,101,228,180, 92,204,172, 64,203, 84,103, 81,221,159, 39,113, 31,181, 53,106,233, 65, 79,252, 62, 99, 92,160,149,236,254,179, +234, 43,190,148,216, 28, 52,209,121, 91,199,117,254,131,132,186,176, 40,214, 29,154,196, 75, 63,247,119,184, 86,201,128,183, 92, + 69,108,117, 16,205,123,213, 39, 13,218,201,103, 28, 89,128,201, 89, 99,180,129,122,226,185,111,170,205,242,195,221,231, 76, 49, +132,140, 65,219, 97,225, 29,193, 4, 41, 6, 28, 31, 60, 64, 12,179, 84, 61,121, 29,169,136,170,214, 24, 13,107, 60,125,134,242, +133, 43,217, 3, 25,165,176,204, 39,233,106,249,135,205,130, 52, 53, 82,121,180,189,125,219,177,144,176, 22, 4, 93,152,133,107, +156,250,168,243, 50,254,243, 2,243,189,129,114,140,129, 27, 38, 60,251,150, 39, 17,252, 30,215,206,118,128,140, 79,219,255,182, +237,213,245,102, 28,127,255,141,215,241,202, 75, 95,144,168,214,188,142,226,228, 34,104,104, 86,213,199, 51, 91, 27, 17, 15, 99, + 35, 23,124,199,136,110, 50,180,201, 10,230,129, 56,237,246,136, 75,148, 41,200, 44,163, 43, 3,239, 60, 22, 9, 19,104, 66,141, +203,106,229,166,160,111,227,162,216, 61,167,245,130,112, 76, 27, 90,187, 32, 28,107,165, 52,129, 15, 18,148, 99,189,195,224, 7, +104, 17,133, 89,229, 69,249,202,159, 41,167,212,121,197,237,215, 72, 49,193, 58, 79, 15,183,164,132,181, 11,162, 85,182, 57,166, +245,103,177, 28, 53,182,184,196, 48, 47,124, 81,115,227, 26, 3,211,217,213,158, 94, 53,159,142, 76,150, 42, 76, 27,235,157,197, + 86,252, 85, 36, 40,200,177, 75, 52,176,210,113,229, 78,147, 34, 95,219,118,225,156,117, 22,135,243,131,172, 13, 32,235,153,157, +100,100,207,172,226, 65,182,192,254,202, 30, 57, 5,148,148,201,206,223,236,223,218,207, 82,164, 75,184, 76,170, 43,162,101,184, + 48, 93,218, 40,159, 91,183,167,149,238, 35,103,101,232,205,134, 20, 29,237,175, 24, 66,167, 24,246,195,185, 22, 84,148,238,233, + 14, 33,138,239,213, 2,114, 48, 43,227, 96,228,187, 13,155, 48, 36, 22, 98, 60,184,157,179,130,186, 52, 82, 56, 23,132,200,113, +113,179,204, 52, 72,147,181, 22,208, 10,211, 56,177,208,104,214, 52,153, 94, 76,187, 9,243,178, 80,239,145,171,224,105, 77,127, +103, 90,103, 29, 67, 88,167, 21, 61, 57,171,202,165,195,142,182,253,179, 49,198,126,240, 27,137,131,213,138, 10,120,238,154, 13, +156,245,226, 35,102,118,130,181,150,154,149,211, 44,103, 81, 69, 88, 66,239, 24,149, 42, 34, 62,202, 44,164, 65,250,152,115, 3, +180,150, 80, 15,113, 57,104,205,119, 95,105, 94, 82, 49,196,149,219, 48,211,139,190,132, 64, 31,186, 60,111,165,172,246, 67,165, + 87, 87,131,115,180,184,162,143, 98, 85,159,136,240,187,169,208,186,246,119, 98, 35,178,232,162,219, 42,197,170,150, 4, 61,254, +115, 70,138, 83,211, 87, 81,218,153, 46,124, 78, 50,233,172,185, 10,245,172,172, 12,126, 0,206,112,202, 81, 37,174, 90, 41,133, +188, 48, 14,181, 42, 37,126,244, 36, 22,198,136, 90, 18,180, 29, 72, 32, 20,246,120,203, 65,104,241, 83,173,219,246,195, 4,109, + 41,108, 76, 51,245, 51,176, 6, 59, 65,190,114, 37,121, 98, 22,134, 93, 33, 66,121, 89,200,233, 24,169,243,104, 69,174,150,231, +162,138,238,197, 89,102,136,212,178,177, 60, 3, 12, 3,106,174, 40,209,173,232, 11, 41,154, 10,198,183,120,211, 53,154,187, 33, +104,177, 25,191, 67,238, 57,166, 9,102, 24,237, 68,175, 19,122,206, 64,237,211,196,214,241,235,238,164,162,182, 33,119,135,131, +241,178, 94,128,130, 22, 97, 94,159,248,137,213, 89,105, 80, 76,172, 56,149, 9,203, 2, 85,218,157,167,122, 49,223, 2,106,212, +147,207,127, 83,237,224,147,166, 0,183,174, 87, 26, 70, 43, 44,135, 35, 82, 14, 8, 11, 81,131, 37, 71,193, 66,234, 53,144,163, + 39, 46, 53, 16, 7,129, 8, 45,150,178,237, 34,154, 48, 45,198, 72, 97,152,214,112,214,247, 10,174,167, 46,109, 43,213, 82,224, +188, 65,136, 75, 87, 8,230,148,165,203,192, 26, 87,249, 8,230,251, 42,160, 35,186,241,108,242,184,249,204,219, 49,238,207, 40, +248,217,120,210, 91,246,116,171,134,181, 86,248,202, 23, 62,143,135,111,220,145,236, 94, 25,231, 72,167,211, 4, 64,205, 34, 5, +137,228,107,251,161,150,246,217, 72, 95,237,240,111, 54, 65,138, 67, 86,142,120, 78, 21,222,143,189, 43,235,106, 70, 73, 99,138, +178,231,108, 98,172,173,183,184,239, 99,196,207,221,172,123, 91,175,114, 71,178,218, 53,201,136, 59,101, 81,214, 27, 5,231,173, + 80,179,116, 15,255, 48,198, 10, 11,170, 32, 69,185,236,244, 58, 70,237, 2, 44,173,225,156,237,209,155, 74,254,236, 60,140,213, + 70,160,199,231,192,187, 65, 84,180, 21,110, 24, 88, 25,183, 63,155,165,159,179, 77, 75, 98, 12,128,230,184,172,241,223,157,140, +200,115, 94, 59,147, 42,107,132,221,120, 5,181, 86,204,203, 17,198,104,204,203, 44,151, 57, 15,255, 69, 14,170,214,217,230,210, +186,242, 22, 63,203,239,211, 89,143,105,218,163,232, 74, 68,101,133,132, 60,228, 21,157, 43,221,115,251,110, 46,115,228,183,145, +188,229, 18,226,184,148,139,227,115,237,100,239,175,248,185, 55, 85,123,243, 61,183,127,190,129, 46,200, 55, 87, 40,117, 45, 78, + 83, 35,175, 41,139,253,181,235, 76, 2, 12, 51,184,242,166, 55,190, 11, 48,157,195,225,252,192, 85,135, 49,136, 37,146, 22, 40, + 97, 28, 85, 0, 28, 74,222, 73,173, 53,180,119,221, 91,110, 69,204,213, 53, 32, 75,232,214,206,118, 30,180, 21, 72,206, 69,240, +200,169,139,160,134,113, 16,209,153,235,151,118,179, 30,105,249,126,154,192,177,141, 59,149,105,236, 1,219,215,130,237, 57,235, + 66,182,176, 32,165, 32,197, 64, 18,200,211, 32,171,176, 85, 52, 23, 99, 20,119,134, 18,225, 41,250, 69, 91,123, 6,129,193,224, + 25,244,113, 60, 28,145, 82,128, 22,222,131,245,132,145, 32,101,122,161, 69, 9, 94, 47, 69, 67,211,130, 56,247,213,137,130, 22, +119, 64, 19, 56, 53, 63,123,211,192, 72,154,157,210,128,114, 92,197,133,147,172,243, 68,247,129, 53,198,120, 45, 48, 13,188, 36, +164, 45, 98, 57, 85,222, 94,152,104,182,119, 49,199,128, 2,238,255,155, 70,132,169,148, 70,190, 51,201, 27, 48,190, 79, 55,148, +161, 46,129,169,113, 9, 90, 1, 87,111,220,236,197,130, 49, 6,167,121,193, 52, 77, 23, 56, 23, 45,130,183,237,203, 67, 8,130, + 63, 21,125,134,106,161, 74, 9, 49,206,178, 55,214, 82,156,108,144,196,162,179,169,149,233,118, 70, 68,156, 4,251, 4, 62, 59, +125,116, 45,231,146, 53,240,195, 0, 99, 92, 23,162,214,146, 17, 98,128, 22,148,108,233,186,136,213, 40,210,108,103, 13,109, 91, +181,234, 34,223, 20, 78, 50, 25,145,230, 65,183,243,146,211,157, 20, 35, 19,235,100,220, 62, 12, 67, 39,201,157, 78, 39,113, 92, +104,140,211,136, 28, 19,255,127, 90, 19,185,219,215,122,141,110,202,105,129, 50,154, 22, 57,173,161,114,185,224, 54, 72,125,125, + 4,168,199,159,121, 91,117,222,117, 11, 84,219, 91, 48,171, 55,225,225,189,187, 72, 33,192,104, 69, 11,151, 98,149, 93, 55,169, +102,237,144,106,163, 43, 5, 30, 10,106,211, 99,132,184,192,104, 67,106,210, 50,247,202,172,177,181,219, 11, 11,177,203,213, 42, +151, 43, 74,239, 16, 90, 28,102,110, 29, 74,174,242,210,134,254, 51,247, 52, 57,189,230,158,247, 75, 86, 3,187,179, 43,184,118, +235, 45,216,239,246,240,195,200,151, 66, 46,215,102,213, 83,194,124, 87, 74,225,207,255,228,223, 75,190, 52,186,154,189,237,110, + 27,204,165,230,178, 66, 94, 54, 17,158, 85, 70,243,125,183,178, 17,169, 1,181, 95,110,156, 56,104, 1, 43, 88,140,187, 9,203, +233, 36, 34,172, 44, 99,101, 43, 99, 54, 86,136,143,134,253, 41,137,212,220, 88,195, 30, 65,222,107,209,130,237, 50,113,126,232, +190, 78, 40, 9,201,144,145,249,176, 99,198, 21, 86,125, 49, 0, 0, 32, 0, 73, 68, 65, 84,251, 91,158,122, 26, 95,253,234,151, +129,156, 48, 47, 71,126, 95, 41,139,206,160,137, 4, 53,172,111, 35, 62, 33,159,129, 12, 0,181,245, 64,107,221,241,157,244,134, + 87, 30, 20,206,174, 62,113,161, 50, 89,235, 48,237,118, 72, 41,225, 52, 31, 57,213, 65, 22,145,149,192, 22, 12, 15,247,249,116, +196, 40, 94,100,103,199,158,168, 22, 83, 16, 74, 30,215, 66, 45,145,173,202,164, 40,165, 36,154, 16,133, 42,251,175,113, 63,241, +243,168, 44,120,148,209,216,239,246, 56, 29,143,168, 40,152,231,211, 38, 20, 70, 73,174,177,238,234,235, 54,174,223, 10,219, 46, + 23,157, 29,161,185, 33,229,217,193,173,121,224, 66,179,107, 63,123,223,251,109, 80,152,107, 32, 81,211,122,180, 83, 73, 49, 96, +201, 90, 12,211,116, 97, 39,238,172, 19, 79,125, 35,208, 17,192,116,118,229, 10,253,205, 41,194, 40,141,249, 52,195, 15, 30, 65, +138,178, 6, 19,105, 33, 60, 57,167,190,223,238,171, 24, 41, 60, 46,248,117, 27, 85,171,214, 53, 63, 33,165, 30,233,220,118,208, +222,121, 24,203,130,154, 74,107, 43,251,244,212,167, 62, 20,135, 81,121,222, 14,231, 62,101,178,174,191,191,218,104, 28,143, 39, +177,170,105, 9, 94, 75,162, 76, 86,253,172,113,222, 35,198, 4,239, 70,174, 21, 74, 20, 65,176,134,145,181, 86,138,129, 54,188, +156, 55, 42,110, 89, 1, 58, 43,235, 46,153, 34, 20,116,129,156, 17,151,144,113,174,187, 5,170,236,241,161,180, 92, 26,178,194, +232,249,245,166,235, 38,170,230, 5,168, 4, 9, 92, 43,136,125, 45, 69,172, 82,194, 15, 23,209,100, 45,205, 42, 91,123,129,234, +156, 67,236, 65, 36, 70, 72,113, 10, 41, 50,215,124,144, 2, 45,151, 4,163,201, 82, 72, 57, 83,197, 47,234,121, 37, 26,146,152, + 9, 67,242,195,216,211,211,172,117,130,160, 21,239,121, 76,244,244,215, 66,246,188, 60,223, 77,148,198,227,153,107, 53,107, 12, + 80,133, 8,231, 38,100,209, 80, 89,103,225, 29,239,154,208,172,146, 37, 35,135, 32,157, 41,255,220,109,194,148, 82, 20,253, 15, +241,215, 85, 70,228,235, 4, 4,189,160,175,141,236,153,137, 31,246, 98, 41,174,138, 14, 16,171, 13,210,194,149, 2, 41,131,156, +193,242, 44, 93, 11,139, 42, 32, 35,163,109,207, 22, 73,178, 26, 78, 41,195, 72,135,238,198,161, 71, 57,231, 24, 80, 82,146,239, + 16, 88, 78, 7,209, 49,240,166, 26, 26,101, 79,107,174,121, 50,127, 95, 37,154, 19, 37, 69,114, 19,125, 38,129, 51,141,227,196, + 16, 29, 41,172,212,173,103,223, 86,219, 94, 55, 73,240, 67, 69,197,233,252, 1,142, 15,238, 51, 62, 78,118,165,109, 7,209,226, + 70, 87, 56,127,185,176,103,116,110,144, 78, 67,144,119,165,116,122, 78, 5,129, 10, 90,226, 27, 75,201,240,206,203, 14, 18, 29, + 15,120,182,187, 34, 68,182, 69, 72,108,102,173,220, 68,220,209, 68, 14,198,174, 1, 27, 68,231,101,148, 34,226,154, 84,122,182, + 46, 3, 26,110, 48, 65, 73, 70, 59,205,151,143,186, 85, 22,170,174, 52,188,115,251,203,156, 98, 84, 92, 40, 82, 30, 37, 62,195, +102,135,165,141,140, 93, 83, 35,191,217,254,249,246, 17,173, 8, 96,144,219,202,129,201, 78,168,188,228, 74,230, 62,136,130,148, +149,176,212,246,237,151, 83,234,182,232, 80,173, 47,138, 43,154, 7,124,221, 97,173,201,105,169,172,216,208, 54,138, 30,220, 78, + 38, 4, 28,139, 95,185,122, 13,198, 58,132, 48,227,225,221,215,101, 66, 83, 36, 83,120, 45,112,116,223,149,149, 46, 78,106, 23, +245,101, 20,239,234, 67, 93,189,190,198, 83,160,167, 97,251, 63, 99, 5,254, 80,106, 69, 92,150,149,188,167,106,207, 32,176,218, + 97,153, 79, 40, 53, 97,218, 77,208,202, 81, 20,150,105,155,108, 10, 90, 35, 93, 30,197, 79, 65, 68, 38, 44,112, 56, 78,172,189, +139,107,170,254, 97, 28, 48,238,246, 72,115, 98,135,129,184, 10,214,186,237, 81,148,244,169, 92,208, 87,104,249,141,183, 34,186, + 11,176,155, 46, 82,148, 75,209,153,238,164,104,123,180,230,107, 85, 93,180, 86,251,127,238, 30,112,153, 24, 52,112,142,209, 76, +150,170, 10,112,195, 8, 39, 42,245,182,143, 44, 0,134,113,132,183,182,119,124,203,105,238,106,247,101, 89,250, 74, 66,107, 22, +102, 45,232,162, 23,132, 82, 96, 48, 92,194,247, 16, 14,215, 59,249, 36, 29,132,234,207, 30,215, 93, 50, 37,176, 43,175, 29,218, +200,218,105,145,139,223,246,216,216,214, 73,182,132,185, 90, 19, 14,135,115,201, 75,160,115,231, 32,225, 36, 94,144,203,198, 58, +212, 34, 14, 4,180,213, 64,233, 10,241,134, 27,229,207,149, 68, 69, 47, 75,180, 66,225,231,106,113, 37,195,161,233, 83, 90,177, +188,205, 13,168,138,186,148,102,109,106,159, 17, 15,101,234, 11,106,229,207,106,133, 15, 65, 61, 66,238,107, 33, 6,167, 8, 81, + 80, 75,174,142, 92, 30,181, 84, 89,105, 82,107,145, 36, 88, 36,151, 40,206, 10, 45,103,134,216,218,114,193, 56, 78,156, 42,201, +103, 7, 5,129,188,208,251, 93, 11,137,112,103, 87,174,224,112,184,143, 82, 8,138, 9, 37, 99,127,182,199,114, 56,137,162, 61, + 9, 95,220,139, 62, 97,129, 82, 44, 76,180, 29, 36,168,138, 66,180,184, 4,168, 10,236,247,123,132,146,186,216,177, 79, 4,141, + 37,111, 65,161, 67,170,160, 20, 6, 63, 74, 67,146, 48,203,122,182,105,123, 80, 27,200,138,147,210, 6, 15,107,186,149, 36, 81, +208,109,122, 97,156,199,178,204,208,146,123,209, 26,144,246, 44,110, 89, 32,132,218,176, 51,231,250, 53, 74,120,146, 70,205,122, + 19,199,172,197,138,236, 37, 36,166,246, 56,214,182, 26, 8,139,248,233,165, 49,110, 83,166, 22,241, 76,217,140,176,246, 43,159, + 85, 32,119,171,179,179, 3, 74,201, 72, 89, 28, 12, 5, 93, 12,153, 82,236,129, 87,237,204,131, 96,172, 27,156,170,189,139,234, +217,119,124, 75, 37, 38,180, 81,128, 34, 78,231, 15,241,224,222,235, 60,240,172,185,232, 3,175,107,151,145, 83,234,226,161,210, +108, 20,114,232,140,195,212,187,110,235,156,164,209, 68, 84, 85, 37, 40,190,118,225,152, 31,124,183,207,113,135,174,161,140, 21, + 37,173,234,126,227,134,127, 45, 49, 95,220, 39,202,232,147, 21, 91,129, 31, 60,131, 70, 20,224, 68, 65, 57, 12, 35,140, 27, 81, +123,199,230,187,221, 71, 3, 66, 31,138, 80,224,206,109, 29,119,134, 62,118,111, 66,148,203,202,235,173, 87, 82, 43,242,166,171, + 20, 57,164, 65,149, 11,187,246, 78, 75,106, 23,177,236,228,253, 48, 66,203,168,149, 96, 26, 67, 31,170,216,197,122, 10,156,252, +247,166,190,221,254, 60,219, 81,239, 86,136,178,189, 84, 47, 96, 81, 53,163, 35, 91,193,214,162, 22,107,134,168,111, 19, 98,100, + 16,132,115, 3, 73, 88, 98, 95, 10,241,196, 3,127, 9,107,202, 89,251, 25,101,231,104,141,237,197, 87,247, 86,111, 70,210, 23, + 68,111,138, 47,153,181,236,194,169,128, 93,161, 21,228,174,107,248, 97, 32, 30,179,169, 82, 81,112, 60, 60, 4,114, 65,201, 17, +128,198, 56,237, 96,172,197, 60, 31,251,231,221,124,217,109,215,168,196,179,156,114,146,110,142, 47, 35, 11,216, 53,169, 46,151, + 12,231,104,219, 33, 4,130,223, 89, 20, 60,114, 19,207, 25,109, 16,150, 0,239, 28,146,240,162, 91,166, 55, 47, 92,211, 47,248, +203,211, 19,165, 20,220,224, 97,108, 27, 17,166, 46,184,105, 74,221,245,251, 46,111,134,197,232,149,209,111,140, 65, 73,244,163, +107,205,116,180,155,183,222, 2, 63,120, 28,143, 71, 88,109,112,229,218, 85,148, 90,112, 58,112, 34,180, 44, 51,106,202, 18,122, + 4,217,201,243, 2,143,153,147,140,126, 49,200, 37,207,238, 95,138, 12, 41,208,138, 28,184, 45, 22,210,138,183,188,105, 72,170, +228, 26,240,153, 34, 38,180, 36,134,172,164,148,160,219, 97,105, 27,177, 78,116, 50, 21,112,214, 80,200,213,100, 79, 2,254,112, +206, 33,134,136,113, 26, 55, 57,247,164,251, 53,194,225,210,246,251, 50,109,107,227, 86,116, 6,186,145, 75, 38,194, 57,139, 20, +179,240, 46, 12,147,243, 4, 41,154,115,233,171,193,178, 65,189,150,218, 50,192, 77, 23, 14,119,145,154, 18,228,175,230,190,187, +217,171, 80, 11,180, 93, 39, 27,212,161, 24,122,206,107,233,127, 62, 85, 57,114, 46, 85,245,253,113,127,102,188,164,225, 25,219, + 39, 96, 81,210,223, 32,159, 67,179,138, 86,168,158,172,150, 18,215, 44,200,228,218, 3, 92, 9,104,239, 96,157, 71,145, 14,216, + 24,254,121, 0,230,150, 91,239,153,106, 38,103, 84,206, 65,236,142, 21, 86,214,101,200, 60,219,236,224,165, 80,110,137,102, 22, +206, 13,194,161,151,243,222,112,226,210,190,183,146, 73,199, 35,150, 86,206,176,192,201,140, 86, 43,156,166, 54,135,142,162,144, + 81, 67, 73,108, 44, 16,115,192, 52, 78,176,110, 90,211,227, 74, 21,247, 76,236,122, 39,191, 17, 11,194, 26,198,214, 22, 48, 25, + 79, 10, 18, 99, 12,170, 20,165, 41,208, 37, 97, 68, 7,181,125,247,120, 89,103,228, 84, 72,131, 19,213,125,142,153,207,157, 76, + 59,140,184, 92, 74,201,112,227,142,233,109,137, 26, 2,239,184,226, 41,114,110, 55, 87, 73,227, 93,212,146,161,176,174,183,147, +172, 13,156,117,176,195,192, 70, 55,132, 21, 62,211, 4, 48, 37, 71,220,187,115,187,115,196, 97,214,142, 69, 27,241,225, 98,141, +208,107,112,130, 90,215,241,160,151, 93, 58,215, 25, 78,188,145,179,136, 15,208, 15, 31,170,228,125,143, 39,108,123,222,182,139, +109,149,248,170, 20, 68,127,153,120, 33, 25,201,168,165,112,203, 26,122,207, 89,153,154, 46, 38, 73, 41,195,251, 17, 80,236, 40, +248, 96, 38,156, 36, 66, 16,194,210, 54,114,129,244,253,108,173, 72,113,126,211,165,249,168,144, 12,102, 37,243, 66,111,194,133, +246,123,183,137, 69,231,182, 54, 43, 92,189, 84, 32,136,208,100,187, 39,225,197,154,145, 99,238,126,204, 14,134,137,249,194,239, +127,249, 98,223, 94, 30,125, 45,112, 25,212,211,166, 10,114, 41,121, 55, 94,216, 79,230, 18, 68, 20,167, 49, 14,211, 5,123,216, +188, 28,145, 11, 5, 70, 45,129,173,237,243,183, 97, 11,173, 19,127, 36, 40,104,219,241,200, 5, 57,141,103,235,207, 15, 48,201, + 76,190, 87,231, 28, 32,200, 89,109, 40,166,172, 37,224,120,126,191, 43, 89, 21, 92,191,200,157,116,162, 80,181, 13, 65, 36, 72, +163, 72,242, 26,167, 71, 73,196, 52,173, 99,110,156,129, 22,210,210,138, 72, 22, 38,188,228,202,134,114,215,138, 75,242, 8, 56, + 62,235, 57,235,242,188,199, 16, 59,100, 98,187, 91,111,207,184, 29, 7,236,175,220,228,255, 62, 6,132,101,134,177, 26,203, 50, +119,112, 5, 19,182,226, 70, 76,186, 22, 99,109, 52,217,104, 88,131, 31,112, 58, 29, 97,180,197,120,245, 58,166,105,183,118,120, + 98, 47,107,201,103,218,232,222, 21,199, 16,186, 24,117, 24,134,110,157,105,207,133, 49, 90,128, 44, 25,187,253, 94,186,111,153, + 16, 24, 43,254,118, 2,131,180,214, 80,226,214, 80,214, 96, 89,150, 21,102, 35, 34,210,150,162,198,159,137, 1, 21,222, 79,125, +218,227, 28, 63,211, 52,179,115, 84,150, 23, 24, 59,230,210,199,164, 90,107, 56,205, 34, 82, 91,131,249, 2,172,165, 34, 45, 81, +194,114,108,159,110, 40,173, 9, 0, 42, 44,162,243, 38,235,189, 21, 42, 73, 40,130,252,204,141, 48,232, 83, 15,214,105,135, 63, +191, 8,211, 61,199, 4, 92, 5,226,111,141, 33,249,185,182,238,187, 37, 65,182,213, 13, 58, 29,112,157,106, 66,252,238, 78,206, + 23, 35,171,165,181, 56,136, 41,117,151, 71,251, 61,155,192,182,237,161,235,230,231,105,239, 99,215,151, 56,139,229, 52,163,166, + 40,142, 8, 78, 77,131,168,203, 73, 95,100,163, 68,142, 6,159,229,198,165,112,158, 41,119, 41,134, 46,142,205, 33,118, 61, 68, +115,233, 88,107, 37, 60, 74, 38,135,210,237,210, 60,193,226,179, 69,229, 78, 59, 22,228,198, 88, 60,184,123, 15, 41, 46, 44,188, +156, 21, 54,131,129, 49, 30, 86,236,105, 78, 86,126, 77,191, 21, 3, 87,189,214,177, 64,174, 0,134, 97, 64, 92,102,132,176,136, + 80, 78, 67,149, 36, 19, 57, 2,177,154,190,105,203, 39,104, 13, 93,148, 34,181, 61,143,169, 93,186, 13, 50, 85,139, 92,191, 0, + 52, 73,122, 41,156,164, 96,209, 29, 9,222,206, 23, 40, 5, 59,122,104, 77,231, 80, 56, 29, 55,172, 8,121,238,228,242,215, 82, +100, 91,107, 49, 31,169, 55,104,194, 82,103, 56,209,140, 18,206,147, 98,132,209,198,252, 74, 78, 17, 41, 69,204,199, 3, 30,222, +123,227,130, 98, 58,203, 88, 26, 34, 30,115, 27,240, 70,219,143,117, 21,178, 68,100, 86, 40, 56, 71, 18, 93, 59,220, 82, 73, 61, +111,218,180, 93, 99,167, 34,229,222,141,109, 1, 28, 91,145, 69,201,220,155, 53, 75, 79,219,149,112,119,187,141,207, 92, 21,247, +109,255,200,253, 43,119, 94, 57, 69,156,206, 15,194, 36, 23,203, 74, 23,100,172, 48,131, 53,230,179, 92,232,106, 47,199,189,182, +223,151, 65, 31,237,129,211,155, 11, 84, 93,240,107,182, 95,163,217,120, 46,255,122,140, 55, 85, 61,185,173, 49, 3,154,103,153, +162,168,218, 57,229, 95, 43,130,244,107,198,209,110,138,145, 62, 70, 85,144,233, 2, 21,152,219,191, 47,196, 69,242,166,253, 40, +135,105,171,118,153, 25, 77, 31,101, 90, 5,115, 27, 5,231,215,179,160, 93, 22,146,105, 77, 8, 75,201,181,119,210,181,174,217, +246,237,197, 77,145,118, 51,141,214,105,101,234, 30,178,144,236,166, 29,173, 40,206,242, 34,149, 93,122,169, 25,203, 18, 86,122, + 84,161, 14, 35,181, 29,187, 96, 58,183,122,131, 82, 75, 23,221,172,130, 47,238,113,171, 88,237,218,225,174,181,233,126,228,118, +105,133, 6,129,169,196,227, 54,199,198,246, 89,178, 34,148,212,214,162,130, 26,145,154,139, 8,158, 12, 35, 72,229,192, 48,158, +129, 28, 70, 34, 70, 25, 58, 99,228,192,169,253,215,214,146, 7, 62,236,118, 44, 70, 12, 47,167, 24,151,190,255,204,145,151,170, + 31,135,158,151,157,230, 19,211,251, 98,160,152,104, 62, 33, 71, 78,177,226,178, 64,213,130,148, 55, 17,168,169, 77, 54,100, 50, + 37, 69, 74,142, 17,113,158,225,186, 74,186,160, 0, 24, 5, 84,213,176,172, 85, 38, 99, 80, 26,211, 52,193,137,162,185,233, 17, +198,105,236,140,236, 34,222,236,227,241,128,154, 51,126,249, 23,126, 14,127,245, 91,191, 21,239,125,207,123,240,157,239,126, 55, +118,187, 61,190,240,133, 47, 72,115,194, 29,110,227,104,240,194, 89,129, 85,125,149, 85, 50,254,235,127,252,147,248,212,167,127, +135, 89,244,226, 76,105, 56,213,102,107,180, 13, 19, 28, 24,122,162,141,238,209,156,206,218,126, 46, 61,251,236,115,248,216,139, + 63,140,247,191,239,187,241,194, 11,223,129,119,189,243,157,120,237,206,107,120,253,245, 55,160,149, 17,152,138,129,159,168, 4, +247,214, 74, 46,187,238,162,200,113,183, 35, 29, 82,136, 81,186, 5,179,148,132,113,183,147, 98,118,141,130, 86, 90,227,159,255, +210, 47,224,214,173,199,241,167,127,246, 89, 84,195, 48,157, 2,133, 23,255,246, 15,226,199, 94,252,219,248,215,159,248, 4,146, +124,134,168,133, 66,191, 24,113,154, 15,114,161, 19, 24, 53,207,179,136,189, 42,172, 54,248,135,255,229,127,129,127,243, 7,191, +143, 42,186,134, 34,247,193, 48,208,101, 80, 50, 47, 59, 55,120, 65, 89, 20,209,128,212,238,151,111,137,117, 78, 70,255,222,211, + 89,176,219,159, 97,127,229, 58,198,105,194,184, 63,195, 56,237,224,134,177,187, 40, 82,140, 34,206, 95,215,117,196,113, 83,232, +154,164,176,162,112, 16,132, 89,149, 36,218,135, 32,113,165, 17, 94, 38,158, 49,101,252,212,127,245,143,240,103,159,253,115,121, +119, 87, 59,109,109, 33, 87,160, 86,228,195, 31,252, 16,190,248,197, 47,110, 38,122,186,219,127,219,197,254, 75,191,248,243,248, +196,111,127,146,103, 80,229,251, 83, 74,133,129, 33,198, 87,181, 6, 78,139,235,166,133, 70, 25, 12,187, 51, 64,236,126, 78,166, + 4,185, 50, 5,206,122, 98,146,189,183, 29, 2, 71,235, 45, 25, 2,222,123,248,105, 15,109,157, 56,104, 82,215, 84, 25,173, 97, +231,227, 67, 40, 24, 25, 29, 68,241,228,110,186,208,110,223,169,146,243, 92, 31,169,222,109,192,141,237,190,180,237,208,114,206, +112,134, 42, 87, 63,120, 34,251,138,228,184, 87, 72,167,151, 47,176,211,217,233, 42, 25,235,231,238, 47, 69, 89,189,222,173,243, + 87, 86, 95, 8,192,128,110,132, 76,217, 55, 68,114,125,115,225, 5,105,189, 70, 42, 17, 70, 57,120, 71, 54,177,241, 14, 74, 87, + 44,167, 19,106, 99, 27,215, 40,232,212,244,166, 11,106,123, 49, 89, 25,183,179,154, 34, 78,177,141, 67,173, 93,189,200,141,204, + 7,185, 68, 59,188,164,118,118, 33,253,193,122,221,183,106,165, 41, 52, 51,172,102,149,140, 12,183,251,242, 71,197,102,118,191, +253,230,130,223, 78, 12,182, 23,119,150,200, 87,219,220, 0, 90, 99, 24, 7,132,249, 8, 20, 5, 59,140,176,222, 97, 14, 75, 63, +116,123, 87,219,188,192, 13,124, 34,235,129, 54,110,250, 90,121,231, 23, 34, 67,183,246,188,170, 80, 16, 80,161,123,230,120,205, +220, 57,230,154,137,171, 69,155,100, 44, 80, 18, 66,209, 70,211,252, 12, 79, 80, 3,119,188,110,114,200, 57,225, 52, 31, 40,158, +105, 34, 74,137, 48,108, 42,235,186,101, 72, 2, 24, 68, 68,217,186,223,214,109,176, 99,178, 80, 8,236, 80, 27, 92, 35, 87, 84, + 85, 16, 37,253,203,120, 15, 63, 77, 24,167,137,226,186,196,239,178, 90,181, 10, 43, 55,138,100,109, 53,114, 8, 40, 81,192, 25, +149,241,197,165,174, 93, 96,155, 20,104, 59,245,149,202,178, 44, 93, 27,209,188,194,107, 17, 46, 69,142,247, 56, 29,143,208, 69, +244, 48,142,159, 9, 11,143, 5,167,123,231, 80, 80, 24, 6,223,147,173,170, 60,215,170,135,125,104, 40, 72,164,110,179, 7, 74, +252,227,114,154, 87,124,116, 62, 33, 73,129,228, 7, 17, 9,201,175, 83, 82,133, 82, 22, 57, 19,140, 83, 82,130,202, 9,147, 31, +160, 0,156, 30,220,103,119,149, 18,252,110, 66,200, 11,226,195, 83,183, 34, 41, 99,196, 38,199, 40, 87, 0,248,213,127,241,191, +113,229, 0,141, 31,255,248,143,226, 61,239,254, 14,124,250,119, 63, 77,122,227,124, 18, 54,115,243,199, 43, 24,227,160, 75, 4, + 52,245, 45, 37,103,252,143,191,250, 63,201,180,128, 28,245,246, 16, 88,241,144,103,137, 49,181,218, 96,244, 59,209, 27,112, 36, + 74,225, 30,195, 79,158,121,250, 25,124,252, 71,127, 4,255,199,191,250, 63,241,210,151,190,136, 24, 23, 60,255,252,243,248,241, +143,255, 56,254,213,175,253, 26, 94,190,253,154,248,243,141,196,149, 70, 44,243, 81,236,109,121, 13, 38, 89, 66, 87,105, 59,231, +176,196,163,228,113,187,206, 67, 72, 41,194, 58,122,198,219, 91,246,204, 51, 79,195,123, 22,178,121,166,182,225,185,103,158,234, + 46,134, 90, 51,146,112, 37, 96, 60,236,224,144, 79, 89,232,128, 22,195,180,195,168, 64, 42,156, 64,121,254,231,255,229,127, 69, + 65,225,190,190, 64,172,132, 9,167,153, 78,144, 97,164, 53, 56, 71,242,242,149,161, 48,179, 69,173,114, 82,233,186,166,162,166, + 68,116,179,241,124, 62,132, 8, 90, 98, 64, 12,129, 34,189,193,203, 88,219,194, 24,141,105,127, 13,203,249, 57, 82, 78,152,207, +207,249,243, 9, 63,192, 96,128,170, 26, 41, 22,212,148,168,151, 82,149,161, 96,169,192,160, 34,156,102, 58, 73, 42,240,171,255, +226,127,103,234, 93, 73,240,126, 64, 81,109,212,157,164, 97,201, 48, 90,225,131, 31,124, 31,126,227, 55,127,179, 35,199, 21,128, +176, 68,152,129,110,135,216, 45,161, 65,120, 30,182, 79, 68,180, 53,236,133, 20, 4, 11,172, 40,118,107, 76,139,148, 86,226, 97, + 60,225,225,233, 62, 74, 6,140,182,208,131, 66, 60,158,195,218, 1, 49,202, 68, 71,166,168, 41, 37, 40,195,223, 91, 69, 2,164, + 98, 27,235,107,141,227,249, 57,255,243,238,234,245, 95,177, 27,101,231,163, 58,186,109,119,249,168,236,101,117, 9,180, 81, 11, +250, 14, 46, 37,142,240,154,234,217, 15, 14, 49,132,181,122,111, 20,156, 75, 2,162, 70, 61,106, 79,108,145, 7,115,139,103,189, +172, 52,215, 27, 79, 96, 69, 69, 76,177, 31,160,205, 70,182,138,250,184,183, 12, 97, 97, 71, 18,230, 30,116,176,178,135, 73,221, +186,124,249, 92,190, 40,171, 28,184, 13, 50,161, 85,171,234,146, 8,168,248,165,172,177,158,146, 47,222,149,148,184,144,107,221, +246,203, 73, 84,189,109, 20,212, 46,152,254,121,151, 55,231,193, 95,254,249, 90,129,117,193,255,120,105,202,208,160, 58,106, 19, +163,219, 4, 69, 69,172, 29, 41,240,179, 76, 49, 82,252, 97,214, 40, 82,165, 20,252,224, 24,242, 98,152, 90,117,217,210,243,245, +130, 87,182,251,245, 30, 63, 41,159, 63, 47,180, 13,103,189, 81,159,186,195, 65, 34, 89,229,114, 86,130, 84,204,133, 10,212,222, + 29, 67,161,208,105,218, 69, 94,218,240,217,217,157,237,101,164, 69,161,208,197,119,160, 72,113,102, 68,149,221,236,108,101, 99, +251, 83,221,161, 81,213,170,142,205, 49,178, 11,149,240,139,254, 86,151,122,129,235,223, 44, 73, 44, 12,185,115,107,107, 41, 37, +126,116, 99,109, 87, 46, 55,244,101, 73, 73, 72,139, 84, 84, 55, 17, 87,195,244, 54, 0, 81, 16,251, 30, 90,252,174,116,158,235, + 84,162,192, 40, 30, 80,109,172,107, 44,245, 1,171, 98,221,136,147, 33,174,129, 68,151,166, 77, 41, 37,184, 97,130, 49, 22,126, + 28,168,106,175, 43,200,169, 42, 77,241, 92, 92,196,167, 78, 66, 99, 59,204,183,172,137, 16, 23,118,147, 41, 73,216, 72,238,129, + 72,218,112,124,251,225, 15,125, 8,191,254,235,191,209, 11,226, 87, 95,123, 13,223,251,189,223,131,207,252,254,103,240, 75,255, +195, 47,226,183, 63,241,219,114,137, 90,252,242, 47,254, 60,126,235, 55,255, 53,114, 74,248,249,159,251, 89, 44,243,130, 31,121, +241, 99,248,195, 63,248, 67,252,243, 95,254,101,252,250,111,252,223,184,245,248, 45,252,253,159,248,123,248,192,251, 63,128, 15, +127,240, 67,112,206,227,165, 47,189, 4,165,128,159,255,217,159,131,247, 30, 63,240,253, 31,193,135, 63,252, 65,164,156,113,251, +246,171, 66,110,244, 72, 49,227,197, 23, 95,196, 39,127,231, 83,248,236,103, 63, 71, 65,152,182,152,151,136, 7,231,231,120,247, + 11, 47,224,223,254,209, 31,225, 23,254,217,127,135,253,110,135, 15,189,255,187,241,109,239,122, 23,190,252,242, 87, 80,114,193, +199,127,228, 69,124,248, 67, 31,192, 11, 47,124, 7,238,190,113, 23,247, 31, 60,128, 2,240,207,126,230,159,194, 57,143, 31,252, + 91, 31,197, 7,222,255, 62, 44, 75,192, 43,183,111,195,239, 38, 78, 51,100,106,240,254,247,126, 23,254,221, 31,255, 49,206,246, +103,184,253,202,109,148, 90,241,237,127,253,175,225,252,112,142,167,159,122, 10,159,248,212,167, 48, 12, 19, 62,246,195, 63,132, +143,124,239,223,196,123, 94,248, 14, 60,241,196, 45,124,238,179,159,199,199,127,244, 99,176,214,225,229,175,222, 70, 10, 51,254, +193,127,254,247,241,210, 75, 47, 97, 62,205,248,197, 95,248,239,241,137, 79,125, 6,187,253, 30, 63,246,195, 63,132,247,189,247, + 59,241,194,223,248,118, 28,231,128,243,227, 76, 85,252,188, 32,151, 36, 12, 2, 32, 71,222, 37,203,178,240,121, 73, 9, 47,254, +224, 71, 81,115,198,237,151, 95,198,123,222,253, 55,240, 3,127,243,123,240,201, 79,126, 18,113,153,241,211,255,228, 39,241,204, + 51, 79, 67, 1,120,120,254, 16,223,249,238, 23,240,183,190,255, 35,248,244,239,124, 10,181, 20,252, 55,255,248, 31,225,185,231, +158,133, 54, 6,175,188,250, 26,222,247,222,247,226, 99, 63,252, 67,248,204,239,126, 6,126, 24,241,211, 63,245, 79,240,153,223, +251, 55,253,206, 56, 59,219,227,239,124,252,199,240,190,239,254, 46,188,231,221, 47,224,171,175,220,198,253,123,247,160,180,198, + 47,253,252,207,224,147,191,251,123,176,222,226,191,253,233,159,194, 48,120,124,244, 35,223,135, 15,189,255,253, 8, 75,192,235, +119,239,225, 39,255,225, 63,192,217,217, 30,127,245, 63,251, 54,188,252,202,109,124,244,251, 63,130, 15,188,255,125,248,174,247, +188, 7,247, 31, 62,196,157,215, 95, 71,138, 9, 31,254,208, 7,241, 27,191,245, 91,221,145,160, 0,236,246,123,252,224, 71,191, + 31, 31,249,222,239,193,119,190,240, 2,158,121,203, 83,248,252,231, 62,143,156, 50,126,246,103,254, 41, 66, 12,248,209,143,189, +136,207,127,238,115,248, 59, 63,250, 49,188,247,187,190, 19, 55,111,222,196, 79,252,221,191,139,223,254,196,239, 32, 37, 6, 7, +229, 84, 16, 75, 20,206,254,122, 30,181, 48,178, 6, 20,202,226,248,202,249,255,105,236, 76,159, 45,171,206,243,254,172,113,239, +115,110,247,109, 36,134,238, 6, 97,232, 9, 73, 6, 33, 71, 88, 3, 2,154, 73, 72, 66,178,173,146,227,184,236, 36,114, 92,113, + 20, 89,137,243, 7,164, 42,149,207, 73, 85, 62,197, 54, 66, 8, 13,209, 16, 59,138, 36, 16, 66,102,176,100, 97,155, 18,118, 89, + 52, 13, 52,160,110, 26,232, 6,122,138, 26,163,190,125,239, 61,123, 88, 67, 62,188,239,187,246,190,167, 79, 43, 81, 21, 85, 8, +154, 59,156,179,207, 90,239,240, 60,191, 39, 98, 50,161,207,158, 86,124,152, 16,174,116, 35,110, 21,231,249,255,243,118,149,161, +203,226,181, 82,138, 92,165,117,208, 6,104,186,117, 22, 7, 36,204,214,215, 25,211,199,124,108, 71,225, 33,134,171,226, 50, 70, +112,188,231, 96,242,146,181,166,100,120, 43,163,139,111, 92, 72, 97, 37, 80, 68, 48,143, 33,209,207,163,201,151, 75,214,168, 9, +171,103,199, 64, 8,182,120,141,212,216,146, 7,109,141, 31,112,176,252,179, 26,103,225, 42, 79, 81,147, 60, 54, 41,185,182, 80, +240,174, 70, 93, 79,105, 28, 42,118, 54,134, 62,132,142,152,194,226, 9, 70, 42,211,253,115, 10,169,200, 17,132, 98,101,145, 34, +192, 89, 82,225,138,130,254, 23, 93,232,106,206, 94, 52, 63, 97,152,103, 47,147,106,152,246, 90,109,187,206, 97, 3, 1,109, 59, + 35,194, 90,234,161, 77,134,210, 9,109, 55, 67,136, 29,123,105, 21,172,246,204,180,119,164,226,255,127, 92,224,139,132,114, 27, +126,238,192,206,129,130, 91,165, 9,142,176,160,181, 48,203,249, 89,178,158, 70,204,153, 33, 17, 57, 13, 42,217,152, 34,225, 96, +197,225,192, 69, 76,100,136, 10, 69, 54, 78, 97,172,161, 20, 46,102,127,199, 72,212,180,190,239,209, 52, 45,154,102, 70, 35, 54, +241, 92, 11, 84,194,210,168, 95,241, 94, 90, 94, 87,217, 9,147,101, 38,151,238, 78,113, 49, 65,207, 62, 1,129,104,135,168,137, + 88,101, 8,182,212,199,182, 8,123,114, 74, 72,161, 71,232, 26,164,182,135, 77, 84,112, 26, 69,241,139,154,227, 50, 13, 11,149, + 42,231,224,140, 97,210,155, 46,226, 30, 99,104, 52,152,250,128,174,233,216,254,100,145,161, 97,108,133,106,186, 4,227, 43,134, +200, 80, 74, 33,165,200, 25,248,201, 20,182,158, 64, 57, 15, 88, 7, 87, 79,224, 38, 83, 44,109,217,130,233,230, 77,168, 39, 19, +122,238, 51,117,153,237,172,129, 85, 6,134,121,218, 86,101,232,156, 10, 54, 86,105,141,164,193,142,135, 0,101,128,182, 91,135, +117,154,227, 42,105, 28, 29,216,149,208,245, 13, 21, 52,177, 67, 74, 28,229,105,128,156, 3, 66,236,112,252,196, 49,108, 89, 94, +166,221,249,136,220, 39,187, 80, 24,250,203,123,143,205,155,151,113,215,221,119, 83,246, 56, 51, 19,110,188,225, 70, 60,249,228, + 62,252,233,231,238,198,255,254,214,183,177,247,166,155,160,148,133, 82, 4, 75, 90, 57,187,130, 63,189,235,110,124,245,235,127, +134, 91,110,222, 91,244, 63,194, 76,184,252,109,151,225,208,161, 67,136,169, 71,211,172,163,239, 27,172,173,173,224,192,179,207, +226,109,151, 93, 10, 1,182,158, 56,126, 28,119,221,125, 15,246, 63,189, 31, 55,223,120, 3,238,184,253, 22, 60,185,239, 41,124, +233, 43, 95,195, 55,191,253,109,124,244,163,119,148,103,164,174,107,172,174,207,240,249, 47,126, 9,223,252,206,125,184,229,230, +155,144,144, 48,107,214,145, 56,209, 79,166,111,251,159,126, 22,239,190,246, 26,192, 26, 84,211, 9,174,189,246, 93,120,238,224, +225,242,249,187,243,195,119, 96,125,189,193, 61, 95,249, 26,238,253, 31, 95,199,108,214,224,227,191,118, 39,158,125,238, 5, 92, +181,123, 7, 98, 55,195,150,229, 45, 48,218,224,196,137,147,104, 57,199, 60,180, 13, 62,180,247, 38, 60,245,204, 1,124,245,207, +191,133, 71,126,248,215,184,253,230, 27,145, 98,164, 93,112,223, 33,181, 29, 92, 86,208,164,217, 67,202, 1, 90, 37, 24,157,161, + 84,196,139,135, 15, 97,215,206, 43,144, 16,112,217,165,219,161,141,194,210,196, 99,235,197, 23,227,196,201,147,120,254,133, 23, +176, 99,199,149, 8,161,199,101,151,110,135,209, 26,155,183,108,198,101,219,183,225,248,137, 19, 56,240,220, 1, 92,241, 75,111, +131,175, 60,174,188,242, 10, 24, 99,177,229,130,183,226,146,173, 23,227,228,201, 83,188,102,161,162,246, 29,239,120, 7,158, 61, +240, 28, 62,119,247, 23,240,131, 31,252, 8,111,191,106, 15, 66,228, 73, 52,128,212,119,136,125, 64, 93, 85, 88, 59,187,142, 47, +126,249,235,248, 95,223,190, 15,183,222,188, 23,214, 58,220,115,239,151,144,115,198,231,191,248,101,188,255, 87,223,131,159,236, +219,143,123,191,242, 13,252,249,119,238,195,135,111,191, 13,198, 16,143, 67, 41,160,154, 76,144,149, 0,158, 52, 62,124,199,237, +152, 53, 51,252,241, 93,159,195,127,255,227, 63,193,234,218, 42, 62,250,145, 59,144, 19,241, 16,150, 55, 47,227,158, 47,124, 17, +183,222,178, 23,251,159,222,143, 63,185,235, 46,156, 60,245,127, 70,235,108,131, 4, 13, 55,169, 81, 89, 79,251,116,163, 73,172, + 26, 99,225,185, 20,232,152,175,160,173,135, 50, 22, 41,211,164,196, 14, 4,141, 1,252, 63,127, 8,143, 47,141, 34,248, 26,117, +234,227,127, 38, 9, 89, 4, 83,233, 17, 69, 12,150, 68,188, 96, 17,218,126, 68,219,202,100, 63,201,172, 16,151, 49,170,236, 27, +141, 45,241,152, 64,134,171,104,199, 17,250,192,233, 74,156,188, 36, 20,160, 12,116,161, 43, 16, 16,197,133, 0,197,144, 54, 3, +194, 83,147,189, 66, 32,248, 66,174, 27, 44, 86,128,117, 21, 97, 17, 89,149, 29, 11,247, 88,109,152, 8, 8, 5,148,196, 16, 25, +117,237,208,245,205,112,233,136,234,145,255,251,158,211,123,196,119,184,240, 66,102, 82, 29, 70, 26,130, 24, 34,178, 38,144, 77, +138,233,188,118,182,249, 9,203, 60,140, 39, 45,200, 38,167,204,247,174, 36,176,137, 39,147, 70,242,185, 80,226, 60,227, 9, 99, + 14,112,222,242,127, 23, 10, 37,139, 68, 68,241,188, 24,215,115, 52, 4,162,154,159, 91, 13,200, 30, 49, 55, 27,109,114,153,129, + 28, 36, 78,202, 67, 2, 18,191,127, 42, 15,239, 43, 93,230,185,224, 92,181, 54, 37, 69, 48,100,178, 9,202,126,117,182,122,182, + 4,193,116,163, 52,170, 46,118, 76, 85, 76, 5,177, 58,168,217, 85, 41,184,168, 88, 76, 44, 48,213, 69, 40, 58, 88,248, 12, 39, + 63,129, 45, 64, 96,193,169, 20, 7, 64,232, 35,140,175,248, 67, 75, 10, 92,194,103,170, 98, 47, 19,193,141, 50, 6, 94,203,103, +161, 47,171, 7,195,202,238, 28, 19,218,166, 41,241,198,145, 69,151, 33, 4, 42, 4, 52,101,132,183, 61, 5,222,200,190, 48,178, +200,179,158,110, 98,161, 40, 91, 2,115, 70,219,206,120, 39, 40,170,246,140,118,214,161,239, 90, 26,225,242,104,177, 98, 29,141, +210, 26,179,181,181,146, 47,144, 2,135,120,244, 25,109,163,138,167,189, 8,241,184,235, 88,159,173, 67, 3,232, 83,195, 1, 51, +170,160,135, 5,131, 76,252,108, 86,251, 91, 82,165,139,222, 68,210,220,134,103, 93,166,115, 61, 3,125, 52,246,237,219,207,110, +135, 84,252,229, 15, 60,240,125, 92,121,229, 21,184,241,134, 27,113,249,219, 46, 43, 52, 64,100, 42, 22,159,222,255, 44,170,170, +194,217,179, 43,168,171, 10,211, 41,101, 86,200,129, 44, 1, 40, 58, 37,216,202, 22, 72,140,245,244,185,104, 27,178, 9, 62,123, +224,121, 64, 41, 60,253,204, 1,220,126,235,173, 80, 74, 97,251,214,109,229,204,115,206,225,242,203, 47,199,169,211,111, 0, 0, +158, 63,120, 8,198, 58, 28, 59,113, 2, 85, 69, 14, 20, 91,240,206,177,156, 93,111,188,249,143, 80, 74,227,130,229,101,102,134, + 0,199, 94,123,165,188,102,187,119,237,196,221, 95,248, 18, 86, 87,206,192, 26,131,199, 30,251,107,252,209,103, 63,131, 7, 31, +126, 4,119,126,248, 14,108,222,188,140, 61,187,118,226,249, 23, 94, 64,229, 43,100, 94,113,108,222,188,140, 61,123,118, 99,251, +165,219,203,117, 97,141,193,150,165, 9,142,159,249,121,177,147, 93,125,205,213,184,225,250, 15, 0, 0, 94,123,253,117,124,247, +123,247, 83,113, 13,224,208,161, 67,216,123,211, 94,104,165,176,188,188, 25, 7, 14, 28,192,214,109, 91,113,209,133,151,224,208, +193, 23,113,248,197,151,112,243, 77, 55,161,239, 58,108, 90, 90,194,179,207, 29,192,165,219,182,227,162,139, 46,196,193,131, 7, +113,232,197,131,184,121,239, 94,204, 86,207, 98, 58,153,226,185,231,159,199,214, 75, 46,198, 37,151, 92,140,195,175,188, 12, 87, +121,244, 45,233, 87, 94,125,245, 85,252,230, 39, 63,129,109, 91,183,226,232,209,163,120,236,241,199,137,183,192,175,191,202, 25, +154, 33, 63, 79,238,219,135,190,235,113,236,117, 74, 8, 4, 50, 42,231, 10, 49,116,207,238,221,216,190,109,123, 33,201,121,231, +112,201,133, 23,225,212,201, 83,101,213,232,172, 97,143,120,198, 85,123,246,224,115,247,220, 11,235, 42,100, 21,241,183,143, 63, +129,255,240, 71,159,197,131, 15, 61, 10,173, 53,254,225, 31,126,130,148, 51,118,238,220,129,239, 63,242, 40,170,201, 38,252,244, +208, 75,248,117, 86,146,197, 24,209,207,214, 80, 85, 53,173, 52,196, 30,103, 6,207,125,230,201, 30,229,103, 4,238,224, 3,122, +150,163, 89,242, 40, 83,183,144,121,148, 44, 22,131,177, 90,122,124, 32,203, 67, 60, 62,184,199,130,167,177,218, 25,137,187, 73, + 77,120, 77, 93, 4, 39, 29,119,245,169, 68, 44,138,109, 12, 89, 49,207,118,128,111, 56,103,203,232,175,239, 3,152, 98, 80, 20, +235,154,173,117, 5,251, 42, 99,124, 70, 77,134, 28,120, 4,136,162,154, 12,125, 40,157,105,217,199,142,212,221, 41,145, 82, 56, +132, 8,228,190,216, 23, 40, 98,185, 31, 40,100, 25,136, 32, 81,157,115, 21,214,103,107, 12, 77, 80, 67, 80, 3,163, 27, 67, 8, + 32,158, 78, 42,138,213, 52,166,101,205, 9,217, 98, 74, 27,194, 1,148,210, 8, 41, 12, 86,144, 81,183, 62,252, 25,117,142, 96, + 78,207,165, 47,157,163, 62,215,138, 51,145,133, 87,221, 23, 26,222,240,223,170,193, 82,148,135, 76,238, 12,226,139, 91,199,248, + 83,171,145,146, 62,167,120, 88,180,255, 23,200,143,240,170, 69, 25,170,202,106, 34, 3,188,203, 83, 60, 86,202, 26, 27, 56,245, +162, 72,103, 75, 41,211,160,116,185,196, 99, 26,168, 89, 57,101, 86, 26,107,234,158, 71,185,208, 41, 71,116, 44,118, 73, 41,163, +207,116, 48,106, 14,119, 16,224,136,172, 2,250,209,106,166,120,241,249,235,143,197,118, 90,145,110,193,232, 1,242, 68,185, 7, + 20,189, 75,117,169, 8,137,104, 60, 78,212, 53, 33, 43,210,159, 55, 92, 12,128,223,171, 34,218,169, 42, 82,189,178, 93, 38,167, +132, 54, 72, 58, 29,169,216,145, 51, 34,248,210, 1,225, 62,219,190, 37,209, 85,160,117,153,172,169, 50, 43,136,149,162,201, 72, +232, 5,254,130, 34, 90,108,243,106,217,115,139, 16, 52,247, 1, 74, 73, 82, 23,189,111, 52,101,137,252, 62,164,226,152, 17,236, +172,214, 44, 50, 10,125, 17, 19, 81,250, 89, 42,175,163, 88, 11, 69, 24,168, 52, 29,104, 89,130, 95, 56, 19, 97,251,246,109,120, +227,244,233, 57,194,101,134,178,154,237, 95,117,209,131,172,172,172, 20,129,162, 72, 41,126,247,119,126, 27, 57,103, 60,245,244, + 51,120,238,167,135,176,123,247, 46,108,190,224, 34,134,223,208,103,175,237,154,242,181,155,217,172,188,230, 49, 37, 28, 59,126, + 2,187,118,237,194,243, 47,188, 64,192, 30,190,120,175,218,185, 3,199,142, 31, 71, 61, 37, 45,132,175, 43,248,105,205, 84, 73, +218,215,126,249,171,223, 64, 74, 25, 49, 71, 44, 47,111,198,155,111,254,188, 8, 82, 99, 8,188,151,118,197,155,156,145,233,117, +234,122, 58,220,121,186,183,127,255,211,248, 39,239,190, 22, 49, 70, 60,181,255, 25, 0,150,187, 83,250, 29,214, 87, 87,224,140, +102, 11, 22,157,187,125,219,225,240, 75, 47,227,109,151, 95,142, 61,123,118,227,145, 71, 30, 37, 94, 0, 39,161,173,172,252, 28, + 74, 41,124,245,235,127,134,164, 20,102,235,107,216,178,105, 9,235,107,235,168,152,111,146,145,113,224,185,231,241,204, 51, 79, +163,235,154, 34,254, 75,153,130,190,218,190,199,202,153, 51,216,185,115, 23, 78,159,126, 3, 22, 16,133,108, 0, 0, 30, 13, 73, + 68, 65, 84,175,190,250, 26,246,236,217,131,139, 47,186, 24,247,127,247, 1,156, 57,115, 6,103,206,156,193,238, 93,187,240,179, +211,167,113,244,232, 81,236,217,181, 7, 91,183,109,197, 3, 15, 62,136,182,233,113,118,101, 5,123,246,236,198, 27,255,248, 6, +142, 30,125, 21,187,118,237,196,214,109, 91,241,200,163, 63, 36,246, 2,187, 19,142,159, 56,142, 47,125,229,171,184,236,178, 75, +113,205,213, 87,227,125,239,123, 47,190,246,141,255, 89, 44,193, 98, 27, 43,206, 19, 61, 36,109,182,179, 25,140,172,121,120,141, +122,207,189, 95,100,129,108,192, 91,222,242, 22,172,156, 93, 65,148,207,125,206,232, 67,132,182, 14,155,150,170, 98, 47,116,181, +129,101, 85,191,130, 66, 53, 89, 2, 0,172, 53, 13,217, 53,181,134,210, 14,198,219,241,183, 71,229, 61,101,128,180,179,193,174, +205,246, 82,113,102,196,152, 73,136,110,249,172,230, 40,104,128,116, 44, 90,130,215,125, 85, 67, 91, 83,226, 34, 49,202,211,157, +223,121, 47,234,244,198, 48,150,177,160, 76, 58,206, 20, 3, 98,232,208, 54, 77,185,240,144, 56,228, 62, 49,149,141, 45,109, 41, +210, 62, 84, 20,197, 74, 41,116, 29, 85, 66,129,253,151, 41, 14,147, 3, 10,224, 8,165,155, 42,169, 66, 44,172, 51,156,255, 27, +121,116,154,216,170, 65,128,131, 88,114,142, 5,171, 74,251,193, 30, 49, 13,137,112,137,131, 25,100,223, 46, 99,255, 1,132,162, +120,191, 69,118, 30, 73, 29,202,194,207,143,113, 3,182,181, 76, 42, 70,235,139,141,123, 86,158,138,240,107,148, 35,241,138, 37, +155, 89,104,116,243,163,235,113,160,205,248, 34,157,199,147,206,255, 61,121, 98, 67,161,205, 9, 29, 79,162, 9, 41,255,189, 66, + 93, 87,152, 78,166,152, 76,234,145, 63,219, 65, 43,203,104,205,204,124,232, 52,183,194,209,131,254,162,120,245,243, 0,174, 73, + 35,155, 98,137, 68, 82,228,217,204,137,169,116, 6, 33, 38, 32, 41, 32, 41,196, 62,193, 40,139,190, 13,148,154, 4, 3, 40,138, +132,165,191,200, 90, 98,121,119,236,157,135,175, 60,124, 93,195,122, 42, 46,189,167, 46,213, 58, 87,170,113,177,137, 41,222, 91, +149, 0, 6,246, 2,107, 53,164,121, 73,225, 38,129, 45,218, 88, 0,102, 4, 51,225,247, 49, 43, 40,101,144,179,130,209, 14,149, +175, 11,186,152,186, 76,202,138,118,206,163,174,107, 76,167,155,225,171, 41,124, 61, 65, 85,215, 88,218,188, 25,213,116, 2,227, + 45,136,244,158, 81, 47, 45, 49,238,216,161,102,221,138, 20, 75,211,233,148,136,109,145, 58,104, 13, 0, 42,161,235, 26,204,154, + 53, 14, 14,138, 8,221, 58,102,107,103,209, 53, 13, 66,215,161,107, 86,209,183,107, 64,166,194, 57,132,128,156,104, 74, 66,225, + 39,228,247,119, 94, 96, 41, 28,109,218, 53,228,112,209, 52,122,205, 57,194, 58,205,203, 16,177,108,229, 18, 88,100, 13,145, 36, + 5,111,106,140, 45, 66, 64,234,122, 2,114,236, 73, 12,169, 51,127,205,204,142, 22, 74,165,146, 52, 68,173, 13, 38,147, 26, 31, +254,208, 29,120,106,255, 83,200, 57, 99, 54,155,225,162, 11, 47,130,181, 22,215,190,235,154, 18,117,155,227,184,144, 53,168,166, +203, 0,128,229, 11, 47,196,206, 29, 87,226,133, 23, 15,227,181,227, 39,177,117,219, 86,158,130,116, 36, 24,229, 51,192,251,170, + 20, 31,206,123, 98, 41, 88, 11,235, 29, 30,255,241, 19,248,208,237,183,226,210,109,219,224,141,133,211, 6,111,223,189, 27,119, +220,122, 43, 30,255,187, 39,136,107, 0,224,170, 61,187,113,230,204, 25,236,220,113, 37, 94, 63,118, 12, 71, 95,123, 13,191,122, +221,123, 16,115,194, 91, 46,184, 0,159,250,221,223,193,100, 82,147,239, 30, 64,223, 54,104,214, 86,202,153,151, 50,229,176, 55, +179,134,114, 21, 88, 99, 98,180,193,225, 35, 71,240,246,183, 95,133,107,174,185, 26, 47,191,250, 26, 28,107, 68,172,181,120,229, +149, 35,184,237,150, 91,139, 39,250,134,235, 63,136, 23, 95,122, 25, 70,107, 60,247,211, 23,240, 43,215, 94, 13,231, 28,222,252, +249,153, 18, 53, 76, 32, 45,224,149, 35, 71,112,245, 47,191, 3,171, 43,103,176,105,105, 9,159,250,151,255, 2,109, 75,218, 40, + 9,184,162, 51,115,120,150,115,210,176,182,134,179, 21, 98,159,113,240,224,139,184,121,239, 94, 28, 59,126, 2, 39, 79,254, 12, + 87,252,210, 21, 76, 24,237,224,235, 10, 7, 15, 31,198,222,189,123,241,250,137,147,248,217, 27,111, 98,199,206, 29,112,206, 97, +101,117, 13,202, 90,188,116,244, 40,110,191,237,118, 28, 63,117, 10, 63, 59,125, 26, 59,118, 92, 73, 63,239,202,207, 75,146,104, +206, 9, 55,221,248, 65,188,243,157, 87,225,149,163, 47,227, 7, 63,250, 33, 46,185,228, 98,162, 89,140, 10, 67, 1,208, 36,104, +248,122, 90, 94, 39,101,136, 36, 71, 19, 19,139, 35,175, 28,193,123,175,187, 14, 10, 10,111,189,240, 34,252,254,239,125, 10,203, +111,189, 24, 75,203, 91,248,207, 51, 53, 46,103,132,152,241,210, 43, 71,176,247,134,235, 41,135,160,114,184,254,250,247,226,197, +151, 95,166,192, 23, 0,214, 87,240,213, 4,199, 78,156,196, 59,223,177, 7, 33, 4,252,202,187,174, 30, 88, 34,160,115,198, 88, +143,186, 94,194,242,230, 11, 80,213, 83, 24, 95, 97,178,105, 25,213,100, 51,170,201,166, 18,241, 29, 2,223,209,153,214, 85,125, + 31, 96, 83,140, 80, 60,146, 42, 73, 78,163,136,190,121,129,216,162,191, 95, 52,226, 29, 95,236,227,206, 94,170,103,169,212, 23, +117,115, 41, 37,164, 46,157, 87, 57, 61,223,241, 73,165, 58,102,145,207,175, 15,198, 63, 87,226,240,134, 50, 30,231,200, 60,249, + 75,126, 94,242, 50,115, 40,139, 49,101,172, 43, 68, 61,241,184,210, 5,168,203, 30, 81, 60,172,146,206,165, 88, 65, 57, 22,182, +157,207,126, 54,111, 1,179,115, 22, 66, 1,120,232, 57,173,195,216,137, 48, 30, 7,142, 95,135, 49, 77,238, 28,175,120, 33,149, + 37,100,182,100,197,148,144,212,200,194,196, 30, 74,161,199, 9,217,140, 2,146, 76, 81,104,230, 12,152,202,195, 40, 64,103, 83, +246,225, 80,169,140,242,233, 34,228,176, 31, 69,126, 76, 98,102,115, 26, 87, 70,233, 78,245, 40, 69,105, 90, 87, 20,253,105, 52, +175,113,128,202, 84, 37,195,216,130,223,211,132,209, 37, 36,160,146, 76, 96, 17,153, 36,101,217,115,147, 0, 78, 62, 40, 57, 39, +164, 17,247, 91,241, 78, 89, 27,203,226, 49,234, 92,141,115,144,221, 75, 86, 25,206,121,194, 69,182, 29,144, 2,121,148,121, 66, +147,152,102,151, 25,212, 98,173, 69, 31, 3,150,182,108,198,218,234, 26,209, 14,235, 26,206,215, 5, 79,171,148, 65, 61,157, 34, +165, 72, 25,219,124,128, 27, 70,121,246,103, 87, 75,176, 11, 82, 44, 83,139,174, 35,187,143,116,213, 98,149, 36, 91, 84, 46, 30, +252,242,140,240, 51,170,180,130,206,166, 76, 98,136,169, 78, 2, 68, 99, 12,186, 48,227, 52,169,140,166,105,152,190,167, 57,195, + 71, 38, 61, 28,122,196,232, 87,153, 76,248,170, 98,213, 47,157, 49,145, 49,177,170,120,252, 19, 5, 85, 8,238,212, 90, 68, 94, +181, 72,193, 27, 56,119, 90, 43,148,238,253,223,125,230,179,229, 17,222,247,212, 62,252,228,201, 39,161,148,194, 95, 61,246, 24, +254,213,167,126, 15,179,166,193,161, 67, 47, 98,125,125,157, 64, 37,142, 9,122, 8,232,250,128,212,205,144, 1,156,121,243, 52, + 30,127,226, 9,124,228,182, 91,112,195,251,223,139, 35,175,190,134,147,167, 78,225, 3,239,187, 14, 63,126,226,239, 25, 51,219, +111, 96, 89,164, 20,145, 17, 8, 84, 3,224,165,151, 14,225, 91,223,106,113,219,173,183, 96,203,150, 45,128,162,137,192,125,223, +123, 16,175, 31, 59, 70,140, 5, 0,219,182,109,197,191,255,183,159, 70, 8, 17,223,127,228, 17,172,158, 93,197,111,124,236, 78, +188,251, 93,215, 32,165,132, 7, 31,122, 24,179,217,140, 96, 36, 0,180, 33,238,130, 8,153,233, 61,113, 37,152,168,170, 41,117, +208, 86, 53,214,103, 13,142, 29, 63, 1,133,140,211, 39,142,151,201, 68, 8, 1, 15, 60,248, 61,220,249,209,143,226, 15, 63,243, +111,160,160,240,250,177,215,241,208,195, 15,161,107,214,112,248,208, 79,241,137,143,127, 12, 63,254,187,191, 47,201,117, 85, 85, + 49, 72, 40,226,251, 15,255, 5, 62,249,235,159,160,226, 35, 70,124,255,161,135, 1,171,161, 66, 66,219,117, 5,107, 92, 77,168, + 57, 20, 15,190,181, 22, 25, 17, 46, 37, 28, 62,122, 4, 31,249,200, 29,184,255,190,239,146, 69, 49, 37, 28,121,229, 40, 91,211, +128, 67, 63, 61,136,143,124,232,118,220,255,192,119, 49,155,173, 35,231,140, 35, 71, 95,229,198, 15, 56,112,224, 57,220,182,119, + 47,190,125,223,203,180, 74, 77, 25, 71,142, 30, 45, 66,216,207,124,250, 95,227,174,187, 63,143,159,236,219,135,127,246, 79,127, + 11,239,127,223,251,129,156,241,208,195,143,150, 9,174,240, 72,154,142, 70,241,117, 93, 99,214, 52,224,254,164,172, 76, 94,125, +237,117,252,225, 31,252, 1, 30,252,139,135,112,195,245, 31,192,117,215,189, 7, 49, 69, 60,250,163,191, 65, 76, 28,127, 13, 96, +203, 91, 47, 2, 0,124,250,183, 62,137,111,124,243, 59,248,225, 99,127,131,219,110,190, 17,191,255,207,127,187,172, 33, 30,126, +244,209,146,180,137,152,208,182, 61, 30,254,203,191,194,111,254,198,199,113,253,251,222,139,195, 47,191, 52, 36, 10, 26, 13,235, +201, 21,144,186,128, 62, 4, 88,231,208, 52, 13,250,212, 82, 67,155, 18,159,153, 9, 10,182,184,175, 16,105, 98,165,124, 53,205, + 89,241,232,141,243,157, 69,113,187,200,115,124,190,255,141,225, 48,243,196,178,249,127, 63,190,108,230, 71,206,231,155, 0,204, +143,139,207, 39,194, 90,100,153,218,208,145, 74,132,166, 26,178,137,101,239, 46, 49,157,227,240, 1,171, 76,129,136, 8, 64, 65, +118,188,195,174, 83, 23, 32,142,194,144,135,190,104,244, 61,238,156,101,143,188, 8,161, 58, 63, 29,145, 63, 51,223,221,207, 7, +134,204,127,159,249,255,102, 92, 56,205,191, 94,218,144,224, 43,165,200,158,239,180,129, 70, 39,151, 3,180, 46, 46, 1, 85, 66, +124, 40,232,129, 16,135,105,128, 95, 48,233, 79,118,206, 68, 11,163, 49,168, 1,177,157, 99,236, 1,149,153, 13,173, 74,193, 52, + 38,209,141,127, 79, 81, 93, 67, 37,190, 60,194, 40,129, 13, 8, 49,192,217, 97,204, 59,126,109, 1, 5,163, 28, 93, 26,177,227, + 85, 67, 26,101, 4,112, 20, 99, 73, 85, 35,111,108,206,212,229, 2, 25,206,212,252,115,244, 37,165,144, 9, 55,152, 78,166,108, +117,227,233,144,228, 70, 51,218,216, 79,106,100, 40,120, 95,205, 61,159, 50,198, 15,140,105, 94,163, 34, 50, 37,228, 65, 46, 65, +227,248,144, 10,222, 56,241,238, 90,129,248,237, 80, 3, 46,146,194,114, 34,107, 5,200, 38, 36,170,120,121, 77, 41, 67,221, 48, +252, 39, 12,185,242, 60,242, 87,140,243, 20,139,151,236,242, 52,231, 93, 43,101,202, 20,138, 64, 47,118,136, 83, 29, 37, 8,230, +148, 40, 30, 51,210,106, 39, 15, 73,180, 35,184,205,128,109, 53,198, 64,201, 80, 38, 69,206,165,103, 91, 96,249, 12, 83, 0,137, + 54,102,160, 91,234,204, 7,161, 71, 53,153,208, 88, 54,210,250,193,185,138, 5, 83, 29,148,202, 92,180,107,254,153,153,197, 62, +138, 79,238, 67,128,183, 14, 57, 68,116, 93, 71,170,228, 24,161,116, 46,122, 7,173,137,154,105,180,167,213,134,179,236,211, 15, +108,191, 29, 26,143,148, 51,254,243,127,250,143,248, 47,255,245,191, 21, 26, 33, 56, 84, 71,176,162,134, 51, 15,180, 38,113,111, + 98,116, 41,137,153, 59, 24,231,225,235, 9, 77,124,140, 70,219,176,206,129,121, 17, 52, 57,140,232,214,214, 96,157,131,171, 38, +180,223,205, 25,179,213,179, 0, 59, 41,250,158,152,234,214,146,107, 39,132, 14,222,209,115,221, 52, 51,118,221, 48,208,199,123, +244, 41,162,170, 38,165,136,108,155,117,162, 58,130, 66, 72,172,182,156,131,174,104,213,169, 73,149, 72, 43,178,142, 38, 58,108, + 79,149,175, 91,213, 53,250,190,167,164, 62, 75,238, 32,103, 93, 9,123,177, 12, 23,235,218,174,232, 50,228,108, 9,161,131,210, + 10,222,214,229,156,147,179, 20,165, 96,103,107,167,202,216,180,188, 92,220, 23,179,179,103, 97, 76, 42, 69, 98, 76, 17,206, 79, +138, 71,222, 24,154,240,117, 93,139,102,245, 44, 89,170, 57, 66,181, 90,218, 84,210,101,133, 47, 31, 66, 40,133,111,142, 17,177, +107,105,173,232, 44, 28,127,182,148,214,101, 82,163,181,198, 53,191,252, 78,156, 60,121, 10, 39, 79,157,194,238, 29, 87,226,134, + 15, 94,143, 47,220,251, 5, 30,251,187, 33, 31,193,209, 51,165, 51,208,181, 45,140,167, 56, 89,209, 4,228,156,160, 61, 77,171, +228, 62,179,196,124,167, 14,215,213,245, 6, 82,214,162, 75,113, 67, 30,183,214, 11, 59,247,249,238,113, 17,221,108,124, 89, 47, + 26, 23,159,239,207, 46, 82,120,207,119,186, 24,209,149, 74,231, 63,242,243,101,174,200,114, 76,163,209, 41, 10,239, 93, 68, 73, + 69,133, 61,242,125, 11,250, 81,126,175, 18,229,167,135,159,193, 57,183, 33, 30,181, 60,108,163,215,100,124, 73,207, 79, 52, 22, + 41,194,231, 47,254,249,241,125,129,183,140, 87, 15, 11,246,235,139, 92, 13,243,218, 8,173, 52, 18,134, 98, 99, 3, 67, 62, 68, + 40,157, 74,103, 87,220, 7, 69,148,151, 75,104,133,176,198,181,102, 1, 93,228,152, 54, 30,217,246, 37, 16, 69, 23,112,138,175, + 42,116,125, 15,171, 53,192,158,120,203, 59,168,148,135,140,225,217,250, 58,172,115,232, 67, 71,190,112,182,216, 73, 97, 69,228, + 50, 71,123, 91,165,145, 64,223,203, 90, 7,149, 13,122, 70, 44, 26,103,161,216, 31, 28, 56,184, 68, 43, 77,193, 34, 37, 62,151, +188,203, 70,107,142,151,101,225, 23,239,146, 5, 55, 27, 35, 37, 48,137, 86, 34,167, 4,239, 61,251,152,137,218,215,172,173,211, +197,219,211, 42,202,121,207,251,236,196,236,253,192,154, 2, 77,137,105, 70,145,170,157,243, 9,250,190,163,120, 81, 14,187, 48, + 28,244, 32,170,216, 62,211,161,109, 28,145,221, 98, 8,240,236,248,136, 35,144, 10, 69, 97, 86,100,209,203, 9,245,116, 9, 90, + 91,244,125,203,155, 15, 3,199, 69, 68,219,208,238,216,122,218,175, 27, 95, 13,151, 46, 59, 12, 28,167,173,137,218, 95,108,145, +178, 19, 22,199,137,171, 43,100, 85,163,107, 26,166,252,177, 54,162, 8,126, 4, 25,154,201,175,204, 9,110, 90,107,244, 93, 42, +169,120,214, 57,186,132, 69, 15, 33,148, 56,173, 96,149, 41,197,141,100,143, 67,152,217, 37, 65,144,247,143,134, 57, 21, 92,224, + 4,134, 10, 73,128, 70,207, 73,116,211,233,148,158, 23, 22,137,138, 87, 92,196,147, 2,200, 81,161,163, 29,123,136,176, 74,163, +226, 9,133, 49,134,158,105, 46,223,164,200, 82, 60, 26,215,220, 84,136, 67,161,231,140,238, 20,169,120,101,133, 23, 21,106,129, +220, 25,180, 18,171, 11, 94,183,107, 37, 5, 46,193,250,138, 96, 65,150,194,100, 36, 34,216, 56,135,164, 20,150,150, 47, 32,202, +225,108, 70,207,117, 93, 35, 6, 16,248,166,174, 57,132,171, 43,218,162,156, 18,214,207,174, 48,221,143, 46,176,186,158, 80,145, +212,118, 72,138, 50,236, 83, 86,101, 37,229, 61, 77, 26,218,245,158,226, 72,179,218,208,100, 52, 77, 83,166, 48, 73,129, 29, 39, +145, 4,213,214,210,180, 46, 4, 24,239,202, 20, 45,101, 90, 71,106, 22,122, 6,126,166,135,162,142, 26, 2, 33,193, 37, 46, 36, +214, 87, 86, 97,140,193,116,105,138, 96,135, 17,187, 76,169, 98,232,208,183, 13,156,175, 16,160,208,176, 88,215, 79,166, 8, 81, +158,113,141,220,119,164, 41,233, 91, 78, 34,164,115, 67,132,108, 49, 37, 88, 6, 58, 37,100,172,175,174,177, 11,140, 82,249, 68, +144,122,242,196,113,252,218,157, 31, 99,138, 97,192,253,223,189,191, 76,128, 36, 6, 92, 91,139, 28, 19,186,142,226,161,141,181, + 8, 93, 71, 33, 57,145,154, 41,107, 13, 66,215,193, 79,232,189, 72,125, 15,181,249,130, 45, 57,134,192, 85,196,136, 75, 45,153, +188,233,220,145,240,144, 78,181,248,210,152, 47, 6, 22,117,138,139, 4,120,243, 95, 67,118,176,243, 23,252,152,103, 62,190,220, +203,231,119,110, 74, 32, 62,217, 68, 82,229, 50,202, 45, 23,165, 8,238, 70,161,244, 37, 90,116, 4,214,145,160, 4, 81, 53, 40, + 6, 32,108, 76,112, 99,146, 82, 30, 10,157, 69, 93,183,236, 99, 82,206, 64, 60, 87,116, 56,223,221, 91, 70, 36,198, 64,197,200, +184,211, 30,139,237,198, 95, 99,254, 98, 95,244, 90,142,255,185, 20, 56,114,248, 45,130,195, 72, 88,141, 92, 38, 37,174, 86,186, +235,208,151, 75,222, 90, 74,101, 18,145, 96,140,131,167, 90,243, 5, 89, 87, 36, 44,204,204, 52, 54,138, 3,130,180, 96, 87,171, + 50,186,146,228,171,161, 35,164,223,175,235, 26, 6, 11, 57,104,208, 7,150, 50, 7,108, 33, 26,142,167, 69, 50, 77,177,149, 71, + 96,198, 58,210,128, 93,205, 41, 65, 89,170,248,189,245,220, 68,211,200, 89, 18,199,104,234, 78, 56, 88,227, 28,250, 24,209,207, + 26, 40,197,214, 57, 97,161, 71,234,162,164,121, 8, 33, 0,138,243,178, 37, 19, 59, 18, 49,169, 8,121,114, 38, 11, 30,175,130, + 68,159,225, 45, 51,239,189, 45,104,228,242, 94,135,110, 68, 37, 52,133,131, 29, 99,130,134, 41,104,212,196, 94, 94, 17, 97, 74, + 64, 6, 49,251, 21,172, 51,197,203, 30, 51,117,241,114, 96,181,124, 8, 91,134, 80,213, 85,141,174,153,145,232, 85,145,221, 82, +137,151,157,217,114,214,113,103,193,197, 52, 61, 47, 34, 30,141,163,207, 42, 23,209,114, 73,131,178,166,233,253,227,223, 53,105, +238, 28, 45, 81,229, 18, 96,148, 97,118, 64, 67,182, 84, 30, 75, 87,147, 37,158, 58,101,238,176, 19, 98,236,208,181,164, 40,174, +107, 10,184,105,154,117, 94, 65,104, 76,234, 9,115,209, 3,114, 12,152,205,214,233, 89, 12, 61, 77,144, 28,197,189,130,159,151, +152, 40,170, 53,165,140, 28,185, 56, 97,224,143,226,164, 65,138,247,165,108,119,205, 97, 76, 90, 32, 70,200,232, 2, 1,174,144, + 80,130,134, 36, 10,184,170, 42,186, 76,103,171,180, 90,226,208,147,192,180, 63,148,226, 89,179,194, 95, 81,162, 27,128,233,230, +101, 2, 87,133,128,212,145,247,185, 99,168,141,245,100,129, 50,218,148, 72, 91,173, 57,148, 40,131, 93, 14,148,148,233,189,135, +178, 28,122,162, 73, 68,157,186,128,138, 3,170,122,158, 10,133,142,184, 3, 80, 40, 84, 69,192,148,247, 50,201,100, 34,147,149, + 51,107,133,170,162,125,123,223, 19,167,128,238,137, 72,104, 84,165, 8, 47, 28, 35,103,228,168,194,212, 79, 49,150, 51, 83,162, + 86,165, 64,146, 98,123, 72, 47, 36,157,147,136, 92,135, 38, 10, 37, 97, 84,130, 94,148,166,100,190,204,233,143, 84, 76, 81,118, +130,117,158, 94,239,190,167,113, 63,191,183, 41, 15, 89, 0,196,101,233,209, 53, 51,190, 27, 60, 11,181, 25,150,163,108, 89,197, + 42, 77, 19, 69, 33,133,202,164, 79, 62,135, 36,128,235,139, 72,206,251,138, 0, 64, 18, 41,203,197,173,210, 6,221,172,225,179, +152, 25, 35,213,180,206, 50,106, 44,222,109, 25, 63,139, 56,107,129, 64,110,145, 61,105,190, 91, 94,148, 37,189,104,108, 63,159, + 41,125,190,238,252, 23, 49,215, 41,175, 93, 21, 33, 9, 32,135,106, 95,118,132,196,209, 29, 46,172,113,247, 59,207, 76,159,255, +126,202,104, 22,190,165, 50,118,203,153, 71,198,163,110, 36,179, 71, 26, 41, 47,252, 61, 54,252, 78,134,222, 48,149,206, 45,154, +230, 85,226,122, 84, 60,148,181,193,252,248,124,244,251,204, 23, 82,231,251, 25,210, 2, 84,237, 56,124,101,161,151,220,104,170, + 82,197, 35, 43,216,204, 17,215, 95,254,222,217,170, 64,129,132,221,174, 12,237,125,193,186, 5, 9, 10, 9, 61, 41,160,141, 49, +136,153,252,226,198, 56,228, 60,100, 35,199,148, 56,137, 75,149,113, 86,148,164, 61, 12, 97, 25,150,201, 87, 4, 31,145, 0, 14, +186,192, 60,119, 27,208, 10,129,129, 25,133,216,196,159, 5,203, 62,234,208, 52,176,188,167,214, 90,163,227,252,109, 65,203, 98, + 60, 13,138, 1,202,100,120,231,105,159,206, 33, 32,206,122, 74,176,226,139, 87,105,186,220,188,247,252,186, 42,168,172, 55,140, +196,193, 19, 0, 5, 58,204,140,166, 49, 97, 97, 92, 3, 60, 2, 22,141, 5, 79,159,120,226, 33,211, 13,100,197,236,238,106, 3, +154, 88, 10, 15, 25,157, 91,118,129,216,146,192, 70, 7, 66,215,247,197, 34,230,125,197,226,205,128,122,186, 9, 49,229,146,170, +102,249, 51,101,152, 41, 16, 82, 44, 84, 52,226, 50, 88, 62,108, 19, 66,232,225,188, 67, 61,153, 2,138, 94,247,241,207, 39, 83, + 5,235, 28, 52, 20, 17,249, 82,134,159, 76, 40,252, 73,216,217,214, 34,244,129,144,180,125, 83,118,199,244,185, 20,138,156,134, +182,194,181,231, 49,101,166,200,214,182,109,208, 54, 13,170,170, 66,211, 52,124, 72,114,227,208,243, 90,133,216,199,112,174,134, + 18,235, 28, 64, 48, 38,100,164,220,243,232,147,159,241, 20, 81,213, 53,156,243,232, 3,117, 82, 50,253,208,242, 28, 43, 32, 41, +193,251,242,243,217,181,116,177,205, 77, 67,251,208, 35,131,223,103,254, 30, 10, 84,244, 5,198,187, 26, 51,164, 77,146,157, 50, + 66,107, 46,166,140, 65,142, 67, 54,125,199,171, 19,207,194,176,196,231,153, 8,137, 21,175,171, 40,119,131,249, 8, 24, 50, 57, +100, 61,169, 37,227, 92, 41,104,111, 41,213,142, 73,105, 20,190,100, 11, 23, 95,107,141,208,245,208,236,150,113,206, 21,236,113, +202,122,195,138, 54,116, 13, 98,232, 4,128, 12,103, 45,250, 44,107, 32,201, 45, 36,119,163, 20,163, 98,235,204,194, 56,225,127, +166,248,124,210, 22, 5, 15, 92,156, 26, 25,229,107,142,102,209,133,220, 71,110,141,142,207, 66, 91,226,116, 49, 2,153,135, 16, +161, 6, 50, 76,249, 60, 1, 84, 56,177,238, 24, 9, 52, 69,152, 76, 54,209,103, 35,244,136,125,187, 33,175, 65,101,250,222, 60, + 85, 39,192, 21, 71,231, 10, 24, 44,178, 16,149,158, 5, 62,103, 57,205,209,249,106, 56, 51,234,165, 73, 22, 30,181,116, 93, 82, + 9,228, 13,249,223,139,249,226,243,137, 91,114, 17,204,239,216, 69,236,148, 70, 41, 93,133,118,166, 48,240,109,139,126, 41,151, +110, 54,143,166, 7, 98,163, 2,228, 65,213,128, 70,233,254,114,166,220,104,241,243,106, 30,195,201,158, 78, 58, 93, 98,172,235, +162,110, 46,126,119, 30,227, 10, 1, 78,176,140,242, 98, 67,169, 18,118,163,184,187,151, 48, 18, 73, 80, 42,169,110,163, 3,127, + 17, 50,149,186, 89, 83, 46, 28, 98, 78, 15,235,131,177, 53, 80,200,117,242,218,204, 23, 90, 37, 40,224, 92,177, 65,217,251,157, + 79,155,160,244, 72,204, 88, 94,147, 97,151, 90, 30,104, 25,169,178,109, 76,241,168,141, 87,176,163, 73, 65,166,180, 41, 75, 31, +118, 57,172, 40,121,142,212,219, 49, 16, 77,140, 82,226, 92, 73, 3, 76,125,160, 48, 9, 16,208,163,239, 41,179,217,123,143,166, +153,177, 13,146,126, 95, 25, 97,130,223, 31, 18,155, 40,166,150,245,165,243, 49, 44,248,146, 9,130,144,232,192, 2, 57,241,178, +107,163,145,122,242,115,183,236,189,166,192, 17,195,121,210, 29,151,132,156, 78, 22,169,195,140, 49,161,170,107,222, 87, 83, 39, + 97,188,229,139, 62, 21, 65,102, 98,225,151,209,134, 5,107,186, 20,137,200, 2,159, 96, 77,128,175, 54, 8,247,232, 57,212, 60, + 58, 23,130, 97,164,215,158, 15,133,148,169, 51, 86, 37,187,128, 38, 70,154, 45,114,178,167,155,212,180, 59,157, 53, 52,194,117, +206, 33, 35, 97,245,236, 10, 1, 95,152,210, 88, 88, 17,222, 1, 25,148, 95,221, 7,100, 62,180,164, 32,107, 24, 25, 90,108,169, +138,211,250,180,134,213,131,143, 94, 10, 49,202,193,142,156, 68, 71, 7, 94,230,140,135,201,116, 90,158,193,192, 22, 68, 17,228, +129, 39,104,194, 65,136,137,167, 68, 10, 35,218,157, 32,153, 13,180,178,128,202,232,218, 25, 77,121, 56,170, 54, 33,151,196, 60, + 41,114,170,122, 9, 93,223,114, 20,180,131,202,153,244, 30,124, 6,146, 34,217,242,186,169,160, 28, 16, 82,199, 89,217, 50,225, + 33,176, 78,224,156,235,192,171,164,166,153, 81,167, 23, 40,114, 85, 91,135,170,154, 32,133,158,133,145,185, 40,216,141,172,244, +248, 92, 81, 86,241,186,112,248,190,148, 8,169,144,114,228,105,142, 30,206,111, 74,196,130,113,154,223,119,118,196,240,197,161, +184, 11, 13,129,176,203, 96,198,134, 16, 8,105,106,201,175, 47,115,172, 19,235,102,140,177,204, 84, 31,200,147,213,116, 2, 40, + 10,251, 74, 33,240, 20,129,234,161,200,249,224,164,189,137,232, 57, 29, 78,206, 26, 63, 89, 42,137,121, 68,240,108, 8,102,147, +233,251,201,253, 96,140, 43,249,236, 57, 6, 32, 49, 0,202, 58, 62,215, 41, 65, 77,107,218,241,231, 76,120,216,156, 69,164, 59, +110, 90,116,209,176, 24, 71,221,180, 2,208,119,109,185,216,105, 29,146,138, 7,124,108,169,132, 2,172,162,192,153,164, 56,241, + 81,244, 42, 44,162, 38, 57, 58,231,156,112, 35,147, 99,162,132,195,174, 67,223,207, 54, 76,192,141,113,112, 85,189,209, 9,149, + 50,186,134,196,163, 90,113,152, 19, 55,139, 9, 84, 84,210,247, 1, 39,233,145,182, 75,185,202,103,233,252,100,132, 59,223,177, +142, 47,232,241, 78,120, 17, 41,108,200, 32,158,235, 0,141, 88,219,226,185, 17,166,154,198,216,153,127, 64,140,176,169, 89,243, + 45,159, 85,217, 93, 41,141, 18, 26, 64,135, 92, 42, 85,190,116, 3,101,175,206,181, 84,230,168, 82, 41, 84, 12,139,222,100,132, +169, 70, 23,122,185,252,242, 70, 29,129,208,199, 36,184, 68, 59,179, 33, 45, 46,199, 52, 4,125,140, 10,159,177,103,121,209,200, + 91,137,192,133,127,182,177,136,110,222,166,118, 62,178,223,184, 83, 55,227,145, 20, 79, 24, 18,219,227,140, 53,200, 50,130,226, +169,128,243, 53,197, 45,198,128, 16, 90, 89, 44, 48,172,164, 47, 83, 14,137,127, 53,134, 47, 9,229, 8, 18, 19,187, 33,121, 78, +200, 72,176,195, 56, 82, 58,126, 14,119, 80,150, 81,168,154, 10,189,174,167,241, 96,197,151,244,108, 54, 3, 52,231, 51,247,161, +224, 76, 37, 41,208,216,154,188,195,137, 46, 52,138,142,205, 60,186,235,135,160,149,241,164, 8,131, 74, 27, 90,141, 98,131,134, + 88, 80,195,187,172, 60, 42,110,164, 88,178,206, 34,230,126, 24,255, 97,128,217,140, 47, 30,235,106,158, 52,144, 50, 63,134, 88, +190,190, 98,128,143,202,150, 19,182, 90, 18, 8, 90,143,172, 6,219, 93,207, 93,135,115, 14,211,165, 37,172,173,173, 33,117, 68, + 82, 19,203,139,172,135,104,135,167,209,183, 36,228,146, 41,136,100,136, 71,102,206,203, 26,194,123,143, 12,193,221, 6,182,218, + 80, 17,102,180, 7, 44, 9,183,156,247,132, 80,230,207, 44, 20,144, 59, 66, 62,131,137,142, 2, 28,154,173,175,161,239, 90, 88, +107,177,105,249,173,180,166,136, 52, 70,157, 78,167,136, 41,160,109, 90,210, 6,104, 13,240,100, 77,229,140,102,157,216,238, 74, +103,102, 9, 12, 69,189,226, 46, 36, 33,194,123, 7, 36,179,113,162,149, 19, 41,218,181,166,112, 26,126,221, 19, 51, 1, 8,134, + 4,116,253,108,195,234,206,185, 26, 74, 27,226, 85,244,161, 8, 97,157,119,197,246,164, 56,188,202, 24,131,179,103,207,142,148, +253,204,207,103, 36,113, 8, 45,239,196, 29, 1, 67,178,240,219,201,186,215,117,237,128, 5,230,204,117, 18,148, 89, 56, 95, 19, +234, 55, 70, 40,147, 57, 54,215,151,162, 53,143, 82, 0,169,139, 30,108, 79,162, 82, 13,177, 35,203,166, 98, 84,169, 64,105, 18, +125, 77, 57,171, 73, 60,233,169, 3,207,153,108,183,252,185,144,201, 78,219,182, 52,130,150, 76,135, 81,154,157, 20,159,138,189, +217,198,145,152, 12, 28,127, 28, 2, 69,247,198,174,167, 51, 71,206, 24,126, 45,233,119, 36, 19, 89,236, 57,141,204, 89,216,106, +130,212,209, 10,140, 10,168,140, 28, 3,199, 41, 36,230, 68, 24,206, 88,208,108, 25,165, 85, 10, 77, 45, 21, 7, 41,169, 34,110, +150,115, 84,177, 10, 31, 60,154, 46,235, 46,214, 90, 24,163, 97,109, 69,124,128,216,177,248,141,166, 29, 61, 7,178,164, 60, 52, + 3,164,187,161,159,221, 51, 53, 51, 34,208,215,134, 45,194, 86, 73, 2, 20, 33, 43,121,217,251,226, 16,200, 41, 65,153,196, 83, + 12, 85,172,220,229,181, 23,156, 55,108, 57,131,202,164,152, 45,108, 89, 69,134, 89,233, 13,137,114,138, 98,202, 77, 22,165,246, + 34, 5,250,162,136,204,121, 97,219,188,130,123,252,239,138,112, 65, 94, 76,217,225,168, 97,199,166,173, 46, 86, 13,217,109, 23, +158,182,101,139, 77, 98,117, 42,168,235, 46,214,187,178, 91,209,188, 95,237,202,113,237, 57,122,111, 40, 86, 80,196, 67, 37,255, +156,243,180, 29,171, 64,199, 47,148,140,160, 5, 77, 74, 28,239, 92,162, 42,133,243,157, 82, 34, 65, 76, 23,248, 48, 75,191,144, +202,119,142,200,205, 12,187,120,185, 28,230,149,237, 27, 52,210,115,188,247,178, 39, 42, 58,135, 65,240,150, 71, 35, 38,137,244, +139,253,176,247,149,113,163, 60,112, 41, 69, 56,231,161, 45, 95, 2,163,172,123, 89, 59,196,126, 70,135, 61,239,204,100,156, 89, +136, 71, 25,176,218,151,221, 22,217,251, 72, 8, 35,135, 33, 21, 92,186,116, 74,196, 83,167,223,203, 57,135, 46, 52,163,106,159, +187, 57,126,180,140,113,133, 73, 64, 32,163, 6, 33,246,229,226,119, 60,158,151,125, 25, 51,231,120,183,173, 24,118, 18,160,160, +203,100, 74, 86, 4,162,208, 79,220,225, 10,211, 57,198,128, 12, 26,235,107,238,252,145, 83, 81,248,203, 37,172, 52,121, 69,115, +162,174,189,170,235,162, 24,150,247, 36,198,204, 49,193, 13, 50,200,215,171,149,229,162,201,113, 52,108, 40,249,244,148, 83, 30, + 81, 77,167,244,103,140,101, 98,152, 1, 56,103,185, 93, 91, 35,177, 28,175, 70,178,214,240,149, 71,219,180,136,125,132,243,180, +107, 38,220, 48,133,183, 88,239, 24,130, 83, 3,153,196, 63,221,250,250, 16,233,201,147,138,148, 51, 65, 49,152, 47, 17, 25,245, +218,117, 84,240,213,147, 26,117, 69, 74,102,205,235,147,213,149, 51,208, 76, 98, 12, 18,167,220,199,162,248, 46,207, 62, 40,110, + 88, 4, 79,212,193, 36,202,131, 7, 69, 25, 87,156,212, 22,186,192, 14,135, 76,200,222, 16, 56,129,145, 38, 32,190,170,208, 7, +238,206,178,134,119, 21,105, 38,242, 16,127, 44,205,139, 97,116,116, 8,137, 47,170,136, 73,181, 4, 91, 85,172, 76, 79,212,117, +114,186,158,179, 14,142,119,244, 89, 1, 33, 81, 87, 26,251,142,186, 49, 91,195,121,143,204,160,157,148,104,186, 66,123, 93,113, +222,100,190,152, 13,180, 37,208, 80, 63,155,113,231, 69,234,112,233,166,229,112,143, 41,194,213,117,129,143,228, 56, 20,157, 74, +110, 76,100, 24,237, 56,134, 56,241,216,190, 43, 36, 61, 85,216, 29,156, 35,238,253,224,238, 41,205,195,240,172,143,115,226,157, +119,200, 28, 63,171,120, 66, 4,129,254,176,198,133,132,168,129, 39, 47, 10,198,123,104, 67,209,167, 57,103,164,182,231, 41, 2, +101,154,103,254,126,202, 12,194,197, 13, 83, 76,118,169,128,207, 9,107, 61,186,102, 86,130,112, 32,166,196, 24, 97,205, 16,179, +108,189,101,119, 67, 40,162, 93,161, 59,106, 78,190,164,103, 54, 21,205,152, 26, 9,167,233, 92, 55,176, 85,205,122,170,192,141, +230,176, 58,148,148,209,208,245,229,191,111, 26,138,134,117,140,124, 14,146,187,192,147, 51,225,179,103, 94, 11,211, 57, 30, 54, +220,149,214,186,210,148, 42,177, 65,115,161, 70,110,156, 84,156, 70, 96,231,205, 56,112, 10,172,135,128, 2,148, 49, 38,207,171, +168, 23,141,139, 23, 93,238,227,127, 47,221,225,188,213, 42,241,131,156,211,224,133, 29, 72,101,140,237,228,125,104, 8,113,180, +239, 80,133, 2, 86, 10, 83, 53,108,254,199,100, 37,197, 30,107,249,231,153, 67, 41,232,193,205, 3,243,187,160, 21, 89,105,237, +253,134,241,181, 36, 94,149,157, 30,255, 92,169,140,224,198,123,106,197,187,171, 65,113, 46,187,244,255,159, 8,212,249,108,243, + 69, 25,232,227, 85, 3, 74,113,144,202,142,101, 28, 67, 43,191,183,182,166, 92, 76,146, 0,199, 67, 7,218,189, 56, 18, 51,209, + 5,235,217,243, 76, 33, 37,117, 85, 3, 48,133,131, 47,123,228,114,184, 84,228,211, 22,138,175, 54,190,100, 75,107, 46, 8,148, +206, 84,124, 37,178,194,104,230,169, 83,244,109, 44,140,121,122, 77,217,182,147, 3, 91,140, 98,233, 38, 3, 95,218,134, 87, 32, +224,241,186, 80,158,198,217,225,178,154, 41, 3, 50,165, 7, 49,161, 30, 10, 75,202, 91, 39,219, 28,161, 93, 21, 23,137, 28, 8, +163, 53, 66, 72,101,109,144, 68, 35, 33,107, 2,165,209,118, 29,234,233,132,108, 74, 33,192, 57, 75,133,152, 26,232,129, 49, 4, + 58,248,185,171,183,118,148,239,206, 7, 67,138, 17, 49,245, 69,236, 20, 35, 74, 49, 82,236, 77, 35,203, 99,202, 25,137, 17,145, +142,197, 97,126, 82,163,154, 76,208,206,102, 20,127,154, 50,218,166,225,236, 4,186,196,157,247,240,174, 98,219, 14,143, 37,219, +150, 53, 31,116, 57,118, 93, 71,232, 88,207, 43, 43, 99,128,152,105, 7,170,136, 34,168, 64, 2, 39,178, 49, 41,198,159, 58, 36, + 16,153, 81,240,206,190,158,194,123, 18, 63, 89,235, 16, 83, 96,210,162, 27, 5, 37, 89, 82,253, 51,175, 91,166, 93,179,217, 58, + 84, 38, 21, 63, 97,182, 52, 66,215,162,109, 8,197,234,234, 77, 5,251,170,149, 66, 26, 77, 52, 82,160,209,179,228,197, 3,170, +140,121,243,168,144,144,212,197,156, 51,170, 73, 13,235, 61,197,191,174, 55,133,177,159,115,134,245, 30,125, 34, 10,101,104,251, + 97,236,174,169,185,192, 56,145,113,164, 92, 23,204,171,171, 60,145, 1,155, 6,138,199,246,198,121,154, 42, 4,178,113, 25, 86, +228,147,178,191, 27, 86,127,124, 33,150, 4, 63, 13,196,204,200,107,100,210,111,241, 25, 43,151, 77,215,247,165,147, 31,226,145, + 89,124,170, 93, 25,131, 27, 75, 46,134,196,164,193, 28,184,225, 65,102, 42, 91, 68, 70,228, 28,136,138,167, 31, 25,137, 47, 67, + 42,126, 81, 20,249, 2, 11, 42,180,113,173,134, 25,152, 38,209, 23, 24,133,156, 82,228, 6,128, 59, 81,171,139, 46,130,166, 97, +142, 29, 20,164,223, 0, 39,158,229,190, 37,219, 27, 84,129,194,200,244, 66,192, 72, 18, 93,171, 53, 54, 64,195,138, 82,140,245, + 79, 68,134, 36, 69, 60,253,188,110,131,237, 18,252,239,101,133,129,209, 42,154,112,196,125, 57, 19,170,170, 70,232, 19,135, 53, +229,130,129,158, 39,124,202,100,192, 90, 83,238, 61,197,129, 93,101, 13, 48, 55,141,165, 78,157, 5,138, 74,196,131,154, 67,115, +134,232, 95,177,157, 90, 99,121,133, 9,252, 95, 84,139,234, 94,223, 17,236,117, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; From 2777ba74b04dc6d3f4479634f8feaf361464a574 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 13:52:12 +0000 Subject: [PATCH 038/163] remove include paths which dont exist, fix for doc upload script which was getting the blender version twice and not working sometimes. --- doc/python_api/sphinx_doc_gen.sh | 1 - intern/smoke/CMakeLists.txt | 1 - source/blender/blenlib/CMakeLists.txt | 1 - source/blender/blenloader/CMakeLists.txt | 1 - source/blender/gpu/CMakeLists.txt | 1 - source/blender/ikplugin/CMakeLists.txt | 1 - source/blender/render/CMakeLists.txt | 1 - source/blender/windowmanager/CMakeLists.txt | 1 - 8 files changed, 8 deletions(-) diff --git a/doc/python_api/sphinx_doc_gen.sh b/doc/python_api/sphinx_doc_gen.sh index 49a2e4869d8..ae7fad58c23 100755 --- a/doc/python_api/sphinx_doc_gen.sh +++ b/doc/python_api/sphinx_doc_gen.sh @@ -15,7 +15,6 @@ blender_version=$(grep BLENDER_VERSION $blender_srcdir/source/blender/blenkernel blender_subversion=$(grep BLENDER_SUBVERSION $blender_srcdir/source/blender/blenkernel/BKE_blender.h | tr -dc 0-9) BLENDER_VERSION=$(expr $blender_version / 100)_$(expr $blender_version % 100)_$blender_subversion -BLENDER_VERSION=`$BLENDER --version | cut -f2-4 -d" " | sed 's/(//g' | sed 's/)//g' | sed 's/ sub /./g' | sed 's/\./_/g'` SSH_UPLOAD_FULL=$SSH_UPLOAD/"blender_python_api_"$BLENDER_VERSION SPHINXBASE=doc/python_api/ diff --git a/intern/smoke/CMakeLists.txt b/intern/smoke/CMakeLists.txt index 741301f04da..2cf51a0f7ec 100644 --- a/intern/smoke/CMakeLists.txt +++ b/intern/smoke/CMakeLists.txt @@ -27,7 +27,6 @@ SET(INC intern ../memutil - ../guardealloc ../../extern/bullet2/src ${PNG_INC} ${ZLIB_INC} diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index a37723a8287..35785447a86 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -28,7 +28,6 @@ SET(INC . ../makesdna ../blenkernel - ../include ../gpu ../../../intern/ghost ../../../intern/guardedalloc diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt index 144b1d1b1a1..11bb3b14677 100644 --- a/source/blender/blenloader/CMakeLists.txt +++ b/source/blender/blenloader/CMakeLists.txt @@ -30,7 +30,6 @@ SET(INC ../blenkernel ../makesdna ../readblenfile - ../include ../makesrna ../render/extern/include ../../../intern/guardedalloc diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 02a43abf098..a2bfddd96fb 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -28,7 +28,6 @@ SET(INC . ../blenlib ../blenkernel - ../include ../imbuf ../makesdna ../makesrna diff --git a/source/blender/ikplugin/CMakeLists.txt b/source/blender/ikplugin/CMakeLists.txt index 61d5ff4f7fe..1c1cc27611a 100644 --- a/source/blender/ikplugin/CMakeLists.txt +++ b/source/blender/ikplugin/CMakeLists.txt @@ -28,7 +28,6 @@ SET(INC ../blenlib ../makesdna ../blenkernel - ../include ../ikplugin ../../../intern/guardedalloc ../../../intern/iksolver/extern diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt index bed48a3fd17..1224e51ff3f 100644 --- a/source/blender/render/CMakeLists.txt +++ b/source/blender/render/CMakeLists.txt @@ -36,7 +36,6 @@ SET(INC ../makesrna ../blenkernel ../imbuf - ../include ../../kernel/gen_messaging ../../../intern/smoke/extern ../../../intern/guardedalloc diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt index 36d9f2b5c8c..c39897af68a 100644 --- a/source/blender/windowmanager/CMakeLists.txt +++ b/source/blender/windowmanager/CMakeLists.txt @@ -33,7 +33,6 @@ SET(INC ../makesdna ../makesrna ../blenkernel - ../include ../imbuf ../blenloader ../editors/include From 7a569402078e4d4cb5b905645e8466e653bf6e1a Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Wed, 27 Oct 2010 14:56:53 +0000 Subject: [PATCH 039/163] Fix for [#24401] Fluid particles leak through walls of moving object --- source/blender/blenkernel/intern/particle_system.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index be616d9922c..a4c0776f5df 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -3076,8 +3076,8 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo col.t = df; } else { - /* final chance to prevent failure, so don't do anything fancy */ - copy_v3_v3(pa->state.co, co); + /* final chance to prevent failure, so stick to the surface and hope for the best */ + madd_v3_v3v3fl(pa->state.co, co, col.vel, dt2); copy_v3_v3(pa->state.vel, v0); } } From fd3532f1a9598292711412f63ee818329819e478 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 16:05:31 +0000 Subject: [PATCH 040/163] bugfix [#24341] Problems running blender headless bg mode didnt have the screen context callback set. Though this sounds logical, bg mode defines a screen it should be set. --- source/blender/editors/screen/screen_edit.c | 31 +++++++++++---------- source/blender/windowmanager/intern/wm.c | 11 ++++---- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 9d178a57465..2cd6dafa167 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1029,23 +1029,26 @@ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win) ScrArea *sa; rcti winrct= {0, win->sizex-1, 0, win->sizey-1}; - screen_test_scale(win->screen, win->sizex, win->sizey); + /* exception for bg mode, we only need the screen context */ + if (!G.background) { + screen_test_scale(win->screen, win->sizex, win->sizey); + + if(win->screen->mainwin==0) + win->screen->mainwin= wm_subwindow_open(win, &winrct); + else + wm_subwindow_position(win, win->screen->mainwin, &winrct); + + for(sa= win->screen->areabase.first; sa; sa= sa->next) { + /* set spacetype and region callbacks, calls init() */ + /* sets subwindows for regions, adds handlers */ + ED_area_initialize(wm, win, sa); + } - if(win->screen->mainwin==0) - win->screen->mainwin= wm_subwindow_open(win, &winrct); - else - wm_subwindow_position(win, win->screen->mainwin, &winrct); - - for(sa= win->screen->areabase.first; sa; sa= sa->next) { - /* set spacetype and region callbacks, calls init() */ - /* sets subwindows for regions, adds handlers */ - ED_area_initialize(wm, win, sa); + /* wake up animtimer */ + if(win->screen->animtimer) + WM_event_timer_sleep(wm, win, win->screen->animtimer, 0); } - /* wake up animtimer */ - if(win->screen->animtimer) - WM_event_timer_sleep(wm, win, win->screen->animtimer, 0); - if(G.f & G_DEBUG) printf("set screen\n"); win->screen->do_refresh= 0; diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 1b0870194a6..5c4912d7aee 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -232,12 +232,13 @@ void WM_check(bContext *C) /* case: no open windows at all, for old file reads */ wm_window_add_ghostwindows(C, wm); + } - /* case: fileread */ - if((wm->initialized & WM_INIT_WINDOW) == 0) { - ED_screens_initialize(wm); - wm->initialized |= WM_INIT_WINDOW; - } + /* case: fileread */ + /* note: this runs in bg mode to set the screen context cb */ + if((wm->initialized & WM_INIT_WINDOW) == 0) { + ED_screens_initialize(wm); + wm->initialized |= WM_INIT_WINDOW; } } From 35807b20be55d49261d5fd2d837b65eb543e5472 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 16:36:25 +0000 Subject: [PATCH 041/163] bugfix [#24418] NLA Crashes blender on Undo --- source/blender/blenkernel/intern/anim_sys.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index e03799ff938..52c5edc53a0 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -1641,6 +1641,11 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) if ((nlt) && !(adt->flag & ADT_NLA_EDIT_NOMAP)) { /* edit active action in-place according to its active strip, so copy the data */ + + /* this is cleared on undo */ + if(adt->actstrip == NULL) { + adt->actstrip= BKE_nlastrip_find_active(nlt); + } memcpy(&dummy_strip, adt->actstrip, sizeof(NlaStrip)); dummy_strip.next = dummy_strip.prev = NULL; } From 05bb6b5d6ccfc1846fc524f4f790fd057f1a7616 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 16:47:25 +0000 Subject: [PATCH 042/163] bugfix [#24419] Console Autocomplete Error [Patch to fix attached] patch provided by Justin Dailey (dail) in report. --- release/scripts/modules/console/complete_calltip.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/release/scripts/modules/console/complete_calltip.py b/release/scripts/modules/console/complete_calltip.py index 87fac9f4c07..322b48d4f65 100644 --- a/release/scripts/modules/console/complete_calltip.py +++ b/release/scripts/modules/console/complete_calltip.py @@ -168,7 +168,10 @@ def complete(line, cursor, namespace): 'abs(number) -> number\\nReturn the absolute value of the argument.' """ matches = [] + word = '' + scrollback = '' match = RE_DEF_COMPLETE.search(line[:cursor]) + if match: word = match.group(1) func_word = match.group(2) @@ -176,7 +179,7 @@ def complete(line, cursor, namespace): func = eval(func_word, namespace) except Exception: func = None - scrollback = '' + if func: doc = get_doc(func) argspec = get_argspec(func, doc=doc) @@ -186,7 +189,5 @@ def complete(line, cursor, namespace): elif doc: scrollback += '\n' + doc scrollback = reduce_newlines(scrollback) - else: - word = '' - scrollback = '' + return matches, word, scrollback From 58a1ddcc9e5fe4b685ee328fa5318e1261f7c160 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Wed, 27 Oct 2010 18:24:58 +0000 Subject: [PATCH 043/163] netrender New Feature: VCS job type Render a file (with dependencies) from a version control system (currently only supports subversion, but system is already generic). On client, working path, server path and current revision can be guessed from data on disk or entered manually. On slave, a working copy is created (if needed) where specified by the job and updated to the proper revision. On master web page, job types now appear in the job lists. The job page shows the list of dependencies for "normal" jobs or versioning information for VCS jobs. Limitations: Need to have command line tools "svn" and "svnversion". Working copy path must be the same on client and slaves (the client gets the job path relative to the working copy). When guessing, working copy path is set to the folder where the current file is (this can be changed manually after). On the slave, it will update the working copy AS SPECIFIED to the revision, so if that path is too deep, some dependencies will not be updated properly. Doesn't support mixed revisions (and will not give any warnings for that), it will always use the first revision specified by "svnversion" Bugfix: Thumbnail generation doesn't chew down memory anymore and always gives correct result (thumbnail on master especially could mess up between jobs with the name result filename) --- release/scripts/io/netrender/__init__.py | 2 + release/scripts/io/netrender/client.py | 84 +++++++++++++++++++-- release/scripts/io/netrender/master.py | 14 ++-- release/scripts/io/netrender/master_html.py | 78 +++++++++++-------- release/scripts/io/netrender/model.py | 84 +++++++++++++++++++-- release/scripts/io/netrender/operators.py | 33 ++++++++ release/scripts/io/netrender/slave.py | 20 ++++- release/scripts/io/netrender/ui.py | 60 +++++++++++++++ release/scripts/io/netrender/utils.py | 23 +++++- release/scripts/io/netrender/versioning.py | 72 ++++++++++++++++++ 10 files changed, 415 insertions(+), 55 deletions(-) create mode 100644 release/scripts/io/netrender/versioning.py diff --git a/release/scripts/io/netrender/__init__.py b/release/scripts/io/netrender/__init__.py index b8c1fddc691..32480030363 100644 --- a/release/scripts/io/netrender/__init__.py +++ b/release/scripts/io/netrender/__init__.py @@ -30,6 +30,7 @@ if "init_data" in locals(): reload(balancing) reload(ui) reload(repath) + reload(versioning) else: from netrender import model from netrender import operators @@ -41,6 +42,7 @@ else: from netrender import balancing from netrender import ui from netrender import repath + from netrender import versioning jobs = [] slaves = [] diff --git a/release/scripts/io/netrender/client.py b/release/scripts/io/netrender/client.py index 128ae99ab1d..c469c80264e 100644 --- a/release/scripts/io/netrender/client.py +++ b/release/scripts/io/netrender/client.py @@ -92,7 +92,82 @@ def addPointCache(job, ob, point_cache, default_path): previous_frame = previous_item[0] job.addFile(cache_path + current_file, previous_frame + 1, next_frame - 1) +def fillCommonJobSettings(job, job_name, netsettings): + job.name = job_name + job.category = netsettings.job_category + + for slave in netrender.blacklist: + job.blacklist.append(slave.id) + + job.chunks = netsettings.chunks + job.priority = netsettings.priority + + if netsettings.job_type == "JOB_BLENDER": + job.type = netrender.model.JOB_BLENDER + elif netsettings.job_type == "JOB_PROCESS": + job.type = netrender.model.JOB_PROCESS + elif netsettings.job_type == "JOB_VCS": + job.type = netrender.model.JOB_VCS + def clientSendJob(conn, scene, anim = False): + netsettings = scene.network_render + if netsettings.job_type == "JOB_BLENDER": + return clientSendJobBlender(conn, scene, anim) + elif netsettings.job_type == "JOB_VCS": + return clientSendJobVCS(conn, scene, anim) + +def clientSendJobVCS(conn, scene, anim = False): + netsettings = scene.network_render + job = netrender.model.RenderJob() + + if anim: + for f in range(scene.frame_start, scene.frame_end + 1): + job.addFrame(f) + else: + job.addFrame(scene.frame_current) + + filename = bpy.data.filepath + + if not filename.startswith(netsettings.vcs_wpath): + # this is an error, need better way to handle this + return + + filename = filename[len(netsettings.vcs_wpath):] + + if filename[0] in (os.sep, os.altsep): + filename = filename[1:] + + print("CREATING VCS JOB", filename) + + job.addFile(filename, signed=False) + + job_name = netsettings.job_name + path, name = os.path.split(filename) + if job_name == "[default]": + job_name = name + + + fillCommonJobSettings(job, job_name, netsettings) + + # VCS Specific code + job.version_info = netrender.model.VersioningInfo() + job.version_info.system = netsettings.vcs_system + job.version_info.wpath = netsettings.vcs_wpath + job.version_info.rpath = netsettings.vcs_rpath + job.version_info.revision = netsettings.vcs_revision + + # try to send path first + conn.request("POST", "/job", json.dumps(job.serialize())) + response = conn.getresponse() + response.read() + + job_id = response.getheader("job-id") + + # a VCS job is always good right now, need error handling + + return job_id + +def clientSendJobBlender(conn, scene, anim = False): netsettings = scene.network_render job = netrender.model.RenderJob() @@ -160,14 +235,7 @@ def clientSendJob(conn, scene, anim = False): #print(job.files) - job.name = job_name - job.category = netsettings.job_category - - for slave in netrender.blacklist: - job.blacklist.append(slave.id) - - job.chunks = netsettings.chunks - job.priority = netsettings.priority + fillCommonJobSettings(job, job_name, netsettings) # try to send path first conn.request("POST", "/job", json.dumps(job.serialize())) diff --git a/release/scripts/io/netrender/master.py b/release/scripts/io/netrender/master.py index 11409bf372e..93f2baf4a36 100644 --- a/release/scripts/io/netrender/master.py +++ b/release/scripts/io/netrender/master.py @@ -35,7 +35,7 @@ class MRenderFile(netrender.model.RenderFile): def test(self): self.found = os.path.exists(self.filepath) - if self.found: + if self.found and self.signature != None: found_signature = hashFile(self.filepath) self.found = self.signature == found_signature @@ -105,9 +105,11 @@ class MRenderJob(netrender.model.RenderJob): self.chunks = info_map["chunks"] def testStart(self): - for f in self.files: - if not f.test(): - return False + # Don't test files for versionned jobs + if not self.version_info: + for f in self.files: + if not f.test(): + return False self.start() self.initInfo() @@ -769,7 +771,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): frame = job[job_frame] if frame: - if job.type == netrender.model.JOB_BLENDER: + if job.hasRenderResult(): if job_result == DONE: length = int(self.headers['content-length']) buf = self.rfile.read(length) @@ -820,7 +822,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): frame = job[job_frame] if frame: - if job.type == netrender.model.JOB_BLENDER: + if job.hasRenderResult(): length = int(self.headers['content-length']) buf = self.rfile.read(length) f = open(os.path.join(job.save_path, "%06d.jpg" % job_frame), 'wb') diff --git a/release/scripts/io/netrender/master_html.py b/release/scripts/io/netrender/master_html.py index 74155f6bd66..0e14905a86b 100644 --- a/release/scripts/io/netrender/master_html.py +++ b/release/scripts/io/netrender/master_html.py @@ -20,6 +20,7 @@ import os import re import shutil from netrender.utils import * +import netrender.model src_folder = os.path.split(__file__)[0] @@ -115,6 +116,7 @@ def get(handler): "id", "name", "category", + "type", "chunks", "priority", "usage", @@ -139,6 +141,7 @@ def get(handler): job.id, link(job.name, "/html/job" + job.id), job.category if job.category else "None", + netrender.model.JOB_TYPES[job.type], str(job.chunks) + """""" % (job.id, job.chunks + 1) + """""" % (job.id, job.chunks - 1, "disabled=True" if job.chunks == 1 else ""), @@ -228,39 +231,52 @@ def get(handler): endTable() - output("

Files

") - - startTable() - headerTable("path") - - tot_cache = 0 - tot_fluid = 0 - - rowTable(job.files[0].filepath) - rowTable("Other Files", class_style = "toggle", extra = "onclick='toggleDisplay(".other", "none", "table-row")'") - - for file in job.files: - if file.filepath.endswith(".bphys"): - tot_cache += 1 - elif file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): - tot_fluid += 1 - else: - if file != job.files[0]: - rowTable(file.filepath, class_style = "other") - - if tot_cache > 0: - rowTable("%i physic cache files" % tot_cache, class_style = "toggle", extra = "onclick='toggleDisplay(".cache", "none", "table-row")'") + if job.type == netrender.model.JOB_BLENDER: + output("

Files

") + + startTable() + headerTable("path") + + tot_cache = 0 + tot_fluid = 0 + + rowTable(job.files[0].filepath) + rowTable("Other Files", class_style = "toggle", extra = "onclick='toggleDisplay(".other", "none", "table-row")'") + for file in job.files: if file.filepath.endswith(".bphys"): - rowTable(os.path.split(file.filepath)[1], class_style = "cache") - - if tot_fluid > 0: - rowTable("%i fluid bake files" % tot_fluid, class_style = "toggle", extra = "onclick='toggleDisplay(".fluid", "none", "table-row")'") - for file in job.files: - if file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): - rowTable(os.path.split(file.filepath)[1], class_style = "fluid") - - endTable() + tot_cache += 1 + elif file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): + tot_fluid += 1 + else: + if file != job.files[0]: + rowTable(file.filepath, class_style = "other") + + if tot_cache > 0: + rowTable("%i physic cache files" % tot_cache, class_style = "toggle", extra = "onclick='toggleDisplay(".cache", "none", "table-row")'") + for file in job.files: + if file.filepath.endswith(".bphys"): + rowTable(os.path.split(file.filepath)[1], class_style = "cache") + + if tot_fluid > 0: + rowTable("%i fluid bake files" % tot_fluid, class_style = "toggle", extra = "onclick='toggleDisplay(".fluid", "none", "table-row")'") + for file in job.files: + if file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"): + rowTable(os.path.split(file.filepath)[1], class_style = "fluid") + + endTable() + elif job.type == netrender.model.JOB_VCS: + output("

Versioning

") + + startTable() + + rowTable("System", job.version_info.system.name) + rowTable("Remote Path", job.version_info.rpath) + rowTable("Working Path", job.version_info.wpath) + rowTable("Revision", job.version_info.revision) + rowTable("Render File", job.files[0].filepath) + + endTable() if job.blacklist: output("

Blacklist

") diff --git a/release/scripts/io/netrender/model.py b/release/scripts/io/netrender/model.py index e7656f498b4..60186396ac7 100644 --- a/release/scripts/io/netrender/model.py +++ b/release/scripts/io/netrender/model.py @@ -20,6 +20,7 @@ import sys, os import http, http.client, http.server, urllib import subprocess, shutil, time, hashlib +import netrender.versioning as versioning from netrender.utils import * class LogFile: @@ -96,11 +97,65 @@ class RenderSlave: JOB_BLENDER = 1 JOB_PROCESS = 2 +JOB_VCS = 3 JOB_TYPES = { - JOB_BLENDER: "Blender", - JOB_PROCESS: "Process" - } + JOB_BLENDER: "Blender", + JOB_PROCESS: "Process", + JOB_VCS: "Versioned", + } + +class VersioningInfo: + def __init__(self, info = None): + self._system = None + self.wpath = "" + self.rpath = "" + self.revision = "" + + @property + def system(self): + return self._system + + @system.setter + def system(self, value): + self._system = versioning.SYSTEMS[value] + + def update(self): + self.system.update(self) + + def serialize(self): + return { + "wpath": self.wpath, + "rpath": self.rpath, + "revision": self.revision, + "system": self.system.name + } + + @staticmethod + def generate(system, path): + vs = VersioningInfo() + vs.wpath = path + vs.system = system + + vs.rpath = vs.system.path(path) + vs.revision = vs.system.revision(path) + + return vs + + + @staticmethod + def materialize(data): + if not data: + return None + + vs = VersioningInfo() + vs.wpath = data["wpath"] + vs.rpath = data["rpath"] + vs.revision = data["revision"] + vs.system = data["system"] + + return vs + class RenderFile: def __init__(self, filepath = "", index = 0, start = -1, end = -1, signature=0): @@ -142,6 +197,8 @@ class RenderJob: self.chunks = 0 self.priority = 0 self.blacklist = [] + + self.version_info = None self.usage = 0.0 self.last_dispatched = 0.0 @@ -156,9 +213,19 @@ class RenderJob: self.chunks = job_info.chunks self.priority = job_info.priority self.blacklist = job_info.blacklist + self.version_info = job_info.version_info - def addFile(self, file_path, start=-1, end=-1): - signature = hashFile(file_path) + def hasRenderResult(self): + return self.type in (JOB_BLENDER, JOB_VCS) + + def rendersWithBlender(self): + return self.type in (JOB_BLENDER, JOB_VCS) + + def addFile(self, file_path, start=-1, end=-1, signed=True): + if signed: + signature = hashFile(file_path) + else: + signature = None self.files.append(RenderFile(file_path, len(self.files), start, end, signature)) def addFrame(self, frame_number, command = ""): @@ -225,7 +292,8 @@ class RenderJob: "priority": self.priority, "usage": self.usage, "blacklist": self.blacklist, - "last_dispatched": self.last_dispatched + "last_dispatched": self.last_dispatched, + "version_info": self.version_info.serialize() if self.version_info else None } @staticmethod @@ -246,6 +314,10 @@ class RenderJob: job.usage = data["usage"] job.blacklist = data["blacklist"] job.last_dispatched = data["last_dispatched"] + + version_info = data.get("version_info", None) + if version_info: + job.version_info = VersioningInfo.materialize(version_info) return job diff --git a/release/scripts/io/netrender/operators.py b/release/scripts/io/netrender/operators.py index 96601dcf653..fe82011d706 100644 --- a/release/scripts/io/netrender/operators.py +++ b/release/scripts/io/netrender/operators.py @@ -26,6 +26,7 @@ import netrender from netrender.utils import * import netrender.client as client import netrender.model +import netrender.versioning as versioning class RENDER_OT_netslave_bake(bpy.types.Operator): '''NEED DESCRIPTION''' @@ -461,6 +462,38 @@ class netclientscan(bpy.types.Operator): def invoke(self, context, event): return self.execute(context) +class netclientvcsguess(bpy.types.Operator): + '''Guess VCS setting for the current file''' + bl_idname = "render.netclientvcsguess" + bl_label = "VCS Guess" + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + netsettings = context.scene.network_render + + system = versioning.SYSTEMS.get(netsettings.vcs_system, None) + + if system: + wpath, name = os.path.split(os.path.abspath(bpy.data.filepath)) + + rpath = system.path(wpath) + revision = system.revision(wpath) + + netsettings.vcs_wpath = wpath + netsettings.vcs_rpath = rpath + netsettings.vcs_revision = revision + + + + return {'FINISHED'} + + def invoke(self, context, event): + return self.execute(context) + + class netclientweb(bpy.types.Operator): '''Open new window with information about running rendering jobs''' bl_idname = "render.netclientweb" diff --git a/release/scripts/io/netrender/slave.py b/release/scripts/io/netrender/slave.py index 8629a38c04a..08bd48ae70b 100644 --- a/release/scripts/io/netrender/slave.py +++ b/release/scripts/io/netrender/slave.py @@ -78,7 +78,7 @@ def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path = None): found = os.path.exists(job_full_path) - if found: + if found and rfile.signature != None: found_signature = hashFile(job_full_path) found = found_signature == rfile.signature @@ -160,6 +160,20 @@ def render_slave(engine, netsettings, threads): netrender.repath.update(job) + engine.update_stats("", "Render File "+ main_file+ " for job "+ job.id) + elif job.type == netrender.model.JOB_VCS: + if not job.version_info: + # Need to return an error to server, incorrect job type + pass + + job_path = job.files[0].filepath # path of main file + main_path, main_file = os.path.split(job_path) + + job.version_info.update() + + # For VCS jobs, file path is relative to the working copy path + job_full_path = os.path.join(job.version_info.wpath, job_path) + engine.update_stats("", "Render File "+ main_file+ " for job "+ job.id) # announce log to master @@ -174,7 +188,7 @@ def render_slave(engine, netsettings, threads): # start render start_t = time.time() - if job.type == netrender.model.JOB_BLENDER: + if job.rendersWithBlender(): frame_args = [] for frame in job.frames: @@ -259,7 +273,7 @@ def render_slave(engine, netsettings, threads): headers["job-result"] = str(DONE) for frame in job.frames: headers["job-frame"] = str(frame.number) - if job.type == netrender.model.JOB_BLENDER: + if job.hasRenderResult(): # send image back to server filename = os.path.join(JOB_PREFIX, "%06d.exr" % frame.number) diff --git a/release/scripts/io/netrender/ui.py b/release/scripts/io/netrender/ui.py index c065b95b928..916f567e299 100644 --- a/release/scripts/io/netrender/ui.py +++ b/release/scripts/io/netrender/ui.py @@ -203,10 +203,12 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel): split = layout.split(percentage=0.3) col = split.column() + col.label(text="Type:") col.label(text="Name:") col.label(text="Category:") col = split.column() + col.prop(netsettings, "job_type", text="") col.prop(netsettings, "job_name", text="") col.prop(netsettings, "job_category", text="") @@ -214,6 +216,30 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel): row.prop(netsettings, "priority") row.prop(netsettings, "chunks") +class RENDER_PT_network_job_vcs(bpy.types.Panel, RenderButtonsPanel): + bl_label = "VCS Job Settings" + COMPAT_ENGINES = {'NET_RENDER'} + + @classmethod + def poll(cls, context): + scene = context.scene + return (super(RENDER_PT_network_job_vcs, cls).poll(context) + and scene.network_render.mode == "RENDER_CLIENT" + and scene.network_render.job_type == "JOB_VCS") + + def draw(self, context): + layout = self.layout + + scene = context.scene + netsettings = scene.network_render + + layout.operator("render.netclientvcsguess", icon='FILE_REFRESH', text="") + + layout.prop(netsettings, "vcs_system") + layout.prop(netsettings, "vcs_revision") + layout.prop(netsettings, "vcs_rpath") + layout.prop(netsettings, "vcs_wpath") + class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel): bl_label = "Slaves Status" COMPAT_ENGINES = {'NET_RENDER'} @@ -397,6 +423,16 @@ def addProperties(): default = default_path, subtype='FILE_PATH') + NetRenderSettings.job_type = EnumProperty( + items=( + ("JOB_BLENDER", "Blender", "Standard Blender Job"), + ("JOB_PROCESS", "Process", "Custom Process Job"), + ("JOB_VCS", "VCS", "Version Control System Managed Job"), + ), + name="Job Type", + description="Type of render job", + default="JOB_BLENDER") + NetRenderSettings.job_name = StringProperty( name="Job name", description="Name of the job", @@ -423,6 +459,30 @@ def addProperties(): min=1, max=10) + NetRenderSettings.vcs_wpath = StringProperty( + name="Working Copy", + description="Path of the local working copy", + maxlen = 1024, + default = "") + + NetRenderSettings.vcs_rpath = StringProperty( + name="Remote Path", + description="Path of the server copy (protocol specific)", + maxlen = 1024, + default = "") + + NetRenderSettings.vcs_revision = StringProperty( + name="Revision", + description="Revision for this job", + maxlen = 256, + default = "") + + NetRenderSettings.vcs_system = StringProperty( + name="VCS", + description="Version Control System", + maxlen = 64, + default = "Subversion") + NetRenderSettings.job_id = StringProperty( name="Network job id", description="id of the last sent render job", diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py index e2a5051cf64..7ad65fee66a 100644 --- a/release/scripts/io/netrender/utils.py +++ b/release/scripts/io/netrender/utils.py @@ -28,7 +28,7 @@ try: except: bpy = None -VERSION = bytes("0.9", encoding='utf8') +VERSION = bytes("1.0", encoding='utf8') # Jobs status JOB_WAITING = 0 # before all data has been entered @@ -57,6 +57,17 @@ FRAME_STATUS_TEXT = { ERROR: "Error" } +class DirectoryContext: + def __init__(self, path): + self.path = path + + def __enter__(self): + self.curdir = os.path.abspath(os.curdir) + os.chdir(self.path) + + def __exit__(self, exc_type, exc_value, traceback): + os.chdir(self.curdir) + def responseStatus(conn): response = conn.getresponse() response.read() @@ -216,9 +227,19 @@ def thumbnail(filename): scene = bpy.data.scenes[0] # FIXME, this is dodgy! scene.render.file_format = "JPEG" scene.render.file_quality = 90 + + # remove existing image, if there's a leftover (otherwise open changes the name) + if imagename in bpy.data.images: + img = bpy.data.images[imagename] + bpy.data.images.remove(img) + bpy.ops.image.open(filepath=filename) img = bpy.data.images[imagename] + img.save_render(thumbname, scene=scene) + + img.user_clear() + bpy.data.images.remove(img) try: process = subprocess.Popen(["convert", thumbname, "-resize", "300x300", thumbname]) diff --git a/release/scripts/io/netrender/versioning.py b/release/scripts/io/netrender/versioning.py new file mode 100644 index 00000000000..d4f8522cce8 --- /dev/null +++ b/release/scripts/io/netrender/versioning.py @@ -0,0 +1,72 @@ +import sys, os +import re +import subprocess + +from netrender.utils import * + +class AbstractVCS: + name = "ABSTRACT VCS" + def __init__(self): + pass + + def update(self, info): + """update(info) + Update a working copy to the specified revision. + If working copy doesn't exist, do a full get from server to create it. + [info] model.VersioningInfo instance, specifies the working path, remote path and version number.""" + pass + + def revision(self, path): + """revision(path) + return the current revision of the specified working copy path""" + pass + + def path(self, path): + """path(path) + return the remote path of the specified working copy path""" + pass + +class Subversion(AbstractVCS): + name = "Subversion" + def __init__(self): + super().__init__() + self.version_exp = re.compile("([0-9]*)") + self.path_exp = re.compile("URL: (.*)") + + def update(self, info): + if not os.path.exists(info.wpath): + base, folder = os.path.split(info.wpath) + + with DirectoryContext(base): + subprocess.call(["svn", "co", "%s@%s" % (info.rpath, str(info.revision)), folder]) + else: + with DirectoryContext(info.wpath): + subprocess.call(["svn", "up", "--accept", "theirs-full", "-r", str(info.revision)]) + + def revision(self, path): + if not os.path.exists(path): + return + + with DirectoryContext(path): + stdout = subprocess.check_output(["svnversion"]) + + match = self.version_exp.match(str(stdout, encoding="utf-8")) + + if match: + return match.group(1) + + def path(self, path): + if not os.path.exists(path): + return + + with DirectoryContext(path): + stdout = subprocess.check_output(["svn", "info"]) + + match = self.path_exp.search(str(stdout, encoding="utf-8")) + + if match: + return match.group(1) + +SYSTEMS = { + Subversion.name: Subversion() + } From cbb47c1dac270ee5aba2afbd916230ae5fa1b22f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 22:13:05 +0000 Subject: [PATCH 044/163] bugfix [#24287] Saving the render result through the API does not use the scene settings use scene alpha and dither settings. --- source/blender/makesrna/intern/rna_image_api.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c index 74d61101273..6e495c5db8e 100644 --- a/source/blender/makesrna/intern/rna_image_api.c +++ b/source/blender/makesrna/intern/rna_image_api.c @@ -73,9 +73,17 @@ static void rna_Image_save_render(Image *image, bContext *C, ReportList *reports if (ibuf == NULL) { BKE_reportf(reports, RPT_ERROR, "Couldn't acquire buffer from image"); } - - if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) { - BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path); + else { + /* temp swap out the color */ + const unsigned char imb_depth_back= ibuf->depth; + const float dither_back= ibuf->dither; + ibuf->depth= scene->r.planes; + ibuf->dither= scene->r.dither_intensity; + if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) { + BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path); + } + ibuf->depth= imb_depth_back; + ibuf->dither= dither_back; } BKE_image_release_ibuf(image, lock); From ab404a0f6643b2fe09744a20bcfb3f448082240d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 22:15:55 +0000 Subject: [PATCH 045/163] patch [#24424] Python scripts update for API changes from Filiciss Muhgue (filiciss) --- release/scripts/op/io_shape_mdd/import_mdd.py | 4 ++-- release/scripts/op/object.py | 2 +- release/scripts/op/wm.py | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/release/scripts/op/io_shape_mdd/import_mdd.py b/release/scripts/op/io_shape_mdd/import_mdd.py index d008ff931ff..2aa132384a7 100644 --- a/release/scripts/op/io_shape_mdd/import_mdd.py +++ b/release/scripts/op/io_shape_mdd/import_mdd.py @@ -70,7 +70,7 @@ def load(operator, context, filepath, frame_start=0, frame_step=1): obj.active_shape_key_index = len(obj.data.shape_keys.keys)-1 index = len(obj.data.shape_keys.keys)-1 - obj.show_shape_key = True + obj.show_only_shape_key = True verts = obj.data.shape_keys.keys[len(obj.data.shape_keys.keys)-1].data @@ -78,7 +78,7 @@ def load(operator, context, filepath, frame_start=0, frame_step=1): for v in verts: # 12 is the size of 3 floats v.co[:] = unpack('>3f', file.read(12)) #me.update() - obj.show_shape_key = False + obj.show_only_shape_key = False # insert keyframes diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py index 38dfe79f1d6..8dd55fc5b92 100644 --- a/release/scripts/op/object.py +++ b/release/scripts/op/object.py @@ -254,7 +254,7 @@ class ShapeTransfer(bpy.types.Operator): key = ob.add_shape_key(from_mix=False) # we need a rest key.name = name ob.active_shape_key_index = len(me.shape_keys.keys) - 1 - ob.show_shape_key = True + ob.show_only_shape_key = True from mathutils.geometry import BarycentricTransform from mathutils import Vector diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py index 4ce10233a9b..de2403a773f 100644 --- a/release/scripts/op/wm.py +++ b/release/scripts/op/wm.py @@ -632,9 +632,8 @@ class WM_OT_doc_edit(bpy.types.Operator): def draw(self, context): layout = self.layout - props = self.properties # XXX, this should not be needed, api problem! layout.label(text="Descriptor ID: '%s'" % props.doc_id) - layout.prop(props, "doc_new", text="") + layout.prop(self, "doc_new", text="") def invoke(self, context, event): wm = context.window_manager From b7c8df231bd04b17b1e7b9965d247b7b62fa06d2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 28 Oct 2010 10:12:57 +0000 Subject: [PATCH 046/163] partial bugfix [#24425] Blender 2.54 Beta crashes when starting rendering Fix for one of the causes of crashing. Applying armature deform wasn't thread safe since the pose bones had deform data written into them when deforming a mesh. This fixes crashing immediately, on every render for me but blender still crashes calculating the subsurf sometimes. --- source/blender/blenkernel/intern/armature.c | 105 ++++++++++++-------- source/blender/makesdna/DNA_action_types.h | 13 +-- 2 files changed, 66 insertions(+), 52 deletions(-) diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index b44bf751a8a..3bec79eb352 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -577,7 +577,13 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest) /* ************ Armature Deform ******************* */ -static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion) +typedef struct bPoseChanDeform { + Mat4 *b_bone_mats; + DualQuat *dual_quat; + DualQuat *b_bone_dual_quats; +} bPoseChanDeform; + +static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info, int use_quaternion) { Bone *bone= pchan->bone; Mat4 *b_bone= b_bone_spline_setup(pchan, 0); @@ -589,11 +595,11 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion) /* allocate b_bone matrices and dual quats */ b_bone_mats= MEM_mallocN((1+bone->segments)*sizeof(Mat4), "BBone defmats"); - pchan->b_bone_mats= b_bone_mats; + pdef_info->b_bone_mats= b_bone_mats; if(use_quaternion) { b_bone_dual_quats= MEM_mallocN((bone->segments)*sizeof(DualQuat), "BBone dqs"); - pchan->b_bone_dual_quats= b_bone_dual_quats; + pdef_info->b_bone_dual_quats= b_bone_dual_quats; } /* first matrix is the inverse arm_mat, to bring points in local bone space @@ -618,9 +624,9 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion) } } -static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *co, DualQuat *dq, float defmat[][3]) +static void b_bone_deform(bPoseChanDeform *pdef_info, Bone *bone, float *co, DualQuat *dq, float defmat[][3]) { - Mat4 *b_bone= pchan->b_bone_mats; + Mat4 *b_bone= pdef_info->b_bone_mats; float (*mat)[4]= b_bone[0].mat; float segment, y; int a; @@ -637,7 +643,7 @@ static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *co, DualQuat * CLAMP(a, 0, bone->segments-1); if(dq) { - copy_dq_dq(dq, &((DualQuat*)pchan->b_bone_dual_quats)[a]); + copy_dq_dq(dq, &(pdef_info->b_bone_dual_quats)[a]); } else { mul_m4_v3(b_bone[a+1].mat, co); @@ -711,7 +717,7 @@ static void pchan_deform_mat_add(bPoseChannel *pchan, float weight, float bbonem add_m3_m3m3(mat, mat, wmat); } -static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, float mat[][3], float *co) +static float dist_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float *vec, DualQuat *dq, float mat[][3], float *co) { Bone *bone= pchan->bone; float fac, contrib=0.0; @@ -732,7 +738,7 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo if(vec) { if(bone->segments>1) // applies on cop and bbonemat - b_bone_deform(pchan, bone, cop, NULL, (mat)?bbonemat:NULL); + b_bone_deform(pdef_info, bone, cop, NULL, (mat)?bbonemat:NULL); else mul_m4_v3(pchan->chan_mat, cop); @@ -745,11 +751,11 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo } else { if(bone->segments>1) { - b_bone_deform(pchan, bone, cop, &bbonedq, NULL); + b_bone_deform(pdef_info, bone, cop, &bbonedq, NULL); add_weighted_dq_dq(dq, &bbonedq, fac); } else - add_weighted_dq_dq(dq, pchan->dual_quat, fac); + add_weighted_dq_dq(dq, pdef_info->dual_quat, fac); } } } @@ -757,7 +763,7 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo return contrib; } -static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, DualQuat *dq, float mat[][3], float *co, float *contrib) +static void pchan_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float weight, float *vec, DualQuat *dq, float mat[][3], float *co, float *contrib) { float cop[3], bbonemat[3][3]; DualQuat bbonedq; @@ -770,7 +776,7 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua if(vec) { if(pchan->bone->segments>1) // applies on cop and bbonemat - b_bone_deform(pchan, pchan->bone, cop, NULL, (mat)?bbonemat:NULL); + b_bone_deform(pdef_info, pchan->bone, cop, NULL, (mat)?bbonemat:NULL); else mul_m4_v3(pchan->chan_mat, cop); @@ -783,11 +789,11 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua } else { if(pchan->bone->segments>1) { - b_bone_deform(pchan, pchan->bone, cop, &bbonedq, NULL); + b_bone_deform(pdef_info, pchan->bone, cop, &bbonedq, NULL); add_weighted_dq_dq(dq, &bbonedq, weight); } else - add_weighted_dq_dq(dq, pchan->dual_quat, weight); + add_weighted_dq_dq(dq, pdef_info->dual_quat, weight); } (*contrib)+=weight; @@ -798,8 +804,11 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, int numVerts, int deformflag, float (*prevCos)[3], const char *defgrp_name) { + bPoseChanDeform *pdef_info_array; + bPoseChanDeform *pdef_info= NULL; bArmature *arm= armOb->data; bPoseChannel *pchan, **defnrToPC = NULL; + int *defnrToPCIndex= NULL; MDeformVert *dverts = NULL; bDeformGroup *dg; DualQuat *dualquats= NULL; @@ -823,20 +832,24 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, /* bone defmats are already in the channels, chan_mat */ /* initialize B_bone matrices and dual quaternions */ + totchan= BLI_countlist(&armOb->pose->chanbase); + if(use_quaternion) { - totchan= BLI_countlist(&armOb->pose->chanbase); dualquats= MEM_callocN(sizeof(DualQuat)*totchan, "dualquats"); } + + pdef_info_array= MEM_callocN(sizeof(bPoseChanDeform)*totchan, "bPoseChanDeform"); totchan= 0; - for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next) { + pdef_info= pdef_info_array; + for(pchan= armOb->pose->chanbase.first; pchan; pchan= pchan->next, pdef_info++) { if(!(pchan->bone->flag & BONE_NO_DEFORM)) { if(pchan->bone->segments > 1) - pchan_b_bone_defmats(pchan, use_quaternion); + pchan_b_bone_defmats(pchan, pdef_info, use_quaternion); if(use_quaternion) { - pchan->dual_quat= &dualquats[totchan++]; - mat4_to_dquat( pchan->dual_quat,pchan->bone->arm_mat, pchan->chan_mat); + pdef_info->dual_quat= &dualquats[totchan++]; + mat4_to_dquat( pdef_info->dual_quat,pchan->bone->arm_mat, pchan->chan_mat); } } } @@ -872,15 +885,19 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, else if(dverts) use_dverts = 1; if(use_dverts) { - defnrToPC = MEM_callocN(sizeof(*defnrToPC) * numGroups, - "defnrToBone"); + defnrToPC = MEM_callocN(sizeof(*defnrToPC) * numGroups, "defnrToBone"); + defnrToPCIndex = MEM_callocN(sizeof(*defnrToPCIndex) * numGroups, "defnrToIndex"); for(i = 0, dg = target->defbase.first; dg; i++, dg = dg->next) { defnrToPC[i] = get_pose_channel(armOb->pose, dg->name); /* exclude non-deforming bones */ if(defnrToPC[i]) { - if(defnrToPC[i]->bone->flag & BONE_NO_DEFORM) + if(defnrToPC[i]->bone->flag & BONE_NO_DEFORM) { defnrToPC[i]= NULL; + } + else { + defnrToPCIndex[i]= BLI_findindex(&armOb->pose->chanbase, defnrToPC[i]); + } } } } @@ -951,10 +968,10 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, for(j = 0; j < dvert->totweight; j++){ int index = dvert->dw[j].def_nr; - pchan = index < numGroups?defnrToPC[index]:NULL; - if(pchan) { + if(index < numGroups && (pchan= defnrToPC[index])) { float weight = dvert->dw[j].weight; - Bone *bone = pchan->bone; + Bone *bone= pchan->bone; + pdef_info= pdef_info_array + defnrToPCIndex[index]; deformed = 1; @@ -965,25 +982,27 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, bone->rad_tail, bone->dist); } - pchan_bone_deform(pchan, weight, vec, dq, smat, co, &contrib); + pchan_bone_deform(pchan, pdef_info, weight, vec, dq, smat, co, &contrib); } } /* if there are vertexgroups but not groups with bones * (like for softbody groups) */ if(deformed == 0 && use_envelope) { - for(pchan = armOb->pose->chanbase.first; pchan; - pchan = pchan->next) { + pdef_info= pdef_info_array; + for(pchan= armOb->pose->chanbase.first; pchan; + pchan= pchan->next, pdef_info++) { if(!(pchan->bone->flag & BONE_NO_DEFORM)) - contrib += dist_bone_deform(pchan, vec, dq, smat, co); + contrib += dist_bone_deform(pchan, pdef_info, vec, dq, smat, co); } } } else if(use_envelope) { + pdef_info= pdef_info_array; for(pchan = armOb->pose->chanbase.first; pchan; - pchan = pchan->next) { + pchan = pchan->next, pdef_info++) { if(!(pchan->bone->flag & BONE_NO_DEFORM)) - contrib += dist_bone_deform(pchan, vec, dq, smat, co); + contrib += dist_bone_deform(pchan, pdef_info, vec, dq, smat, co); } } @@ -1039,20 +1058,20 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm, if(dualquats) MEM_freeN(dualquats); if(defnrToPC) MEM_freeN(defnrToPC); - - /* free B_bone matrices */ - for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next) { - if(pchan->b_bone_mats) { - MEM_freeN(pchan->b_bone_mats); - pchan->b_bone_mats = NULL; - } - if(pchan->b_bone_dual_quats) { - MEM_freeN(pchan->b_bone_dual_quats); - pchan->b_bone_dual_quats = NULL; - } + if(defnrToPCIndex) MEM_freeN(defnrToPCIndex); - pchan->dual_quat = NULL; + /* free B_bone matrices */ + pdef_info= pdef_info_array; + for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next, pdef_info++) { + if(pdef_info->b_bone_mats) { + MEM_freeN(pdef_info->b_bone_mats); + } + if(pdef_info->b_bone_dual_quats) { + MEM_freeN(pdef_info->b_bone_dual_quats); + } } + + MEM_freeN(pdef_info_array); } /* ************ END Armature Deform ******************* */ diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h index f7bbf9235ab..6f6e4978cfc 100644 --- a/source/blender/makesdna/DNA_action_types.h +++ b/source/blender/makesdna/DNA_action_types.h @@ -203,12 +203,10 @@ typedef struct bPoseChannel { struct bPoseChannel *child; /* set on read file or rebuild pose, the 'ik' child, for b-bones */ struct ListBase iktree; /* only while evaluating pose */ - /* only while deform, stores precalculated b_bone deform mats, - dual quaternions */ - void *b_bone_mats; - void *dual_quat; - void *b_bone_dual_quats; - + bMotionPath *mpath; /* motion path cache for this bone */ + struct Object *custom; /* draws custom object instead of default bone shape */ + struct bPoseChannel *custom_tx; /* odd feature, display with another bones transform. needed in rare cases for advanced rigs, since the alternative is highly complicated - campbell */ + /* transforms - written in by actions or transform */ float loc[3]; float size[3]; @@ -234,9 +232,6 @@ typedef struct bPoseChannel { float iklinweight; /* weight of joint stretch constraint */ float *path; /* totpath x 3 x float */ // XXX depreceated... old animation system (armature only viz) - bMotionPath *mpath; /* motion path cache for this bone */ - struct Object *custom; /* draws custom object instead of default bone shape */ - struct bPoseChannel *custom_tx; /* odd feature, display with another bones transform. needed in rare cases for advanced rigs, since the alternative is highly complicated - campbell */ } bPoseChannel; From e205a9a1422c73b415be3d2e5bb98979655621ce Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 28 Oct 2010 11:49:56 +0000 Subject: [PATCH 047/163] for the color picker functions use UI_GRAD_* constants rather then numbers, no functional change. --- .../editors/interface/interface_handlers.c | 62 ++++++++++--------- .../editors/interface/interface_templates.c | 2 +- .../editors/interface/interface_widgets.c | 2 +- 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 5dbeb08d45b..70091a712c6 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "MEM_guardedalloc.h" @@ -2991,42 +2992,43 @@ static int ui_numedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, int mx, y= ((float)my-but->y1)/(but->y2-but->y1); CLAMP(x, 0.0, 1.0); CLAMP(y, 0.0, 1.0); - - if(but->a1==0) { - hsv[2]= x; - hsv[1]= y; - } - else if(but->a1==1) { - hsv[0]= x; - hsv[2]= y; - } - else if(but->a1==2) { - hsv[0]= x; - hsv[1]= y; - } - else if(but->a1==3) { - hsv[0]= x; - } - else if(but->a1==4) { - hsv[1]= x; - } - else if(but->a1==5) { - hsv[2]= x; - } - else if (but->a1==9){ - float range; - - /* vertical 'value' strip */ + switch((int)but->a1) { + case UI_GRAD_SV: + hsv[2]= x; + hsv[1]= y; + break; + case UI_GRAD_HV: + hsv[0]= x; + hsv[2]= y; + break; + case UI_GRAD_HS: + hsv[0]= x; + hsv[1]= y; + break; + case UI_GRAD_SV + 3: + hsv[0]= x; + break; + case UI_GRAD_HV + 3: + hsv[1]= x; + break; + case UI_GRAD_HS + 3: + hsv[2]= x; + break; + case UI_GRAD_V_ALT: + /* vertical 'value' strip */ + /* exception only for value strip - use the range set in but->min/max */ - range = but->softmax - but->softmin; - hsv[2] = y*range + but->softmin; + hsv[2] = y * (but->softmax - but->softmin) + but->softmin; if (color_profile) hsv[2] = srgb_to_linearrgb(hsv[2]); if (hsv[2] > but->softmax) hsv[2] = but->softmax; + break; + default: + assert(!"invalid hsv type"); } hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2); @@ -3061,7 +3063,7 @@ static int ui_do_but_HSVCUBE(bContext *C, uiBlock *block, uiBut *but, uiHandleBu return WM_UI_HANDLER_BREAK; } else if (event->type == ZEROKEY && event->val == KM_PRESS) { - if (but->a1==9){ + if (but->a1==UI_GRAD_V_ALT){ int len; /* reset only value */ @@ -4429,7 +4431,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event) retval= ui_do_but_BUT(C, but, data, event); break; case COL: - if(but->a1 == 9) // signal to prevent calling up color picker + if(but->a1 == UI_GRAD_V_ALT) // signal to prevent calling up color picker retval= ui_do_but_EXIT(C, but, data, event); else retval= ui_do_but_BLOCK(C, but, data, event); diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index bbbb5bec7c0..7dbd2b8dd13 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1821,7 +1821,7 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int uiItemS(row); if (value_slider) - uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, 9, 0, ""); + uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, UI_GRAD_V_ALT, 0, ""); } /********************* Layer Buttons Template ************************/ diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index ed7284bf264..644bb50fca4 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -2905,7 +2905,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct break; case HSVCUBE: - if(but->a1==9) // vertical V slider, uses new widget draw now + if(but->a1 == UI_GRAD_V_ALT) // vertical V slider, uses new widget draw now ui_draw_but_HSV_v(but, rect); else // other HSV pickers... ui_draw_but_HSVCUBE(but, rect); From 022e72e148ed5376e7c1e52f5eae70890c9f6936 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 28 Oct 2010 12:01:02 +0000 Subject: [PATCH 048/163] bugfix [#24432] HS+V color picker --- source/blender/editors/interface/interface_handlers.c | 6 +++--- source/blender/editors/interface/interface_widgets.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 70091a712c6..d3f915cddce 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -3006,13 +3006,13 @@ static int ui_numedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, int mx, hsv[0]= x; hsv[1]= y; break; - case UI_GRAD_SV + 3: + case UI_GRAD_H: hsv[0]= x; break; - case UI_GRAD_HV + 3: + case UI_GRAD_S: hsv[1]= x; break; - case UI_GRAD_HS + 3: + case UI_GRAD_V: hsv[2]= x; break; case UI_GRAD_V_ALT: diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 644bb50fca4..2a6ab525f89 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1729,7 +1729,7 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) void ui_draw_gradient(rcti *rect, float *hsv, int type, float alpha) { int a; - float h= hsv[0], s= hsv[1], v= hsv[0]; + float h= hsv[0], s= hsv[1], v= hsv[2]; float dx, dy, sx1, sx2, sy; float col0[4][3]; // left half, rect bottom to top float col1[4][3]; // right half, rect bottom to top From 905c5f794866d63a1fe0183eef327184548fd85e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 28 Oct 2010 12:29:59 +0000 Subject: [PATCH 049/163] bugfix/patch [#24431] Fast Gaussian produces wrong results for higher resolutions report & fix from Martin Lubich (loramel) Use double rather then floats, this doesn't use significantly more memory (as allocating a double buffer would), other vars in this function were doubles already so may even gain some speed. --- source/blender/nodes/intern/CMP_util.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/nodes/intern/CMP_util.c b/source/blender/nodes/intern/CMP_util.c index c762d8cb42d..06c4740f6b9 100644 --- a/source/blender/nodes/intern/CMP_util.c +++ b/source/blender/nodes/intern/CMP_util.c @@ -1303,7 +1303,7 @@ CompBuf* qd_downScaledCopy(CompBuf* src, int scale) void IIR_gauss(CompBuf* src, float sigma, int chan, int xy) { double q, q2, sc, cf[4], tsM[9], tsu[3], tsv[3]; - float *X, *Y, *W; + double *X, *Y, *W; int i, x, y, sz; // <0.5 not valid, though can have a possibly useful sort of sharpening effect @@ -1367,9 +1367,9 @@ void IIR_gauss(CompBuf* src, float sigma, int chan, int xy) // intermediate buffers sz = MAX2(src->x, src->y); - X = MEM_callocN(sz*sizeof(float), "IIR_gauss X buf"); - Y = MEM_callocN(sz*sizeof(float), "IIR_gauss Y buf"); - W = MEM_callocN(sz*sizeof(float), "IIR_gauss W buf"); + X = MEM_callocN(sz*sizeof(double), "IIR_gauss X buf"); + Y = MEM_callocN(sz*sizeof(double), "IIR_gauss Y buf"); + W = MEM_callocN(sz*sizeof(double), "IIR_gauss W buf"); if (xy & 1) { // H for (y=0; yy; ++y) { const int yx = y*src->x; From 651efb37630ed7a017870e0ab61d268af9716478 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 28 Oct 2010 17:46:31 +0000 Subject: [PATCH 050/163] bugfix [#24428] Interface Regions will not keep relative proportions screen verts were being rounded so resizing a window would end up moving the border in one direction. for this to work properly we should store floats internally but for now compensate for this. --- source/blender/editors/screen/screen_edit.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 2cd6dafa167..cd2e1d030ff 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -608,6 +608,10 @@ void select_connected_scredge(bScreen *sc, ScrEdge *edge) } /* test if screen vertices should be scaled */ + +/* needed to alternate AREAGRID snapping else it shifts one way + * to avoid this we should use floats at least during runtime [#24428]. */ +static char scale_alt_bool= 0; static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) { ScrVert *sv=NULL; @@ -643,20 +647,26 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) /* make sure it fits! */ for(sv= sc->vertbase.first; sv; sv= sv->next) { + /* 0.1519 was 0.5f, but tweaked so resizing the window doesnt favor one direction + * also note scale_alt_bool */ tempf= ((float)sv->vec.x)*facx; - sv->vec.x= (short)(tempf+0.5); - sv->vec.x+= AREAGRID-1; + sv->vec.x= (short)(tempf+0.1519); + sv->vec.x+= AREAGRID-2; + sv->vec.x-= scale_alt_bool; sv->vec.x-= (sv->vec.x % AREAGRID); CLAMP(sv->vec.x, 0, winsizex); tempf= ((float)sv->vec.y )*facy; - sv->vec.y= (short)(tempf+0.5); - sv->vec.y+= AREAGRID-1; + sv->vec.y= (short)(tempf+0.1519); + sv->vec.y+= AREAGRID-2; + sv->vec.y-= scale_alt_bool; sv->vec.y-= (sv->vec.y % AREAGRID); CLAMP(sv->vec.y, 0, winsizey); } + + scale_alt_bool= scale_alt_bool ? 0:1; } /* test for collapsed areas. This could happen in some blender version... */ From b5b48bd53a265c57884f2b768141d9a886113ec5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 28 Oct 2010 19:40:05 +0000 Subject: [PATCH 051/163] bugfix [#24439] Smear 2D paint fails small unrelated change: when setting the image type of an image, loop over all its Imbufs and set them. --- source/blender/editors/sculpt_paint/paint_image.c | 2 +- source/blender/makesrna/intern/rna_image.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index a5b5baad4c5..939955353c8 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -4178,7 +4178,7 @@ static void imapaint_lift_smear(ImBuf *ibuf, ImBuf *ibufb, int *pos) int a, tot; imapaint_set_region(region, 0, 0, pos[0], pos[1], ibufb->x, ibufb->y); - tot= imapaint_torus_split_region(region, ibuf, ibufb); + tot= imapaint_torus_split_region(region, ibufb, ibuf); for(a=0; adata; if(BKE_imtype_is_movie(value) == 0) { /* should be able to throw an error here */ - ImBuf *ibuf= BKE_image_get_ibuf(image, NULL); + ImBuf *ibuf; + int ftype= BKE_imtype_to_ftype(value); + + /* + ibuf= BKE_image_get_ibuf(image, NULL); if(ibuf) - ibuf->ftype= BKE_imtype_to_ftype(value); + ibuf->ftype= ftype; + */ + + /* to be safe change all buffer file types */ + for(ibuf= image->ibufs.first; ibuf; ibuf->next) { + ibuf->ftype= ftype; + } } } From b4a64185180737ddf60706e47d8f7630ee295266 Mon Sep 17 00:00:00 2001 From: Doug Hammond Date: Thu, 28 Oct 2010 21:20:57 +0000 Subject: [PATCH 052/163] extensions_framework: minor string change --- release/scripts/modules/extensions_framework/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/modules/extensions_framework/plugin.py b/release/scripts/modules/extensions_framework/plugin.py index b0042aad40d..a6a5b719e30 100644 --- a/release/scripts/modules/extensions_framework/plugin.py +++ b/release/scripts/modules/extensions_framework/plugin.py @@ -60,7 +60,7 @@ class plugin(object): init_properties(property_group, property_group.properties) #print('Initialised IDPropertyGroup %s' % property_group.__name__) - log('Render Engine "%s" initialised' % r_class.bl_label) + log('Extension "%s" initialised' % r_class.bl_label) @classmethod def uninstall(r_class): From 6a9a49f8afe1e5825dc182eedff57a1c4d4290fe Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 29 Oct 2010 07:11:45 +0000 Subject: [PATCH 053/163] bugfix for grease pencil freeing order. it was freed before objects which would then decrease its usercount - accessing freed memory. Also fixed error in own last commit. --- source/blender/blenkernel/intern/library.c | 9 +++++---- source/blender/makesrna/intern/rna_image.c | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index dfc82152e8c..dc3c120ab19 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -452,11 +452,13 @@ int set_listbasepointers(Main *main, ListBase **lb) { int a = 0; - /* BACKWARDS! also watch order of free-ing! (mesh<->mat) */ - + /* BACKWARDS! also watch order of free-ing! (mesh<->mat), first items freed last. + * This is important because freeing data decreases usercounts of other datablocks, + * if this data is its self freed it can crash. */ lb[a++]= &(main->ipo); lb[a++]= &(main->action); // xxx moved here to avoid problems when freeing with animato (aligorith) lb[a++]= &(main->key); + lb[a++]= &(main->gpencil); /* referenced by nodes, objects, view, scene etc, before to free after. */ lb[a++]= &(main->nodetree); lb[a++]= &(main->image); lb[a++]= &(main->tex); @@ -483,14 +485,13 @@ int set_listbasepointers(Main *main, ListBase **lb) lb[a++]= &(main->brush); lb[a++]= &(main->script); lb[a++]= &(main->particle); - + lb[a++]= &(main->world); lb[a++]= &(main->screen); lb[a++]= &(main->object); lb[a++]= &(main->scene); lb[a++]= &(main->library); lb[a++]= &(main->wm); - lb[a++]= &(main->gpencil); lb[a]= NULL; diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index 4ac7624e731..62e7b516e9e 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -181,7 +181,7 @@ static void rna_Image_file_format_set(PointerRNA *ptr, int value) */ /* to be safe change all buffer file types */ - for(ibuf= image->ibufs.first; ibuf; ibuf->next) { + for(ibuf= image->ibufs.first; ibuf; ibuf= ibuf->next) { ibuf->ftype= ftype; } } From ce74b14850c06b77c069a2633a731a60a8d9ab03 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Fri, 29 Oct 2010 10:31:45 +0000 Subject: [PATCH 054/163] Fix for [#24430] Hair Dynamics Problem * Hair added in particle mode didn't have any weights assigned. --- source/blender/editors/physics/particle_edit.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 57867fdc441..10313868500 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -3200,6 +3200,7 @@ static int brush_add(PEData *data, short number) framestep= pa->lifetime/(float)(pset->totaddkey-1); if(tree) { + ParticleData *ppa; HairKey *hkey; ParticleKey key[3]; KDTreeNearest ptn[3]; @@ -3224,6 +3225,8 @@ static int brush_add(PEData *data, short number) for(w=0; wparticles+ptn[0].index; + for(k=0; ktotaddkey; k++) { hkey= (HairKey*)pa->hair + k; hkey->time= pa->time + k * framestep; @@ -3232,6 +3235,9 @@ static int brush_add(PEData *data, short number) psys_get_particle_on_path(&sim, ptn[0].index, key, 0); mul_v3_fl(key[0].co, weight[0]); + /* TODO: interpolatint the weight would be nicer */ + hkey->weight= (ppa->hair+MIN2(k, ppa->totkey-1))->weight; + if(maxw>1) { key[1].time= key[0].time; psys_get_particle_on_path(&sim, ptn[1].index, key + 1, 0); @@ -3258,6 +3264,7 @@ static int brush_add(PEData *data, short number) for(k=0, hkey=pa->hair; ktotaddkey; k++, hkey++) { VECADDFAC(hkey->co, pa->state.co, pa->state.vel, k * framestep * timestep); hkey->time += k * framestep; + hkey->weight = 1.f - (float)k/(float)(pset->totaddkey-1); } } for(k=0, hkey=pa->hair; ktotaddkey; k++, hkey++) { From f921f914542f6b1be2edae94c8fe98e8590f111a Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Fri, 29 Oct 2010 12:49:36 +0000 Subject: [PATCH 055/163] Fix for[#24422] Crash when switching to Point Select Mode - particle hair --- source/blender/editors/physics/particle_edit.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 10313868500..0357083fc63 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -774,6 +774,7 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys if(mpoint->keys) MEM_freeN(mpoint->keys); mpa->hair= MEM_dupallocN(pa->hair); + mpa->totkey= pa->totkey; mpoint->keys= MEM_dupallocN(point->keys); mpoint->totkey= point->totkey; @@ -782,7 +783,7 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys for(k=0; ktotkey; k++, mkey++, mhkey++) { mkey->co= mhkey->co; mkey->time= &mhkey->time; - mkey->flag &= PEK_SELECT; + mkey->flag &= ~PEK_SELECT; } } @@ -4008,12 +4009,16 @@ static void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache, key->co= hkey->co; key->time= &hkey->time; key->flag= hkey->editflag; - if(!(psys->flag & PSYS_GLOBAL_HAIR)) + if(!(psys->flag & PSYS_GLOBAL_HAIR)) { key->flag |= PEK_USE_WCO; + hkey->editflag |= PEK_USE_WCO; + } + hkey++; } pa++; } + update_world_cos(ob, edit); } else { PTCacheMem *pm; From 719c941c58f8b4acaced83c7521a6746fdd0841f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 29 Oct 2010 19:40:45 +0000 Subject: [PATCH 056/163] bugfix [#23155] Metastrip contents area allowed to move vertically, occasionally swapping order or overlapping overlapping tests cant be done recursively --- .../editors/space_sequencer/sequencer_edit.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 35f27953633..1989502fc35 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1159,8 +1159,9 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op) } SEQ_END - /* test for effects and overlap */ - SEQP_BEGIN(ed, seq) { + /* test for effects and overlap + * dont use SEQP_BEGIN since that would be recursive */ + for(seq= ed->seqbasep->first; seq; seq= seq->next) { if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) { seq->flag &= ~SEQ_OVERLAP; if( seq_test_overlap(ed->seqbasep, seq) ) { @@ -1176,7 +1177,6 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op) calc_sequence(scene, seq); } } - SEQ_END; /* as last: */ sort_seq(scene); @@ -2008,16 +2008,16 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *UNUSED(op)) recurs_del_seq_flag(scene, ed->seqbasep, SEQ_FLAG_DELETE, 0); - /* test for effects and overlap */ - SEQP_BEGIN(ed, seq) { + /* test for effects and overlap + * dont use SEQP_BEGIN since that would be recursive */ + for(seq= ed->seqbasep->first; seq; seq= seq->next) { if(seq->flag & SELECT) { seq->flag &= ~SEQ_OVERLAP; - if( seq_test_overlap(ed->seqbasep, seq) ) { + if(seq_test_overlap(ed->seqbasep, seq)) { shuffle_seq(ed->seqbasep, seq, scene); } } } - SEQ_END; sort_seq(scene); seq_update_muting(scene, ed); From ced06081b8ef2c9cefd0ed61461c54d5393ca23d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 29 Oct 2010 22:59:39 +0000 Subject: [PATCH 057/163] use PyImport_ExtendInittab for py module initialization rather then adding to sys.modules directly, no functional change. --- intern/audaspace/intern/AUD_C-API.cpp | 2 +- source/blender/python/generic/bgl.c | 11 +++++------ source/blender/python/generic/bgl.h | 2 +- source/blender/python/generic/blf_api.c | 5 ++--- source/blender/python/generic/blf_api.h | 3 +-- source/blender/python/generic/mathutils.c | 11 ++++------- source/blender/python/generic/mathutils.h | 3 +-- .../python/generic/mathutils_geometry.c | 10 +++------- .../python/generic/mathutils_geometry.h | 2 +- source/blender/python/generic/noise.c | 5 +---- source/blender/python/intern/bpy.c | 7 +------ source/blender/python/intern/bpy_interface.c | 19 +++++++++++++++++++ source/blender/python/intern/bpy_operator.c | 8 +------- 13 files changed, 41 insertions(+), 47 deletions(-) diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index d22d9e6c434..38732fc13e1 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -197,7 +197,7 @@ PyObject* AUD_initPython() { PyObject* module = PyInit_aud(); PyModule_AddObject(module, "device", (PyObject *)PyCFunction_New(meth_getcdevice, NULL)); - PyDict_SetItemString(PySys_GetObject("modules"), "aud", module); + PyDict_SetItemString(PyImport_GetModuleDict(), "aud", module); if(AUD_device) { g_device = (Device*)Device_empty(); diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c index 86b7bc522fe..321152ab581 100644 --- a/source/blender/python/generic/bgl.c +++ b/source/blender/python/generic/bgl.c @@ -1115,12 +1115,11 @@ static struct PyModuleDef BGL_module_def = { }; -PyObject *BGL_Init(void) +PyObject *BPyInit_bgl(void) { - PyObject *mod, *dict, *item; - mod = PyModule_Create(&BGL_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), BGL_module_def.m_name, mod); - dict= PyModule_GetDict(mod); + PyObject *submodule, *dict, *item; + submodule= PyModule_Create(&BGL_module_def); + dict= PyModule_GetDict(submodule); if( PyType_Ready( &BGL_bufferType) < 0) return NULL; /* should never happen */ @@ -1612,6 +1611,6 @@ PyObject *BGL_Init(void) EXPP_ADDCONST(GL_TEXTURE_BINDING_1D); EXPP_ADDCONST(GL_TEXTURE_BINDING_2D); - return mod; + return submodule; } diff --git a/source/blender/python/generic/bgl.h b/source/blender/python/generic/bgl.h index 80b0b90f643..5e40cda3114 100644 --- a/source/blender/python/generic/bgl.h +++ b/source/blender/python/generic/bgl.h @@ -38,7 +38,7 @@ #include -PyObject *BGL_Init(void); +PyObject *BPyInit_bgl(void); /*@ Create a buffer object */ /*@ dimensions is an array of ndimensions integers representing the size of each dimension */ diff --git a/source/blender/python/generic/blf_api.c b/source/blender/python/generic/blf_api.c index 66d8cdd923a..80e140b7eac 100644 --- a/source/blender/python/generic/blf_api.c +++ b/source/blender/python/generic/blf_api.c @@ -390,17 +390,16 @@ static struct PyModuleDef BLF_module_def = { 0, /* m_free */ }; -PyObject *BLF_Init(void) +PyObject *BPyInit_blf(void) { PyObject *submodule; submodule = PyModule_Create(&BLF_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), BLF_module_def.m_name, submodule); PyModule_AddIntConstant(submodule, "ROTATION", BLF_ROTATION); PyModule_AddIntConstant(submodule, "CLIPPING", BLF_CLIPPING); PyModule_AddIntConstant(submodule, "SHADOW", BLF_SHADOW); PyModule_AddIntConstant(submodule, "KERNING_DEFAULT", BLF_KERNING_DEFAULT); - return (submodule); + return submodule; } diff --git a/source/blender/python/generic/blf_api.h b/source/blender/python/generic/blf_api.h index fae20ace996..db17f62337b 100644 --- a/source/blender/python/generic/blf_api.h +++ b/source/blender/python/generic/blf_api.h @@ -22,5 +22,4 @@ * ***** END GPL LICENSE BLOCK ***** */ - -PyObject *BLF_Init(void); +PyObject *BPyInit_blf(void); diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c index f6b291622e3..4f54ee9e90e 100644 --- a/source/blender/python/generic/mathutils.c +++ b/source/blender/python/generic/mathutils.c @@ -245,12 +245,10 @@ static struct PyModuleDef M_Mathutils_module_def = { 0, /* m_free */ }; -PyObject *Mathutils_Init(void) +PyMODINIT_FUNC BPyInit_mathutils(void) { PyObject *submodule; - - - + if( PyType_Ready( &vector_Type ) < 0 ) return NULL; if( PyType_Ready( &matrix_Type ) < 0 ) @@ -263,7 +261,6 @@ PyObject *Mathutils_Init(void) return NULL; submodule = PyModule_Create(&M_Mathutils_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), M_Mathutils_module_def.m_name, submodule); /* each type has its own new() function */ PyModule_AddObject( submodule, "Vector", (PyObject *)&vector_Type ); @@ -273,9 +270,9 @@ PyObject *Mathutils_Init(void) PyModule_AddObject( submodule, "Color", (PyObject *)&color_Type ); /* submodule */ - PyModule_AddObject( submodule, "geometry", Geometry_Init()); + PyModule_AddObject( submodule, "geometry", BPyInit_mathutils_geometry()); mathutils_matrix_vector_cb_index= Mathutils_RegisterCallback(&mathutils_matrix_vector_cb); - return (submodule); + return submodule; } diff --git a/source/blender/python/generic/mathutils.h b/source/blender/python/generic/mathutils.h index d5dc48bd589..22f1536bb10 100644 --- a/source/blender/python/generic/mathutils.h +++ b/source/blender/python/generic/mathutils.h @@ -61,8 +61,7 @@ PyObject *BaseMathObject_getOwner( BaseMathObject * self, void * ); PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void * ); void BaseMathObject_dealloc(BaseMathObject * self); -PyObject *Mathutils_Init(void); -PyObject *Noise_Init(void); /* lazy, saves having own header */ +PyMODINIT_FUNC BPyInit_mathutils(void); int EXPP_FloatsAreEqual(float A, float B, int floatSteps); int EXPP_VectorsAreEqual(float *vecA, float *vecB, int size, int floatSteps); diff --git a/source/blender/python/generic/mathutils_geometry.c b/source/blender/python/generic/mathutils_geometry.c index 1644a502fa8..e57eb4ce83d 100644 --- a/source/blender/python/generic/mathutils_geometry.c +++ b/source/blender/python/generic/mathutils_geometry.c @@ -830,12 +830,8 @@ static struct PyModuleDef M_Geometry_module_def = { }; /*----------------------------MODULE INIT-------------------------*/ -PyObject *Geometry_Init(void) +PyMODINIT_FUNC BPyInit_mathutils_geometry(void) { - PyObject *submodule; - - submodule = PyModule_Create(&M_Geometry_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), M_Geometry_module_def.m_name, submodule); - - return (submodule); + PyObject *submodule= PyModule_Create(&M_Geometry_module_def); + return submodule; } diff --git a/source/blender/python/generic/mathutils_geometry.h b/source/blender/python/generic/mathutils_geometry.h index 401efcc7888..3d3f7c606a4 100644 --- a/source/blender/python/generic/mathutils_geometry.h +++ b/source/blender/python/generic/mathutils_geometry.h @@ -34,6 +34,6 @@ #include #include "mathutils.h" -PyObject *Geometry_Init(void); +PyMODINIT_FUNC BPyInit_mathutils_geometry(void); #endif /* EXPP_Geometry_H */ diff --git a/source/blender/python/generic/noise.c b/source/blender/python/generic/noise.c index a9bbc016a54..b12ca47bdda 100644 --- a/source/blender/python/generic/noise.c +++ b/source/blender/python/generic/noise.c @@ -122,8 +122,6 @@ static int left = 1; static int initf = 0; static unsigned long *next; -PyObject *Noise_Init(void); - /* initializes state[N] with a seed */ static void init_genrand(unsigned long s) { @@ -657,10 +655,9 @@ static struct PyModuleDef noise_module_def = { 0, /* m_free */ }; -PyObject *Noise_Init(void) +PyObject *BPyInit_noise(void) { PyObject *submodule = PyModule_Create(&noise_module_def); - PyDict_SetItemString(PyImport_GetModuleDict(), noise_module_def.m_name, submodule); /* use current time as seed for random number generator by default */ setRndSeed(0); diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c index 5a74e8412d1..3461f1eb65d 100644 --- a/source/blender/python/intern/bpy.c +++ b/source/blender/python/intern/bpy.c @@ -195,12 +195,7 @@ void BPy_init_modules( void ) printf("bpy: couldnt find 'scripts/modules', blender probably wont start.\n"); } /* stand alone utility modules not related to blender directly */ - Mathutils_Init(); - Noise_Init(); - BGL_Init(); - BLF_Init(); - IDProp_Init_Types(); - AUD_initPython(); + IDProp_Init_Types(); /* not actually a submodule, just types */ mod = PyModule_New("_bpy"); diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 47b4c114944..ab8a355be47 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -196,6 +196,22 @@ void BPY_set_context(bContext *C) BPy_SetContext(C); } +/* init-tab */ +extern PyObject *BPyInit_noise(void); +extern PyObject *BPyInit_mathutils(void); +extern PyObject *BPyInit_bgl(void); +extern PyObject *BPyInit_blf(void); +extern PyObject *AUD_initPython(void); + +static struct _inittab bpy_internal_modules[]= { + {"noise", BPyInit_noise}, + {"mathutils", BPyInit_mathutils}, + {"bgl", BPyInit_bgl}, + {"blf", BPyInit_blf}, + {"aud", AUD_initPython}, + {NULL, NULL} +}; + /* call BPY_set_context first */ void BPY_start_python( int argc, char **argv ) { @@ -206,6 +222,9 @@ void BPY_start_python( int argc, char **argv ) utf8towchar(bprogname_wchar, bprogname); Py_SetProgramName(bprogname_wchar); + /* builtin modules */ + PyImport_ExtendInittab(bpy_internal_modules); + BPY_start_python_path(); /* allow to use our own included python */ Py_Initialize( ); diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index 3ffa78dab70..1cf99218bf6 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -313,14 +313,8 @@ static struct PyModuleDef bpy_ops_module = { PyObject *BPY_operator_module(void) { PyObject *submodule; - - submodule= PyModule_Create(&bpy_ops_module); - PyDict_SetItemString(PyImport_GetModuleDict(), bpy_ops_module.m_name, submodule); - /* INCREF since its its assumed that all these functions return the - * module with a new ref like PyDict_New, since they are passed to - * PyModule_AddObject which steals a ref */ - Py_INCREF(submodule); + submodule= PyModule_Create(&bpy_ops_module); return submodule; } From bd8758561f956dbdec5584cd469e0eb4455aa836 Mon Sep 17 00:00:00 2001 From: Daniel Salazar Date: Sat, 30 Oct 2010 02:59:42 +0000 Subject: [PATCH 058/163] Build fix by Mike S --- source/gameengine/Ketsji/KX_PythonInit.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index b0e631babda..42c3771ba94 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -2333,22 +2333,22 @@ PyObject* initGameKeys() PyObject* initMathutils() { - return Mathutils_Init(); + return BPyInit_mathutils(); } PyObject* initGeometry() { - return Geometry_Init(); + return BPyInit_mathutils_geometry(); } PyObject* initBGL() { - return BGL_Init(); + return BPyInit_bgl(); } PyObject* initBLF() { - return BLF_Init(); + return BPyInit_blf(); } // utility function for loading and saving the globalDict From 210915e3c722a04920eaa18e2faad793189659c6 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 08:51:50 +0000 Subject: [PATCH 059/163] Fix for items 3 and 8 of [#24443] Trying to bake a smoke simulation crashes blender, and other smoke bugs. --- source/blender/blenkernel/intern/smoke.c | 9 +++++---- source/blender/makesrna/intern/rna_smoke.c | 11 +++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c index a7e664bf2bf..aafa2d9870c 100644 --- a/source/blender/blenkernel/intern/smoke.c +++ b/source/blender/blenkernel/intern/smoke.c @@ -629,9 +629,6 @@ void smokeModifier_reset(struct SmokeModifierData *smd) smd->domain->fluid = NULL; } - smd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED; - smd->domain->point_cache[1]->flag |= PTCACHE_OUTDATED; - smokeModifier_reset_turbulence(smd); smd->time = -1; @@ -1412,6 +1409,10 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM /* if on second frame, write cache for first frame */ /* this needs to be done for smoke too so that pointcache works properly */ if((int)smd->time == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0)) { + // create shadows straight after domain initialization so we get nice shadows for startframe, too + if(get_lamp(scene, light)) + smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx); + BKE_ptcache_write_cache(&pid, startframe); if(sds->wt) BKE_ptcache_write_cache(&pid_wt, startframe); @@ -1443,7 +1444,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM } } - // create shadows before writing cache so we get nice shadows for startframe, too + // create shadows before writing cache so they get stored if(get_lamp(scene, light)) smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx); diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c index 53f27bc06fb..11b00e1c77f 100644 --- a/source/blender/makesrna/intern/rna_smoke.c +++ b/source/blender/makesrna/intern/rna_smoke.c @@ -33,6 +33,7 @@ #include "BKE_smoke.h" #include "DNA_modifier_types.h" +#include "DNA_object_force.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_smoke_types.h" @@ -64,6 +65,11 @@ static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr) smokeModifier_reset(settings->smd); + if(settings->smd && settings->smd->domain) { + settings->point_cache[0]->flag |= PTCACHE_OUTDATED; + settings->point_cache[1]->flag |= PTCACHE_OUTDATED; + } + rna_Smoke_update(bmain, scene, ptr); } @@ -73,6 +79,11 @@ static void rna_Smoke_reset_dependancy(Main *bmain, Scene *scene, PointerRNA *pt smokeModifier_reset(settings->smd); + if(settings->smd && settings->smd->domain) { + settings->smd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED; + settings->smd->domain->point_cache[1]->flag |= PTCACHE_OUTDATED; + } + rna_Smoke_dependency_update(bmain, scene, ptr); } From a12d0fc8366d459d386f005e8b97bfdb72ea2f26 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 10:19:30 +0000 Subject: [PATCH 060/163] Fix for [#24409] Particle corruption after rendering with multires * Also removed some unused flags from the particle modifier. --- source/blender/makesdna/DNA_modifier_types.h | 8 ++------ source/blender/modifiers/intern/MOD_particlesystem.c | 6 ++++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index 0708698c40c..30b2503c677 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -548,12 +548,8 @@ typedef struct MeshDeformModifierData { } MeshDeformModifierData; typedef enum { - eParticleSystemFlag_Loaded = (1<<0), - eParticleSystemFlag_Pars = (1<<1), - eParticleSystemFlag_FromCurve = (1<<2), - eParticleSystemFlag_DM_changed = (1<<3), - eParticleSystemFlag_Disabled = (1<<4), - eParticleSystemFlag_psys_updated = (1<<5), + eParticleSystemFlag_Pars = (1<<0), + eParticleSystemFlag_psys_updated = (1<<1), } ParticleSystemModifierFlag; typedef struct ParticleSystemModifierData { diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c index 9d99174b7c4..cd56bd3c8bc 100644 --- a/source/blender/modifiers/intern/MOD_particlesystem.c +++ b/source/blender/modifiers/intern/MOD_particlesystem.c @@ -154,6 +154,10 @@ static void deformVerts(ModifierData *md, Object *ob, psmd->dm->needsFree = 1; psmd->dm->release(psmd->dm); } + else { + /* no dm before, so recalc particles fully */ + psys->recalc |= PSYS_RECALC_RESET; + } /* make new dm */ psmd->dm=CDDM_copy(dm); @@ -175,7 +179,6 @@ static void deformVerts(ModifierData *md, Object *ob, /* in file read dm hasn't really changed but just wasn't saved in file */ psys->recalc |= PSYS_RECALC_RESET; - psmd->flag |= eParticleSystemFlag_DM_changed; psmd->totdmvert= psmd->dm->getNumVerts(psmd->dm); psmd->totdmedge= psmd->dm->getNumEdges(psmd->dm); @@ -186,7 +189,6 @@ static void deformVerts(ModifierData *md, Object *ob, psmd->flag &= ~eParticleSystemFlag_psys_updated; particle_system_update(md->scene, ob, psys); psmd->flag |= eParticleSystemFlag_psys_updated; - psmd->flag &= ~eParticleSystemFlag_DM_changed; } } From ef3e5a3d71d1816d31666fa8dc6ad3e81195d7e8 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 12:04:00 +0000 Subject: [PATCH 061/163] Fix for [#24374] VSE: Reassign Inputs ignores selection order. * No way currently to know the order of effect inputs, so I added a swap operator for the inputs. * Also added the effect inputs to the strip property panel (weren't even in rna before). These are not yet editable, but can be very helpful in determining what the inputs are if the strip is too short to see the name in the timeline. --- release/scripts/ui/space_sequencer.py | 8 ++++ .../editors/space_sequencer/sequencer_edit.c | 37 +++++++++++++++++++ .../space_sequencer/sequencer_intern.h | 1 + .../editors/space_sequencer/sequencer_ops.c | 2 + .../blender/makesrna/intern/rna_sequencer.c | 24 ++++++++++++ 5 files changed, 72 insertions(+) diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py index 85e0298e584..5051f1f8b8e 100644 --- a/release/scripts/ui/space_sequencer.py +++ b/release/scripts/ui/space_sequencer.py @@ -295,6 +295,7 @@ class SEQUENCER_MT_strip(bpy.types.Menu): layout.separator() layout.operator("sequencer.reload") layout.operator("sequencer.reassign_inputs") + layout.operator("sequencer.swap_inputs") layout.separator() layout.operator("sequencer.lock") layout.operator("sequencer.unlock") @@ -407,6 +408,13 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, bpy.types.Panel): layout = self.layout strip = act_strip(context) + if strip.input_count > 0: + col = layout.column() + col.prop(strip, "input_1") + if strip.input_count > 1: + col.prop(strip, "input_2") + if strip.input_count > 2: + col.prop(strip, "input_3") if strip.type == 'COLOR': layout.prop(strip, "color") diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 1989502fc35..b9a593b520c 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1498,6 +1498,43 @@ void SEQUENCER_OT_reassign_inputs(struct wmOperatorType *ot) } +static int sequencer_swap_inputs_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Sequence *seq, *last_seq = seq_active_get(scene); + char *error_msg; + + if(last_seq->seq1==NULL || last_seq->seq2 == NULL) { + BKE_report(op->reports, RPT_ERROR, "No valid inputs to swap"); + return OPERATOR_CANCELLED; + } + + seq = last_seq->seq1; + last_seq->seq1 = last_seq->seq2; + last_seq->seq2 = seq; + + update_changed_seq_and_deps(scene, last_seq, 1, 1); + + WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene); + + return OPERATOR_FINISHED; +} +void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Swap Inputs"; + ot->idname= "SEQUENCER_OT_swap_inputs"; + ot->description="Swap the first two inputs for the effects strip"; + + /* api callbacks */ + ot->exec= sequencer_swap_inputs_exec; + ot->poll= sequencer_effect_poll; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; +} + + /* cut operator */ static EnumPropertyItem prop_cut_types[] = { {SEQ_CUT_SOFT, "SOFT", 0, "Soft", ""}, diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index bf0dfff8e98..116786c3009 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -87,6 +87,7 @@ void SEQUENCER_OT_unlock(struct wmOperatorType *ot); void SEQUENCER_OT_reload(struct wmOperatorType *ot); void SEQUENCER_OT_refresh_all(struct wmOperatorType *ot); void SEQUENCER_OT_reassign_inputs(struct wmOperatorType *ot); +void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot); void SEQUENCER_OT_duplicate(struct wmOperatorType *ot); void SEQUENCER_OT_delete(struct wmOperatorType *ot); void SEQUENCER_OT_images_separate(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 041b475223b..62c478f916f 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -60,6 +60,7 @@ void sequencer_operatortypes(void) WM_operatortype_append(SEQUENCER_OT_reload); WM_operatortype_append(SEQUENCER_OT_refresh_all); WM_operatortype_append(SEQUENCER_OT_reassign_inputs); + WM_operatortype_append(SEQUENCER_OT_swap_inputs); WM_operatortype_append(SEQUENCER_OT_duplicate); WM_operatortype_append(SEQUENCER_OT_delete); WM_operatortype_append(SEQUENCER_OT_images_separate); @@ -169,6 +170,7 @@ void sequencer_keymap(wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_RIGHT); WM_keymap_add_item(keymap, "SEQUENCER_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_inputs", SKEY, KM_PRESS, KM_ALT, 0); /* multicam editing keyboard layout, switch to camera 1-10 using regular number keys */ diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 923f4560532..4f3af7e9cc1 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -502,6 +502,12 @@ static void rna_Sequence_attenuation_set(PointerRNA *ptr, float value) } +static int rna_Sequence_input_count_get(PointerRNA *ptr) +{ + Sequence *seq= (Sequence*)(ptr->data); + + return get_sequence_effect_num_inputs(seq->type); +} /*static void rna_SoundSequence_filename_set(PointerRNA *ptr, const char *value) { Sequence *seq= (Sequence*)(ptr->data); @@ -985,6 +991,24 @@ static void rna_def_sequence(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Speed factor", "Multiply the current speed of the sequence with this number or remap current frame to this frame"); RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update"); + /* effect strip inputs */ + + prop= RNA_def_property(srna, "input_count", PROP_INT, PROP_UNSIGNED); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_int_funcs(prop, "rna_Sequence_input_count_get", NULL, NULL); + + prop= RNA_def_property(srna, "input_1", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "seq1"); + RNA_def_property_ui_text(prop, "Input 1", "First input for the effect strip"); + + prop= RNA_def_property(srna, "input_2", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "seq2"); + RNA_def_property_ui_text(prop, "Input 2", "Second input for the effect strip"); + + prop= RNA_def_property(srna, "input_3", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "seq1"); + RNA_def_property_ui_text(prop, "Input 3", "Third input for the effect strip"); + RNA_api_sequence_strip(srna); } From ae9c4b164951e34d3d0858a990ea58c0eb2ced75 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 13:09:31 +0000 Subject: [PATCH 062/163] Info text for scene strips showing the frame range that's set in the scene * Related to bug report [#24329] scene length not updated in VSE * This data is nice to have in the sequencer without having to go the actual scene that's added as a strip. --- release/scripts/ui/space_sequencer.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py index 5051f1f8b8e..1e1b3f9751c 100644 --- a/release/scripts/ui/space_sequencer.py +++ b/release/scripts/ui/space_sequencer.py @@ -661,6 +661,9 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, bpy.types.Panel): layout.label(text="Camera Override") layout.template_ID(strip, "scene_camera") + sce = strip.scene + layout.label(text="Original frame range: "+ str(sce.frame_start) +" - "+ str(sce.frame_end) + " (" + str(sce.frame_end-sce.frame_start+1) + ")") + class SEQUENCER_PT_filter(SequencerButtonsPanel, bpy.types.Panel): bl_label = "Filter" From e548e3e1d81e03c94993734de8af1ed7670a6d1c Mon Sep 17 00:00:00 2001 From: Luca Bonavita Date: Sat, 30 Oct 2010 13:25:24 +0000 Subject: [PATCH 063/163] == blender file format == Hello, from the bconf 2010 from Jeroen and Luca. Our first combined commit :) Automatically create sdna documentations from Trunk. Usage: blender2.5 -b -P BlendFileDnaExporter_25.py [-- [options]] Options: --dna-keep-blend: doesn't delete the produced blend file DNA export to html --dna-debug: sets the logging level to DEBUG (lots of additional info) --dna-versioned' saves version informations in the html and blend filenames --dna-overwrite-css' overwrite dna.css, useful when modifying css in the script Examples: default: % blender2.5 -b -P BlendFileDnaExporter_25.py with options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug --- .../BlendFileDnaExporter_25.py | 477 ++++++++++ doc/blender_file_format/BlendFileReader.py | 446 ++++++++++ .../mystery_of_the_blend.css | 204 +++++ .../mystery_of_the_blend.html | 835 ++++++++++++++++++ 4 files changed, 1962 insertions(+) create mode 100755 doc/blender_file_format/BlendFileDnaExporter_25.py create mode 100644 doc/blender_file_format/BlendFileReader.py create mode 100644 doc/blender_file_format/mystery_of_the_blend.css create mode 100644 doc/blender_file_format/mystery_of_the_blend.html diff --git a/doc/blender_file_format/BlendFileDnaExporter_25.py b/doc/blender_file_format/BlendFileDnaExporter_25.py new file mode 100755 index 00000000000..77656f43ae5 --- /dev/null +++ b/doc/blender_file_format/BlendFileDnaExporter_25.py @@ -0,0 +1,477 @@ +#! /usr/bin/env python3 + +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** + +###################################################### +# +# Name: +# dna.py +# +# Description: +# Creates a browsable DNA output to HTML. +# +# Author: +# Jeroen Bakker +# +# Version: +# v0.1 (12-05-2009) - migration of original source code to python. +# Added code to support blender 2.5 branch +# v0.2 (25-05-2009) - integrated with BlendFileReader.py +# +# Input: +# blender build executable +# +# Output: +# dna.html +# dna.css (will only be created when not existing) +# +# Startup: +# ./blender -P BlendFileDnaExporter.py +# +# Process: +# 1: write blend file with SDNA info +# 2: read blend header from blend file +# 3: seek DNA1 file-block +# 4: read dna record from blend file +# 5: close and eventually delete temp blend file +# 6: export dna to html and css +# 7: quit blender +# +###################################################### + +import struct +import sys +import getopt # command line arguments handling +from string import Template # strings completion + + +# logs +import logging +log = logging.getLogger("BlendFileDnaExporter") + +if '--dna-debug' in sys.argv: + logging.basicConfig(level=logging.DEBUG) +else: + logging.basicConfig(level=logging.INFO) + + +class DNACatalogHTML: + ''' + DNACatalog is a catalog of all information in the DNA1 file-block + ''' + + def __init__(self, catalog, bpy_module = None): + self.Catalog = catalog + self.bpy = bpy_module + + def WriteToHTML(self, handle): + + dna_html_template = """ + + + + + + The mystery of the blend + + +
+ Blender ${version}
+ Internal SDNA structures +
+ Architecture: ${bitness} ${endianness}
+ Build revision:
${revision}
+ File format reference: The mystery of the blend by Jeroen Bakker
+

Index of blender structures

+
    + ${structs_list} +
+ ${structs_content} + + """ + + header = self.Catalog.Header + bpy = self.bpy + + # ${version} and ${revision} + if bpy: + version = '.'.join(map(str, bpy.app.version)) + revision = bpy.app.build_revision[:-1] + else: + version = str(header.Version) + revision = 'Unknown' + + # ${bitness} + if header.PointerSize == 8: + bitness = '64 bit' + else: + bitness = '32 bit' + + # ${endianness} + if header.LittleEndianness: + endianess= 'Little endianness' + else: + endianess= 'Big endianness' + + # ${structs_list} + log.debug("Creating structs index") + structs_list = '' + list_item = '
  • ({0}) {1}
  • \n' + structureIndex = 0 + for structure in self.Catalog.Structs: + structs_list += list_item.format(structureIndex, structure.Type.Name) + structureIndex+=1 + + # ${structs_content} + log.debug("Creating structs content") + structs_content = '' + for structure in self.Catalog.Structs: + log.debug(structure.Type.Name) + structs_content += self.Structure(structure) + + d = dict( + version = version, + revision = revision, + bitness = bitness, + endianness = endianess, + structs_list = structs_list, + structs_content = structs_content + ) + + dna_html = Template(dna_html_template).substitute(d) + dna_html = self.format(dna_html) + handle.write(dna_html) + + def Structure(self, structure): + struct_table_template = """ + + + + + + + + + + + + + + ${fields} + +
    ${struct_name}
    referencestructuretypenameoffsetsize
    +
    +
    """ + + d = dict( + struct_name = structure.Type.Name, + fields = self.StructureFields(structure, None, 0), + size = str(structure.Type.Size) + ) + + struct_table = Template(struct_table_template).substitute(d) + return struct_table + + def StructureFields(self, structure, parentReference, offset): + fields = '' + for field in structure.Fields: + fields += self.StructureField(field, structure, parentReference, offset) + offset += field.Size(self.Catalog.Header) + return fields + + def StructureField(self, field, structure, parentReference, offset): + structure_field_template = """ + + ${reference} + ${struct} + ${type} + ${name} + ${offset} + ${size} + """ + + if field.Type.Structure == None or field.Name.IsPointer(): + + # ${reference} + reference = field.Name.AsReference(parentReference) + + # ${struct} + if parentReference != None: + struct = '{0}'.format(structure.Type.Name) + else: + struct = structure.Type.Name + + # ${type} + type = field.Type.Name + + # ${name} + name = field.Name.Name + + # ${offset} + # offset already set + + # ${size} + size = field.Size(self.Catalog.Header) + + d = dict( + reference = reference, + struct = struct, + type = type, + name = name, + offset = offset, + size = size + ) + + structure_field = Template(structure_field_template).substitute(d) + + elif field.Type.Structure != None: + reference = field.Name.AsReference(parentReference) + structure_field = self.StructureFields(field.Type.Structure, reference, offset) + + return structure_field + + def indent(self, input, dent, startswith = ''): + output = '' + if dent < 0: + for line in input.split('\n'): + dent = abs(dent) + output += line[dent:] + '\n' # unindent of a desired amount + elif dent == 0: + for line in input.split('\n'): + output += line.lstrip() + '\n' # remove indentation completely + elif dent > 0: + for line in input.split('\n'): + output += ' '* dent + line + '\n' + return output + + def format(self, input): + diff = { + '\n' :'', + '\n' :'', + '' :' ', + '\n' :'', + '\n' :'', + '\n' :'' + } + output = self.indent(input, 0) + for key, value in diff.items(): + output = output.replace(key, value) + return output + + def WriteToCSS(self, handle): + ''' + Write the Cascading stylesheet template to the handle + It is expected that the handle is a Filehandle + ''' + css = """ + @CHARSET "ISO-8859-1"; + + body { + font-family: verdana; + font-size: small; + } + + div.title { + font-size: large; + text-align: center; + } + + h1 { + page-break-before: always; + } + + h1, h2 { + background-color: #D3D3D3; + color:#404040; + margin-right: 3%; + padding-left: 40px; + } + + h1:hover{ + background-color: #EBEBEB; + } + + h3 { + padding-left: 40px; + } + + table { + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: collapse; + width: 94%; + margin: 20px 3% 10px; + } + + caption { + margin-bottom: 5px; + } + + th { + background-color: #000000; + color:#ffffff; + padding-left:5px; + padding-right:5px; + } + + tr { + } + + td { + border-width: 1px; + border-style: solid; + border-color: #a0a0a0; + padding-left:5px; + padding-right:5px; + } + + label { + float:right; + margin-right: 3%; + } + + ul.multicolumn { + list-style:none; + float:left; + padding-right:0px; + margin-right:0px; + } + + li.multicolumn { + float:left; + width:200px; + margin-right:0px; + } + + a { + color:#a000a0; + text-decoration:none; + } + + a:hover { + color:#a000a0; + text-decoration:underline; + } + """ + + css = self.indent(css, 0) + + handle.write(css) + + +def usage(): + print("\nUsage: \n\tblender2.5 -b -P BlendFileDnaExporter_25.py [-- [options]]") + print("Options:") + print("\t--dna-keep-blend: doesn't delete the produced blend file DNA export to html") + print("\t--dna-debug: sets the logging level to DEBUG (lots of additional info)") + print("\t--dna-versioned' saves version informations in the html and blend filenames") + print("\t--dna-overwrite-css' overwrite dna.css, useful when modifying css in the script") + print("Examples:") + print("\tdefault: % blender2.5 -b -P BlendFileDnaExporter_25.py") + print("\twith options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug\n") + + +###################################################### +# Main +###################################################### + +def main(): + + import os, os.path + + try: + bpy = __import__('bpy') + + # Files + if '--dna-versioned' in sys.argv: + blender_version = '_'.join(map(str, bpy.app.version)) + filename = 'dna-{0}-{1}_endian-{2}-r{3}'.format(sys.arch, sys.byteorder, blender_version, bpy.app.build_revision[2:-1]) + else: + filename = 'dna' + dir = os.path.dirname(__file__) + Path_Blend = os.path.join(dir, filename + '.blend') # temporary blend file + Path_HTML = os.path.join(dir, filename + '.html') # output html file + Path_CSS = os.path.join(dir, 'dna.css') # output css file + + # create a blend file for dna parsing + if not os.path.exists(Path_Blend): + log.info("1: write temp blend file with SDNA info") + log.info(" saving to: " + Path_Blend) + try: + bpy.ops.wm.save_as_mainfile(filepath = Path_Blend, copy = True, compress = False) + except: + log.error("Filename {0} does not exist and can't be created... quitting".format(Path_Blend)) + return + else: + log.info("1: found blend file with SDNA info") + log.info(" " + Path_Blend) + + # read blend header from blend file + log.info("2: read file:") + + if not dir in sys.path: + sys.path.append(dir) + import BlendFileReader + + handle = BlendFileReader.openBlendFile(Path_Blend) + blendfile = BlendFileReader.BlendFile(handle) + catalog = DNACatalogHTML(blendfile.Catalog, bpy) + + # close temp file + handle.close() + + # deleting or not? + if '--dna-keep-blend' in sys.argv: + # keep the blend, useful for studying hexdumps + log.info("5: closing blend file:") + log.info(" {0}".format(Path_Blend)) + else: + # delete the blend + log.info("5: close and delete temp blend:") + log.info(" {0}".format(Path_Blend)) + os.remove(Path_Blend) + + # export dna to xhtml + log.info("6: export sdna to xhtml file") + handleHTML = open(Path_HTML, "w") + catalog.WriteToHTML(handleHTML) + handleHTML.close() + + # only write the css when doesn't exist or at explicit request + if not os.path.exists(Path_CSS) or '--dna-overwrite-css' in sys.argv: + handleCSS = open(Path_CSS, "w") + catalog.WriteToCSS(handleCSS) + handleCSS.close() + + # quit blender + if not bpy.app.background: + log.info("7: quit blender") + bpy.ops.wm.exit_blender() + + except ImportError: + log.warning(" skipping, not running in Blender") + usage() + sys.exit(2) + + +if __name__ == '__main__': + main() diff --git a/doc/blender_file_format/BlendFileReader.py b/doc/blender_file_format/BlendFileReader.py new file mode 100644 index 00000000000..7003af10ac7 --- /dev/null +++ b/doc/blender_file_format/BlendFileReader.py @@ -0,0 +1,446 @@ +#! /usr/bin/env python3 + +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** + +###################################################### +# Importing modules +###################################################### + +import os +import struct +import gzip +import tempfile + +import logging +log = logging.getLogger("BlendFileReader") + +###################################################### +# module global routines +###################################################### + +def ReadString(handle, length): + ''' + ReadString reads a String of given length or a zero terminating String + from a file handle + ''' + if length != 0: + return handle.read(length).decode() + else: + # length == 0 means we want a zero terminating string + result = "" + s = ReadString(handle, 1) + while s!="\0": + result += s + s = ReadString(handle, 1) + return result + + +def Read(type, handle, fileheader): + ''' + Reads the chosen type from a file handle + ''' + def unpacked_bytes(type_char, size): + return struct.unpack(fileheader.StructPre + type_char, handle.read(size))[0] + + if type == 'ushort': + return unpacked_bytes("H", 2) # unsigned short + elif type == 'short': + return unpacked_bytes("h", 2) # short + elif type == 'uint': + return unpacked_bytes("I", 4) # unsigned int + elif type == 'int': + return unpacked_bytes("i", 4) # int + elif type == 'float': + return unpacked_bytes("f", 4) # float + elif type == 'ulong': + return unpacked_bytes("Q", 8) # unsigned long + elif type == 'pointer': + # The pointersize is given by the header (BlendFileHeader). + if fileheader.PointerSize == 4: + return Read('uint', handle, fileheader) + if fileheader.PointerSize == 8: + return Read('ulong', handle, fileheader) + + +def openBlendFile(filename): + ''' + Open a filename, determine if the file is compressed and returns a handle + ''' + handle = open(filename, 'rb') + magic = ReadString(handle, 7) + if magic in ("BLENDER", "BULLETf"): + log.debug("normal blendfile detected") + handle.seek(0, os.SEEK_SET) + return handle + else: + log.debug("gzip blendfile detected?") + handle.close() + log.debug("decompressing started") + fs = gzip.open(filename, "rb") + handle = tempfile.TemporaryFile() + data = fs.read(1024*1024) + while data: + handle.write(data) + data = fs.read(1024*1024) + log.debug("decompressing finished") + fs.close() + log.debug("resetting decompressed file") + handle.seek(0, os.SEEK_SET) + return handle + + +def Align(handle): + ''' + Aligns the filehandle on 4 bytes + ''' + offset = handle.tell() + trim = offset % 4 + if trim != 0: + handle.seek(4-trim, os.SEEK_CUR) + + +###################################################### +# module classes +###################################################### + +class BlendFile: + ''' + Reads a blendfile and store the header, all the fileblocks, and catalogue + structs foound in the DNA fileblock + + - BlendFile.Header (BlendFileHeader instance) + - BlendFile.Blocks (list of BlendFileBlock instances) + - BlendFile.Catalog (DNACatalog instance) + ''' + + def __init__(self, handle): + log.debug("initializing reading blend-file") + self.Header = BlendFileHeader(handle) + self.Blocks = [] + fileblock = BlendFileBlock(handle, self) + found_dna_block = False + while not found_dna_block: + if fileblock.Header.Code in ("DNA1", "SDNA"): + self.Catalog = DNACatalog(self.Header, handle) + found_dna_block = True + else: + fileblock.Header.skip(handle) + + self.Blocks.append(fileblock) + fileblock = BlendFileBlock(handle, self) + + # appending last fileblock, "ENDB" + self.Blocks.append(fileblock) + + # seems unused? + """ + def FindBlendFileBlocksWithCode(self, code): + #result = [] + #for block in self.Blocks: + #if block.Header.Code.startswith(code) or block.Header.Code.endswith(code): + #result.append(block) + #return result + """ + + +class BlendFileHeader: + ''' + BlendFileHeader allocates the first 12 bytes of a blend file. + It contains information about the hardware architecture. + Header example: BLENDER_v254 + + BlendFileHeader.Magic (str) + BlendFileHeader.PointerSize (int) + BlendFileHeader.LittleEndianness (bool) + BlendFileHeader.StructPre (str) see http://docs.python.org/py3k/library/struct.html#byte-order-size-and-alignment + BlendFileHeader.Version (int) + ''' + + def __init__(self, handle): + log.debug("reading blend-file-header") + + self.Magic = ReadString(handle, 7) + log.debug(self.Magic) + + pointersize = ReadString(handle, 1) + log.debug(pointersize) + if pointersize == "-": + self.PointerSize = 8 + if pointersize == "_": + self.PointerSize = 4 + + endianness = ReadString(handle, 1) + log.debug(endianness) + if endianness == "v": + self.LittleEndianness = True + self.StructPre = "<" + if endianness == "V": + self.LittleEndianness = False + self.StructPre = ">" + + version = ReadString(handle, 3) + log.debug(version) + self.Version = int(version) + + log.debug("{0} {1} {2} {3}".format(self.Magic, self.PointerSize, self.LittleEndianness, version)) + + +class BlendFileBlock: + ''' + BlendFileBlock.File (BlendFile) + BlendFileBlock.Header (FileBlockHeader) + ''' + + def __init__(self, handle, blendfile): + self.File = blendfile + self.Header = FileBlockHeader(handle, blendfile.Header) + + def Get(self, handle, path): + log.debug("find dna structure") + dnaIndex = self.Header.SDNAIndex + dnaStruct = self.File.Catalog.Structs[dnaIndex] + log.debug("found " + dnaStruct.Type.Name) + handle.seek(self.Header.FileOffset, os.SEEK_SET) + return dnaStruct.GetField(self.File.Header, handle, path) + + +class FileBlockHeader: + ''' + FileBlockHeader contains the information in a file-block-header. + The class is needed for searching to the correct file-block (containing Code: DNA1) + + Code (str) + Size (int) + OldAddress (pointer) + SDNAIndex (int) + Count (int) + FileOffset (= file pointer of datablock) + ''' + + def __init__(self, handle, fileheader): + self.Code = ReadString(handle, 4).strip() + if self.Code != "ENDB": + self.Size = Read('uint', handle, fileheader) + self.OldAddress = Read('pointer', handle, fileheader) + self.SDNAIndex = Read('uint', handle, fileheader) + self.Count = Read('uint', handle, fileheader) + self.FileOffset = handle.tell() + else: + self.Size = Read('uint', handle, fileheader) + self.OldAddress = 0 + self.SDNAIndex = 0 + self.Count = 0 + self.FileOffset = handle.tell() + #self.Code += ' ' * (4 - len(self.Code)) + log.debug("found blend-file-block-fileheader {0} {1}".format(self.Code, self.FileOffset)) + + def skip(self, handle): + handle.read(self.Size) + + +class DNACatalog: + ''' + DNACatalog is a catalog of all information in the DNA1 file-block + + Header = None + Names = None + Types = None + Structs = None + ''' + + def __init__(self, fileheader, handle): + log.debug("building DNA catalog") + self.Names=[] + self.Types=[] + self.Structs=[] + self.Header = fileheader + + SDNA = ReadString(handle, 4) + + # names + NAME = ReadString(handle, 4) + numberOfNames = Read('uint', handle, fileheader) + log.debug("building #{0} names".format(numberOfNames)) + for i in range(numberOfNames): + name = ReadString(handle,0) + self.Names.append(DNAName(name)) + Align(handle) + + # types + TYPE = ReadString(handle, 4) + numberOfTypes = Read('uint', handle, fileheader) + log.debug("building #{0} types".format(numberOfTypes)) + for i in range(numberOfTypes): + type = ReadString(handle,0) + self.Types.append(DNAType(type)) + Align(handle) + + # type lengths + TLEN = ReadString(handle, 4) + log.debug("building #{0} type-lengths".format(numberOfTypes)) + for i in range(numberOfTypes): + length = Read('ushort', handle, fileheader) + self.Types[i].Size = length + Align(handle) + + # structs + STRC = ReadString(handle, 4) + numberOfStructures = Read('uint', handle, fileheader) + log.debug("building #{0} structures".format(numberOfStructures)) + for structureIndex in range(numberOfStructures): + type = Read('ushort', handle, fileheader) + Type = self.Types[type] + structure = DNAStructure(Type) + self.Structs.append(structure) + + numberOfFields = Read('ushort', handle, fileheader) + for fieldIndex in range(numberOfFields): + fTypeIndex = Read('ushort', handle, fileheader) + fNameIndex = Read('ushort', handle, fileheader) + fType = self.Types[fTypeIndex] + fName = self.Names[fNameIndex] + structure.Fields.append(DNAField(fType, fName)) + + +class DNAName: + ''' + DNAName is a C-type name stored in the DNA. + + Name = str + ''' + + def __init__(self, name): + self.Name = name + + def AsReference(self, parent): + if parent == None: + result = "" + else: + result = parent+"." + + result = result + self.ShortName() + return result + + def ShortName(self): + result = self.Name; + result = result.replace("*", "") + result = result.replace("(", "") + result = result.replace(")", "") + Index = result.find("[") + if Index != -1: + result = result[0:Index] + return result + + def IsPointer(self): + return self.Name.find("*")>-1 + + def IsMethodPointer(self): + return self.Name.find("(*")>-1 + + def ArraySize(self): + result = 1 + Temp = self.Name + Index = Temp.find("[") + + while Index != -1: + Index2 = Temp.find("]") + result*=int(Temp[Index+1:Index2]) + Temp = Temp[Index2+1:] + Index = Temp.find("[") + + return result + + +class DNAType: + ''' + DNAType is a C-type stored in the DNA + + Name = str + Size = int + Structure = DNAStructure + ''' + + def __init__(self, aName): + self.Name = aName + self.Structure=None + + +class DNAStructure: + ''' + DNAType is a C-type structure stored in the DNA + + Type = DNAType + Fields = [DNAField] + ''' + + def __init__(self, aType): + self.Type = aType + self.Type.Structure = self + self.Fields=[] + + def GetField(self, header, handle, path): + splitted = path.partition(".") + name = splitted[0] + rest = splitted[2] + offset = 0; + for field in self.Fields: + if field.Name.ShortName() == name: + log.debug("found "+name+"@"+str(offset)) + handle.seek(offset, os.SEEK_CUR) + return field.DecodeField(header, handle, rest) + else: + offset += field.Size(header) + + log.debug("error did not find "+path) + return None + + +class DNAField: + ''' + DNAField is a coupled DNAType and DNAName. + + Type = DNAType + Name = DNAName + ''' + + def __init__(self, aType, aName): + self.Type = aType + self.Name = aName + + def Size(self, header): + if self.Name.IsPointer() or self.Name.IsMethodPointer(): + return header.PointerSize*self.Name.ArraySize() + else: + return self.Type.Size*self.Name.ArraySize() + + def DecodeField(self, header, handle, path): + if path == "": + if self.Name.IsPointer(): + return Read('pointer', handle, header) + if self.Type.Name=="int": + return Read('int', handle, header) + if self.Type.Name=="short": + return Read('short', handle, header) + if self.Type.Name=="float": + return Read('float', handle, header) + if self.Type.Name=="char": + return ReadString(handle, self.Name.ArraySize()) + else: + return self.Type.Structure.GetField(header, handle, path) + diff --git a/doc/blender_file_format/mystery_of_the_blend.css b/doc/blender_file_format/mystery_of_the_blend.css new file mode 100644 index 00000000000..df287b54a06 --- /dev/null +++ b/doc/blender_file_format/mystery_of_the_blend.css @@ -0,0 +1,204 @@ +@CHARSET "ISO-8859-1"; + +table { + border-width: 1px; + border-style: solid; + border-color: #000000; + border-collapse: collapse; + width: 94%; + margin: 10px 3%; +} + +DIV.title { + font-size: 30px; + font-weight: bold; + text-align: center +} + +DIV.subtitle { + font-size: large; + text-align: center +} + +DIV.contact { + margin:30px 3%; +} + +@media print { + DIV.contact { + margin-top: 300px; + } + DIV.title { + margin-top: 400px; + } +} + +label { + font-weight: bold; + width: 100px; + float: left; +} + +label:after { + content: ":"; +} + +TH { + background-color: #000000; + color: #ffffff; + padding-left: 5px; + padding-right: 5px; +} + +TR { +} + +TD { + border-width: 1px; + border-style: solid; + border-color: #a0a0a0; + padding-left: 5px; + padding-right: 5px; +} + +BODY { + font-family: verdana; + font-size: small; +} + +H1 { + page-break-before: always; +} + +H1, H2, H3, H4 { + margin-top: 30px; + margin-right: 3%; + padding: 3px 3%; + color: #404040; + cursor: pointer; +} + +H1, H2 { + background-color: #D3D3D3; +} + +H3, H4 { + padding-top: 5px; + padding-bottom: 5px; +} + +H1:hover, H2:hover, H3:hover, H4:hover { + background-color: #EBEBEB; +} + +CODE.evidence { + font-size:larger +} + +CODE.block { + color: #000000; + background-color: #DDDC75; + margin: 10px 0; + padding: 5px; + border-width: 1px; + border-style: dotted; + border-color: #000000; + white-space: pre; + display: block; + font-size: 2 em; +} + +ul { + margin: 10px 3%; +} + +li { + margin: 0 -15px; +} + +ul.multicolumn { + list-style: none; + float: left; + padding-right: 0px; + margin-right: 0px; +} + +li.multicolumn { + float: left; + width: 200px; + margin-right: 0px; +} + +@media screen { + p { + margin: 10px 3%; + line-height: 130%; + } +} + +span.fade { + color: gray; +} + +span.header { + color: green; +} + +span.header-greyed { + color: #4CBE4B; +} + +span.data { + color: blue; +} + +span.data-greyed { + color: #5D99C4; +} + +span.descr { + color: red; +} + +div.box { + margin: 15px 3%; + border-style: dotted; + border-width: 1px; +} + +div.box-solid { + margin: 15px 3%; + border-style: solid; + border-width: 1px; +} + +p.box-title { + font-style: italic; + font-size: 110%; + cursor: pointer; +} + +p.box-title:hover { + background-color: #EBEBEB; +} + +p.code { + font-family: "Courier New", Courier, monospace; +} + +a { + color: #a000a0; + text-decoration: none; +} + +a:hover { + color: #a000a0; + text-decoration: underline; +} + +td.skip { + color: #808080; + padding-top: 10px; + padding-bottom: 10px; + text-align: center; +} diff --git a/doc/blender_file_format/mystery_of_the_blend.html b/doc/blender_file_format/mystery_of_the_blend.html new file mode 100644 index 00000000000..b34493ffa3e --- /dev/null +++ b/doc/blender_file_format/mystery_of_the_blend.html @@ -0,0 +1,835 @@ + + + + + + The mystery of the blend + + + +
    The mystery of the blend
    +
    The blender file-format explained
    +
    + +

    Introduction

    + + +

    In this article I will describe the + blend-file-format with a request to tool-makers to support blend-file. + +

    +

    First I'll describe how Blender works with blend-files. You'll notice + why the blend-file-format is not that well documented, as from +Blender's perspective this is not needed. +We look at the global file-structure of a blend-file (the file-header +and file-blocks). +After this is explained, we go deeper to the core of the blend-file, the + DNA-structures. They hold the blue-prints of the blend-file and the key + asset of understanding blend-files. +When that's done we can use these DNA-structures to read information +from elsewhere in the blend-file. + +

    +

    +In this article we'll be using the default blend-file from Blender 2.54, + with the goal to read the output resolution from the Scene. +The article is written to be programming language independent and I've +setup a web-site for support. +

    + + +

    Loading and saving in Blender

    +
    + +

    +Loading and saving in Blender is very fast and Blender is known to +have excellent downward and upward compatibility. Ton Roosendaal +demonstrated that in December 2008 by loading a 1.0 blend-file using +Blender 2.48a [ref: http://www.blendernation.com/2008/12/01/blender-dna-rna-and-backward-compatibility/]. +

    + +

    +Saving complex scenes in Blender is done within seconds. Blender +achieves this by saving data in memory to disk without any +transformations or translations. Blender only adds file-block-headers to + this data. A file-block-header contains clues on how to interpret the +data. After the data, all internally Blender structures are stored. +These structures will act as blue-prints when Blender loads the file. +Blend-files can be different when stored on different hardware platforms + or Blender releases. There is no effort taken to make blend-files +binary the same. Blender creates the blend-files in this manner since +release 1.0. Backward and upwards compatibility is not implemented when +saving the file, this is done during loading. +

    + +

    +When Blender loads a blend-file, the DNA-structures are read first. +Blender creates a catalog of these DNA-structures. Blender uses this +catalog together with the data in the file, the internal Blender +structures of the Blender release you're using and a lot of +transformation and translation logic to implement the backward and +upward compatibility. In the source code of blender there is actually +logic which can transform and translate every structure used by a +Blender release to the one of the release you're using [ref: http://download.blender.org/source/blender-2.48a.tar.gz + blender/blenloader/intern/readfile.c lines +4946-7960]. The more difference between releases the more logic is +executed. +

    + +

    +The blend-file-format is not well documented, as it does not differ from + internally used structures and the file can really explain itself. +

    + + +

    Global file-structure

    +
    + +

    +This section explains how the global file-structure can be read. +

    + +
      +
    • A blend-file always start with the file-header
    • +
    • After the file-header, follows a list of file-blocks (the default blend file of Blender 2.48 contains more than 400 of these file-blocks).
    • +
    • Each file-block has a file-block header and file-block data
    • +
    • At the end of the blend-file there is a section called "Structure DNA", which lists all the internal structures of the Blender release the file was created in
    • +
    • The blend-file ends with a file-block called 'ENDB'
    • +
    + + +
    + +

    File.blend

    + +

    File-header

    + +

    File-block

    +

    Header

    +

    Data

    +
    + +

    File-block

    +

    File-block

    + +

    File-block 'Structure DNA'

    +

    Header ('DNA1')

    +
    +

    Data ('SDNA')

    +
    +

    Names ('NAME')

    +
    +
    +

    Types ('TYPE')

    +
    +
    +

    Lengths ('TLEN')

    +
    +
    +

    Structures ('STRC')

    +
    +
    +
    + +

    File-Block 'ENDB'

    + +
    + + +

    File-Header

    +
    + +

    +The first 12 bytes of every blend-file is the file-header. The +file-header has information on Blender (version-number) and the PC the +blend-file was saved on (pointer-size and endianness). This is required +as all data inside the blend-file is ordered in that way, because no +translation or transformation is done during saving. +The next table describes the information in the file-header. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File-header
    referencestructuretypeoffsetsize
    identifierchar[7]File identifier (always 'BLENDER')07
    pointer-sizecharSize of a pointer; all pointers in the file are stored in this format. '_' means 4 bytes or 32 bit and '-' means 8 bytes or 64 bits.71
    endiannesscharType of byte ordering used; 'v' means little endian and 'V' means big endian.81
    version-numberchar[3]Version of Blender the file was created in; '254' means version 2.5493
    + +

    +Endianness addresses the way values are ordered in a sequence of bytes(see the example below): +

    + +
      +
    • in a big endian ordering, the largest part of the value is placed on the first byte and + the lowest part of the value is placed on the last byte,
    • +
    • in a little endian ordering, largest part of the value is placed on the last byte + and the smallest part of the value is placed on the first byte.
    • +
    + +

    +Nowadays, little-endian is the most commonly used. +

    + + +
    +

    +Endianess Example +

    +

    +Writing the integer 0x4A3B2C1Dh, will be ordered: +

      +
    • in big endian as 0x4Ah, 0x3Bh, 0x2Ch, 0x1Dh
    • +
    • in little endian as 0x1Dh, 0x2Ch, 0x3Bh, 0x4Ah
    • +
    +

    +
    + +

    +Blender supports little-endian and big-endian.
    +This means that when the endianness +is different between the blend-file and the PC your using, Blender changes it to the byte ordering +of your PC. +

    + + +
    +

    +File-header Example +

    + +

    +This hex-dump describes a file-header created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length. + pointer-size version-number + | | +0000 0000: [42 4C 45 4E 44 45 52] [5F] [76] [32 35 34] BLENDER_v254 + | | + identifier endianness +

    +
    + +

    File-blocks

    + +

    +File-blocks contain a "file-block header" and "file-block data". +

    + +

    File-block headers

    + +

    +The file-block-header describes: +

    + +
      +
    • the type of information stored in the +file-block
    • +
    • the total length of the data
    • +
    • the old memory +pointer at the moment the data was written to disk
    • +
    • the number of items of this information
    • +
    + +

    +As we can see below, depending on the pointer-size stored in the file-header, a file-block-header +can be 20 or 24 bytes long, hence it is always aligned at 4 bytes. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File-block-header
    referencestructuretypeoffsetsize
    codechar[4]File-block identifier04
    sizeintegerTotal length of the data after the file-block-header44
    old memory addressvoid*Memory address the structure was located when written to disk8pointer-size (4/8)
    SDNA indexintegerIndex of the SDNA structure8+pointer-size4
    countintegerNumber of structure located in this file-block12+pointer-size4
    + +

    +The above table describes how a file-block-header is structured: +

    + +
      +
    • Code describes different types of file-blocks. The code determines with what logic the data must be read.
      +These codes also allows fast finding of data like Library, Scenes, Object or Materials as they all have a specific code.
    • +
    • Size contains the total length of data after the file-block-header. +After the data a new file-block starts. The last file-block in the file +has code 'ENDB'.
    • +
    • Old memory address contains the memory address when the structure +was last stored. When loading the file the structures can be placed on +different memory addresses. Blender updates pointers to these structures + to the new memory addresses.
    • +
    • SDNA index contains the index in the DNA structures to be used when +reading this file-block-data.
      +More information about this subject will be explained in the Reading scene information section.
    • +
    • Count tells how many elements of the specific SDNA structure can be found in the data.
    • +
    + + +
    +

    +Example +

    +

    +This hex-dump describes a File-block (= File-block header + File-block data) created with blender 2.54 on little-endian hardware with a 32 bits pointer length.
    + file-block + identifier='SC' data size=1404 old pointer SDNA index=150 + | | | | +0000 4420: [53 43 00 00] [7C 05 00 00] [68 34 FB 0B] [96 00 00 00] SC.. `... ./.. .... +0000 4430: [01 00 00 00] [xx xx xx xx xx xx xx xx xx xx xx xx .... xxxx xxxx xxxx + | | + count=1 file-block data (next 1404 bytes) + +

    + +
      +
    • The code 'SC'+0x00h identifies that it is a Scene.
    • +
    • Size of the data is 1404 bytes (0x0000057Ch = 0x7Ch + 0x05h * 256 = 124 + 1280)
    • +
    • The old pointer is 0x0BFB3468h
    • +
    • The SDNA index is 150 (0x00000096h = 6 + 9 * 16 = 6 + 144)
    • +
    • The section contains a single scene (count = 1).
    • +
    + +

    +Before we can interpret the data of this file-block we first have to read the DNA structures in the file. +The section "Structure DNA" will show how to do that. +

    +
    + +

    Structure DNA

    + +

    The DNA1 file-block

    + +

    +Structure DNA is stored in a file-block with code 'DNA1'. It can be just before the 'ENDB' file-block. +

    + +

    +The 'DNA1' file-block contains all internal structures of the Blender release the +file was created in.
    +These structure can be described as C-structures: they can hold fields, arrays and +pointers to other structures, just like a normal C-structure. + +

    +struct SceneRenderLayer { + struct SceneRenderLayer *next, *prev; + char name[32]; + struct Material *mat_override; + struct Group *light_override; + unsigned int lay; + unsigned int lay_zmask; + int layflag; + int pad; + int passflag; + int pass_xor; +}; + +

    + +

    +For example,a blend-file created with Blender 2.54 the 'DNA1' file-block is 57796 bytes long and contains 398 structures. +

    + +

    DNA1 file-block-header

    + +

    +The DNA1 file-block header follows the same rules of any other file-block, see the example below. +

    + + +
    +

    +Example +

    +

    +This hex-dump describes the file-block 'DNA1' header created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length.
    + (file-block + identifier='DNA1') data size=57796 old pointer SDNA index=0 + | | | | +0004 B060 [44 4E 41 31] [C4 E1 00 00] [C8 00 84 0B] [00 00 00 00] DNA1............ +0004 B070 [01 00 00 00] [53 44 4E 41 4E 41 4D 45 CB 0B 00 00 ....SDNANAME.... + | | + count=1 'DNA1' file-block data (next 57796 bytes) + +

    +
    + +

    DNA1 file-block data

    +

    +The next section describes how this information is ordered in the data of the 'DNA1' file-block. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Structure of the DNA file-block-data
    repeat conditionnametypelengthdescription
    identifierchar[4]4'SDNA'
    name identifierchar[4]4'NAME'
    #namesinteger4Number of names follows
    for(#names)namechar[]?Zero terminating string of name, also contains pointer and simple array definitions (e.g. '*vertex[3]\0')
    type identifierchar[4]4'TYPE' this field is aligned at 4 bytes
    #typesinteger4Number of types follows
    for(#types)typechar[]?Zero terminating string of type (e.g. 'int\0')
    length identifierchar[4]4'TLEN' this field is aligned at 4 bytes
    for(#types)lengthshort2Length in bytes of type (e.g. 4)
    structure identifierchar[4]4'STRC' this field is aligned at 4 bytes
    #structuresinteger4Number of structures follows
    for(#structures)structure typeshort2Index in types containing the name of the structure
    ..#fieldsshort2Number of fields in this structure
    ..for(#field)field typeshort2Index in type
    for endfor endfield nameshort2Index in name
    + +

    +As you can see, the structures are stored in 4 arrays: names, types, +lengths and structures. Every structure also contains an array of +fields. A field is the combination of a type and a name. From this +information a catalog of all structures can be constructed. +The names are stored as how a C-developer defines them. This means that +the name also defines pointers and arrays. +(When a name starts with '*' it is used as a pointer. when the name +contains for example '[3]' it is used as a array of 3 long.) +In the types you'll find simple-types (like: 'integer', 'char', +'float'), but also complex-types like 'Scene' and 'MetaBall'. +'TLEN' part describes the length of the types. A 'char' is 1 byte, an +'integer' is 4 bytes and a 'Scene' is 1376 bytes long. +

    + +
    +

    +Note +

    +

    +All identifiers, are arrays of 4 chars, hence they are all aligned at 4 bytes. +

    +
    + + +
    +

    +Example +

    +

    +Created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length. +

    + +

    The names array

    +

    +The first names are: *next, *prev, *data, *first, *last, x, y, xmin, xmax, ymin, ymax, *pointer, group, val, val2, type, subtype, flag, name[32], ... + file-block-data identifier='SDNA' array-id='NAME' number of names=3019 + | | | +0004 B070 01 00 00 00 [53 44 4E 41][4E 41 4D 45] [CB 0B 00 00] ....SDNANAME.... +0004 B080 [2A 6E 65 78 74 00][2A 70 72 65 76 00] [2A 64 61 74 *next.*prev.*dat + | | | + '*next\0' '*prev\0' '*dat' + .... + .... (3019 names) + +

    + +
    +

    +Note +

    +

    +While reading the DNA you'll will come across some strange +names like '(*doit)()'. These are method pointers and Blender updates +them to the correct methods. +

    +
    + +

    The types array

    +

    +The first types are: char, uchar, short, ushort, int, long, ulong, float, double, void, Link, LinkData, ListBase, vec2s, vec2f, ... + array-id='TYPE' + | +0005 2440 6F 6C 64 5B 34 5D 5B 34 5D 00 00 00 [54 59 50 45] old[4][4]...TYPE +0005 2450 [C9 01 00 00] [63 68 61 72 00] [75 63 68 61 72 00][73 ....char.uchar.s + | | | | + number of types=457 'char\0' 'uchar\0' 's' + .... + .... (457 types) + +

    + +

    The lengths array

    +

    + char uchar ushort short + array-id length length length length + 'TLEN' 1 1 2 2 +0005 3AA0 45 00 00 00 [54 4C 45 4E] [01 00] [01 00] [02 00] [02 00] E...TLEN........ + .... +0005 3AC0 [08 00] [04 00] [08 00] [10 00] [10 00] [14 00] [4C 00] [34 00] ............L.4. + 8 4 8 + ListBase vec2s vec2f ... etc + length len length + .... + .... (457 lengths, same as number of types) + +

    + +

    The structures array

    +

    + array-id='STRC' + | +0005 3E30 40 00 38 00 60 00 00 00 00 00 00 00 [53 54 52 43] @.8.`.......STRC +0005 3E40 [8E 01 00 00] [0A 00] [02 00] [0A 00] [00 00] [0A 00] [01 00] ................ + 398 10 2 10 0 10 0 + number of index fields index index index index + structures in types in types in names in types in names + ' '----------------' '-----------------' ' + ' field 0 field 1 ' + '--------------------------------------------------------' + structure 0 + .... + .... (398 structures, each one describeing own type, and type/name for each field) + +

    +
    + +

    +The DNA structures inside a Blender 2.48 blend-file can be found at http://www.atmind.nl/blender/blender-sdna.html. + +If we understand the DNA part of the file it is now possible to read +information from other parts file-blocks. The next section will tell us +how. +

    + +

    Reading scene information

    + +

    +Let us look at the file-block header we have seen earlier:
    +

    +
      +
    • the file-block identifier is 'SC'+0x00h
    • +
    • the SDNA index is 150
    • +
    • the file-block size is 1404 bytes
    • +
    +

    +Now note that: +

      +
    • the structure at index 150 in the DNA is a structure of type 'Scene' (counting from 0).
    • +
    • the associated type ('Scene') in the DNA has the length of 1404 bytes.
    • +
    +

    + +

    +We can map the Scene structure on the data of the file-blocks. +But before we can do that, we have to flatten the Scene-structure. + +struct Scene { + ID id; // 52 bytes long (ID is different a structure) + AnimData *adt; // 4 bytes long (pointer to an AnimData structure) + Object *camera; // 4 bytes long (pointer to an Object structure) + World *world; // 4 bytes long (pointer to an Object structure) + ... + float cursor[3]; // 12 bytes long (array of 3 floats) + ... +}; + + +The first field in the Scene-structure is of type 'ID' with the name 'id'. +Inside the list of DNA structures there is a structure defined for type 'ID' (structure index 17). + +struct ID { + void *next, *prev; + struct ID *newid; + struct Library *lib; + char name[24]; + short us; + short flag; + int icon_id; + IDProperty *properties; +}; + + +The first field in this structure has type 'void' and name '*next'.
    +Looking in the structure list there is no structure defined for type 'void': it is a simple type and therefore the data should be read. +The name '*next' describes a pointer. +As we see, the first 4 bytes of the data can be mapped to 'id.next'. +

    + +

    +Using this method we'll map a structure to its data. If we want to +read a specific field we know at which offset in the data it is located +and how much space it takes.
    +The next table shows the output of this flattening process for some +parts of the Scene-structure. Not all rows are described in the table as + there is a lot of information in a Scene-structure. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Flattened SDNA structure 150: Scene
    referencestructuretypenameoffsetsizedescription
    id.nextIDvoid*next04Refers to the next scene
    id.prevIDvoid*prev44Refers to the previous scene
    id.newidIDID*newid84
    id.libIDLibrary*lib124
    id.nameIDcharname[24]1624'SC'+the name of the scene as displayed in Blender
    id.usIDshortus402
    id.flagIDshortflag422
    id.icon_idIDinticon_id444
    id.propertiesIDIDProperty*properties484
    adtSceneAnimData*adt524
    cameraSceneObject*camera564Pointer to the current camera
    worldSceneWorld*world604Pointer to the current world
    Skipped rows
    r.xschRenderData + shortxsch3822X-resolution of the output when rendered at 100%
    r.yschRenderData + shortysch3842Y-resolution of the output when rendered at 100%
    r.xpartsRenderData + shortxparts3862Number of x-part used by the renderer
    r.ypartsRenderData + shortyparts3882Number of x-part used by the renderer
    Skipped rows
    gpdScenebGPdata*gpd13764
    physics_settings.gravityPhysicsSettings + floatgravity[3]138012
    physics_settings.flagPhysicsSettings + intflag13924
    physics_settings.quick_cache_stepPhysicsSettings + intquick_cache_step13964
    physics_settings.rtPhysicsSettings + intrt14004
    + +

    +We can now read the X and Y resolution of the Scene: +

      +
    • the X-resolution is located on offset 382 of the file-block-data and must be read as a +short.
    • +
    • the Y-resolution is located on offset 384 and is also a short
    • +
    +

    + +
    +

    +Note +

    +

    +An array of chars can mean 2 things. The field contains readable +text or it contains an array of flags (not humanly readable). +

    +
    + +
    +

    +Note +

    +

    +A file-block containing a list refers to the DNA structure and has a count larger +than 1. For example Vertexes and Faces are stored in this way. +

    +
    + + + + From d29d972e335daad56a7ba6b552db9aa8d870adfe Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 15:20:48 +0000 Subject: [PATCH 064/163] Fix for [#23318] SEQUENCER EFFECT: Glow blur amount should be relative --- source/blender/blenkernel/intern/seqeffects.c | 16 +++++++--------- source/blender/blenkernel/intern/sequencer.c | 9 +++++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index 6477c6b4f75..66cad5090f8 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -2631,32 +2631,30 @@ static void copy_glow_effect(Sequence *dst, Sequence *src) } //void do_glow_effect(Cast *cast, float facf0, float facf1, int xo, int yo, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *outbuf, ImBuf *use) -static void do_glow_effect_byte(Sequence *seq, float facf0, float UNUSED(facf1), +static void do_glow_effect_byte(Sequence *seq, int render_size, float facf0, float UNUSED(facf1), int x, int y, char *rect1, char *UNUSED(rect2), char *out) { unsigned char *outbuf=(unsigned char *)out; unsigned char *inbuf=(unsigned char *)rect1; GlowVars *glow = (GlowVars *)seq->effectdata; - int size= 100; // renderdata XXX RVIsolateHighlights_byte(inbuf, outbuf , x, y, glow->fMini*765, glow->fBoost * facf0, glow->fClamp); - RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (size / 100.0f),glow->dQuality); + RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality); if (!glow->bNoComp) RVAddBitmaps_byte (inbuf , outbuf, outbuf, x, y); } -static void do_glow_effect_float(Sequence *seq, float facf0, float UNUSED(facf1), +static void do_glow_effect_float(Sequence *seq, int render_size, float facf0, float UNUSED(facf1), int x, int y, float *rect1, float *UNUSED(rect2), float *out) { float *outbuf = out; float *inbuf = rect1; GlowVars *glow = (GlowVars *)seq->effectdata; - int size= 100; // renderdata XXX RVIsolateHighlights_float(inbuf, outbuf , x, y, glow->fMini*3.0f, glow->fBoost * facf0, glow->fClamp); - RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (size / 100.0f),glow->dQuality); + RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality); if (!glow->bNoComp) RVAddBitmaps_float (inbuf , outbuf, outbuf, x, y); } @@ -2664,19 +2662,19 @@ static void do_glow_effect_float(Sequence *seq, float facf0, float UNUSED(facf1) static struct ImBuf * do_glow_effect( Main *UNUSED(bmain), Scene *UNUSED(scene), Sequence *seq, float UNUSED(cfra), float facf0, float facf1, int x, int y, - int UNUSED(preview_render_size), + int render_size, struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3); if (out->rect_float) { - do_glow_effect_float(seq, + do_glow_effect_float(seq, render_size, facf0, facf1, x, y, ibuf1->rect_float, ibuf2->rect_float, out->rect_float); } else { - do_glow_effect_byte(seq, + do_glow_effect_byte(seq, render_size, facf0, facf1, x, y, (char*) ibuf1->rect, (char*) ibuf2->rect, (char*) out->rect); diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 53930cee68b..fcf574e1f1f 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -1686,6 +1686,15 @@ static ImBuf* seq_render_effect_strip_impl( goto finish; } + /* Override render size here, effects need to get the actual + * ratio so they can scale appropriately. This whole business + * with render size, proxy size, and seqrectx, etc. is a bit + * complicated and should probably be cleaned up and handled + * properly way before we get to this point. -jahka + * (fix for bug #23318) + */ + render_size = 100*seqrectx/scene->r.xsch; + if ((seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) != 0) { sh.get_default_fac(seq, cfra, &fac, &facf); if( scene->r.mode & R_FIELDS ); else facf= fac; From c69f2eaca97084e0e830756b574c9ec8a55c6643 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 17:13:03 +0000 Subject: [PATCH 065/163] Fix for [#24448] User Preferences - Interface - Mini Axis - Brightness, none working? * The axis draw function was changed by Campbell recently, but the brightness value was forgotten? * Solved currently by mapping the brightness value to axis alpha. --- .../blender/editors/space_view3d/view3d_draw.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 4c153c2d0c1..de373d54be6 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -579,6 +579,7 @@ static void draw_view_axis(RegionView3D *rv3d) const float toll = 0.5; /* used to see when view is quasi-orthogonal */ const float start = k + 1.0; /* axis center in screen coordinates, x=y */ float ydisp = 0.0; /* vertical displacement to allow obj info text */ + int bright = 25*(float)U.rvibright + 5; /* axis alpha (rvibright has range 0-10) */ float vec[3]; float dx, dy; @@ -586,6 +587,9 @@ static void draw_view_axis(RegionView3D *rv3d) /* thickness of lines is proportional to k */ glLineWidth(2); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + /* X */ vec[0] = 1; vec[1] = vec[2] = 0; @@ -593,7 +597,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(220, 0, 0); + glColor4ub(220, 0, 0, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -603,6 +607,9 @@ static void draw_view_axis(RegionView3D *rv3d) BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x"); } + /* BLF_draw_default disables blending */ + glEnable(GL_BLEND); + /* Y */ vec[1] = 1; vec[0] = vec[2] = 0; @@ -610,7 +617,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(0, 220, 0); + glColor4ub(0, 220, 0, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -619,6 +626,8 @@ static void draw_view_axis(RegionView3D *rv3d) if (fabs(dx) > toll || fabs(dy) > toll) { BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y"); } + + glEnable(GL_BLEND); /* Z */ vec[2] = 1; @@ -627,7 +636,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(30, 30, 220); + glColor4ub(30, 30, 220, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -640,6 +649,7 @@ static void draw_view_axis(RegionView3D *rv3d) /* restore line-width */ glLineWidth(1.0); + glDisable(GL_BLEND); } From 001259ccb6a8dbe0c70e4eb0f47a82b9b574d3b4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Oct 2010 17:16:37 +0000 Subject: [PATCH 066/163] warning/portability fixes. --- source/blender/blenkernel/BKE_brush.h | 2 +- source/blender/blenkernel/BKE_utildefines.h | 5 +++- source/blender/blenlib/intern/BLI_mempool.c | 27 +++++++++++++------ source/blender/editors/screen/screen_edit.c | 13 ++++++--- .../editors/space_sequencer/sequencer_edit.c | 1 - 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h index 25d0eb5bc36..5afab9af9b3 100644 --- a/source/blender/blenkernel/BKE_brush.h +++ b/source/blender/blenkernel/BKE_brush.h @@ -36,7 +36,7 @@ struct Brush; struct ImBuf; struct Scene; struct wmOperator; -enum CurveMappingPreset; +// enum CurveMappingPreset; /* datablock functions */ struct Brush *add_brush(const char *name); diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h index 016aef4d865..a7b4a71c84d 100644 --- a/source/blender/blenkernel/BKE_utildefines.h +++ b/source/blender/blenkernel/BKE_utildefines.h @@ -279,8 +279,11 @@ behaviour, though it may not be the best in practice. /*little macro so inline keyword works*/ #if defined(_MSC_VER) #define BM_INLINE static __forceinline -#else +#elif defined(__GNUC__) #define BM_INLINE static inline __attribute((always_inline)) +#else +#warning "MSC/GNUC defines not found, inline non-functional" +#define BM_INLINE static #endif #define BMEMSET(mem, val, size) {unsigned int _i; char *_c = (char*) mem; for (_i=0; _ichunks.first; BLI_remlink(&pool->chunks, first); - for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) - pool->use_sysmalloc ? free(mpchunk->data) : MEM_freeN(mpchunk->data); - + for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) { + if(pool->use_sysmalloc) free(mpchunk->data); + else MEM_freeN(mpchunk->data); + } + pool->use_sysmalloc ? BLI_freelist(&(pool->chunks)) : BLI_freelistN(&(pool->chunks)); BLI_addtail(&pool->chunks, first); @@ -175,9 +177,18 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr){ //doesnt protect against d void BLI_mempool_destroy(BLI_mempool *pool) { BLI_mempool_chunk *mpchunk=NULL; - for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) - pool->use_sysmalloc ? free(mpchunk->data) : MEM_freeN(mpchunk->data); - - pool->use_sysmalloc ? BLI_freelist(&(pool->chunks)) : BLI_freelistN(&(pool->chunks)); - pool->use_sysmalloc ? free(pool) : MEM_freeN(pool); + if(pool->use_sysmalloc) { + for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) { + free(mpchunk->data); + } + BLI_freelist(&(pool->chunks)); + free(pool); + } + else { + for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) { + MEM_freeN(mpchunk->data); + } + BLI_freelistN(&(pool->chunks)); + MEM_freeN(pool); + } } diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index cd2e1d030ff..196c8babf37 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1035,12 +1035,17 @@ void ED_screen_draw(wmWindow *win) /* make this screen usable */ /* for file read and first use, for scaling window, area moves */ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win) -{ - ScrArea *sa; - rcti winrct= {0, win->sizex-1, 0, win->sizey-1}; - +{ /* exception for bg mode, we only need the screen context */ if (!G.background) { + ScrArea *sa; + rcti winrct; + + winrct.xmin= 0; + winrct.xmax= win->sizex-1; + winrct.ymin= 0; + winrct.ymax= win->sizey-1; + screen_test_scale(win->screen, win->sizex, win->sizey); if(win->screen->mainwin==0) diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index b9a593b520c..286442ba08c 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -1502,7 +1502,6 @@ static int sequencer_swap_inputs_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); Sequence *seq, *last_seq = seq_active_get(scene); - char *error_msg; if(last_seq->seq1==NULL || last_seq->seq2 == NULL) { BKE_report(op->reports, RPT_ERROR, "No valid inputs to swap"); From 082e9b329d154ed2b3aa6ba6d71064261f8204b7 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 17:42:08 +0000 Subject: [PATCH 067/163] Fix for [#24458] Problem with Axis Angle rotation * Added checks to handle zero axis vector. --- source/blender/blenlib/intern/math_rotation.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index 7debdcdb015..b31e26dfc16 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -592,8 +592,11 @@ void axis_angle_to_quat(float q[4], const float axis[3], float angle) float nor[3]; float si; - normalize_v3_v3(nor, axis); - + if(normalize_v3_v3(nor, axis) == 0.0f) { + unit_qt(q); + return; + } + angle /= 2; si = (float)sin(angle); q[0] = (float)cos(angle); @@ -649,7 +652,10 @@ void axis_angle_to_mat3(float mat[3][3], const float axis[3], const float angle) float nor[3], nsi[3], co, si, ico; /* normalise the axis first (to remove unwanted scaling) */ - normalize_v3_v3(nor, axis); + if(normalize_v3_v3(nor, axis) == 0.0f) { + unit_m3(mat); + return; + } /* now convert this to a 3x3 matrix */ co= (float)cos(angle); From 44e60266269236234146066ab80aff4fa83722d8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Oct 2010 18:42:11 +0000 Subject: [PATCH 068/163] the pivot constraint was translating when the pivot was offset along the rotation axis. fixed by projecting the pivot along the axis of rotation and subtracting this from the pivot. --- source/blender/blenkernel/intern/constraint.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 4d6ef612c83..9629be330d9 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -3812,6 +3812,10 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t float pivot[3], vec[3]; float rotMat[3][3]; + + /* pivot correction */ + float axis[3], angle; + float dvec[3]; /* firstly, check if pivoting should take place based on the current rotation */ if (data->rotAxis != PIVOTCON_AXIS_NONE) { @@ -3854,7 +3858,15 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t // TODO: perhaps we might want to include scaling based on the pivot too? copy_m3_m4(rotMat, cob->matrix); normalize_m3(rotMat); - + + + /* correct the pivot by the rotation axis otherwise the pivot translates when it shouldnt */ + mat3_to_axis_angle(axis, &angle, rotMat); + sub_v3_v3v3(vec, pivot, cob->matrix[3]); + project_v3_v3v3(dvec, vec, axis); + sub_v3_v3(pivot, dvec); + + /* perform the pivoting... */ /* 1. take the vector from owner to the pivot */ sub_v3_v3v3(vec, pivot, cob->matrix[3]); From 90e9970094bc6907aec41b581e5b9144551734ae Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Oct 2010 19:29:11 +0000 Subject: [PATCH 069/163] change mat4_to_eulO, mat3_to_eulO to calculate 2 rotations and return the smallest one. mat4_to_eul & mat3_to_eul are already working this way. Without this we get problems with constraints, eg: rotation on the Y axis over 90d can be represented by setting the X and Z to -PI, Y would decrease to 0 (infact 180d). --- source/blender/blenkernel/intern/constraint.c | 6 +- source/blender/blenlib/intern/math_rotation.c | 86 +++++++++---------- 2 files changed, 41 insertions(+), 51 deletions(-) diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 9629be330d9..1892f6f0a27 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -1381,16 +1381,14 @@ static bConstraintTypeInfo CTI_LOCLIMIT = { static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *UNUSED(targets)) { bRotLimitConstraint *data = con->data; - float eul_zero[3]= {0.0f, 0.0f, 0.0f}; float loc[3]; float eul[3]; float size[3]; copy_v3_v3(loc, cob->matrix[3]); mat4_to_size(size, cob->matrix); - - /* use compat function because it uses the rotation without axis flipping [#24002] */ - mat4_to_compatible_eulO(eul, eul_zero, cob->rotOrder, cob->matrix); + + mat4_to_eulO(eul, cob->rotOrder, cob->matrix); /* constraint data uses radians internally */ diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index b31e26dfc16..af537af8ccf 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -1144,53 +1144,6 @@ void eulO_to_mat3(float M[3][3], const float e[3], const short order) M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci; } -/* Construct 4x4 matrix from Euler angles (in radians). */ -void eulO_to_mat4(float M[4][4], const float e[3], const short order) -{ - float m[3][3]; - - /* for now, we'll just do this the slow way (i.e. copying matrices) */ - normalize_m3(m); - eulO_to_mat3(m,e, order); - copy_m4_m3(M, m); -} - -/* Convert 3x3 matrix to Euler angles (in radians). */ -void mat3_to_eulO(float e[3], short order,float M[3][3]) -{ - RotOrderInfo *R= GET_ROTATIONORDER_INFO(order); - short i=R->axis[0], j=R->axis[1], k=R->axis[2]; - double cy = sqrt(M[i][i]*M[i][i] + M[i][j]*M[i][j]); - - if (cy > 16*FLT_EPSILON) { - e[i] = atan2(M[j][k], M[k][k]); - e[j] = atan2(-M[i][k], cy); - e[k] = atan2(M[i][j], M[i][i]); - } - else { - e[i] = atan2(-M[k][j], M[j][j]); - e[j] = atan2(-M[i][k], cy); - e[k] = 0; - } - - if (R->parity) { - e[0] = -e[0]; - e[1] = -e[1]; - e[2] = -e[2]; - } -} - -/* Convert 4x4 matrix to Euler angles (in radians). */ -void mat4_to_eulO(float e[3], const short order,float M[4][4]) -{ - float m[3][3]; - - /* for now, we'll just do this the slow way (i.e. copying matrices) */ - copy_m3_m4(m, M); - normalize_m3(m); - mat3_to_eulO(e, order,m); -} - /* returns two euler calculation methods, so we can pick the best */ static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order) { @@ -1233,6 +1186,45 @@ static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order) } } +/* Construct 4x4 matrix from Euler angles (in radians). */ +void eulO_to_mat4(float M[4][4], const float e[3], const short order) +{ + float m[3][3]; + + /* for now, we'll just do this the slow way (i.e. copying matrices) */ + normalize_m3(m); + eulO_to_mat3(m,e, order); + copy_m4_m3(M, m); +} + + +/* Convert 3x3 matrix to Euler angles (in radians). */ +void mat3_to_eulO(float eul[3], short order,float M[3][3]) +{ + float eul1[3], eul2[3]; + + mat3_to_eulo2(M, eul1, eul2, order); + + /* return best, which is just the one with lowest values it in */ + if(fabs(eul1[0])+fabs(eul1[1])+fabs(eul1[2]) > fabs(eul2[0])+fabs(eul2[1])+fabs(eul2[2])) { + copy_v3_v3(eul, eul2); + } + else { + copy_v3_v3(eul, eul1); + } +} + +/* Convert 4x4 matrix to Euler angles (in radians). */ +void mat4_to_eulO(float e[3], const short order,float M[4][4]) +{ + float m[3][3]; + + /* for now, we'll just do this the slow way (i.e. copying matrices) */ + copy_m3_m4(m, M); + normalize_m3(m); + mat3_to_eulO(e, order,m); +} + /* uses 2 methods to retrieve eulers, and picks the closest */ void mat3_to_compatible_eulO(float eul[3], float oldrot[3], short order,float mat[3][3]) { From c2b9dfaff2025c75c8fc79fad3acd14d0652759d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Oct 2010 19:52:40 +0000 Subject: [PATCH 070/163] fix for own mistake with mat4_to_loc_rot_size(), flipping the scale on negative matrix isn't correct. --- source/blender/blenlib/intern/math_matrix.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index 4cd4ea2a12b..aadd08f0c90 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -957,7 +957,6 @@ void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wm float mat3[3][3]; /* wmat -> 3x3 */ float mat3_n[3][3]; /* wmat -> normalized, 3x3 */ float imat3_n[3][3]; /* wmat -> normalized & inverted, 3x3 */ - short is_neg; /* location */ copy_v3_v3(loc, wmat[3]); @@ -966,9 +965,8 @@ void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wm copy_m3_m4(mat3, wmat); /* so scale doesnt interfear with rotation [#24291] */ /* note: this is a workaround for negative matrix not working for rotation conversion, FIXME */ - is_neg= is_negative_m3(mat3); normalize_m3_m3(mat3_n, mat3); - if(is_neg) { + if(is_negative_m3(mat3)) { negate_v3(mat3_n[0]); negate_v3(mat3_n[1]); negate_v3(mat3_n[2]); @@ -986,12 +984,6 @@ void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wm size[0]= mat3[0][0]; size[1]= mat3[1][1]; size[2]= mat3[2][2]; - - /* with a negative matrix, all scaled will be negative - * flipping isnt needed but nicer to result in a positive scale */ - if(is_neg) { - negate_v3(size); - } } void scale_m3_fl(float m[][3], float scale) From 97d2ca8a3309e3b74990430672e74b1239f76636 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 21:55:17 +0000 Subject: [PATCH 071/163] Sequence editor code cleanup * The logic in some parts of the sequencer code was rather cryptic, so I cleaned it up a bit. * There should be no functional changes what so ever from these changes. --- source/blender/blenkernel/BKE_sequencer.h | 5 + source/blender/blenkernel/intern/sequencer.c | 639 ++++++++----------- 2 files changed, 259 insertions(+), 385 deletions(-) diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index 8cf541ae03a..6e20b912811 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -46,6 +46,11 @@ struct StripElem; #define BUILD_SEQAR_COUNT_CURRENT 1 #define BUILD_SEQAR_COUNT_CHILDREN 2 +#define EARLY_NO_INPUT -1 +#define EARLY_DO_EFFECT 0 +#define EARLY_USE_INPUT_1 1 +#define EARLY_USE_INPUT_2 2 + /* sequence iterator */ typedef struct SeqIterator { diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index fcf574e1f1f..c379ca43f82 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -372,7 +372,7 @@ void build_seqar(ListBase *seqbase, Sequence ***seqar, int *totseq) do_seq_count(seqbase, totseq); if(*totseq==0) { - *seqar= 0; + *seqar= NULL; return; } *seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar"); @@ -411,8 +411,7 @@ static void do_build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int depth, seq->depth= depth; if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) { - do_build_seqar_cb(&seq->seqbase, seqar, depth+1, - test_func); + do_build_seqar_cb(&seq->seqbase, seqar, depth+1, test_func); } if (test & BUILD_SEQAR_COUNT_CURRENT) { **seqar= seq; @@ -431,7 +430,7 @@ void build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int *totseq, do_seq_count_cb(seqbase, totseq, test_func); if(*totseq==0) { - *seqar= 0; + *seqar= NULL; return; } *seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar"); @@ -471,7 +470,7 @@ static void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq) if(seq->type == SEQ_META) { seq_update_sound_bounds_recursive(scene, seq); } - else if((seq->type == SEQ_SOUND) || (seq->type == SEQ_SCENE)) { + else if(ELEM(seq->type, SEQ_SOUND, SEQ_SCENE)) { if(seq->scene_sound) { int startofs = seq->startofs; int endofs = seq->endofs; @@ -502,8 +501,8 @@ void calc_sequence(Scene *scene, Sequence *seq) if(seq->type & SEQ_EFFECT) { /* pointers */ - if(seq->seq2==0) seq->seq2= seq->seq1; - if(seq->seq3==0) seq->seq3= seq->seq1; + if(seq->seq2==NULL) seq->seq2= seq->seq1; + if(seq->seq3==NULL) seq->seq3= seq->seq1; /* effecten go from seq1 -> seq2: test */ @@ -558,9 +557,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) int prev_startdisp, prev_enddisp; /* note: dont rename the strip, will break animation curves */ - if (!(seq->type == SEQ_MOVIE || seq->type == SEQ_IMAGE || - seq->type == SEQ_SOUND || - seq->type == SEQ_SCENE || seq->type == SEQ_META)) { + if (ELEM5(seq->type, SEQ_MOVIE, SEQ_IMAGE, SEQ_SOUND, SEQ_SCENE, SEQ_META)==0) { return; } @@ -574,13 +571,14 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) new_tstripdata(seq); - if (seq->type != SEQ_SCENE && seq->type != SEQ_META && - seq->type != SEQ_IMAGE) { + if (ELEM3(seq->type, SEQ_SCENE, SEQ_META, SEQ_IMAGE)==0) { BLI_join_dirfile(str, seq->strip->dir, seq->strip->stripdata->name); BLI_path_abs(str, G.main->name); } - if (seq->type == SEQ_IMAGE) { + switch(seq->type) { + case SEQ_IMAGE: + { /* Hack? */ size_t olen = MEM_allocN_len(seq->strip->stripdata)/sizeof(struct StripElem); @@ -591,7 +589,9 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; - } else if (seq->type == SEQ_MOVIE) { + break; + } + case SEQ_MOVIE: if(seq->anim) IMB_free_anim(seq->anim); seq->anim = openanim(str, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0)); @@ -609,7 +609,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; - } else if (seq->type == SEQ_SOUND) { + case SEQ_SOUND: seq->len = ceil(AUD_getInfo(seq->sound->playback_handle).length * FPS); seq->len -= seq->anim_startofs; seq->len -= seq->anim_endofs; @@ -617,7 +617,9 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; - } else if (seq->type == SEQ_SCENE) { + break; + case SEQ_SCENE: + { /* 'seq->scenenr' should be replaced with something more reliable */ Scene * sce = G.main->scene.first; int nr = 1; @@ -643,6 +645,8 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range) seq->len = 0; } seq->strip->len = seq->len; + break; + } } free_proxy_seq(seq); @@ -804,7 +808,7 @@ static char *give_seqname_by_type(int type) case SEQ_MULTICAM: return "Multicam"; case SEQ_SPEED: return "Speed"; default: - return 0; + return NULL; } } @@ -896,19 +900,24 @@ static void multibuf(ImBuf *ibuf, float fmul) static float give_stripelem_index(Sequence *seq, float cfra) { float nr; + int sta = seq->start; + int end = seq->start+seq->len-1; if(seq->len == 0) return -1; + if(seq->flag&SEQ_REVERSE_FRAMES) { /*reverse frame in this sequence */ - if(cfra <= seq->start) nr= seq->len-1; - else if(cfra >= seq->start+seq->len-1) nr= 0; - else nr= (seq->start + seq->len - 1) - cfra; + if(cfra <= sta) nr= seq->len-1; + else if(cfra >= end) nr= 0; + else nr= end - cfra; } else { - if(cfra <= seq->start) nr= 0; - else if(cfra >= seq->start+seq->len-1) nr= seq->len-1; - else nr= cfra-seq->start; + if(cfra <= sta) nr= 0; + else if(cfra >= end) nr= seq->len-1; + else nr= cfra - sta; } + if (seq->strobe < 1.0) seq->strobe = 1.0; + if (seq->strobe > 1.0) { nr -= fmod((double)nr, (double)seq->strobe); } @@ -920,14 +929,10 @@ StripElem *give_stripelem(Sequence *seq, int cfra) { StripElem *se= seq->strip->stripdata; - if(seq->type == SEQ_MOVIE) { - /* use the first */ - } - else { + if(seq->type != SEQ_MOVIE) { /* movie use the first */ int nr = (int) give_stripelem_index(seq, cfra); - if (nr == -1) return 0; - if (se == 0) return 0; + if (nr == -1 || se == 0) return 0; se += nr + seq->anim_startofs; } @@ -964,9 +969,7 @@ int evaluate_seq_frame(Scene *scene, int cfra) static int video_seq_is_rendered(Sequence * seq) { - return (seq - && !(seq->flag & SEQ_MUTE) - && seq->type != SEQ_SOUND); + return (seq && !(seq->flag & SEQ_MUTE) && seq->type != SEQ_SOUND); } static int get_shown_sequences( ListBase * seqbasep, int cfra, int chanshown, Sequence ** seq_arr_out) @@ -1028,13 +1031,11 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c return FALSE; } - if ((seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) - || (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE)) { + if (seq->flag & (SEQ_USE_PROXY_CUSTOM_DIR|SEQ_USE_PROXY_CUSTOM_FILE)) { strcpy(dir, seq->strip->proxy->dir); } else { - if (seq->type == SEQ_IMAGE || seq->type == SEQ_MOVIE) { - snprintf(dir, FILE_MAXDIR, "%s/BL_proxy", - seq->strip->dir); + if (ELEM(seq->type, SEQ_IMAGE, SEQ_MOVIE)) { + snprintf(dir, FILE_MAXDIR, "%s/BL_proxy", seq->strip->dir); } else { return FALSE; } @@ -1049,30 +1050,25 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c /* generate a separate proxy directory for each preview size */ - if (seq->type == SEQ_IMAGE) { - StripElem * se = give_stripelem(seq, cfra); - snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", - dir, render_size, se->name); + switch(seq->type) { + case SEQ_IMAGE: + snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", dir, + render_size, give_stripelem(seq, cfra)->name); frameno = 1; - } else if (seq->type == SEQ_MOVIE) { - frameno = (int) give_stripelem_index(seq, cfra) - + seq->anim_startofs; - + break; + case SEQ_MOVIE: + frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; snprintf(name, PROXY_MAXFILE, "%s/%s/%d/####", dir, - seq->strip->stripdata->name, - render_size); - } else { - frameno = (int) give_stripelem_index(seq, cfra) - + seq->anim_startofs; - - snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, - render_size); + seq->strip->stripdata->name, render_size); + break; + default: + frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; + snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, render_size); } BLI_path_abs(name, G.main->name); BLI_path_frame(name, frameno, 0); - strcat(name, ".jpg"); return TRUE; @@ -1092,24 +1088,22 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in } if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) { - int frameno = (int) give_stripelem_index(seq, cfra) - + seq->anim_startofs; - if (!seq->strip->proxy->anim) { - if (!seq_proxy_get_fname( - scene, seq, cfra, name, render_size)) { + int frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; + if (seq->strip->proxy->anim == NULL) { + if (seq_proxy_get_fname(scene, seq, cfra, name, render_size)==0) { return 0; } seq->strip->proxy->anim = openanim(name, IB_rect); } - if (!seq->strip->proxy->anim) { + if (seq->strip->proxy->anim==NULL) { return 0; } return IMB_anim_absolute(seq->strip->proxy->anim, frameno); } - if (!seq_proxy_get_fname(scene, seq, cfra, name, render_size)) { + if (seq_proxy_get_fname(scene, seq, cfra, name, render_size)==0) { return 0; } @@ -1378,8 +1372,7 @@ static void color_balance_byte_float(Sequence * seq, ImBuf* ibuf, float mul) cb = calc_cb(seq->strip->color_balance); for (c = 0; c < 3; c++) { - make_cb_table_float(cb.lift[c], cb.gain[c], cb.gamma[c], - cb_tab[c], mul); + make_cb_table_float(cb.lift[c], cb.gain[c], cb.gamma[c], cb_tab[c], mul); } for (i = 0; i < 256; i++) { @@ -1446,13 +1439,8 @@ int input_have_to_preprocess( { float mul; - if ((seq->flag & SEQ_FILTERY) || - (seq->flag & SEQ_USE_CROP) || - (seq->flag & SEQ_USE_TRANSFORM) || - (seq->flag & SEQ_FLIPX) || - (seq->flag & SEQ_FLIPY) || - (seq->flag & SEQ_USE_COLOR_BALANCE) || - (seq->flag & SEQ_MAKE_PREMUL)) { + if (seq->flag & (SEQ_FILTERY|SEQ_USE_CROP|SEQ_USE_TRANSFORM|SEQ_FLIPX| + SEQ_FLIPY|SEQ_USE_COLOR_BALANCE|SEQ_MAKE_PREMUL)) { return TRUE; } @@ -1474,8 +1462,7 @@ int input_have_to_preprocess( } static ImBuf * input_preprocess( - Scene *scene, Sequence *seq, float UNUSED(cfra), int seqrectx, int seqrecty, - ImBuf * ibuf) + Scene *scene, Sequence *seq, float UNUSED(cfra), int seqrectx, int seqrecty, ImBuf * ibuf) { float mul; @@ -1486,7 +1473,7 @@ static ImBuf * input_preprocess( IMB_filtery(ibuf); } - if(seq->flag & SEQ_USE_CROP || seq->flag & SEQ_USE_TRANSFORM) { + if(seq->flag & (SEQ_USE_CROP|SEQ_USE_TRANSFORM)) { StripCrop c; StripTransform t; int sx,sy,dx,dy; @@ -1511,23 +1498,13 @@ static ImBuf * input_preprocess( dy = scene->r.ysch; } - if (c.top + c.bottom >= ibuf->y || - c.left + c.right >= ibuf->x || - t.xofs >= dx || t.yofs >= dy) { + if (c.top + c.bottom >= ibuf->y || c.left + c.right >= ibuf->x || + t.xofs >= dx || t.yofs >= dy) { make_black_ibuf(ibuf); } else { - ImBuf * i; + ImBuf * i = IMB_allocImBuf(dx, dy,32, ibuf->rect_float ? IB_rectfloat : IB_rect); - if (ibuf->rect_float) { - i = IMB_allocImBuf(dx, dy,32, IB_rectfloat); - } else { - i = IMB_allocImBuf(dx, dy,32, IB_rect); - } - - IMB_rectcpy(i, ibuf, - t.xofs, t.yofs, - c.left, c.bottom, - sx, sy); + IMB_rectcpy(i, ibuf, t.xofs, t.yofs, c.left, c.bottom, sx, sy); IMB_freeImBuf(ibuf); @@ -1602,11 +1579,9 @@ static ImBuf * input_preprocess( if(ibuf->x != seqrectx || ibuf->y != seqrecty ) { if(scene->r.mode & R_OSA) { - IMB_scaleImBuf(ibuf, - (short)seqrectx, (short)seqrecty); + IMB_scaleImBuf(ibuf, (short)seqrectx, (short)seqrecty); } else { - IMB_scalefastImBuf(ibuf, - (short)seqrectx, (short)seqrecty); + IMB_scalefastImBuf(ibuf, (short)seqrectx, (short)seqrecty); } } return ibuf; @@ -1656,34 +1631,32 @@ static void copy_to_ibuf_still(Sequence * seq, float nr, strip rendering functions ********************************************************************** */ -static ImBuf* seq_render_strip_stack( - Main *bmain, Scene *scene, - ListBase *seqbasep, float cfra, int chanshown, int render_size, - int seqrectx, int seqrecty); +static ImBuf* seq_render_strip_stack( Main *bmain, Scene *scene, ListBase *seqbasep, + float cfra, int chanshown, int render_size, int seqrectx, int seqrecty); static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra, - int render_size, - int seqrectx, int seqrecty); + int render_size, int seqrectx, int seqrecty); -static ImBuf* seq_render_effect_strip_impl( - Main *bmain, Scene *scene, float cfra, Sequence *seq, int render_size, - int seqrectx, int seqrecty) +static ImBuf* seq_render_effect_strip_impl(Main *bmain, Scene *scene, float cfra, + Sequence *seq, int render_size, int seqrectx, int seqrecty) { float fac, facf; int early_out; int i; - int must_preprocess = FALSE; - struct SeqEffectHandle sh = get_sequence_effect(seq); FCurve *fcu= NULL; ImBuf * ibuf[3]; - ImBuf * out = 0; + Sequence *input[3]; + ImBuf * out = NULL; - ibuf[0] = ibuf[1] = ibuf[2] = 0; + ibuf[0] = ibuf[1] = ibuf[2] = NULL; + + input[0] = seq->seq1; input[1] = seq->seq2; input[2] = seq->seq3; if (!sh.execute) { /* effect not supported in this version... */ - goto finish; + out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); + return out; } /* Override render size here, effects need to get the actual @@ -1695,12 +1668,14 @@ static ImBuf* seq_render_effect_strip_impl( */ render_size = 100*seqrectx/scene->r.xsch; - if ((seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) != 0) { + if (seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) { sh.get_default_fac(seq, cfra, &fac, &facf); - if( scene->r.mode & R_FIELDS ); else facf= fac; - } else { - fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, - "effect_fader", 0); + + if ((scene->r.mode & R_FIELDS)==0) + facf= fac; + } + else { + fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "effect_fader", 0); if (fcu) { fac = facf = evaluate_fcurve(fcu, cfra); if( scene->r.mode & R_FIELDS ) { @@ -1713,88 +1688,58 @@ static ImBuf* seq_render_effect_strip_impl( early_out = sh.early_out(seq, fac, facf); - if (early_out == -1) { /* no input needed */ - out = sh.execute(bmain, scene, seq, cfra, fac, facf, - seqrectx, seqrecty, render_size, - 0, 0, 0); - goto finish; - } - - - must_preprocess = input_have_to_preprocess( - scene, seq, cfra, seqrectx, seqrecty); - switch (early_out) { - case 0: + case EARLY_NO_INPUT: + out = sh.execute(bmain, scene, seq, cfra, fac, facf, + seqrectx, seqrecty, render_size, NULL, NULL, NULL); + case EARLY_DO_EFFECT: + for(i=0; i<3; i++) { + if(input[i]) + ibuf[i] = seq_render_strip(bmain, scene, input[i], cfra, + render_size, seqrectx, seqrecty); + } + + if (ibuf[0] && ibuf[1]) { + out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty, + render_size, ibuf[0], ibuf[1], ibuf[2]); + } break; - case 1: - if (seq->seq1) { - ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra, - render_size, - seqrectx, seqrecty); + case EARLY_USE_INPUT_1: + if (input[0]) { + ibuf[0] = seq_render_strip(bmain, scene, input[0], cfra, + render_size, seqrectx, seqrecty); } if (ibuf[0]) { - if (must_preprocess) { + if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) { out = IMB_dupImBuf(ibuf[0]); } else { out = ibuf[0]; IMB_refImBuf(out); } } - goto finish; - case 2: - if (seq->seq2) { - ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra, - render_size, - seqrectx, seqrecty); + break; + case EARLY_USE_INPUT_2: + if (input[1]) { + ibuf[1] = seq_render_strip(bmain, scene, input[1], cfra, + render_size, seqrectx, seqrecty); } if (ibuf[1]) { - if (must_preprocess) { + if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) { out = IMB_dupImBuf(ibuf[1]); } else { out = ibuf[1]; IMB_refImBuf(out); } } - goto finish; - default: - goto finish; + break; } - if (seq->seq1) { - ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra, - render_size, - seqrectx, seqrecty); - } - - if (seq->seq2) { - ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra, - render_size, - seqrectx, seqrecty); - } - - if (seq->seq3) { - ibuf[2] = seq_render_strip(bmain, scene, seq->seq3, cfra, - render_size, - seqrectx, seqrecty); - } - - if (!ibuf[0] || !ibuf[1]) { - goto finish; - } - - out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty, - render_size, - ibuf[0], ibuf[1], ibuf[2]); - -finish: for (i = 0; i < 3; i++) { IMB_freeImBuf(ibuf[i]); } - if (!out) { - out = IMB_allocImBuf( - (short)seqrectx, (short)seqrecty, 32, IB_rect); + if (out == NULL) { + out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); } return out; @@ -1938,185 +1883,143 @@ static ImBuf * seq_render_scene_strip_impl( } static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra, - int render_size, - int seqrectx, int seqrecty) + int render_size, int seqrectx, int seqrecty) { + ImBuf * ibuf = NULL; char name[FILE_MAXDIR+FILE_MAXFILE]; - int use_preprocess = input_have_to_preprocess( - scene, seq, cfra, seqrectx, seqrecty); - ImBuf * ibuf = seq_stripelem_cache_get( - seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF); + int use_preprocess = input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty); float nr = give_stripelem_index(seq, cfra); + /* all effects are handled similarly with the exception of speed effect */ + int type = (seq->type & SEQ_EFFECT && seq->type != SEQ_SPEED) ? SEQ_EFFECT : seq->type; + ibuf = seq_stripelem_cache_get(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF); + + if (ibuf == NULL) + ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty); + /* currently, we cache preprocessed images */ - if (ibuf) { + if (ibuf) use_preprocess = FALSE; - } - if(seq->type == SEQ_META) { - ImBuf * meta_ibuf = 0; + if (ibuf == NULL) + ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } + if(ibuf == NULL) switch(type) { + case SEQ_META: + { + ImBuf * meta_ibuf = NULL; - if(!ibuf && seq->seqbase.first) { - meta_ibuf = seq_render_strip_stack( - bmain, scene, - &seq->seqbase, seq->start + nr, 0, - render_size, seqrectx, seqrecty); - } + if(seq->seqbase.first) + meta_ibuf = seq_render_strip_stack(bmain, scene, &seq->seqbase, + seq->start + nr, 0, render_size, seqrectx, seqrecty); - if(!ibuf && meta_ibuf) { - ibuf = meta_ibuf; - if(ibuf && use_preprocess) { - struct ImBuf * i = IMB_dupImBuf(ibuf); + if(meta_ibuf) { + ibuf = meta_ibuf; + if(ibuf && use_preprocess) { + struct ImBuf * i = IMB_dupImBuf(ibuf); - IMB_freeImBuf(ibuf); + IMB_freeImBuf(ibuf); - ibuf = i; + ibuf = i; + } } + break; } - } else if(seq->type == SEQ_SPEED) { - ImBuf * child_ibuf = 0; + case SEQ_SPEED: + { + ImBuf * child_ibuf = NULL; - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } - - if (ibuf == 0) { float f_cfra; - SpeedControlVars * s - = (SpeedControlVars *)seq->effectdata; + SpeedControlVars * s = (SpeedControlVars *)seq->effectdata; sequence_effect_speed_rebuild_map(scene, seq, 0); /* weeek! */ f_cfra = seq->start + s->frameMap[(int) nr]; - child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra, - render_size, - seqrectx, seqrecty); - } + child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra, render_size, + seqrectx, seqrecty); - if (!ibuf && child_ibuf) { - ibuf = child_ibuf; - if(ibuf && use_preprocess) { - struct ImBuf * i = IMB_dupImBuf(ibuf); + if (child_ibuf) { + ibuf = child_ibuf; + if(ibuf && use_preprocess) { + struct ImBuf * i = IMB_dupImBuf(ibuf); - IMB_freeImBuf(ibuf); + IMB_freeImBuf(ibuf); - ibuf = i; + ibuf = i; + } } + break; } - } else if(seq->type & SEQ_EFFECT) { - /* should the effect be recalculated? */ - - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); + case SEQ_EFFECT: + { + ibuf = seq_render_effect_strip_impl(bmain, scene, cfra, seq, render_size, + seqrectx, seqrecty); + break; } + case SEQ_IMAGE: + { + StripElem * s_elem = give_stripelem(seq, cfra); - if(ibuf == 0) { - ibuf = seq_render_effect_strip_impl( - bmain, scene, cfra, seq, render_size, - seqrectx, seqrecty); + if (s_elem) { + BLI_join_dirfile(name, seq->strip->dir, s_elem->name); + BLI_path_abs(name, G.main->name); + } + + if (s_elem && (ibuf = IMB_loadiffname(name, IB_rect))) { + /* we don't need both (speed reasons)! */ + if (ibuf->rect_float && ibuf->rect) + imb_freerectImBuf(ibuf); + + /* all sequencer color is done in SRGB space, linear gives odd crossfades */ + if(ibuf->profile == IB_PROFILE_LINEAR_RGB) + IMB_convert_profile(ibuf, IB_PROFILE_NONE); + + copy_to_ibuf_still(seq, nr, ibuf); + } + break; } - } else if(seq->type == SEQ_IMAGE) { - StripElem * s_elem = give_stripelem(seq, cfra); - - if(ibuf == 0 && s_elem) { - BLI_join_dirfile(name, seq->strip->dir, s_elem->name); - BLI_path_abs(name, G.main->name); - - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } - - if (ibuf == 0) { - ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty); - } - - if (ibuf == 0 && s_elem && - (ibuf = IMB_loadiffname(name, IB_rect))) { - /* we don't need both (speed reasons)! */ - if (ibuf->rect_float && ibuf->rect) - imb_freerectImBuf(ibuf); - - /* all sequencer color is done in SRGB space, linear gives odd crossfades */ - if(ibuf->profile == IB_PROFILE_LINEAR_RGB) - IMB_convert_profile(ibuf, IB_PROFILE_NONE); - - copy_to_ibuf_still(seq, nr, ibuf); - } - } else if(seq->type == SEQ_MOVIE) { - if(ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - - } - - if (ibuf == 0) { - ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty); - } - - if (ibuf == 0) { + case SEQ_MOVIE: + { if(seq->anim==0) { - BLI_join_dirfile(name, - seq->strip->dir, - seq->strip->stripdata->name); + BLI_join_dirfile(name, seq->strip->dir, seq->strip->stripdata->name); BLI_path_abs(name, G.main->name); - seq->anim = openanim( - name, IB_rect | - ((seq->flag & SEQ_FILTERY) - ? IB_animdeinterlace : 0)); + seq->anim = openanim(name, IB_rect | + ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0)); } + if(seq->anim) { - IMB_anim_set_preseek(seq->anim, - seq->anim_preseek); - ibuf = IMB_anim_absolute(seq->anim, - nr - + seq->anim_startofs); + IMB_anim_set_preseek(seq->anim, seq->anim_preseek); + ibuf = IMB_anim_absolute(seq->anim, nr + seq->anim_startofs); /* we don't need both (speed reasons)! */ - if (ibuf && ibuf->rect_float - && ibuf->rect) { + if (ibuf && ibuf->rect_float && ibuf->rect) imb_freerectImBuf(ibuf); - } } copy_to_ibuf_still(seq, nr, ibuf); + break; } - - } else if(seq->type == SEQ_SCENE) { // scene can be NULL after deletions - if (ibuf == 0) { - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); - } - if (ibuf == 0) { - ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty); - } - - if (ibuf == 0) { - ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr, - seqrectx, seqrecty); + case SEQ_SCENE: + { // scene can be NULL after deletions + ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr, seqrectx, seqrecty); copy_to_ibuf_still(seq, nr, ibuf); + break; } } - if (!ibuf) { - ibuf = IMB_allocImBuf( - (short)seqrectx, (short)seqrecty, 32, IB_rect); - } + if (ibuf == NULL) + ibuf = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); - if (ibuf->x != seqrectx || ibuf->y != seqrecty) { + if (ibuf->x != seqrectx || ibuf->y != seqrecty) use_preprocess = TRUE; - } - if (use_preprocess) { - ibuf = input_preprocess(scene, seq, cfra, seqrectx, - seqrecty, ibuf); - } + if (use_preprocess) + ibuf = input_preprocess(scene, seq, cfra, seqrectx, seqrecty, ibuf); - seq_stripelem_cache_put( - seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF, ibuf); + seq_stripelem_cache_put(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF, ibuf); return ibuf; } @@ -2132,9 +2035,7 @@ static int seq_must_swap_input_in_blend_mode(Sequence * seq) /* bad hack, to fix crazy input ordering of those two effects */ - if (seq->blend_mode == SEQ_ALPHAOVER || - seq->blend_mode == SEQ_ALPHAUNDER || - seq->blend_mode == SEQ_OVERDROP) { + if (ELEM3(seq->blend_mode, SEQ_ALPHAOVER, SEQ_ALPHAUNDER, SEQ_OVERDROP)) { swap_input = TRUE; } @@ -2147,15 +2048,15 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq) float facf = seq->blend_opacity / 100.0; int early_out = sh.early_out(seq, facf, facf); - if (early_out < 1) { + if (ELEM(early_out, EARLY_DO_EFFECT, EARLY_NO_INPUT)) { return early_out; } if (seq_must_swap_input_in_blend_mode(seq)) { - if (early_out == 2) { - return 1; - } else if (early_out == 1) { - return 2; + if (early_out == EARLY_USE_INPUT_2) { + return EARLY_USE_INPUT_1; + } else if (early_out == EARLY_USE_INPUT_1) { + return EARLY_USE_INPUT_2; } } return early_out; @@ -2168,13 +2069,12 @@ static ImBuf* seq_render_strip_stack( Sequence* seq_arr[MAXSEQ+1]; int count; int i; - ImBuf* out = 0; + ImBuf* out = NULL; - count = get_shown_sequences(seqbasep, cfra, chanshown, - (Sequence **)&seq_arr); + count = get_shown_sequences(seqbasep, cfra, chanshown, (Sequence **)&seq_arr); - if (!count) { - return 0; + if (count == 0) { + return NULL; } #if 0 /* commentind since this breaks keyframing, since it resets the value on draw */ @@ -2185,22 +2085,15 @@ static ImBuf* seq_render_strip_stack( } #endif - out = seq_stripelem_cache_get( - seq_arr[count - 1], - seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); + out = seq_stripelem_cache_get(seq_arr[count - 1], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); if (out) { return out; } if(count == 1) { - out = seq_render_strip(bmain, scene, seq_arr[0], - cfra, render_size, - seqrectx, seqrecty); - seq_stripelem_cache_put( - seq_arr[0], - seqrectx, seqrecty, cfra, - SEQ_STRIPELEM_IBUF_COMP, out); + out = seq_render_strip(bmain, scene, seq_arr[0], cfra, render_size, seqrectx, seqrecty); + seq_stripelem_cache_put(seq_arr[0], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP, out); return out; } @@ -2208,43 +2101,33 @@ static ImBuf* seq_render_strip_stack( for (i = count - 1; i >= 0; i--) { int early_out; - Sequence * seq = seq_arr[i]; + Sequence *seq = seq_arr[i]; - out = seq_stripelem_cache_get( - seq, - seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); + out = seq_stripelem_cache_get(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP); if (out) { break; } if (seq->blend_mode == SEQ_BLEND_REPLACE) { - out = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq, cfra, render_size, seqrectx, seqrecty); break; } early_out = seq_get_early_out_for_blend_mode(seq); switch (early_out) { - case -1: - case 2: - out = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + case EARLY_NO_INPUT: + case EARLY_USE_INPUT_2: + out = seq_render_strip(bmain, scene, seq, cfra, render_size, seqrectx, seqrecty); break; - case 1: + case EARLY_USE_INPUT_1: if (i == 0) { - out = IMB_allocImBuf( - (short)seqrectx, (short)seqrecty, - 32, IB_rect); + out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect); } break; - case 0: + case EARLY_DO_EFFECT: if (i == 0) { - out = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq, cfra, render_size, seqrectx, seqrecty); } break; @@ -2254,9 +2137,7 @@ static ImBuf* seq_render_strip_stack( } } - seq_stripelem_cache_put( - seq_arr[i], seqrectx, seqrecty, cfra, - SEQ_STRIPELEM_IBUF_COMP, out); + seq_stripelem_cache_put(seq_arr[i], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP, out); i++; @@ -2264,37 +2145,32 @@ static ImBuf* seq_render_strip_stack( for (; i < count; i++) { Sequence * seq = seq_arr[i]; - if (seq_get_early_out_for_blend_mode(seq) == 0) { + if (seq_get_early_out_for_blend_mode(seq) == EARLY_DO_EFFECT) { struct SeqEffectHandle sh = get_sequence_blend(seq); ImBuf * ibuf1 = out; - ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra, - render_size, - seqrectx, seqrecty); + ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra, render_size, + seqrectx, seqrecty); float facf = seq->blend_opacity / 100.0; - int swap_input - = seq_must_swap_input_in_blend_mode(seq); + int swap_input = seq_must_swap_input_in_blend_mode(seq); int x= seqrectx; int y= seqrecty; if (swap_input) { - out = sh.execute(bmain, scene, seq, cfra, - facf, facf, x, y, render_size, - ibuf2, ibuf1, 0); + out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y, + render_size, ibuf2, ibuf1, 0); } else { - out = sh.execute(bmain, scene, seq, cfra, - facf, facf, x, y, render_size, - ibuf1, ibuf2, 0); + out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y, + render_size, ibuf1, ibuf2, 0); } IMB_freeImBuf(ibuf1); IMB_freeImBuf(ibuf2); } - seq_stripelem_cache_put( - seq_arr[i], seqrectx, seqrecty, cfra, - SEQ_STRIPELEM_IBUF_COMP, out); + seq_stripelem_cache_put(seq_arr[i], seqrectx, seqrecty, cfra, + SEQ_STRIPELEM_IBUF_COMP, out); } return out; @@ -2321,8 +2197,8 @@ ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, seqbasep= ed->seqbasep; } - return seq_render_strip_stack( - bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty); + return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, + render_size, rectx, recty); } ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep) @@ -2543,8 +2419,7 @@ static void seq_stop_threads() } #endif -void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, - int render_size) +void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size) { PrefetchQueueElem *e; if (seq_thread_shutdown) { @@ -2730,8 +2605,7 @@ void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage, } } if(seq->type==SEQ_META) { - free_imbuf_seq(scene, &seq->seqbase, FALSE, - keep_file_handles); + free_imbuf_seq(scene, &seq->seqbase, FALSE, keep_file_handles); } if(seq->type==SEQ_SCENE) { /* FIXME: recurs downwards, @@ -2855,11 +2729,7 @@ void seq_tx_set_final_right(Sequence *seq, int val) since they work a bit differently to normal image seq's (during transform) */ int seq_single_check(Sequence *seq) { - if ( seq->len==1 && (seq->type == SEQ_IMAGE || seq->type == SEQ_COLOR - || seq->type == SEQ_MULTICAM)) - return 1; - else - return 0; + return (seq->len==1 && ELEM3(seq->type, SEQ_IMAGE, SEQ_COLOR, SEQ_MULTICAM)); } /* check if the selected seq's reference unselected seq's */ @@ -2881,17 +2751,20 @@ int seqbase_isolated_sel_check(ListBase *seqbase) /* test relationships */ for(seq= seqbase->first; seq; seq= seq->next) { + if((seq->type & SEQ_EFFECT)==0) + continue; + if(seq->flag & SELECT) { - if(seq->type & SEQ_EFFECT) { - if(seq->seq1 && (seq->seq1->flag & SELECT)==0) return FALSE; - if(seq->seq2 && (seq->seq2->flag & SELECT)==0) return FALSE; - if(seq->seq3 && (seq->seq3->flag & SELECT)==0) return FALSE; - } + if( (seq->seq1 && (seq->seq1->flag & SELECT)==0) || + (seq->seq2 && (seq->seq2->flag & SELECT)==0) || + (seq->seq3 && (seq->seq3->flag & SELECT)==0) ) + return FALSE; } - else if(seq->type & SEQ_EFFECT) { - if(seq->seq1 && (seq->seq1->flag & SELECT)) return FALSE; - if(seq->seq2 && (seq->seq2->flag & SELECT)) return FALSE; - if(seq->seq3 && (seq->seq3->flag & SELECT)) return FALSE; + else { + if( (seq->seq1 && (seq->seq1->flag & SELECT)) || + (seq->seq2 && (seq->seq2->flag & SELECT)) || + (seq->seq3 && (seq->seq3->flag & SELECT)) ) + return FALSE; } } @@ -2968,12 +2841,8 @@ int seq_tx_test(Sequence * seq) static int seq_overlap(Sequence *seq1, Sequence *seq2) { - if(seq1 != seq2) - if(seq1->machine==seq2->machine) - if(((seq1->enddisp <= seq2->startdisp) || (seq1->startdisp >= seq2->enddisp))==0) - return 1; - - return 0; + return (seq1 != seq2 && seq1->machine == seq2->machine && + ((seq1->enddisp <= seq2->startdisp) || (seq1->startdisp >= seq2->enddisp))==0); } int seq_test_overlap(ListBase * seqbasep, Sequence *test) @@ -3140,7 +3009,7 @@ static void seq_update_muting_recursive(Scene *scene, ListBase *seqbasep, Sequen seq_update_muting_recursive(scene, &seq->seqbase, metaseq, seqmute); } - else if((seq->type == SEQ_SOUND) || (seq->type == SEQ_SCENE)) { + else if(ELEM(seq->type, SEQ_SOUND, SEQ_SCENE)) { if(seq->scene_sound) { sound_mute_scene_sound(scene, seq->scene_sound, seqmute); } From b349f7c99d770673cfd27b3ce7de311db33d6b3f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Oct 2010 23:02:38 +0000 Subject: [PATCH 072/163] Minor speedups for 3D view text drawing ~10-15% improved frame-rate with particle display. - ascii text drawing functions, slightly faster since they dont have to do hash lookups & utf8 conversions for each char. - used ascii drawing functions for the view3d's number display. - each text item was using fixed 128 chars, now only allocate the string length needed. --- source/blender/blenfont/BLF_api.h | 6 +- source/blender/blenfont/intern/blf.c | 73 ++++++++++++++----- source/blender/blenfont/intern/blf_font.c | 63 +++++++++++++++- source/blender/blenfont/intern/blf_internal.h | 3 +- .../blenfont/intern/blf_internal_types.h | 3 + .../editors/space_view3d/drawanimviz.c | 7 +- .../blender/editors/space_view3d/drawobject.c | 64 ++++++++++------ .../editors/space_view3d/view3d_intern.h | 5 +- 8 files changed, 172 insertions(+), 52 deletions(-) diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h index 933d287bcff..c01886be65e 100644 --- a/source/blender/blenfont/BLF_api.h +++ b/source/blender/blenfont/BLF_api.h @@ -48,10 +48,12 @@ void BLF_position(int fontid, float x, float y, float z); void BLF_size(int fontid, int size, int dpi); /* Draw the string using the default font, size and dpi. */ -void BLF_draw_default(float x, float y, float z, char *str); +void BLF_draw_default(float x, float y, float z, const char *str); +void BLF_draw_default_ascii(float x, float y, float z, const char *str); /* Draw the string using the current font. */ -void BLF_draw(int fontid, char *str); +void BLF_draw(int fontid, const char *str); +void BLF_draw_ascii(int fontid, const char *str); /* * This function return the bounding box of the string diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c index f6b7c5f71e6..59189abf1e3 100644 --- a/source/blender/blenfont/intern/blf.c +++ b/source/blender/blenfont/intern/blf.c @@ -361,7 +361,7 @@ void BLF_blur(int fontid, int size) font->blur= size; } -void BLF_draw_default(float x, float y, float z, char *str) +void BLF_draw_default(float x, float y, float z, const char *str) { if (!str) return; @@ -378,6 +378,24 @@ void BLF_draw_default(float x, float y, float z, char *str) BLF_position(global_font_default, x, y, z); BLF_draw(global_font_default, str); } +/* same as above but call 'BLF_draw_ascii' */ +void BLF_draw_default_ascii(float x, float y, float z, const char *str) +{ + if (!str) + return; + + if (global_font_default == -1) + global_font_default= blf_search("default"); + + if (global_font_default == -1) { + printf("Warning: Can't found default font!!\n"); + return; + } + + BLF_size(global_font_default, global_font_points, global_font_dpi); + BLF_position(global_font_default, x, y, z); + BLF_draw_ascii(global_font_default, str); +} void BLF_rotation_default(float angle) { @@ -388,32 +406,49 @@ void BLF_rotation_default(float angle) font->angle= angle; } -void BLF_draw(int fontid, char *str) -{ - FontBLF *font; +static void blf_draw__start(FontBLF *font) +{ /* * The pixmap alignment hack is handle * in BLF_position (old ui_rasterpos_safe). */ - font= BLF_get(fontid); + + glEnable(GL_BLEND); + glEnable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glPushMatrix(); + glTranslatef(font->pos[0], font->pos[1], font->pos[2]); + glScalef(font->aspect, font->aspect, 1.0); + + if (font->flags & BLF_ROTATION) + glRotatef(font->angle, 0.0f, 0.0f, 1.0f); +} +static void blf_draw__end(void) +{ + glPopMatrix(); + glDisable(GL_BLEND); + glDisable(GL_TEXTURE_2D); +} + +void BLF_draw(int fontid, const char *str) +{ + FontBLF *font= BLF_get(fontid); if (font) { - glEnable(GL_BLEND); - glEnable(GL_TEXTURE_2D); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glPushMatrix(); - glTranslatef(font->pos[0], font->pos[1], font->pos[2]); - glScalef(font->aspect, font->aspect, 1.0); - - if (font->flags & BLF_ROTATION) - glRotatef(font->angle, 0.0f, 0.0f, 1.0f); - + blf_draw__start(font); blf_font_draw(font, str); + blf_draw__end(); + } +} - glPopMatrix(); - glDisable(GL_BLEND); - glDisable(GL_TEXTURE_2D); +void BLF_draw_ascii(int fontid, const char *str) +{ + FontBLF *font= BLF_get(fontid); + if (font) { + blf_draw__start(font); + blf_font_draw_ascii(font, str); + blf_draw__end(); } } diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index 04f40ac825b..9fb40f0206d 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -92,7 +92,7 @@ void blf_font_size(FontBLF *font, int size, int dpi) } } -void blf_font_draw(FontBLF *font, char *str) +void blf_font_draw(FontBLF *font, const char *str) { unsigned int c; GlyphBLF *g, *g_prev; @@ -146,6 +146,65 @@ void blf_font_draw(FontBLF *font, char *str) } } +/* faster version of blf_font_draw, ascii only for view dimensions */ +void blf_font_draw_ascii(FontBLF *font, const char *str) +{ + char c; + GlyphBLF *g, *g_prev; + FT_Vector delta; + FT_UInt glyph_index; + int pen_x, pen_y; + int i, has_kerning, st; + + if (!font->glyph_cache) + return; + + i= 0; + pen_x= 0; + pen_y= 0; + has_kerning= FT_HAS_KERNING(font->face); + g_prev= NULL; + + /* build ascii on demand */ + if(font->glyph_ascii_table['0']==NULL) { + for(i=0; i<256; i++) { + g= blf_glyph_search(font->glyph_cache, i); + if (!g) { + glyph_index= FT_Get_Char_Index(font->face, i); + g= blf_glyph_add(font, glyph_index, i); + } + font->glyph_ascii_table[i]= g; + } + } + + while ((c= *(str++))) { + g= font->glyph_ascii_table[c]; + + /* if we don't found a glyph, skip it. */ + if (!g) + continue; + + if (has_kerning && g_prev) { + delta.x= 0; + delta.y= 0; + + if (font->flags & BLF_KERNING_DEFAULT) + st= FT_Get_Kerning(font->face, g_prev->idx, g->idx, ft_kerning_default, &delta); + else + st= FT_Get_Kerning(font->face, g_prev->idx, g->idx, FT_KERNING_UNFITTED, &delta); + + if (st == 0) + pen_x += delta.x >> 6; + } + + /* do not return this loop if clipped, we want every character tested */ + blf_glyph_render(font, g, (float)pen_x, (float)pen_y); + + pen_x += g->advance; + g_prev= g; + } +} + void blf_font_buffer(FontBLF *font, char *str) { unsigned char *cbuf; @@ -460,6 +519,8 @@ static void blf_font_fill(FontBLF *font) font->b_col[1]= 0; font->b_col[2]= 0; font->b_col[3]= 0; + + memset(font->glyph_ascii_table, 0, sizeof(font->glyph_ascii_table)); } FontBLF *blf_font_new(char *name, char *filename) diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h index 844a7a3c3de..c7a3cd54740 100644 --- a/source/blender/blenfont/intern/blf_internal.h +++ b/source/blender/blenfont/intern/blf_internal.h @@ -44,7 +44,8 @@ FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size); void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size); void blf_font_size(FontBLF *font, int size, int dpi); -void blf_font_draw(FontBLF *font, char *str); +void blf_font_draw(FontBLF *font, const char *str); +void blf_font_draw_ascii(FontBLF *font, const char *str); void blf_font_buffer(FontBLF *font, char *str); void blf_font_boundbox(FontBLF *font, char *str, rctf *box); void blf_font_width_and_height(FontBLF *font, char *str, float *width, float *height); diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h index 368eb8751de..70318c51823 100644 --- a/source/blender/blenfont/intern/blf_internal_types.h +++ b/source/blender/blenfont/intern/blf_internal_types.h @@ -177,6 +177,9 @@ typedef struct FontBLF { /* current glyph cache, size and dpi. */ GlyphCacheBLF *glyph_cache; + + /* fast ascii lookip */ + GlyphBLF *glyph_ascii_table[256]; /* freetype2 face. */ FT_Face face; diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index 52bb90aa8f0..7035006ea70 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -31,6 +31,7 @@ #include #include +#include "BLO_sys_types.h" #include "DNA_anim_types.h" #include "DNA_armature_types.h" @@ -213,7 +214,7 @@ void draw_motion_path_instance(Scene *scene, if (i == 0) { sprintf(str, "%d", (i+sfra)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } else if ((i > stepsize) && (i < len-stepsize)) { bMotionPathVert *mpvP = (mpv - stepsize); @@ -222,7 +223,7 @@ void draw_motion_path_instance(Scene *scene, if ((equals_v3v3(mpv->co, mpvP->co)==0) || (equals_v3v3(mpv->co, mpvN->co)==0)) { sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -280,7 +281,7 @@ void draw_motion_path_instance(Scene *scene, sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d2285371667..8b9e960cdb3 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -558,10 +558,10 @@ static int CachedTextLevel= 0; typedef struct ViewCachedString { struct ViewCachedString *next, *prev; float vec[3], col[4]; - char str[128]; short mval[2]; short xoffs; short flag; + /* str is allocated past the end */ } ViewCachedString; void view3d_cached_text_draw_begin() @@ -573,15 +573,18 @@ void view3d_cached_text_draw_begin() void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag) { + int alloc_len= strlen(str) + 1; ListBase *strings= &CachedText[CachedTextLevel-1]; - ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString), "ViewCachedString"); + ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString) + alloc_len, "ViewCachedString"); BLI_addtail(strings, vos); - BLI_strncpy(vos->str, str, 128); copy_v3_v3(vos->vec, co); glGetFloatv(GL_CURRENT_COLOR, vos->col); vos->xoffs= xoffs; vos->flag= flag; + + /* allocate past the end */ + memcpy(++vos, str, alloc_len); } void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]) @@ -635,8 +638,14 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa } #endif if(vos->mval[0]!=IS_CLIPPED) { + const char *str= (char *)(vos+1); glColor3fv(vos->col); - BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, vos->str); + if(vos->flag & V3D_CACHE_TEXT_ASCII) { + BLF_draw_default_ascii((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + } + else { + BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + } } } @@ -1809,8 +1818,9 @@ static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int i static void draw_dm_edges_sel_interp(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol) { - unsigned char *cols[2] = {baseCol, selCol}; - + unsigned char *cols[2]; + cols[0]= baseCol; + cols[1]= selCol; dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols); } @@ -2113,7 +2123,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, len_v3v3(v1, v2)); - view3d_cached_text_draw_add(vmid, val, 0, 0); + view3d_cached_text_draw_add(vmid, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -2152,7 +2162,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, area); - view3d_cached_text_draw_add(efa->cent, val, 0, 0); + view3d_cached_text_draw_add(efa->cent, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -2194,13 +2204,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E /* Vec 1 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2))); interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) { /* Vec 2 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3))); interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) { /* Vec 3 */ @@ -2209,14 +2219,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } /* Vec 4 */ if(efa->v4) { if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) { sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -3827,16 +3837,24 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv char *val_pos= val; val[0]= '\0'; - if(part->draw&PART_DRAW_NUM) - val_pos += sprintf(val, "%i", a); - - if((part->draw & PART_DRAW_HEALTH) && a < totpart && part->phystype==PART_PHYS_BOIDS) - sprintf(val_pos, (val_pos==val) ? "%.2f" : ":%.2f", pa_health); + if(part->draw&PART_DRAW_NUM) { + if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) { + sprintf(val_pos, "%d:%.2f", a, pa_health); + } + else { + sprintf(val_pos, "%d", a); + } + } + else { + if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) { + sprintf(val_pos, "%.2f", pa_health); + } + } /* in path drawing state.co is the end point */ /* use worldspace beause object matrix is already applied */ mul_v3_m4v3(vec_txt, ob->imat, state.co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -3925,12 +3943,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv for(a=0, pa=psys->particles; aimat, cache[a]->co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -5513,11 +5529,11 @@ void drawRBpivot(bRigidBodyJointConstraint *data) glVertex3fv(v); glEnd(); if (axis==0) - view3d_cached_text_draw_add(v, "px", 0, 0); + view3d_cached_text_draw_add(v, "px", 0, V3D_CACHE_TEXT_ASCII); else if (axis==1) - view3d_cached_text_draw_add(v, "py", 0, 0); + view3d_cached_text_draw_add(v, "py", 0, V3D_CACHE_TEXT_ASCII); else - view3d_cached_text_draw_add(v, "pz", 0, 0); + view3d_cached_text_draw_add(v, "pz", 0, V3D_CACHE_TEXT_ASCII); } glLineWidth (1.0f); setlinestyle(0); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 0d8b97a66ed..92167f0f45e 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -115,8 +115,9 @@ void drawaxes(float size, char drawtype); void view3d_cached_text_draw_begin(void); void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag); void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]); -#define V3D_CACHE_TEXT_ZBUF 1 -#define V3D_CACHE_TEXT_WORLDSPACE 2 +#define V3D_CACHE_TEXT_ZBUF (1<<0) +#define V3D_CACHE_TEXT_WORLDSPACE (1<<1) +#define V3D_CACHE_TEXT_ASCII (1<<2) /* drawarmature.c */ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag); From 7f5abb7fe2681d8f72d1d29c6567077b70351112 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 00:56:46 +0000 Subject: [PATCH 073/163] dont build blender/kernel if the game engines disabled. --- source/CMakeLists.txt | 2 +- source/SConscript | 7 +++--- source/blender/windowmanager/CMakeLists.txt | 4 ++++ .../windowmanager/intern/wm_init_exit.c | 6 +++-- source/creator/CMakeLists.txt | 4 ++++ source/creator/creator.c | 24 +++++++++++++++++-- 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 1f1b1d883bc..a043dbad3b8 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -25,9 +25,9 @@ # ***** END GPL LICENSE BLOCK ***** ADD_SUBDIRECTORY(blender) -ADD_SUBDIRECTORY(kernel) IF(WITH_GAMEENGINE) + ADD_SUBDIRECTORY(kernel) ADD_SUBDIRECTORY(gameengine) ENDIF(WITH_GAMEENGINE) diff --git a/source/SConscript b/source/SConscript index c452f21b8e2..8d08d9cca08 100644 --- a/source/SConscript +++ b/source/SConscript @@ -1,11 +1,10 @@ #!/usr/bin/python Import ('env') -SConscript(['blender/SConscript', - 'kernel/SConscript', - 'creator/SConscript']) +SConscript(['blender/SConscript', 'creator/SConscript']) + if env['WITH_BF_GAMEENGINE']: - SConscript (['gameengine/SConscript']) + SConscript (['kernel/SConscript', 'gameengine/SConscript']) if env['WITH_BF_PLAYER']: SConscript (['blenderplayer/bad_level_call_stubs/SConscript']) diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt index c39897af68a..efdcd47ea72 100644 --- a/source/blender/windowmanager/CMakeLists.txt +++ b/source/blender/windowmanager/CMakeLists.txt @@ -90,6 +90,10 @@ ELSE(WITH_PYTHON) ADD_DEFINITIONS(-DDISABLE_PYTHON) ENDIF(WITH_PYTHON) +IF(WITH_GAMEENGINE) + ADD_DEFINITIONS(-DGAMEBLENDER) +ENDIF(WITH_GAMEENGINE) + IF(WIN32) LIST(APPEND INC ${PTHREADS_INC}) ENDIF(WIN32) diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index e373579577d..b9736009d32 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -65,7 +65,9 @@ #include "BPY_extern.h" #endif +#if GAMEBLENDER == 1 #include "SYS_System.h" +#endif #include "RNA_define.h" @@ -432,9 +434,9 @@ void WM_exit(bContext *C) wm_ghost_exit(); CTX_free(C); - +#if GAMEBLENDER == 1 SYS_DeleteSystem(SYS_GetSystem()); - +#endif if(MEM_get_memory_blocks_in_use()!=0) { printf("Error Totblock: %d\n", MEM_get_memory_blocks_in_use()); MEM_printmemlist(); diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 6d43e13718f..c32329e20ff 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -78,6 +78,10 @@ ELSE(WITH_PYTHON) ADD_DEFINITIONS(-DDISABLE_PYTHON) ENDIF(WITH_PYTHON) +IF(WITH_GAMEENGINE) + ADD_DEFINITIONS(-DGAMEBLENDER) +ENDIF(WITH_GAMEENGINE) + IF(NOT WITH_SDL) ADD_DEFINITIONS(-DDISABLE_SDL) ENDIF(NOT WITH_SDL) diff --git a/source/creator/creator.c b/source/creator/creator.c index 25f01ea0bea..7e53ad5d648 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -97,7 +97,11 @@ #include "GPU_extensions.h" /* for passing information between creator and gameengine */ +#if GAMEBLENDER == 1 #include "SYS_System.h" +#else /* dummy */ +#define SYS_SystemHandle int +#endif #include @@ -444,6 +448,9 @@ static int register_extension(int UNUSED(argc), char **UNUSED(argv), void *data) static int no_joystick(int UNUSED(argc), char **UNUSED(argv), void *data) { +#if GAMEBLENDER != 1 + (void)data; +#else SYS_SystemHandle *syshandle = data; /** @@ -452,6 +459,7 @@ static int no_joystick(int UNUSED(argc), char **UNUSED(argv), void *data) */ SYS_WriteCommandLineInt(*syshandle, "nojoystick",1); if (G.f & G_DEBUG) printf("disabling nojoystick\n"); +#endif return 0; } @@ -633,8 +641,13 @@ static int set_extension(int argc, char **argv, void *data) static int set_ge_parameters(int argc, char **argv, void *data) { - SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data; int a = 0; +#if GAMEBLENDER == 1 + SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data; +#else + (void)data; +#endif + /** gameengine parameters are automaticly put into system -g [paramname = value] @@ -655,7 +668,9 @@ example: { a++; /* assignment */ +#if GAMEBLENDER == 1 SYS_WriteCommandLineString(syshandle,paramname,argv[a]); +#endif } else { printf("error: argument assignment (%s) without value.\n",paramname); @@ -664,8 +679,9 @@ example: /* name arg eaten */ } else { +#if GAMEBLENDER == 1 SYS_WriteCommandLineInt(syshandle,argv[a],1); - +#endif /* doMipMap */ if (!strcmp(argv[a],"nomipmap")) { @@ -1077,8 +1093,12 @@ int main(int argc, char **argv) IMB_init(); +#if GAMEBLENDER == 1 syshandle = SYS_GetSystem(); GEN_init_messaging_system(); +#else + syshandle= 0; +#endif /* first test for background */ ba = BLI_argsInit(argc, argv); /* skip binary path */ From bae43df4ec359fb08a9ae45feb44eb5d24a4e5f8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 01:04:31 +0000 Subject: [PATCH 074/163] building the BGE without bullet works again. --- source/creator/CMakeLists.txt | 4 ++-- source/gameengine/Converter/BL_BlenderDataConversion.cpp | 3 ++- source/gameengine/Ketsji/KX_Scene.cpp | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index c32329e20ff..dd218e474a4 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -538,13 +538,13 @@ ENDIF(WITH_MOD_FLUID) bf_intern_ctr bf_blroutines bf_converter - bf_dummy + bf_dummy bf_bullet bf_intern_smoke extern_minilzo extern_lzma - bf_common bf_ketsji + bf_common bf_logic bf_rasterizer bf_oglrasterizer diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 69483aed1ec..715e5e33e75 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -1740,8 +1740,9 @@ static KX_GameObject *gameobject_from_blenderobject( bool bHasDvert = mesh->dvert != NULL && ob->defbase.first; bool bHasArmature = (BL_ModifierDeformer::HasArmatureDeformer(ob) && ob->parent && ob->parent->type == OB_ARMATURE && bHasDvert); bool bHasModifier = BL_ModifierDeformer::HasCompatibleDeformer(ob); +#ifdef USE_BULLET bool bHasSoftBody = (!ob->parent && (ob->gameflag & OB_SOFT_BODY)); - +#endif if (bHasModifier) { BL_ModifierDeformer *dcont = new BL_ModifierDeformer((BL_DeformableGameObject *)gameobj, kxscene->GetBlenderScene(), ob, meshobj); diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index 3d7fcb25f2b..3753f3d6bd6 100644 --- a/source/gameengine/Ketsji/KX_Scene.cpp +++ b/source/gameengine/Ketsji/KX_Scene.cpp @@ -1073,8 +1073,9 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj, bool use_gfx, bool u blendobj->parent && // original object had armature (not sure this test is needed) blendobj->parent->type == OB_ARMATURE && blendmesh->dvert!=NULL; // mesh has vertex group +#ifdef USE_BULLET bool bHasSoftBody = (!parentobj && (blendobj->gameflag & OB_SOFT_BODY)); - +#endif bool releaseParent = true; From 73f21f20b789ed1474274b0d27778eede4108569 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sun, 31 Oct 2010 01:18:26 +0000 Subject: [PATCH 075/163] Lock to Cursor Patch by Dan Eicher. In 3dview properties you can enable this. Rotating view then uses cursor as pivot point. Note that with this option enabled just relocating the 3d cursor also changes the 3dview. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sebastian König: "Now the 3d cursor is actually useful" (sitting next to me while applying patch at bconf hostel) --- release/scripts/ui/space_view3d.py | 2 ++ source/blender/editors/space_view3d/view3d_view.c | 5 +++++ source/blender/makesdna/DNA_view3d_types.h | 2 +- source/blender/makesrna/intern/rna_space.c | 5 +++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py index f7238364142..2cc05cb5e2d 100644 --- a/release/scripts/ui/space_view3d.py +++ b/release/scripts/ui/space_view3d.py @@ -1951,6 +1951,8 @@ class VIEW3D_PT_view3d_properties(bpy.types.Panel): col.prop(view, "lock_object", text="") if view.lock_object and view.lock_object.type == 'ARMATURE': col.prop_search(view, "lock_bone", view.lock_object.data, "bones", text="") + elif not view.lock_object: + col.prop(view, "lock_cursor", text="Lock to Cursor") col = layout.column(align=True) col.label(text="Clip:") diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 6cbce905f33..f876e420d89 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1205,6 +1205,11 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) } translate_m4( rv3d->viewmat,-vec[0], -vec[1], -vec[2]); } + else if (v3d->ob_centre_cursor) { + float vec[3]; + copy_v3_v3(vec, give_cursor(scene, v3d)); + translate_m4(rv3d->viewmat, -vec[0], -vec[1], -vec[2]); + } else translate_m4( rv3d->viewmat,rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); } } diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 9de5ad198a6..307e111abe6 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -160,7 +160,7 @@ typedef struct View3D { * The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID, * OB_SHADED or OB_TEXTURE */ short drawtype; - short pad2; + short ob_centre_cursor; /* optional bool for 3d cursor to define center */ short scenelock, around, pad3; short flag, flag2; diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 70ccd4f8a6e..8d807d0cc8c 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1016,6 +1016,11 @@ static void rna_def_space_view3d(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to this bone's position"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); + prop= RNA_def_property(srna, "lock_cursor", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "ob_centre_cursor", 1); + RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to the cursor's position"); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); + prop= RNA_def_property(srna, "viewport_shade", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "drawtype"); RNA_def_property_enum_items(prop, viewport_shade_items); From 50dab4fc37d33352c2f1c6181da9d54799e36a12 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 03:20:33 +0000 Subject: [PATCH 076/163] rename definition for enabling the game engine GAMEBLENDER==1 --> WITH_GAMEENGINE --- build_files/make/nan_compile.mk | 2 +- source/blender/editors/space_logic/CMakeLists.txt | 2 +- source/blender/editors/space_logic/SConscript | 2 +- source/blender/editors/space_script/space_script.c | 2 ++ source/blender/editors/space_view3d/CMakeLists.txt | 2 +- source/blender/editors/space_view3d/SConscript | 2 +- source/blender/editors/space_view3d/view3d_view.c | 8 ++++---- source/blender/makesrna/SConscript | 2 +- source/blender/makesrna/intern/CMakeLists.txt | 2 +- source/blender/makesrna/intern/SConscript | 2 +- source/blender/makesrna/intern/rna_render.c | 4 ++-- source/blender/windowmanager/CMakeLists.txt | 2 +- source/blender/windowmanager/intern/wm_init_exit.c | 4 ++-- .../bad_level_call_stubs/CMakeLists.txt | 2 +- source/blenderplayer/bad_level_call_stubs/SConscript | 2 +- source/blenderplayer/bad_level_call_stubs/stubs.c | 4 ++-- source/creator/CMakeLists.txt | 2 +- source/creator/creator.c | 12 ++++++------ 18 files changed, 30 insertions(+), 28 deletions(-) diff --git a/build_files/make/nan_compile.mk b/build_files/make/nan_compile.mk index 4107bb1820d..a6d157d99c6 100644 --- a/build_files/make/nan_compile.mk +++ b/build_files/make/nan_compile.mk @@ -38,7 +38,7 @@ CPPFLAGS ?= $(NAN_CPPFLAGS) # Uncomment next lines to enable integrated game engine ifneq ($(NAN_NO_KETSJI), true) - CFLAGS += -DGAMEBLENDER=1 + CFLAGS += -DWITH_GAMEENGINE ifeq ($(NAN_USE_BULLET), true) CFLAGS += -DUSE_BULLET CCFLAGS += -DUSE_BULLET diff --git a/source/blender/editors/space_logic/CMakeLists.txt b/source/blender/editors/space_logic/CMakeLists.txt index 64519d606f1..7716e45167f 100644 --- a/source/blender/editors/space_logic/CMakeLists.txt +++ b/source/blender/editors/space_logic/CMakeLists.txt @@ -38,7 +38,7 @@ SET(SRC ) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) BLENDERLIB(bf_editor_space_logic "${SRC}" "${INC}") diff --git a/source/blender/editors/space_logic/SConscript b/source/blender/editors/space_logic/SConscript index 0ce2eee575e..4d02363ff90 100644 --- a/source/blender/editors/space_logic/SConscript +++ b/source/blender/editors/space_logic/SConscript @@ -10,6 +10,6 @@ incs += ' ../../makesrna ../interface' defs = [] if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') env.BlenderLib ( 'bf_editors_space_game', sources, Split(incs), defs, libtype=['core'], priority=[120] ) diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c index 66f630bb5b3..2036b0f730a 100644 --- a/source/blender/editors/space_script/space_script.c +++ b/source/blender/editors/space_script/space_script.c @@ -155,6 +155,8 @@ static void script_main_area_draw(const bContext *C, ARegion *ar) //BPY_run_python_script_space(scpt->script.filename, NULL); BPY_run_script_space_draw(C, sscript); } +#else + (void)sscript; #endif /* reset view matrix */ diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index fb086013798..e9ed8335061 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -55,7 +55,7 @@ SET(SRC IF(WITH_GAMEENGINE) LIST(APPEND INC ../../../kernel/gen_system) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WIN32) diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index d9074113ba9..bb32f8b926e 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -12,7 +12,7 @@ incs += ' #/intern/smoke/extern' incs += ' #source/kernel/gen_system' if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index f876e420d89..089658c6953 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -56,7 +56,7 @@ #include "ED_screen.h" #include "ED_armature.h" -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE #include "SYS_System.h" #endif @@ -1609,7 +1609,7 @@ void VIEW3D_OT_localview(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; } -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE static ListBase queue_back; static void SaveState(bContext *C) @@ -1701,7 +1701,7 @@ void game_set_commmandline_options(GameData *gm) /* maybe we need this defined somewhere else */ extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_frame, int always_use_expand_framing); -#endif // GAMEBLENDER == 1 +#endif // WITH_GAMEENGINE int game_engine_poll(bContext *C) { @@ -1753,7 +1753,7 @@ int ED_view3d_context_activate(bContext *C) static int game_engine_exec(bContext *C, wmOperator *op) { -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE Scene *startscene = CTX_data_scene(C); ScrArea *sa, *prevsa= CTX_wm_area(C); ARegion *ar, *prevar= CTX_wm_region(C); diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript index 674aeb264c3..68a292d8386 100644 --- a/source/blender/makesrna/SConscript +++ b/source/blender/makesrna/SConscript @@ -46,7 +46,7 @@ if env['WITH_BF_LCMS']: incs += ' ' + env['BF_LCMS_INC'] if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') if env['BF_UNIT_TEST']: defs.append('UNIT_TEST') diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index ed84e4a50a9..6ca5203d249 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -74,7 +74,7 @@ IF(WIN32) ENDIF(WIN32) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAME_ENGINE) ENDIF(WITH_GAMEENGINE) IF(WITH_IMAGE_OPENEXR) diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index 702955980fd..b37cfd5c38b 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -68,7 +68,7 @@ if env['WITH_BF_LCMS']: defs.append('WITH_LCMS') if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') if env['WITH_BF_FFTW3']: defs.append('FFTW3=1') diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index e6b86ae8766..ae965b237cd 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -47,7 +47,7 @@ static RenderEngineType internal_render_type = { NULL, NULL, "BLENDER_RENDER", "Blender Render", RE_INTERNAL, NULL, {NULL, NULL, NULL, NULL}}; -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE static RenderEngineType internal_game_type = { NULL, NULL, "BLENDER_GAME", "Blender Game", RE_INTERNAL|RE_GAME, NULL, {NULL, NULL, NULL, NULL}}; #endif @@ -57,7 +57,7 @@ ListBase R_engines = {NULL, NULL}; void RE_engines_init() { BLI_addtail(&R_engines, &internal_render_type); -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE BLI_addtail(&R_engines, &internal_game_type); #endif } diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt index efdcd47ea72..fa3a196d9c5 100644 --- a/source/blender/windowmanager/CMakeLists.txt +++ b/source/blender/windowmanager/CMakeLists.txt @@ -91,7 +91,7 @@ ELSE(WITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WIN32) diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index b9736009d32..b8e6cf5424d 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -65,7 +65,7 @@ #include "BPY_extern.h" #endif -#if GAMEBLENDER == 1 +#ifdef WITH_GAME_ENGINE #include "SYS_System.h" #endif @@ -434,7 +434,7 @@ void WM_exit(bContext *C) wm_ghost_exit(); CTX_free(C); -#if GAMEBLENDER == 1 +#ifdef WITH_GAME_ENGINE SYS_DeleteSystem(SYS_GetSystem()); #endif if(MEM_get_memory_blocks_in_use()!=0) { diff --git a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt index a242c8b7551..28510b0a113 100644 --- a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt +++ b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt @@ -48,7 +48,7 @@ IF(WITH_BUILDINFO) ENDIF(WITH_BUILDINFO) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WITH_INTERNATIONAL) diff --git a/source/blenderplayer/bad_level_call_stubs/SConscript b/source/blenderplayer/bad_level_call_stubs/SConscript index 5d71f83719f..0217f1aeacc 100644 --- a/source/blenderplayer/bad_level_call_stubs/SConscript +++ b/source/blenderplayer/bad_level_call_stubs/SConscript @@ -12,6 +12,6 @@ if env['WITH_BF_INTERNATIONAL']: defs += 'WITH_FREETYPE2' if env['WITH_BF_GAMEENGINE']: - defs += ' GAMEBLENDER=1' + defs += ' WITH_GAMEENGINE' env.BlenderLib ('blenkernel_blc', sources = Split(sources), includes=Split(incs), defines=Split(defs), libtype=['player'],priority=[220] ) diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index f2970293b05..7bef93cc4d8 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -28,7 +28,7 @@ * BKE_bad_level_calls function stubs */ -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE #include #include "DNA_listBase.h" #include "RNA_types.h" @@ -443,4 +443,4 @@ int CSG_PerformBooleanOperation( CSG_VertexIteratorDescriptor obBVertices) { return 0;} -#endif // GAMEBLENDER == 1 +#endif // WITH_GAMEENGINE diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index dd218e474a4..c8885cbba11 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -79,7 +79,7 @@ ELSE(WITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(NOT WITH_SDL) diff --git a/source/creator/creator.c b/source/creator/creator.c index 7e53ad5d648..0d7a31340ed 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -97,7 +97,7 @@ #include "GPU_extensions.h" /* for passing information between creator and gameengine */ -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE #include "SYS_System.h" #else /* dummy */ #define SYS_SystemHandle int @@ -448,7 +448,7 @@ static int register_extension(int UNUSED(argc), char **UNUSED(argv), void *data) static int no_joystick(int UNUSED(argc), char **UNUSED(argv), void *data) { -#if GAMEBLENDER != 1 +#ifndef WITH_GAMEENGINE (void)data; #else SYS_SystemHandle *syshandle = data; @@ -642,7 +642,7 @@ static int set_extension(int argc, char **argv, void *data) static int set_ge_parameters(int argc, char **argv, void *data) { int a = 0; -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data; #else (void)data; @@ -668,7 +668,7 @@ example: { a++; /* assignment */ -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE SYS_WriteCommandLineString(syshandle,paramname,argv[a]); #endif } else @@ -679,7 +679,7 @@ example: /* name arg eaten */ } else { -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE SYS_WriteCommandLineInt(syshandle,argv[a],1); #endif /* doMipMap */ @@ -1093,7 +1093,7 @@ int main(int argc, char **argv) IMB_init(); -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE syshandle = SYS_GetSystem(); GEN_init_messaging_system(); #else From 0876fce0094ad3e37be4b197ef8850757eacd37b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 04:11:39 +0000 Subject: [PATCH 077/163] rename and negate DISABLE_PYTHON --> WITH_PYTHON --- build_files/make/nan_compile.mk | 2 ++ intern/audaspace/CMakeLists.txt | 3 +- intern/audaspace/SConscript | 3 +- intern/audaspace/intern/AUD_C-API.cpp | 8 ++--- intern/audaspace/intern/AUD_PyInit.h | 2 +- release/scripts/ui/space_text.py | 2 +- source/blender/blenkernel/CMakeLists.txt | 3 +- source/blender/blenkernel/SConscript | 5 ++- source/blender/blenkernel/intern/constraint.c | 10 +++--- source/blender/blenkernel/intern/context.c | 4 +-- source/blender/blenkernel/intern/exotic.c | 6 ++-- source/blender/blenkernel/intern/fcurve.c | 12 +++---- source/blender/blenkernel/intern/fmodifier.c | 4 +-- source/blender/blenkernel/intern/node.c | 2 +- source/blender/blenkernel/intern/object.c | 2 +- source/blender/blenkernel/intern/script.c | 2 +- source/blender/blenkernel/intern/text.c | 6 ++-- .../blender/editors/interface/CMakeLists.txt | 6 ++-- source/blender/editors/interface/SConscript | 4 +-- source/blender/editors/interface/interface.c | 4 +-- source/blender/editors/mesh/editface.c | 2 +- source/blender/editors/object/CMakeLists.txt | 6 ++-- source/blender/editors/object/SConscript | 4 +-- .../editors/object/object_constraint.c | 10 +++--- .../editors/space_console/CMakeLists.txt | 6 ++-- .../blender/editors/space_console/SConscript | 4 +-- .../editors/space_console/space_console.c | 2 +- .../editors/space_script/CMakeLists.txt | 3 +- .../blender/editors/space_script/SConscript | 4 +-- .../editors/space_script/script_edit.c | 6 ++-- .../editors/space_script/space_script.c | 6 ++-- .../blender/editors/space_text/CMakeLists.txt | 3 +- source/blender/editors/space_text/SConscript | 4 +-- .../blender/editors/space_text/text_header.c | 2 +- source/blender/editors/space_text/text_ops.c | 8 ++--- .../blender/editors/space_text/text_python.c | 2 +- source/blender/editors/util/undo.c | 2 +- source/blender/makesrna/SConscript | 4 +-- source/blender/makesrna/intern/CMakeLists.txt | 8 ++--- source/blender/makesrna/intern/SConscript | 4 +-- source/blender/makesrna/intern/rna_wm.c | 8 ++--- source/blender/nodes/CMakeLists.txt | 3 +- source/blender/nodes/SConscript | 3 +- .../nodes/intern/SHD_nodes/SHD_dynamic.c | 32 +++++++++---------- source/blender/windowmanager/CMakeLists.txt | 3 +- source/blender/windowmanager/SConscript | 4 +-- source/blender/windowmanager/intern/wm.c | 4 +-- .../blender/windowmanager/intern/wm_files.c | 6 ++-- .../windowmanager/intern/wm_init_exit.c | 10 +++--- source/creator/CMakeLists.txt | 3 +- source/creator/SConscript | 3 +- source/creator/creator.c | 18 +++++------ .../BlenderRoutines/BL_KetsjiEmbedStart.cpp | 20 ++++++------ .../gameengine/BlenderRoutines/CMakeLists.txt | 3 +- source/gameengine/BlenderRoutines/SConscript | 3 +- .../Converter/BL_ActionActuator.cpp | 4 +-- .../gameengine/Converter/BL_ActionActuator.h | 4 +-- .../Converter/BL_ArmatureActuator.cpp | 4 +-- .../Converter/BL_ArmatureActuator.h | 4 +-- .../Converter/BL_ArmatureChannel.cpp | 8 ++--- .../gameengine/Converter/BL_ArmatureChannel.h | 6 ++-- .../Converter/BL_ArmatureConstraint.cpp | 8 ++--- .../Converter/BL_ArmatureConstraint.h | 4 +-- .../Converter/BL_ArmatureObject.cpp | 4 +-- .../gameengine/Converter/BL_ArmatureObject.h | 4 +-- .../Converter/BL_ShapeActionActuator.cpp | 4 +-- .../Converter/BL_ShapeActionActuator.h | 4 +-- source/gameengine/Converter/CMakeLists.txt | 3 +- .../Converter/KX_BlenderSceneConverter.cpp | 2 +- .../Converter/KX_BlenderSceneConverter.h | 2 +- .../Converter/KX_ConvertControllers.cpp | 8 ++--- .../Converter/KX_ConvertProperties.cpp | 4 +-- source/gameengine/Converter/SConscript | 3 +- source/gameengine/Expressions/BoolValue.cpp | 4 +-- source/gameengine/Expressions/BoolValue.h | 2 +- source/gameengine/Expressions/CMakeLists.txt | 3 +- source/gameengine/Expressions/FloatValue.cpp | 4 +-- source/gameengine/Expressions/FloatValue.h | 2 +- source/gameengine/Expressions/IntValue.cpp | 4 +-- source/gameengine/Expressions/IntValue.h | 2 +- source/gameengine/Expressions/KX_Python.h | 2 +- source/gameengine/Expressions/ListValue.cpp | 4 +-- source/gameengine/Expressions/ListValue.h | 2 +- .../gameengine/Expressions/PyObjectPlus.cpp | 12 +++---- source/gameengine/Expressions/PyObjectPlus.h | 8 ++--- source/gameengine/Expressions/SConscript | 3 +- source/gameengine/Expressions/StringValue.h | 4 +-- source/gameengine/Expressions/Value.cpp | 8 ++--- source/gameengine/Expressions/Value.h | 6 ++-- source/gameengine/GameLogic/CMakeLists.txt | 3 +- .../GameLogic/SCA_2DFilterActuator.cpp | 2 +- .../GameLogic/SCA_ANDController.cpp | 4 +-- .../GameLogic/SCA_ActuatorSensor.cpp | 4 +-- .../gameengine/GameLogic/SCA_ActuatorSensor.h | 4 +-- .../gameengine/GameLogic/SCA_AlwaysSensor.cpp | 2 +- .../gameengine/GameLogic/SCA_DelaySensor.cpp | 4 +-- .../gameengine/GameLogic/SCA_IController.cpp | 4 +-- source/gameengine/GameLogic/SCA_IController.h | 4 +-- .../gameengine/GameLogic/SCA_ILogicBrick.cpp | 4 +-- source/gameengine/GameLogic/SCA_ILogicBrick.h | 4 +-- source/gameengine/GameLogic/SCA_IObject.cpp | 4 +-- source/gameengine/GameLogic/SCA_IObject.h | 2 +- source/gameengine/GameLogic/SCA_ISensor.cpp | 4 +-- source/gameengine/GameLogic/SCA_ISensor.h | 4 +-- .../GameLogic/SCA_JoystickSensor.cpp | 2 +- .../gameengine/GameLogic/SCA_JoystickSensor.h | 4 +-- .../GameLogic/SCA_KeyboardSensor.cpp | 4 +-- .../gameengine/GameLogic/SCA_KeyboardSensor.h | 2 +- .../gameengine/GameLogic/SCA_LogicManager.cpp | 2 +- .../gameengine/GameLogic/SCA_MouseSensor.cpp | 4 +-- source/gameengine/GameLogic/SCA_MouseSensor.h | 2 +- .../GameLogic/SCA_NANDController.cpp | 2 +- .../GameLogic/SCA_NORController.cpp | 4 +-- .../gameengine/GameLogic/SCA_ORController.cpp | 4 +-- .../GameLogic/SCA_PropertyActuator.cpp | 2 +- .../GameLogic/SCA_PropertySensor.cpp | 4 +-- .../gameengine/GameLogic/SCA_PropertySensor.h | 2 +- .../GameLogic/SCA_PythonController.cpp | 20 ++++++------ .../GameLogic/SCA_PythonController.h | 8 ++--- .../GameLogic/SCA_PythonKeyboard.cpp | 6 ++-- .../gameengine/GameLogic/SCA_PythonKeyboard.h | 4 +-- .../gameengine/GameLogic/SCA_PythonMouse.cpp | 6 ++-- source/gameengine/GameLogic/SCA_PythonMouse.h | 4 +-- .../GameLogic/SCA_RandomActuator.cpp | 2 +- .../gameengine/GameLogic/SCA_RandomActuator.h | 4 +-- .../gameengine/GameLogic/SCA_RandomSensor.cpp | 4 +-- .../gameengine/GameLogic/SCA_RandomSensor.h | 2 +- .../GameLogic/SCA_XNORController.cpp | 4 +-- .../GameLogic/SCA_XORController.cpp | 4 +-- source/gameengine/GameLogic/SConscript | 3 +- .../gameengine/GamePlayer/common/SConscript | 3 +- .../GamePlayer/ghost/GPG_Application.cpp | 4 +-- source/gameengine/GamePlayer/ghost/SConscript | 3 +- source/gameengine/Ketsji/BL_Shader.cpp | 4 +-- source/gameengine/Ketsji/BL_Shader.h | 2 +- source/gameengine/Ketsji/CMakeLists.txt | 3 +- .../Ketsji/KXNetwork/CMakeLists.txt | 3 +- .../KXNetwork/KX_NetworkMessageActuator.cpp | 4 +-- .../KXNetwork/KX_NetworkMessageSensor.cpp | 4 +-- .../KXNetwork/KX_NetworkMessageSensor.h | 4 +-- source/gameengine/Ketsji/KXNetwork/SConscript | 3 +- .../gameengine/Ketsji/KX_ArmatureSensor.cpp | 4 +-- source/gameengine/Ketsji/KX_ArmatureSensor.h | 4 +-- .../gameengine/Ketsji/KX_BlenderMaterial.cpp | 4 +-- source/gameengine/Ketsji/KX_BlenderMaterial.h | 4 +-- source/gameengine/Ketsji/KX_Camera.cpp | 2 +- source/gameengine/Ketsji/KX_Camera.h | 4 +-- .../gameengine/Ketsji/KX_CameraActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_CameraActuator.h | 4 +-- .../Ketsji/KX_ConstraintActuator.cpp | 2 +- .../Ketsji/KX_ConstraintWrapper.cpp | 4 +-- .../gameengine/Ketsji/KX_ConstraintWrapper.h | 2 +- source/gameengine/Ketsji/KX_Dome.cpp | 2 +- source/gameengine/Ketsji/KX_GameActuator.cpp | 12 +++---- source/gameengine/Ketsji/KX_GameObject.cpp | 12 +++---- source/gameengine/Ketsji/KX_GameObject.h | 6 ++-- source/gameengine/Ketsji/KX_IpoActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_KetsjiEngine.cpp | 14 ++++---- source/gameengine/Ketsji/KX_KetsjiEngine.h | 4 +-- source/gameengine/Ketsji/KX_Light.cpp | 4 +-- source/gameengine/Ketsji/KX_Light.h | 2 +- source/gameengine/Ketsji/KX_MeshProxy.cpp | 4 +-- source/gameengine/Ketsji/KX_MeshProxy.h | 4 +-- .../gameengine/Ketsji/KX_MouseFocusSensor.cpp | 4 +-- .../gameengine/Ketsji/KX_MouseFocusSensor.h | 4 +-- source/gameengine/Ketsji/KX_NearSensor.cpp | 4 +-- source/gameengine/Ketsji/KX_NearSensor.h | 4 +-- .../gameengine/Ketsji/KX_ObjectActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_ObjectActuator.h | 4 +-- .../gameengine/Ketsji/KX_ParentActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_ParentActuator.h | 4 +-- .../Ketsji/KX_PhysicsObjectWrapper.cpp | 2 +- .../Ketsji/KX_PhysicsObjectWrapper.h | 4 +-- source/gameengine/Ketsji/KX_PolyProxy.cpp | 4 +-- source/gameengine/Ketsji/KX_PolyProxy.h | 4 +-- .../gameengine/Ketsji/KX_PolygonMaterial.cpp | 16 +++++----- source/gameengine/Ketsji/KX_PolygonMaterial.h | 4 +-- .../Ketsji/KX_PyConstraintBinding.cpp | 4 +-- .../Ketsji/KX_PyConstraintBinding.h | 4 +-- source/gameengine/Ketsji/KX_PyMath.cpp | 4 +-- source/gameengine/Ketsji/KX_PyMath.h | 4 +-- source/gameengine/Ketsji/KX_PythonInit.cpp | 11 +++---- source/gameengine/Ketsji/KX_PythonInit.h | 2 +- .../gameengine/Ketsji/KX_PythonInitTypes.cpp | 4 +-- source/gameengine/Ketsji/KX_PythonInitTypes.h | 2 +- source/gameengine/Ketsji/KX_PythonSeq.cpp | 4 +-- source/gameengine/Ketsji/KX_PythonSeq.h | 4 +-- source/gameengine/Ketsji/KX_RadarSensor.cpp | 4 +-- source/gameengine/Ketsji/KX_RaySensor.cpp | 4 +-- source/gameengine/Ketsji/KX_RaySensor.h | 4 +-- .../Ketsji/KX_SCA_AddObjectActuator.cpp | 4 +-- .../Ketsji/KX_SCA_AddObjectActuator.h | 4 +-- .../Ketsji/KX_SCA_DynamicActuator.cpp | 4 +-- .../Ketsji/KX_SCA_EndObjectActuator.cpp | 4 +-- .../Ketsji/KX_SCA_ReplaceMeshActuator.cpp | 4 +-- .../Ketsji/KX_SCA_ReplaceMeshActuator.h | 4 +-- source/gameengine/Ketsji/KX_Scene.cpp | 8 ++--- source/gameengine/Ketsji/KX_Scene.h | 4 +-- source/gameengine/Ketsji/KX_SceneActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_SceneActuator.h | 4 +-- source/gameengine/Ketsji/KX_SoundActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_SoundActuator.h | 4 +-- source/gameengine/Ketsji/KX_StateActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_TouchSensor.cpp | 2 +- source/gameengine/Ketsji/KX_TouchSensor.h | 2 +- .../gameengine/Ketsji/KX_TrackToActuator.cpp | 4 +-- source/gameengine/Ketsji/KX_TrackToActuator.h | 4 +-- .../gameengine/Ketsji/KX_VehicleWrapper.cpp | 4 +-- source/gameengine/Ketsji/KX_VehicleWrapper.h | 4 +-- source/gameengine/Ketsji/KX_VertexProxy.cpp | 4 +-- source/gameengine/Ketsji/KX_VertexProxy.h | 4 +-- .../Ketsji/KX_VisibilityActuator.cpp | 4 +-- source/gameengine/Ketsji/SConscript | 3 +- source/gameengine/Physics/Bullet/SConscript | 3 +- source/gameengine/Rasterizer/SConscript | 3 +- source/gameengine/VideoTexture/CMakeLists.txt | 3 +- source/gameengine/VideoTexture/SConscript | 3 +- 217 files changed, 477 insertions(+), 505 deletions(-) diff --git a/build_files/make/nan_compile.mk b/build_files/make/nan_compile.mk index a6d157d99c6..2931adb444c 100644 --- a/build_files/make/nan_compile.mk +++ b/build_files/make/nan_compile.mk @@ -35,6 +35,8 @@ include nan_definitions.mk CPPFLAGS ?= $(NAN_CPPFLAGS) # common parts --------------------------------------------------- +CFLAGS += -DWITH_PYTHON +CCFLAGS += -DWITH_PYTHON # Uncomment next lines to enable integrated game engine ifneq ($(NAN_NO_KETSJI), true) diff --git a/intern/audaspace/CMakeLists.txt b/intern/audaspace/CMakeLists.txt index 2dd4694d8a9..be39a7348aa 100644 --- a/intern/audaspace/CMakeLists.txt +++ b/intern/audaspace/CMakeLists.txt @@ -178,8 +178,7 @@ IF(WITH_PYTHON) SET(PYTHONSRC Python/AUD_PyAPI.cpp ) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) SET(SRC ${SRC} ${FFMPEGSRC} ${SNDFILESRC} ${FFTW3SRC} ${SDLSRC} ${OPENALSRC} ${JACKSRC} ${PYTHONSRC}) diff --git a/intern/audaspace/SConscript b/intern/audaspace/SConscript index 7230bffebdc..2c86849bc62 100644 --- a/intern/audaspace/SConscript +++ b/intern/audaspace/SConscript @@ -39,8 +39,7 @@ if env['WITH_BF_SNDFILE']: if env['WITH_BF_PYTHON']: sources += env.Glob('Python/*.cpp') incs += ' Python ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index 38732fc13e1..1dd0ab1ac95 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -28,7 +28,7 @@ #define __STDC_CONSTANT_MACROS #endif -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "AUD_PyInit.h" #include "AUD_PyAPI.h" @@ -141,7 +141,7 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize) AUD_device = dev; AUD_3ddevice = dynamic_cast(AUD_device); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(g_pyinitialized) { g_device = (Device*)Device_empty(); @@ -162,7 +162,7 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize) void AUD_exit() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(g_device) { Py_XDECREF(g_device); @@ -176,7 +176,7 @@ void AUD_exit() AUD_3ddevice = NULL; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* AUD_getCDevice(PyObject* self) { if(g_device) diff --git a/intern/audaspace/intern/AUD_PyInit.h b/intern/audaspace/intern/AUD_PyInit.h index bd67259449a..0b80b3a9ae1 100644 --- a/intern/audaspace/intern/AUD_PyInit.h +++ b/intern/audaspace/intern/AUD_PyInit.h @@ -26,7 +26,7 @@ #ifndef AUD_PYINIT #define AUD_PYINIT -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "Python.h" #ifdef __cplusplus diff --git a/release/scripts/ui/space_text.py b/release/scripts/ui/space_text.py index 163fa07e1d6..58f12ba51e4 100644 --- a/release/scripts/ui/space_text.py +++ b/release/scripts/ui/space_text.py @@ -174,7 +174,7 @@ class TEXT_MT_text(bpy.types.Menu): layout.column() layout.operator("text.run_script") - #ifndef DISABLE_PYTHON + #ifdef WITH_PYTHON # XXX if(BPY_is_pyconstraint(text)) # XXX uiMenuItemO(head, 0, "text.refresh_pyconstraints"); #endif diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 5252003c5b3..eb564720915 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -188,8 +188,7 @@ ENDIF(WITH_LCMS) IF(WITH_PYTHON) LIST(APPEND INC ../python ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_OPENMP) diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript index e8919a1008a..517c4ce713f 100644 --- a/source/blender/blenkernel/SConscript +++ b/source/blender/blenkernel/SConscript @@ -19,11 +19,10 @@ incs += ' ' + env['BF_ZLIB_INC'] defs = [ 'GLEW_STATIC' ] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') -else: +if env['WITH_BF_PYTHON']: incs += ' ../python' incs += ' ' + env['BF_PYTHON_INC'] + defs.append('WITH_PYTHON') if env['BF_DEBUG']: defs.append('DEBUG') diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 1892f6f0a27..5f387500dd1 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -70,7 +70,7 @@ #include "BKE_shrinkwrap.h" #include "BKE_mesh.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -1983,7 +1983,7 @@ static void pycon_id_looper (bConstraint *con, ConstraintIDFunc func, void *user /* Whether this approach is maintained remains to be seen (aligorith) */ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bPythonConstraint *data= con->data; #endif @@ -2003,7 +2003,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail); /* only execute target calculation if allowed */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (G.f & G_SCRIPT_AUTOEXEC) BPY_pyconstraint_target(data, ct); #endif @@ -2014,7 +2014,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON (void)con; (void)cob; (void)targets; /* unused */ return; #else @@ -2034,7 +2034,7 @@ static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targ /* Now, run the actual 'constraint' function, which should only access the matrices */ BPY_pyconstraint_eval(data, cob, targets); -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static bConstraintTypeInfo CTI_PYTHON = { diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index a5d96baf049..e1a7ef7bbef 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -46,7 +46,7 @@ #include "BKE_main.h" #include "BKE_screen.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -425,7 +425,7 @@ static int ctx_data_get(bContext *C, const char *member, bContextDataResult *res int ret= 0; memset(result, 0, sizeof(bContextDataResult)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(CTX_py_dict_get(C)) { return BPY_context_get(C, member, result); // if (BPY_context_get(C, member, result)) diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index 5e2ca921ef2..a1af728c562 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -79,7 +79,7 @@ #include "BKE_DerivedMesh.h" #include "BKE_curve.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -489,7 +489,7 @@ int BKE_read_exotic(Scene *scene, char *name) read_stl_mesh_binary(scene, name); retval = 1; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // TODO: this should not be in the kernel... else { // unknown format, call Python importloader if (BPY_call_importloader(name)) { @@ -499,7 +499,7 @@ int BKE_read_exotic(Scene *scene, char *name) } } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ //XXX waitcursor(0); } } diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index 1575f69209f..75029af4b10 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -53,7 +53,7 @@ #include "RNA_access.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -1174,7 +1174,7 @@ void driver_free_variable (ChannelDriver *driver, DriverVar *dvar) else MEM_freeN(dvar); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* since driver variables are cached, the expression needs re-compiling too */ if(driver->type==DRIVER_TYPE_PYTHON) driver->flag |= DRIVER_FLAG_RENAMEVAR; @@ -1231,7 +1231,7 @@ DriverVar *driver_add_new_variable (ChannelDriver *driver) /* set the default type to 'single prop' */ driver_change_variable_type(dvar, DVAR_TYPE_SINGLE_PROP); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* since driver variables are cached, the expression needs re-compiling too */ if(driver->type==DRIVER_TYPE_PYTHON) driver->flag |= DRIVER_FLAG_RENAMEVAR; @@ -1258,7 +1258,7 @@ void fcurve_free_driver(FCurve *fcu) driver_free_variable(driver, dvar); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* free compiled driver expression */ if (driver->expr_comp) BPY_DECREF(driver->expr_comp); @@ -1406,7 +1406,7 @@ static float evaluate_driver (ChannelDriver *driver, float UNUSED(evaltime)) case DRIVER_TYPE_PYTHON: /* expression */ { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* check for empty or invalid expression */ if ( (driver->expression[0] == '\0') || (driver->flag & DRIVER_FLAG_INVALID) ) @@ -1420,7 +1420,7 @@ static float evaluate_driver (ChannelDriver *driver, float UNUSED(evaltime)) */ driver->curval= BPY_eval_driver(driver); } -#endif /* DISABLE_PYTHON*/ +#endif /* WITH_PYTHON*/ } break; diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c index c900f178ca7..5ef41d17d63 100644 --- a/source/blender/blenkernel/intern/fmodifier.c +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -802,13 +802,13 @@ static void fcm_python_copy (FModifier *fcm, FModifier *src) static void fcm_python_evaluate (FCurve *UNUSED(fcu), FModifier *UNUSED(fcm), float *UNUSED(cvalue), float UNUSED(evaltime)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //FMod_Python *data= (FMod_Python *)fcm->data; /* FIXME... need to implement this modifier... * It will need it execute a script using the custom properties */ -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static FModifierTypeInfo FMI_PYTHON = { diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 6b53e538f8e..41c4fece1a4 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -27,7 +27,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include #endif diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 5ade08478a2..e006c48aca5 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -96,7 +96,7 @@ #include "LBM_fluidsim.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif diff --git a/source/blender/blenkernel/intern/script.c b/source/blender/blenkernel/intern/script.c index c07032f71d7..6ffac09e843 100644 --- a/source/blender/blenkernel/intern/script.c +++ b/source/blender/blenkernel/intern/script.c @@ -36,7 +36,7 @@ /* -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" // Blender Python library #endif */ diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index cb3c0c08cc0..09910481bf9 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -53,7 +53,7 @@ #include "BKE_text.h" #include "BKE_utildefines.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -167,7 +167,7 @@ void free_text(Text *text) if(text->name) MEM_freeN(text->name); MEM_freeN(text->undo_buf); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (text->compiled) BPY_free_compiled_text(text); #endif } @@ -683,7 +683,7 @@ int txt_get_span (TextLine *from, TextLine *to) static void txt_make_dirty (Text *text) { text->flags |= TXT_ISDIRTY; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (text->compiled) BPY_free_compiled_text(text); #endif } diff --git a/source/blender/editors/interface/CMakeLists.txt b/source/blender/editors/interface/CMakeLists.txt index 31de4537c24..23a96cce3dc 100644 --- a/source/blender/editors/interface/CMakeLists.txt +++ b/source/blender/editors/interface/CMakeLists.txt @@ -56,8 +56,8 @@ IF(WITH_INTERNATIONAL) ADD_DEFINITIONS(-DINTERNATIONAL) ENDIF(WITH_INTERNATIONAL) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_interface "${SRC}" "${INC}") diff --git a/source/blender/editors/interface/SConscript b/source/blender/editors/interface/SConscript index 81964a661a4..639a5268ca2 100644 --- a/source/blender/editors/interface/SConscript +++ b/source/blender/editors/interface/SConscript @@ -16,7 +16,7 @@ defs = [] if env['WITH_BF_INTERNATIONAL']: defs.append('INTERNATIONAL') -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_interface', sources, Split(incs), defs, libtype=['core'], priority=[110] ) diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index f65b10eaaea..eee4f133043 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -1645,7 +1645,7 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str) /* number editing */ double value; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON { char str_unit_convert[256]; int unit_type; @@ -1672,7 +1672,7 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str) } #else value= atof(str); -#endif +#endif // WITH_PYTHON if(!ui_is_but_float(but)) value= (int)floor(value + 0.5); if(but->type==NUMABS) value= fabs(value); diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index e33e24a75ce..81e19e5db3f 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -52,7 +52,7 @@ #include "BIF_gl.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //#include "BPY_extern.h" //#include "BPY_menus.h" #endif diff --git a/source/blender/editors/object/CMakeLists.txt b/source/blender/editors/object/CMakeLists.txt index bfcb233e466..224d72895ba 100644 --- a/source/blender/editors/object/CMakeLists.txt +++ b/source/blender/editors/object/CMakeLists.txt @@ -55,8 +55,8 @@ IF(WIN32) LIST(APPEND INC ${PTHREADS_INC}) ENDIF(WIN32) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_object "${SRC}" "${INC}") diff --git a/source/blender/editors/object/SConscript b/source/blender/editors/object/SConscript index 98085dd2fe5..e39190c0ef3 100644 --- a/source/blender/editors/object/SConscript +++ b/source/blender/editors/object/SConscript @@ -17,7 +17,7 @@ if env['OURPLATFORM'] == 'linux2': if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_object', sources, Split(incs), defs, libtype=['core'], priority=[35] ) diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index 09760a8f51b..d3b26100727 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -53,7 +53,7 @@ #include "BKE_report.h" #include "BIK_api.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -154,7 +154,7 @@ void validate_pyconstraint_cb (void *arg1, void *arg2) data->text = text; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* this returns a string for the list of usable pyconstraint script names */ char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) { @@ -195,12 +195,12 @@ char *buildmenu_pyconstraints (Text *con_text, int *pyconindex) return str; } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ /* this callback gets called when the 'refresh' button of a pyconstraint gets pressed */ void update_pyconstraint_cb (void *arg1, void *arg2) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON (void)arg1; /* unused */ (void)arg2; /* unused */ #else @@ -1297,7 +1297,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase case CONSTRAINT_TYPE_PYTHON: // FIXME: this code is not really valid anymore { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON char *menustr; int scriptint= 0; /* popup a list of usable scripts */ diff --git a/source/blender/editors/space_console/CMakeLists.txt b/source/blender/editors/space_console/CMakeLists.txt index b1d9920fed4..dbef838db65 100644 --- a/source/blender/editors/space_console/CMakeLists.txt +++ b/source/blender/editors/space_console/CMakeLists.txt @@ -38,8 +38,8 @@ SET(SRC space_console.c ) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_space_console "${SRC}" "${INC}") diff --git a/source/blender/editors/space_console/SConscript b/source/blender/editors/space_console/SConscript index 087090a7740..f246f08d7ac 100644 --- a/source/blender/editors/space_console/SConscript +++ b/source/blender/editors/space_console/SConscript @@ -17,7 +17,7 @@ incs = [ '../../blenloader', ] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_space_console', sources, incs, defs, libtype=['core'], priority=[95] ) diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 70263788b13..72478133f1c 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -327,7 +327,7 @@ void console_keymap(struct wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_CHAR); RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_PREV_CHAR); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON WM_keymap_add_item(keymap, "CONSOLE_OT_execute", RETKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */ WM_keymap_add_item(keymap, "CONSOLE_OT_execute", PADENTER, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_script/CMakeLists.txt b/source/blender/editors/space_script/CMakeLists.txt index 88c0ea56ab2..17fcf2296e9 100644 --- a/source/blender/editors/space_script/CMakeLists.txt +++ b/source/blender/editors/space_script/CMakeLists.txt @@ -38,8 +38,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC} ../../python) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_space_script "${SRC}" "${INC}") diff --git a/source/blender/editors/space_script/SConscript b/source/blender/editors/space_script/SConscript index f187df19117..8c75b999bc0 100644 --- a/source/blender/editors/space_script/SConscript +++ b/source/blender/editors/space_script/SConscript @@ -10,7 +10,7 @@ incs += ' ../../python' defs = [] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_space_script', sources, Split(incs), defs, libtype=['core'], priority=[90] ) diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c index 23bc385c758..b9ece0add2f 100644 --- a/source/blender/editors/space_script/script_edit.c +++ b/source/blender/editors/space_script/script_edit.c @@ -46,7 +46,7 @@ #include "script_intern.h" // own include -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" /* BPY_run_python_script */ #endif @@ -54,7 +54,7 @@ static int run_pyfile_exec(bContext *C, wmOperator *op) { char path[512]; RNA_string_get(op->ptr, "filepath", path); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(BPY_run_python_script(C, path, NULL, op->reports)) { ARegion *ar= CTX_wm_region(C); ED_region_tag_redraw(ar); @@ -84,7 +84,7 @@ void SCRIPT_OT_python_file_run(wmOperatorType *ot) static int script_reload_exec(bContext *C, wmOperator *UNUSED(op)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* TODO, this crashes on netrender and keying sets, need to look into why * disable for now unless running in debug mode */ WM_cursor_wait(1); diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c index 2036b0f730a..57d7bba8e3b 100644 --- a/source/blender/editors/space_script/space_script.c +++ b/source/blender/editors/space_script/space_script.c @@ -49,7 +49,7 @@ #include "UI_resources.h" #include "UI_view2d.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -94,7 +94,7 @@ static void script_free(SpaceLink *sl) { SpaceScript *sscript= (SpaceScript*) sl; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /*free buttons references*/ if (sscript->but_refs) { // XXX BPy_Set_DrawButtonsList(sscript->but_refs); @@ -150,7 +150,7 @@ static void script_main_area_draw(const bContext *C, ARegion *ar) /* data... */ // BPY_run_python_script(C, "/root/blender-svn/blender25/test.py", NULL); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (sscript->script) { //BPY_run_python_script_space(scpt->script.filename, NULL); BPY_run_script_space_draw(C, sscript); diff --git a/source/blender/editors/space_text/CMakeLists.txt b/source/blender/editors/space_text/CMakeLists.txt index b53a86fbe39..708fc161655 100644 --- a/source/blender/editors/space_text/CMakeLists.txt +++ b/source/blender/editors/space_text/CMakeLists.txt @@ -40,8 +40,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC} ../../python) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_editor_text "${SRC}" "${INC}") diff --git a/source/blender/editors/space_text/SConscript b/source/blender/editors/space_text/SConscript index bd87a799756..6d2816b7834 100644 --- a/source/blender/editors/space_text/SConscript +++ b/source/blender/editors/space_text/SConscript @@ -7,7 +7,7 @@ incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' incs += ' ../../python ../../makesrna ../../blenfont' -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_editors_space_text', sources, Split(incs), defs, libtype=['core'], priority=[95] ) diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c index 464e144515f..b7bf61497bd 100644 --- a/source/blender/editors/space_text/text_header.c +++ b/source/blender/editors/space_text/text_header.c @@ -57,7 +57,7 @@ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // XXX #include "BPY_menus.h" #endif diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index af29e575482..d2defb0341d 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -58,7 +58,7 @@ #include "RNA_access.h" #include "RNA_define.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -310,7 +310,7 @@ static int reload_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(text->compiled) BPY_free_compiled_text(text); #endif @@ -557,7 +557,7 @@ static int run_script_poll(bContext *C) static int run_script_exec(bContext *C, wmOperator *op) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON (void)C; /* unused */ BKE_report(op->reports, RPT_ERROR, "Python disabled in this build"); @@ -597,7 +597,7 @@ void TEXT_OT_run_script(wmOperatorType *ot) static int refresh_pyconstraints_exec(bContext *UNUSED(C), wmOperator *UNUSED(op)) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #if 0 Text *text= CTX_data_edit_text(C); Object *ob; diff --git a/source/blender/editors/space_text/text_python.c b/source/blender/editors/space_text/text_python.c index 6e64bef4c85..720e80ec162 100644 --- a/source/blender/editors/space_text/text_python.c +++ b/source/blender/editors/space_text/text_python.c @@ -358,7 +358,7 @@ short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val) } #if 0 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Run text plugin scripts if enabled */ if(st->doplugins && event && val) { if(BPY_menu_do_shortcut(PYMENU_TEXTPLUGIN, event, qual)) { diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c index a4f661e9511..37a3a65f170 100644 --- a/source/blender/editors/util/undo.c +++ b/source/blender/editors/util/undo.c @@ -156,7 +156,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname) if(do_glob_undo) { if(U.uiflag & USER_GLOBALUNDO) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // XXX BPY_scripts_clear_pyobjects(); #endif if(undoname) diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript index 68a292d8386..d8937d044d3 100644 --- a/source/blender/makesrna/SConscript +++ b/source/blender/makesrna/SConscript @@ -51,8 +51,8 @@ if env['WITH_BF_GAMEENGINE']: if env['BF_UNIT_TEST']: defs.append('UNIT_TEST') -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') if env['OURPLATFORM'] == 'linux2': cflags='-pthread' diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index 6ca5203d249..d0219009a45 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -65,16 +65,16 @@ INCLUDE_DIRECTORIES( FILE(GLOB INC_FILES ../*.h ../../makesdna/*.h) -IF(NOT WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) -ENDIF(NOT WITH_PYTHON) +IF(WITH_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) IF(WIN32) LIST(APPEND INC ${PTHREADS_INC}) ENDIF(WIN32) IF(WITH_GAMEENGINE) - ADD_DEFINITIONS(-DWITH_GAME_ENGINE) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WITH_IMAGE_OPENEXR) diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript index b37cfd5c38b..b8e30bcfe98 100644 --- a/source/blender/makesrna/intern/SConscript +++ b/source/blender/makesrna/intern/SConscript @@ -85,8 +85,8 @@ if env['WITH_BF_JACK']: if env['BF_UNIT_TEST']: defs.append('UNIT_TEST') -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') if env['OURPLATFORM'] == 'linux2': cflags='-pthread' diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 1bc22b7af25..f8c262dff43 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -649,7 +649,7 @@ static void rna_wmClipboard_set(PointerRNA *ptr, const char *value) WM_clipboard_text_set((void *) value, FALSE); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static void rna_Operator_unregister(const bContext *C, StructRNA *type) { char *idname; @@ -952,7 +952,7 @@ static StructRNA *rna_MacroOperator_register(const bContext *C, ReportList *repo return dummyot.ext.srna; } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ static StructRNA* rna_Operator_refine(PointerRNA *opr) { @@ -1061,7 +1061,7 @@ static void rna_def_operator(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Operator", "Storage of an operator being executed, or registered after execution"); RNA_def_struct_sdna(srna, "wmOperator"); RNA_def_struct_refine_func(srna, "rna_Operator_refine"); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON RNA_def_struct_register_funcs(srna, "rna_Operator_register", "rna_Operator_unregister"); #endif @@ -1124,7 +1124,7 @@ static void rna_def_macro_operator(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Macro Operator", "Storage of a macro operator being executed, or registered after execution"); RNA_def_struct_sdna(srna, "wmOperator"); RNA_def_struct_refine_func(srna, "rna_MacroOperator_refine"); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON RNA_def_struct_register_funcs(srna, "rna_MacroOperator_register", "rna_Operator_unregister"); #endif diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index d4383f330c4..5a6470d994e 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -146,8 +146,7 @@ ENDIF(WIN32) IF(WITH_PYTHON) SET(INC ${INC} ../python ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_nodes "${SRC}" "${INC}") diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript index 3e7e0dbe54c..4bed612144c 100644 --- a/source/blender/nodes/SConscript +++ b/source/blender/nodes/SConscript @@ -22,10 +22,9 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] incs += ' ../python' + defs.append('WITH_PYTHON') if env['BF_DEBUG']: defs.append('_DEBUG') -else: - defs.append('DISABLE_PYTHON') if env['OURPLATFORM'] == 'linux2': cflags='-pthread' diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c index 5e391e02feb..a548893905a 100644 --- a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c +++ b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c @@ -27,22 +27,22 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +/* TODO, support python3.x */ +#undef WITH_PYTHON + +#ifdef WITH_PYTHON #include #include #include #endif -/* TODO, support python3.x */ -#define DISABLE_PYTHON 1 - #include "DNA_text_types.h" #include "BKE_text.h" #include "BKE_utildefines.h" // XXX #if 0 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "api2_2x/Node.h" #include "api2_2x/gen_utils.h" #include "BPY_extern.h" @@ -57,7 +57,7 @@ static void node_dynamic_setup(bNode *node); static void node_dynamic_exec_cb(void *data, bNode *node, bNodeStack **in, bNodeStack **out); static void node_dynamic_free_storage_cb(bNode *node); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject *init_dynamicdict(void) { PyObject *newscriptdict, *item; PyGILState_STATE gilstate = PyGILState_Ensure(); @@ -156,7 +156,7 @@ static void node_dynamic_update_socket_links(bNode *node, bNodeTree *ntree) static void node_dynamic_free_storage_cb(bNode *node) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON NodeScriptDict *nsd; PyObject *pydict; BPy_Node *pynode; @@ -186,7 +186,7 @@ static void node_dynamic_disable(bNode *node) /* Disable all pynodes using the given text (script) id */ static void node_dynamic_disable_all_by_id(ID *id) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON Material *ma; /* XXX hardcoded for shaders */ for (ma= G.main->mat.first; ma; ma= ma->id.next) { @@ -346,7 +346,7 @@ int nodeDynamicUnlinkText(ID *txtid) { static void node_dynamic_pyerror_print(bNode *node) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyGILState_STATE gilstate = PyGILState_Ensure(); fprintf(stderr, "\nError in dynamic node script \"%s\":\n", node->name); @@ -373,7 +373,7 @@ static void node_dynamic_register_type(bNode *node) node->typeinfo->name = BLI_strdup(node->name); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* node_dynamic_get_pynode: * Find the pynode definition from the script */ static PyObject *node_dynamic_get_pynode(PyObject *dict) @@ -415,11 +415,11 @@ static PyObject *node_dynamic_get_pynode(PyObject *dict) "no PyNode definition found in the script!"); return NULL; } -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ static int node_dynamic_parse(struct bNode *node) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON return -1; #else PyObject *dict= NULL; @@ -516,7 +516,7 @@ static int node_dynamic_parse(struct bNode *node) * pynodes already linked to a script (node->id != NULL). */ static void node_dynamic_setup(bNode *node) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON NodeScriptDict *nsd = NULL; bNodeTree *nodetree = NULL; bNodeType *ntype = NULL; @@ -640,7 +640,7 @@ static void node_dynamic_setup(bNode *node) node->custom1 = BSET(node->custom1, NODE_DYNAMIC_READY); PyGILState_Release(gilstate); -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ return; } @@ -673,7 +673,7 @@ static void node_dynamic_init_cb(bNode *node) { /* node_dynamic_copy_cb: pynode copy callback */ static void node_dynamic_copy_cb(bNode *orig_node, bNode *new_node) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON return; #else NodeScriptDict *nsd; @@ -698,7 +698,7 @@ static void node_dynamic_copy_cb(bNode *orig_node, bNode *new_node) /* node_dynamic_exec_cb: the execution callback called per pixel * during rendering. */ static void node_dynamic_exec_cb(void *data, bNode *node, bNodeStack **in, bNodeStack **out) { -#ifdef DISABLE_PYTHON +#ifndef WITH_PYTHON return; #else BPy_Node *mynode = NULL; diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt index fa3a196d9c5..6c93334fd0a 100644 --- a/source/blender/windowmanager/CMakeLists.txt +++ b/source/blender/windowmanager/CMakeLists.txt @@ -86,8 +86,7 @@ ENDIF(WITH_FFMPEG) IF(WITH_PYTHON) LIST(APPEND INC ../python ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_GAMEENGINE) diff --git a/source/blender/windowmanager/SConscript b/source/blender/windowmanager/SConscript index 51168d7a9d3..cbaf74ddc10 100644 --- a/source/blender/windowmanager/SConscript +++ b/source/blender/windowmanager/SConscript @@ -16,8 +16,8 @@ incs += ' #/intern/elbeem #/extern/glew/include' defs = [ 'GLEW_STATIC' ] -if not env['WITH_BF_PYTHON']: - defs.append('DISABLE_PYTHON') +if env['WITH_BF_PYTHON']: + defs.append('WITH_PYTHON') if env['WITH_BF_COLLADA']: defs.append('WITH_COLLADA') diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 5c4912d7aee..426069245c3 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -58,7 +58,7 @@ #include "ED_screen.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -69,7 +69,7 @@ void WM_operator_free(wmOperator *op) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(op->py_instance) { /* do this first incase there are any __del__ functions or * similar that use properties */ diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 6db7f2554c4..aa99e8fcb1c 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -96,7 +96,7 @@ #include "GPU_draw.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -317,7 +317,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports) ED_editors_init(C); DAG_on_load_update(CTX_data_main(C)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* run any texts that were loaded in and flagged as modules */ BPY_load_user_modules(C); #endif @@ -400,7 +400,7 @@ int WM_read_homefile(bContext *C, wmOperator *op) ED_editors_init(C); DAG_on_load_update(CTX_data_main(C)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(CTX_py_init_get(C)) { /* sync addons, these may have changed from the defaults */ BPY_eval_string(C, "__import__('bpy').utils.addon_reset_all()"); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index b8e6cf5424d..d98459a113c 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -61,11 +61,11 @@ #include "RE_pipeline.h" /* RE_ free stuff */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif -#ifdef WITH_GAME_ENGINE +#ifdef WITH_GAMEENGINE #include "SYS_System.h" #endif @@ -143,7 +143,7 @@ void WM_init(bContext *C, int argc, char **argv) * before WM_read_homefile() or make py-drivers check if python is running. * Will try fix when the crash can be repeated. - campbell. */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON BPY_set_context(C); /* necessary evil */ BPY_start_python(argc, argv); BPY_load_user_modules(C); @@ -398,7 +398,7 @@ void WM_exit(bContext *C) // free_txt_data(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* XXX - old note */ /* before free_blender so py's gc happens while library still exists */ /* needed at least for a rare sigsegv that can happen in pydrivers */ @@ -434,7 +434,7 @@ void WM_exit(bContext *C) wm_ghost_exit(); CTX_free(C); -#ifdef WITH_GAME_ENGINE +#ifdef WITH_GAMEENGINE SYS_DeleteSystem(SYS_GetSystem()); #endif if(MEM_get_memory_blocks_in_use()!=0) { diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index c8885cbba11..c661f6b2812 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -74,8 +74,7 @@ ENDIF(WITH_IMAGE_HDR) IF(WITH_PYTHON) INCLUDE_DIRECTORIES(../blender/python) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_GAMEENGINE) diff --git a/source/creator/SConscript b/source/creator/SConscript index 6ee9aea29a5..8577872c48a 100644 --- a/source/creator/SConscript +++ b/source/creator/SConscript @@ -31,10 +31,9 @@ if not env['WITH_BF_SDL']: if env['WITH_BF_PYTHON']: incs += ' ../blender/python' + defs.append('WITH_PYTHON') if env['BF_DEBUG']: defs.append('_DEBUG') -else: - defs.append('DISABLE_PYTHON') if env['BF_BUILDINFO']: defs.append('BUILD_DATE') diff --git a/source/creator/creator.c b/source/creator/creator.c index 0d7a31340ed..4a217a147fa 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -80,7 +80,7 @@ #include "IMB_imbuf.h" // for IMB_init -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "BPY_extern.h" #endif @@ -829,7 +829,7 @@ static int set_skip_frame(int argc, char **argv, void *data) } /* macro for ugly context setup/reset */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #define BPY_CTX_SETUP(_cmd) \ { \ wmWindowManager *wm= CTX_wm_manager(C); \ @@ -847,11 +847,11 @@ static int set_skip_frame(int argc, char **argv, void *data) CTX_data_scene_set(C, prevscene); \ } \ -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ static int run_python(int argc, char **argv, void *data) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bContext *C = data; /* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */ @@ -872,12 +872,12 @@ static int run_python(int argc, char **argv, void *data) (void)argc; (void)argv; (void)data; /* unused */ printf("This blender was built without python support\n"); return 0; -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static int run_python_console(int UNUSED(argc), char **argv, void *data) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bContext *C = data; const char *expr= "__import__('code').interact()"; @@ -888,7 +888,7 @@ static int run_python_console(int UNUSED(argc), char **argv, void *data) (void)argv; (void)data; /* unused */ printf("This blender was built without python support\n"); return 0; -#endif /* DISABLE_PYTHON */ +#endif /* WITH_PYTHON */ } static int load_file(int UNUSED(argc), char **argv, void *data) @@ -914,7 +914,7 @@ static int load_file(int UNUSED(argc), char **argv, void *data) } /* WM_read_file() runs normally but since we're in background mode do here */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* run any texts that were loaded in and flagged as modules */ BPY_load_user_modules(C); #endif @@ -1150,7 +1150,7 @@ int main(int argc, char **argv) BLI_where_is_temp( btempdir, 0 ); /* call after loading the startup.blend so we can read U.tempdir */ } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /** * NOTE: the U.pythondir string is NULL until WM_init() is executed, * so we provide the BPY_ function below to append the user defined diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index 858a5964a52..9de4020ecff 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -142,7 +142,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c BLI_strncpy(pathname, blenderdata->name, sizeof(pathname)); BLI_strncpy(oldsce, G.main->name, sizeof(oldsce)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON resetGamePythonPath(); // need this so running a second time wont use an old blendfiles path setGamePythonPath(G.main->name); @@ -172,7 +172,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0); bool animation_record = (SYS_GetCommandLineInt(syshandle, "animation_record", 0) != 0); bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0); #endif bool novertexarrays = (SYS_GetCommandLineInt(syshandle, "novertexarrays", 0) != 0); @@ -221,7 +221,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c ketsjiengine->SetUseFixedTime(usefixed); ketsjiengine->SetTimingDisplay(frameRate, profile, properties); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON CValue::SetDeprecationWarnings(nodepwarnings); #endif @@ -311,7 +311,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c if(blenderdata) { BLI_strncpy(G.main->name, blenderdata->name, sizeof(G.main->name)); BLI_strncpy(pathname, blenderdata->name, sizeof(pathname)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON setGamePythonPath(G.main->name); #endif } @@ -382,11 +382,11 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c scene, canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // some python things PyObject *gameLogic, *gameLogic_keys; setupGamePython(ketsjiengine, startscene, blenderdata, pyGlobalDict, &gameLogic, &gameLogic_keys, 0, NULL); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON //initialize Dome Settings if(scene->gm.stereoflag == STEREO_DOME) @@ -477,7 +477,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c // when exiting the mainloop -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Clears the dictionary by hand: // This prevents, extra references to global variables // inside the GameLogic dictionary when the python interpreter is finalized. @@ -499,7 +499,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c gameLogic_keys_new = NULL; #endif ketsjiengine->StopEngine(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON exitGamePythonScripting(); #endif networkdevice->Disconnect(); @@ -510,7 +510,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c sceneconverter = NULL; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON Py_DECREF(gameLogic_keys); gameLogic_keys = NULL; #endif @@ -575,7 +575,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c BLI_strncpy(G.main->name, oldsce, sizeof(G.main->name)); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON Py_DECREF(pyGlobalDict); // Release Python's GIL diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt index 7abdeba0740..1f895ad0abc 100644 --- a/source/gameengine/BlenderRoutines/CMakeLists.txt +++ b/source/gameengine/BlenderRoutines/CMakeLists.txt @@ -51,8 +51,7 @@ ENDIF(WITH_FFMPEG) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_blroutines "${SRC}" "${INC}") diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript index 1a774fc8aba..91dc2692384 100644 --- a/source/gameengine/BlenderRoutines/SConscript +++ b/source/gameengine/BlenderRoutines/SConscript @@ -27,8 +27,7 @@ if env['WITH_BF_FFMPEG']: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp index b8d4c4e0f04..39e3e87708e 100644 --- a/source/gameengine/Converter/BL_ActionActuator.cpp +++ b/source/gameengine/Converter/BL_ActionActuator.cpp @@ -428,7 +428,7 @@ bool BL_ActionActuator::Update(double curtime, bool frame) return keepgoing; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -674,4 +674,4 @@ PyObject* BL_ActionActuator::pyattr_get_channel_names(void *self_v, const KX_PYA return ret; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ActionActuator.h b/source/gameengine/Converter/BL_ActionActuator.h index 10ce1fad27a..9682c0e45f7 100644 --- a/source/gameengine/Converter/BL_ActionActuator.h +++ b/source/gameengine/Converter/BL_ActionActuator.h @@ -84,7 +84,7 @@ public: bAction* GetAction() { return m_action; } void SetAction(bAction* act) { m_action= act; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_O(BL_ActionActuator,GetChannel); KX_PYMETHOD_DOC(BL_ActionActuator,setChannel); @@ -131,7 +131,7 @@ public: return 1; } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON protected: diff --git a/source/gameengine/Converter/BL_ArmatureActuator.cpp b/source/gameengine/Converter/BL_ArmatureActuator.cpp index 82b8307a2bc..db36f7e7c38 100644 --- a/source/gameengine/Converter/BL_ArmatureActuator.cpp +++ b/source/gameengine/Converter/BL_ArmatureActuator.cpp @@ -175,7 +175,7 @@ bool BL_ArmatureActuator::Update(double curtime, bool frame) return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Integration Hooks */ @@ -257,5 +257,5 @@ PyObject* BL_ArmatureActuator::pyattr_get_constraint(void *self, const struct KX return constraint->GetProxy(); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureActuator.h b/source/gameengine/Converter/BL_ArmatureActuator.h index 72e2e96ea73..b3f9ee2f1f2 100644 --- a/source/gameengine/Converter/BL_ArmatureActuator.h +++ b/source/gameengine/Converter/BL_ArmatureActuator.h @@ -66,14 +66,14 @@ public: virtual bool Update(double curtime, bool frame); virtual void ReParent(SCA_IObject* parent); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* These are used to get and set m_target */ static PyObject* pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: // identify the constraint that this actuator controls diff --git a/source/gameengine/Converter/BL_ArmatureChannel.cpp b/source/gameengine/Converter/BL_ArmatureChannel.cpp index 8f5ec230486..13de701c510 100644 --- a/source/gameengine/Converter/BL_ArmatureChannel.cpp +++ b/source/gameengine/Converter/BL_ArmatureChannel.cpp @@ -33,7 +33,7 @@ #include "BLI_math.h" #include "BLI_string.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyTypeObject BL_ArmatureChannel::Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -72,7 +72,7 @@ PyObject *BL_ArmatureChannel::NewProxy(bool py_owns) return NewProxyPlus_Ext(this, &Type, m_posechannel, py_owns); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON BL_ArmatureChannel::BL_ArmatureChannel( BL_ArmatureObject *armature, @@ -85,7 +85,7 @@ BL_ArmatureChannel::~BL_ArmatureChannel() { } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON @@ -461,4 +461,4 @@ PyObject *BL_ArmatureBone::py_bone_get_children(void *self, const struct KX_PYAT return childrenlist; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureChannel.h b/source/gameengine/Converter/BL_ArmatureChannel.h index 79f0cc80348..e1c18215c53 100644 --- a/source/gameengine/Converter/BL_ArmatureChannel.h +++ b/source/gameengine/Converter/BL_ArmatureChannel.h @@ -57,7 +57,7 @@ public: struct bPoseChannel *posechannel); virtual ~BL_ArmatureChannel(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Python access virtual PyObject* py_repr(void); @@ -65,7 +65,7 @@ public: static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); static PyObject* py_attr_get_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int py_attr_set_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* this is a factory class to access bBone data field in the GE. @@ -82,7 +82,7 @@ private: public: -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject *py_bone_repr(PyObject *self); static PyObject *py_bone_get_parent(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static PyObject *py_bone_get_children(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/Converter/BL_ArmatureConstraint.cpp b/source/gameengine/Converter/BL_ArmatureConstraint.cpp index 0b7ab043d16..fa7f8a1bea1 100644 --- a/source/gameengine/Converter/BL_ArmatureConstraint.cpp +++ b/source/gameengine/Converter/BL_ArmatureConstraint.cpp @@ -33,7 +33,7 @@ #include "BLI_math.h" #include "BLI_string.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyTypeObject BL_ArmatureConstraint::Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -62,7 +62,7 @@ PyObject* BL_ArmatureConstraint::py_repr(void) return PyUnicode_FromString(m_name); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON BL_ArmatureConstraint::BL_ArmatureConstraint( BL_ArmatureObject *armature, @@ -237,7 +237,7 @@ void BL_ArmatureConstraint::SetSubtarget(KX_GameObject* subtarget) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON @@ -447,4 +447,4 @@ int BL_ArmatureConstraint::py_attr_setattr(void *self_v, const struct KX_PYATTRI return PY_SET_ATTR_FAIL; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureConstraint.h b/source/gameengine/Converter/BL_ArmatureConstraint.h index a9f612b6c0c..92da8327edb 100644 --- a/source/gameengine/Converter/BL_ArmatureConstraint.h +++ b/source/gameengine/Converter/BL_ArmatureConstraint.h @@ -104,14 +104,14 @@ public: void SetTarget(KX_GameObject* target); void SetSubtarget(KX_GameObject* subtarget); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Python access virtual PyObject* py_repr(void); static PyObject* py_attr_getattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif //__BL_ARMATURECONSTRAINT diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp index 97d6b6efd27..0c5bb036b04 100644 --- a/source/gameengine/Converter/BL_ArmatureObject.cpp +++ b/source/gameengine/Converter/BL_ArmatureObject.cpp @@ -594,7 +594,7 @@ float BL_ArmatureObject::GetBoneLength(Bone* bone) const return (float)(MT_Point3(bone->head) - MT_Point3(bone->tail)).length(); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON @@ -661,4 +661,4 @@ KX_PYMETHODDEF_DOC_NOARGS(BL_ArmatureObject, update, Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ArmatureObject.h b/source/gameengine/Converter/BL_ArmatureObject.h index 646e9d45365..525c265d607 100644 --- a/source/gameengine/Converter/BL_ArmatureObject.h +++ b/source/gameengine/Converter/BL_ArmatureObject.h @@ -108,14 +108,14 @@ public: virtual int GetGameObjectType() { return OBJ_ARMATURE; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // PYTHON static PyObject* pyattr_get_constraints(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_channels(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); KX_PYMETHOD_DOC_NOARGS(BL_ArmatureObject, update); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON protected: /* list element: BL_ArmatureConstraint. Use SG_DListHead to have automatic list replication */ diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.cpp b/source/gameengine/Converter/BL_ShapeActionActuator.cpp index 08d3e54a7c5..ccd7dc6f745 100644 --- a/source/gameengine/Converter/BL_ShapeActionActuator.cpp +++ b/source/gameengine/Converter/BL_ShapeActionActuator.cpp @@ -408,7 +408,7 @@ bool BL_ShapeActionActuator::Update(double curtime, bool frame) return keepgoing; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -491,4 +491,4 @@ int BL_ShapeActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.h b/source/gameengine/Converter/BL_ShapeActionActuator.h index 64cd21e5544..e6457e2c686 100644 --- a/source/gameengine/Converter/BL_ShapeActionActuator.h +++ b/source/gameengine/Converter/BL_ShapeActionActuator.h @@ -82,7 +82,7 @@ public: bAction* GetAction() { return m_action; } void SetAction(bAction* act) { m_action= act; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); @@ -125,7 +125,7 @@ public: } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON protected: diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt index a23629e3341..9e0b4242f28 100644 --- a/source/gameengine/Converter/CMakeLists.txt +++ b/source/gameengine/Converter/CMakeLists.txt @@ -85,8 +85,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_BULLET) diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp index 7ec7104f1f4..05b0e75b070 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp @@ -906,7 +906,7 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo() } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *KX_BlenderSceneConverter::GetPyNamespace() { return m_ketsjiEngine->GetPyNamespace(); diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h index 20f3f863563..8692a75ecb6 100644 --- a/source/gameengine/Converter/KX_BlenderSceneConverter.h +++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h @@ -174,7 +174,7 @@ public: -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *GetPyNamespace(); #endif diff --git a/source/gameengine/Converter/KX_ConvertControllers.cpp b/source/gameengine/Converter/KX_ConvertControllers.cpp index a6b62ecb7b0..3bca6b9ab11 100644 --- a/source/gameengine/Converter/KX_ConvertControllers.cpp +++ b/source/gameengine/Converter/KX_ConvertControllers.cpp @@ -153,7 +153,7 @@ void BL_ConvertControllers( bPythonCont* pycont = (bPythonCont*) bcontr->data; SCA_PythonController* pyctrl = new SCA_PythonController(gameobj, pycont->mode); gamecontroller = pyctrl; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON pyctrl->SetNamespace(converter->GetPyNamespace()); @@ -183,7 +183,7 @@ void BL_ConvertControllers( } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON break; } @@ -210,7 +210,7 @@ void BL_ConvertControllers( converter->RegisterGameController(gamecontroller, bcontr); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (bcontr->type==CONT_PYTHON) { SCA_PythonController *pyctrl= static_cast(gamecontroller); /* not strictly needed but gives syntax errors early on and @@ -225,7 +225,7 @@ void BL_ConvertControllers( // pyctrl->Import(); } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON //done with gamecontroller gamecontroller->Release(); diff --git a/source/gameengine/Converter/KX_ConvertProperties.cpp b/source/gameengine/Converter/KX_ConvertProperties.cpp index 44c0ad38909..6c850008e5e 100644 --- a/source/gameengine/Converter/KX_ConvertProperties.cpp +++ b/source/gameengine/Converter/KX_ConvertProperties.cpp @@ -126,7 +126,7 @@ void BL_ConvertProperties(Object* object,KX_GameObject* gameobj,SCA_TimeEventMan propval->Release(); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Warn if we double up on attributes, this isnt quite right since it wont find inherited attributes however there arnt many */ for(PyAttributeDef *attrdef = KX_GameObject::Attributes; attrdef->m_name; attrdef++) { if(strcmp(prop->name, attrdef->m_name)==0) { @@ -141,7 +141,7 @@ void BL_ConvertProperties(Object* object,KX_GameObject* gameobj,SCA_TimeEventMan } } /* end warning check */ -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON prop = prop->next; } diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript index a276d1623df..f6cf2331a43 100644 --- a/source/gameengine/Converter/SConscript +++ b/source/gameengine/Converter/SConscript @@ -29,8 +29,7 @@ if env['BF_DEBUG']: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Expressions/BoolValue.cpp b/source/gameengine/Expressions/BoolValue.cpp index e6bb454a1b5..5510554bd22 100644 --- a/source/gameengine/Expressions/BoolValue.cpp +++ b/source/gameengine/Expressions/BoolValue.cpp @@ -201,9 +201,9 @@ CValue* CBoolValue::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* CBoolValue::ConvertValueToPython() { return PyBool_FromLong(m_bool != 0); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/BoolValue.h b/source/gameengine/Expressions/BoolValue.h index dac70e3c0b7..8110b9719bf 100644 --- a/source/gameengine/Expressions/BoolValue.h +++ b/source/gameengine/Expressions/BoolValue.h @@ -45,7 +45,7 @@ public: void Configure(CValue* menuvalue); virtual CValue* GetReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython(); #endif diff --git a/source/gameengine/Expressions/CMakeLists.txt b/source/gameengine/Expressions/CMakeLists.txt index 828afa7ae92..ad446d1085e 100644 --- a/source/gameengine/Expressions/CMakeLists.txt +++ b/source/gameengine/Expressions/CMakeLists.txt @@ -58,8 +58,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_expressions "${SRC}" "${INC}") diff --git a/source/gameengine/Expressions/FloatValue.cpp b/source/gameengine/Expressions/FloatValue.cpp index 82c86ac68b2..e00121354f8 100644 --- a/source/gameengine/Expressions/FloatValue.cpp +++ b/source/gameengine/Expressions/FloatValue.cpp @@ -310,9 +310,9 @@ CValue* CFloatValue::GetReplica() } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* CFloatValue::ConvertValueToPython() { return PyFloat_FromDouble(m_float); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/FloatValue.h b/source/gameengine/Expressions/FloatValue.h index 49d4efa9f74..83b9ff1db5e 100644 --- a/source/gameengine/Expressions/FloatValue.h +++ b/source/gameengine/Expressions/FloatValue.h @@ -36,7 +36,7 @@ public: virtual CValue* GetReplica(); virtual CValue* Calc(VALUE_OPERATOR op, CValue *val); virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython(); #endif diff --git a/source/gameengine/Expressions/IntValue.cpp b/source/gameengine/Expressions/IntValue.cpp index 83e57200db0..5ba57e756c0 100644 --- a/source/gameengine/Expressions/IntValue.cpp +++ b/source/gameengine/Expressions/IntValue.cpp @@ -322,7 +322,7 @@ void CIntValue::SetValue(CValue* newval) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* CIntValue::ConvertValueToPython() { if((m_int > INT_MIN) && (m_int < INT_MAX)) @@ -330,4 +330,4 @@ PyObject* CIntValue::ConvertValueToPython() else return PyLong_FromLongLong(m_int); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/IntValue.h b/source/gameengine/Expressions/IntValue.h index 63efea56d14..e484c436177 100644 --- a/source/gameengine/Expressions/IntValue.h +++ b/source/gameengine/Expressions/IntValue.h @@ -48,7 +48,7 @@ public: void AddConfigurationData(CValue* menuvalue); virtual CValue* GetReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython(); #endif diff --git a/source/gameengine/Expressions/KX_Python.h b/source/gameengine/Expressions/KX_Python.h index 7901d5226f7..62353f04e50 100644 --- a/source/gameengine/Expressions/KX_Python.h +++ b/source/gameengine/Expressions/KX_Python.h @@ -40,7 +40,7 @@ #undef _POSIX_C_SOURCE #endif -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "Python.h" #define USE_MATHUTILS // Blender 2.5x api will use mathutils, for a while we might want to test without it diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp index 4d9d82efb98..258aada6565 100644 --- a/source/gameengine/Expressions/ListValue.cpp +++ b/source/gameengine/Expressions/ListValue.cpp @@ -268,7 +268,7 @@ bool CListValue::IsModified() return bmod; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -674,4 +674,4 @@ PyObject* CListValue::Pyfrom_id(PyObject* value) } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/ListValue.h b/source/gameengine/Expressions/ListValue.h index 8f3b9dcda0b..ff675dd0e68 100644 --- a/source/gameengine/Expressions/ListValue.h +++ b/source/gameengine/Expressions/ListValue.h @@ -60,7 +60,7 @@ public: bool CheckEqual(CValue* first,CValue* second); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* py_repr(void) { PyObject *py_proxy= this->GetProxy(); PyObject *py_list= PySequence_List(py_proxy); diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp index 32bf4ba95c4..9195bd64f3f 100644 --- a/source/gameengine/Expressions/PyObjectPlus.cpp +++ b/source/gameengine/Expressions/PyObjectPlus.cpp @@ -49,7 +49,7 @@ PyObjectPlus::~PyObjectPlus() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(m_proxy) { BGE_PROXY_REF(m_proxy)= NULL; Py_DECREF(m_proxy); /* Remove own reference, python may still have 1 */ @@ -60,14 +60,14 @@ PyObjectPlus::~PyObjectPlus() PyObjectPlus::PyObjectPlus() : SG_QList() // constructor { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_proxy= NULL; #endif }; void PyObjectPlus::ProcessReplica() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Clear the proxy, will be created again if needed with GetProxy() * otherwise the PyObject will point to the wrong reference */ m_proxy= NULL; @@ -84,7 +84,7 @@ void PyObjectPlus::ProcessReplica() */ void PyObjectPlus::InvalidateProxy() // check typename of each parent { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(m_proxy) { BGE_PROXY_REF(m_proxy)=NULL; Py_DECREF(m_proxy); @@ -94,7 +94,7 @@ void PyObjectPlus::InvalidateProxy() // check typename of each parent } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /*------------------------------ * PyObjectPlus Type -- Every class, even the abstract one should have a Type @@ -1224,4 +1224,4 @@ void PyObjectPlus::SetDeprecationWarningFirst(WarnLink* wlink) {m_base_wlink_f void PyObjectPlus::SetDeprecationWarningLinkLast(WarnLink* wlink) {m_base_wlink_last= wlink;} void PyObjectPlus::NullDeprecationWarning() {m_base_wlink_first= m_base_wlink_last= NULL;} -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h index b2688231a43..d69be6af5e5 100644 --- a/source/gameengine/Expressions/PyObjectPlus.h +++ b/source/gameengine/Expressions/PyObjectPlus.h @@ -43,7 +43,7 @@ * Python defines ------------------------------*/ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #ifdef USE_MATHUTILS extern "C" { #include "../../blender/python/generic/mathutils.h" /* so we can have mathutils callbacks */ @@ -459,7 +459,7 @@ typedef struct KX_PYATTRIBUTE_DEF { ------------------------------*/ typedef PyTypeObject * PyParentObject; // Define the PyParent Object -#else // DISABLE_PYTHON +#else // WITH_PYTHON #ifdef WITH_CXX_GUARDEDALLOC #define Py_Header \ @@ -505,7 +505,7 @@ public: virtual ~PyObjectPlus(); // destructor -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *m_proxy; /* actually a PyObjectPlus_Proxy */ /* These static functions are referenced by ALL PyObjectPlus_Proxy types @@ -561,7 +561,7 @@ public: static bool m_ignore_deprecation_warnings; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict); #endif diff --git a/source/gameengine/Expressions/SConscript b/source/gameengine/Expressions/SConscript index 85db689a9ba..dea652dabb4 100644 --- a/source/gameengine/Expressions/SConscript +++ b/source/gameengine/Expressions/SConscript @@ -9,8 +9,7 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Expressions/StringValue.h b/source/gameengine/Expressions/StringValue.h index d28e435e2a7..ef8228141a2 100644 --- a/source/gameengine/Expressions/StringValue.h +++ b/source/gameengine/Expressions/StringValue.h @@ -39,11 +39,11 @@ public: virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val); virtual void SetValue(CValue* newval) { m_strString = newval->GetText(); SetModified(true); }; virtual CValue* GetReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* ConvertValueToPython() { return PyUnicode_FromString(m_strString.Ptr()); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: // data member diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp index 1f4f961268b..262f543f834 100644 --- a/source/gameengine/Expressions/Value.cpp +++ b/source/gameengine/Expressions/Value.cpp @@ -29,7 +29,7 @@ double CValue::m_sZeroVec[3] = {0.0,0.0,0.0}; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyTypeObject CValue::Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -60,7 +60,7 @@ PyTypeObject CValue::Type = { PyMethodDef CValue::Methods[] = { {NULL,NULL} //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /*#define CVALUE_DEBUG*/ @@ -520,7 +520,7 @@ CValue* CValue::FindIdentifier(const STR_String& identifiername) return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyAttributeDef CValue::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("name", CValue, pyattr_get_name), @@ -611,7 +611,7 @@ PyObject* CValue::ConvertKeysToPython( void ) return pylist; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h index 009d95ee4d2..e6ea431ec1c 100644 --- a/source/gameengine/Expressions/Value.h +++ b/source/gameengine/Expressions/Value.h @@ -198,7 +198,7 @@ public: #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "object.h" #endif class CValue : public PyObjectPlus @@ -221,7 +221,7 @@ public: // Construction / Destruction CValue(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //static PyObject* PyMake(PyObject*,PyObject*); virtual PyObject *py_repr(void) { @@ -237,7 +237,7 @@ public: static PyObject * pyattr_get_name(void * self, const KX_PYATTRIBUTE_DEF * attrdef); virtual PyObject* ConvertKeysToPython( void ); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/CMakeLists.txt b/source/gameengine/GameLogic/CMakeLists.txt index 57150a90e99..b346df2b340 100644 --- a/source/gameengine/GameLogic/CMakeLists.txt +++ b/source/gameengine/GameLogic/CMakeLists.txt @@ -87,8 +87,7 @@ ENDIF(WITH_SDL) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_logic "${SRC}" "${INC}") diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp index f6d24af0e67..3e9217251b5 100644 --- a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp +++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp @@ -96,7 +96,7 @@ void SCA_2DFilterActuator::SetShaderText(const char *text) m_shaderText = text; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_ANDController.cpp b/source/gameengine/GameLogic/SCA_ANDController.cpp index 53c9be5215e..7e2c5bdb350 100644 --- a/source/gameengine/GameLogic/SCA_ANDController.cpp +++ b/source/gameengine/GameLogic/SCA_ANDController.cpp @@ -87,7 +87,7 @@ CValue* SCA_ANDController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -123,5 +123,5 @@ PyMethodDef SCA_ANDController::Methods[] = { PyAttributeDef SCA_ANDController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp index c77e58d2f3b..d6c328cd730 100644 --- a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp +++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp @@ -110,7 +110,7 @@ void SCA_ActuatorSensor::Update() } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -160,6 +160,6 @@ int SCA_ActuatorSensor::CheckActuator(void *self, const PyAttributeDef*) return 1; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.h b/source/gameengine/GameLogic/SCA_ActuatorSensor.h index 323746889bf..eb52d365079 100644 --- a/source/gameengine/GameLogic/SCA_ActuatorSensor.h +++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.h @@ -56,7 +56,7 @@ public: virtual void ReParent(SCA_IObject* parent); void Update(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -64,7 +64,7 @@ public: static int CheckActuator(void *self, const PyAttributeDef*); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp index e364225af3d..88f5855b223 100644 --- a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp +++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp @@ -94,7 +94,7 @@ bool SCA_AlwaysSensor::Evaluate() return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.cpp b/source/gameengine/GameLogic/SCA_DelaySensor.cpp index 6cad801e429..abe72fb6757 100644 --- a/source/gameengine/GameLogic/SCA_DelaySensor.cpp +++ b/source/gameengine/GameLogic/SCA_DelaySensor.cpp @@ -120,7 +120,7 @@ bool SCA_DelaySensor::Evaluate() return trigger; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -160,6 +160,6 @@ PyAttributeDef SCA_DelaySensor::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_IController.cpp b/source/gameengine/GameLogic/SCA_IController.cpp index c291ff091aa..0c6b8350bca 100644 --- a/source/gameengine/GameLogic/SCA_IController.cpp +++ b/source/gameengine/GameLogic/SCA_IController.cpp @@ -194,7 +194,7 @@ void SCA_IController::ApplyState(unsigned int state) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Python api */ @@ -247,4 +247,4 @@ PyObject* SCA_IController::pyattr_get_actuators(void *self_v, const KX_PYATTRIBU { return KX_PythonSeq_CreatePyObject((static_cast(self_v))->m_proxy, KX_PYGENSEQ_CONT_TYPE_ACTUATORS); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/SCA_IController.h b/source/gameengine/GameLogic/SCA_IController.h index e23a0d7dc92..2d19770be4a 100644 --- a/source/gameengine/GameLogic/SCA_IController.h +++ b/source/gameengine/GameLogic/SCA_IController.h @@ -99,11 +99,11 @@ public: } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_sensors(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_actuators(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp index f2e1a8dd151..afda218c99c 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp @@ -169,7 +169,7 @@ CValue* SCA_ILogicBrick::GetEvent() -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* python stuff */ @@ -253,4 +253,4 @@ PyObject* SCA_ILogicBrick::BoolToPyArg(bool boolarg) return PyLong_FromSsize_t(boolarg? KX_TRUE: KX_FALSE); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.h b/source/gameengine/GameLogic/SCA_ILogicBrick.h index 3225c245550..a444210e8d9 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.h +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.h @@ -133,7 +133,7 @@ public: virtual void Replace_IScene(SCA_IScene *val) {}; virtual void Replace_NetworkScene(NG_NetworkScene *val) {}; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // python methods static PyObject* pyattr_get_owner(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); @@ -157,7 +157,7 @@ protected: /** Convert a a c++ value to KX_TRUE, KX_FALSE in Python. */ PyObject* BoolToPyArg(bool); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/GameLogic/SCA_IObject.cpp b/source/gameengine/GameLogic/SCA_IObject.cpp index 7c0a5b2db15..ff71d1bf96b 100644 --- a/source/gameengine/GameLogic/SCA_IObject.cpp +++ b/source/gameengine/GameLogic/SCA_IObject.cpp @@ -303,7 +303,7 @@ void SCA_IObject::SetState(unsigned int state) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -342,4 +342,4 @@ PyAttributeDef SCA_IObject::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/GameLogic/SCA_IObject.h b/source/gameengine/GameLogic/SCA_IObject.h index 0178da5f343..591be6fe53b 100644 --- a/source/gameengine/GameLogic/SCA_IObject.h +++ b/source/gameengine/GameLogic/SCA_IObject.h @@ -41,7 +41,7 @@ class SCA_ISensor; class SCA_IController; class SCA_IActuator; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON template T PyVecTo(PyObject*); #endif diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp index fada69848b2..c655924aa48 100644 --- a/source/gameengine/GameLogic/SCA_ISensor.cpp +++ b/source/gameengine/GameLogic/SCA_ISensor.cpp @@ -300,7 +300,7 @@ void SCA_ISensor::Activate(class SCA_LogicManager* logicmgr) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ----------------------------------------------- */ /* Python Functions */ @@ -427,6 +427,6 @@ int SCA_ISensor::pyattr_check_tap(void *self_v, const KX_PYATTRIBUTE_DEF *attrde self->m_level = false; return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h index 2d3a3ef08a0..f31dd83343b 100644 --- a/source/gameengine/GameLogic/SCA_ISensor.h +++ b/source/gameengine/GameLogic/SCA_ISensor.h @@ -190,7 +190,7 @@ public: bool IsNoLink() const { return !m_links; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Python functions: */ KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,reset); @@ -210,7 +210,7 @@ public: KX_SENSOR_JUST_DEACTIVATED }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; #endif //__SCA_ISENSOR diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp index 29a6a73b865..a68938ec834 100644 --- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp +++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp @@ -241,7 +241,7 @@ bool SCA_JoystickSensor::isValid(SCA_JoystickSensor::KX_JOYSENSORMODE m) return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.h b/source/gameengine/GameLogic/SCA_JoystickSensor.h index 90fb16de747..39f826dfe02 100644 --- a/source/gameengine/GameLogic/SCA_JoystickSensor.h +++ b/source/gameengine/GameLogic/SCA_JoystickSensor.h @@ -117,7 +117,7 @@ public: return m_joyindex; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -157,7 +157,7 @@ public: return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp index 1a87528e540..fe4124eb833 100644 --- a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp +++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp @@ -408,7 +408,7 @@ void SCA_KeyboardSensor::LogKeystrokes(void) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Functions */ @@ -501,7 +501,7 @@ PyObject* SCA_KeyboardSensor::pyattr_get_events(void *self_v, const KX_PYATTRIBU return resultlist; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* Accessed from python */ diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.h b/source/gameengine/GameLogic/SCA_KeyboardSensor.h index 5ca329b0846..0a3b25ac361 100644 --- a/source/gameengine/GameLogic/SCA_KeyboardSensor.h +++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.h @@ -103,7 +103,7 @@ public: virtual bool IsPositiveTrigger(); bool TriggerOnAllKeys(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_LogicManager.cpp b/source/gameengine/GameLogic/SCA_LogicManager.cpp index d003c5618f1..ab06fe7f9ef 100644 --- a/source/gameengine/GameLogic/SCA_LogicManager.cpp +++ b/source/gameengine/GameLogic/SCA_LogicManager.cpp @@ -307,7 +307,7 @@ void SCA_LogicManager::AddTriggeredController(SCA_IController* controller, SCA_I { controller->Activate(m_triggeredControllerSet); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // so that the controller knows which sensor has activited it // only needed for python controller diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.cpp b/source/gameengine/GameLogic/SCA_MouseSensor.cpp index 9f4b25986b0..af11353c93e 100644 --- a/source/gameengine/GameLogic/SCA_MouseSensor.cpp +++ b/source/gameengine/GameLogic/SCA_MouseSensor.cpp @@ -232,7 +232,7 @@ bool SCA_MouseSensor::isValid(SCA_MouseSensor::KX_MOUSESENSORMODE m) return ((m > KX_MOUSESENSORMODE_NODEF) && (m < KX_MOUSESENSORMODE_MAX)); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -305,6 +305,6 @@ PyAttributeDef SCA_MouseSensor::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.h b/source/gameengine/GameLogic/SCA_MouseSensor.h index f52b57a3e11..dc0e9a11d39 100644 --- a/source/gameengine/GameLogic/SCA_MouseSensor.h +++ b/source/gameengine/GameLogic/SCA_MouseSensor.h @@ -104,7 +104,7 @@ class SCA_MouseSensor : public SCA_ISensor static void UpdateHotkey(void *self); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_NANDController.cpp b/source/gameengine/GameLogic/SCA_NANDController.cpp index c09a53d8ac7..bcb2c84a083 100644 --- a/source/gameengine/GameLogic/SCA_NANDController.cpp +++ b/source/gameengine/GameLogic/SCA_NANDController.cpp @@ -87,7 +87,7 @@ CValue* SCA_NANDController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_NORController.cpp b/source/gameengine/GameLogic/SCA_NORController.cpp index 8ebd79efcfa..5711fb5751b 100644 --- a/source/gameengine/GameLogic/SCA_NORController.cpp +++ b/source/gameengine/GameLogic/SCA_NORController.cpp @@ -87,7 +87,7 @@ CValue* SCA_NORController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -124,6 +124,6 @@ PyAttributeDef SCA_NORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_ORController.cpp b/source/gameengine/GameLogic/SCA_ORController.cpp index a638147e211..72c368d632f 100644 --- a/source/gameengine/GameLogic/SCA_ORController.cpp +++ b/source/gameengine/GameLogic/SCA_ORController.cpp @@ -83,7 +83,7 @@ void SCA_ORController::Trigger(SCA_LogicManager* logicmgr) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -120,6 +120,6 @@ PyAttributeDef SCA_ORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp index c1b49d32712..a5ac5654e21 100644 --- a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp +++ b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp @@ -217,7 +217,7 @@ void SCA_PropertyActuator::Relink(GEN_Map *obj_map) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.cpp b/source/gameengine/GameLogic/SCA_PropertySensor.cpp index be86b976a70..a32cc50fd63 100644 --- a/source/gameengine/GameLogic/SCA_PropertySensor.cpp +++ b/source/gameengine/GameLogic/SCA_PropertySensor.cpp @@ -304,7 +304,7 @@ CValue* SCA_PropertySensor::FindIdentifier(const STR_String& identifiername) return GetParent()->FindIdentifier(identifiername); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -378,6 +378,6 @@ PyAttributeDef SCA_PropertySensor::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.h b/source/gameengine/GameLogic/SCA_PropertySensor.h index 9a5c4762558..5a29c526fc0 100644 --- a/source/gameengine/GameLogic/SCA_PropertySensor.h +++ b/source/gameengine/GameLogic/SCA_PropertySensor.h @@ -84,7 +84,7 @@ public: virtual bool IsPositiveTrigger(); virtual CValue* FindIdentifier(const STR_String& identifiername); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp index 45f0684c02f..109b199f230 100644 --- a/source/gameengine/GameLogic/SCA_PythonController.cpp +++ b/source/gameengine/GameLogic/SCA_PythonController.cpp @@ -35,10 +35,10 @@ #include "SCA_IActuator.h" #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "compile.h" #include "eval.h" -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #include @@ -49,7 +49,7 @@ SCA_PythonController* SCA_PythonController::m_sCurrentController = NULL; SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, int mode) : SCA_IController(gameobj), -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_bytecode(NULL), m_function(NULL), #endif @@ -57,7 +57,7 @@ SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, int mode) m_bModified(true), m_debug(false), m_mode(mode) -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON , m_pythondictionary(NULL) #endif @@ -84,7 +84,7 @@ int SCA_PythonController::Release() SCA_PythonController::~SCA_PythonController() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //printf("released python byte script\n"); Py_XDECREF(m_bytecode); @@ -104,7 +104,7 @@ CValue* SCA_PythonController::GetReplica() { SCA_PythonController* replica = new SCA_PythonController(*this); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* why is this needed at all??? - m_bytecode is NULL'd below so this doesnt make sense * but removing it crashes blender (with YoFrankie). so leave in for now - Campbell */ Py_XINCREF(replica->m_bytecode); @@ -146,7 +146,7 @@ void SCA_PythonController::SetScriptName(const STR_String& name) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void SCA_PythonController::SetNamespace(PyObject* pythondictionary) { if (m_pythondictionary) @@ -171,7 +171,7 @@ int SCA_PythonController::IsTriggered(class SCA_ISensor* sensor) return 0; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* warning, self is not the SCA_PythonController, its a PyObjectPlus_Proxy */ PyObject* SCA_PythonController::sPyGetCurrentController(PyObject *self) @@ -527,13 +527,13 @@ int SCA_PythonController::pyattr_set_script(void *self_v, const KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } -#else // DISABLE_PYTHON +#else // WITH_PYTHON void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr) { /* intentionally blank */ } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_PythonController.h b/source/gameengine/GameLogic/SCA_PythonController.h index bd78014038c..602b5e27e47 100644 --- a/source/gameengine/GameLogic/SCA_PythonController.h +++ b/source/gameengine/GameLogic/SCA_PythonController.h @@ -42,7 +42,7 @@ class SCA_IObject; class SCA_PythonController : public SCA_IController { Py_Header; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON struct _object * m_bytecode; /* SCA_PYEXEC_SCRIPT only */ PyObject* m_function; /* SCA_PYEXEC_MODULE only */ #endif @@ -55,7 +55,7 @@ class SCA_PythonController : public SCA_IController protected: STR_String m_scriptText; STR_String m_scriptName; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_pythondictionary; /* for SCA_PYEXEC_SCRIPT only */ PyObject* m_pythonfunction; /* for SCA_PYEXEC_MODULE only */ #endif @@ -83,7 +83,7 @@ class SCA_PythonController : public SCA_IController void SetScriptText(const STR_String& text); void SetScriptName(const STR_String& name); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void SetNamespace(PyObject* pythondictionary); #endif void SetDebug(bool debug) { m_debug = debug; } @@ -94,7 +94,7 @@ class SCA_PythonController : public SCA_IController bool Import(); void ErrorPrint(const char *error_msg); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static const char* sPyGetCurrentController__doc__; static PyObject* sPyGetCurrentController(PyObject* self); static const char* sPyAddActiveActuator__doc__; diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp index 3d5d3568335..213446935b6 100644 --- a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp +++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp @@ -33,20 +33,20 @@ SCA_PythonKeyboard::SCA_PythonKeyboard(SCA_IInputDevice* keyboard) : PyObjectPlus(), m_keyboard(keyboard) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_event_dict = PyDict_New(); #endif } SCA_PythonKeyboard::~SCA_PythonKeyboard() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyDict_Clear(m_event_dict); Py_DECREF(m_event_dict); #endif } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.h b/source/gameengine/GameLogic/SCA_PythonKeyboard.h index 260835155e6..6a89ba7de76 100644 --- a/source/gameengine/GameLogic/SCA_PythonKeyboard.h +++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.h @@ -32,14 +32,14 @@ class SCA_PythonKeyboard : public PyObjectPlus Py_Header; private: class SCA_IInputDevice *m_keyboard; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_event_dict; #endif public: SCA_PythonKeyboard(class SCA_IInputDevice* keyboard); virtual ~SCA_PythonKeyboard(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); #endif }; diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.cpp b/source/gameengine/GameLogic/SCA_PythonMouse.cpp index 936ee2ff5c4..7267eb74594 100644 --- a/source/gameengine/GameLogic/SCA_PythonMouse.cpp +++ b/source/gameengine/GameLogic/SCA_PythonMouse.cpp @@ -35,20 +35,20 @@ SCA_PythonMouse::SCA_PythonMouse(SCA_IInputDevice* mouse, RAS_ICanvas* canvas) m_mouse(mouse), m_canvas(canvas) { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_event_dict = PyDict_New(); #endif } SCA_PythonMouse::~SCA_PythonMouse() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyDict_Clear(m_event_dict); Py_DECREF(m_event_dict); #endif } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.h b/source/gameengine/GameLogic/SCA_PythonMouse.h index 9e1085e6bec..15a7e19c602 100644 --- a/source/gameengine/GameLogic/SCA_PythonMouse.h +++ b/source/gameengine/GameLogic/SCA_PythonMouse.h @@ -33,7 +33,7 @@ class SCA_PythonMouse : public PyObjectPlus private: class SCA_IInputDevice *m_mouse; class RAS_ICanvas *m_canvas; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_event_dict; #endif public: @@ -42,7 +42,7 @@ public: void Show(bool visible); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC(SCA_PythonMouse, show); static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp index 4b90ca7dadf..c3d5988be24 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp +++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp @@ -305,7 +305,7 @@ void SCA_RandomActuator::enforceConstraints() { } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.h b/source/gameengine/GameLogic/SCA_RandomActuator.h index 41d19f5b4c4..1fd2180f32c 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.h +++ b/source/gameengine/GameLogic/SCA_RandomActuator.h @@ -92,7 +92,7 @@ class SCA_RandomActuator : public SCA_IActuator virtual CValue* GetReplica(); virtual void ProcessReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -112,7 +112,7 @@ class SCA_RandomActuator : public SCA_IActuator KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNormal); KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNegativeExponential); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */ diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.cpp b/source/gameengine/GameLogic/SCA_RandomSensor.cpp index a7d18ff40d4..8194f1c97c8 100644 --- a/source/gameengine/GameLogic/SCA_RandomSensor.cpp +++ b/source/gameengine/GameLogic/SCA_RandomSensor.cpp @@ -120,7 +120,7 @@ bool SCA_RandomSensor::Evaluate() return evaluateResult; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -176,6 +176,6 @@ int SCA_RandomSensor::pyattr_set_seed(void *self_v, const KX_PYATTRIBUTE_DEF *at return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.h b/source/gameengine/GameLogic/SCA_RandomSensor.h index 3be17943d84..af5a767c1c1 100644 --- a/source/gameengine/GameLogic/SCA_RandomSensor.h +++ b/source/gameengine/GameLogic/SCA_RandomSensor.h @@ -56,7 +56,7 @@ public: virtual bool IsPositiveTrigger(); virtual void Init(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ diff --git a/source/gameengine/GameLogic/SCA_XNORController.cpp b/source/gameengine/GameLogic/SCA_XNORController.cpp index 9f54e41d110..f1f76c83718 100644 --- a/source/gameengine/GameLogic/SCA_XNORController.cpp +++ b/source/gameengine/GameLogic/SCA_XNORController.cpp @@ -91,7 +91,7 @@ CValue* SCA_XNORController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -128,6 +128,6 @@ PyAttributeDef SCA_XNORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SCA_XORController.cpp b/source/gameengine/GameLogic/SCA_XORController.cpp index a58f30a3bed..ee63b72e455 100644 --- a/source/gameengine/GameLogic/SCA_XORController.cpp +++ b/source/gameengine/GameLogic/SCA_XORController.cpp @@ -91,7 +91,7 @@ CValue* SCA_XORController::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -127,6 +127,6 @@ PyMethodDef SCA_XORController::Methods[] = { PyAttributeDef SCA_XORController::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/GameLogic/SConscript b/source/gameengine/GameLogic/SConscript index c9d1fed875d..04990e10d06 100644 --- a/source/gameengine/GameLogic/SConscript +++ b/source/gameengine/GameLogic/SConscript @@ -16,8 +16,7 @@ else: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'): if env['BF_DEBUG']: diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript index 7a16e950b36..60cb437b10f 100644 --- a/source/gameengine/GamePlayer/common/SConscript +++ b/source/gameengine/GamePlayer/common/SConscript @@ -62,8 +62,7 @@ defs = [ 'GLEW_STATIC' ] if env['WITH_BF_PYTHON']: incs += Split(env['BF_PYTHON_INC']) -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') incs += Split(env['BF_PNG_INC']) incs += Split(env['BF_ZLIB_INC']) diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index d1b8fb12336..506601f478b 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -677,11 +677,11 @@ bool GPG_Application::startEngine(void) m_startScene, m_canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // some python things PyObject *gameLogic, *gameLogic_keys; setupGamePython(m_ketsjiengine, startscene, m_maggie, NULL, &gameLogic, &gameLogic_keys, m_argc, m_argv); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON //initialize Dome Settings if(m_startScene->gm.stereoflag == STEREO_DOME) diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript index 41520a06c66..d2224884f7f 100644 --- a/source/gameengine/GamePlayer/ghost/SConscript +++ b/source/gameengine/GamePlayer/ghost/SConscript @@ -44,8 +44,7 @@ defs = [ 'GLEW_STATIC' ] if env['WITH_BF_PYTHON']: incs += Split(env['BF_PYTHON_INC']) -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp index 8edefe7ac2d..b00c1b7efb7 100644 --- a/source/gameengine/Ketsji/BL_Shader.cpp +++ b/source/gameengine/Ketsji/BL_Shader.cpp @@ -728,7 +728,7 @@ void BL_Shader::SetUniform(int uniform, const int* val, int len) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyMethodDef BL_Shader::Methods[] = { @@ -1411,6 +1411,6 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformDef, "setUniformDef(name, enum)" ) return NULL; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON // eof diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h index 5108acea0ff..77c642ecc7b 100644 --- a/source/gameengine/Ketsji/BL_Shader.h +++ b/source/gameengine/Ketsji/BL_Shader.h @@ -222,7 +222,7 @@ public: void SetUniform(int uniform, const int val); // Python interface -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual PyObject* py_repr(void) { return PyUnicode_FromFormat("BL_Shader\n\tvertex shader:%s\n\n\tfragment shader%s\n\n", vertProg, fragProg); } // ----------------------------------- diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt index 2813160fb82..1ca71e678e8 100644 --- a/source/gameengine/Ketsji/CMakeLists.txt +++ b/source/gameengine/Ketsji/CMakeLists.txt @@ -134,8 +134,7 @@ ENDIF(WITH_SDL) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_FFMPEG) diff --git a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt index 2b1c1a698f3..5099534c0ad 100644 --- a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt +++ b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt @@ -46,8 +46,7 @@ SET(SRC IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(kx_network "${SRC}" "${INC}") diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp index e047a9aa273..0f563dc4fe4 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp @@ -91,7 +91,7 @@ CValue* KX_NetworkMessageActuator::GetReplica() return replica; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* -------------------------------------------------------------------- */ /* Python interface --------------------------------------------------- */ @@ -132,4 +132,4 @@ PyAttributeDef KX_NetworkMessageActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp index 56ccac9a93e..91b05990ba1 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp @@ -154,7 +154,7 @@ bool KX_NetworkMessageSensor::IsPositiveTrigger() return m_IsUp; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -215,4 +215,4 @@ PyObject* KX_NetworkMessageSensor::pyattr_get_subjects(void *self_v, const KX_PY } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h index 1efd25dd65f..8f5a11426a7 100644 --- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h +++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h @@ -71,7 +71,7 @@ public: m_NetworkScene= val; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------- */ /* Python interface -------------------------------------------- */ @@ -81,7 +81,7 @@ public: static PyObject* pyattr_get_bodies(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_subjects(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KXNetwork/SConscript b/source/gameengine/Ketsji/KXNetwork/SConscript index e7f98ff5850..78cdc8df9af 100644 --- a/source/gameengine/Ketsji/KXNetwork/SConscript +++ b/source/gameengine/Ketsji/KXNetwork/SConscript @@ -11,7 +11,6 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') env.BlenderLib ( 'bf_network', Split(sources), Split(incs), defines=defs,libtype=['core','player'], priority=[400,125], cxx_compileflags=env['BGE_CXXFLAGS']) diff --git a/source/gameengine/Ketsji/KX_ArmatureSensor.cpp b/source/gameengine/Ketsji/KX_ArmatureSensor.cpp index a47a1972beb..732c0b910df 100644 --- a/source/gameengine/Ketsji/KX_ArmatureSensor.cpp +++ b/source/gameengine/Ketsji/KX_ArmatureSensor.cpp @@ -149,7 +149,7 @@ bool KX_ArmatureSensor::Evaluate() return (reset) ? true : false; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -201,4 +201,4 @@ PyObject* KX_ArmatureSensor::pyattr_get_constraint(void *self, const struct KX_P Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_ArmatureSensor.h b/source/gameengine/Ketsji/KX_ArmatureSensor.h index 636309f5bdf..b007899c4ff 100644 --- a/source/gameengine/Ketsji/KX_ArmatureSensor.h +++ b/source/gameengine/Ketsji/KX_ArmatureSensor.h @@ -66,14 +66,14 @@ public: // identify the constraint that this actuator controls void FindConstraint(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ static PyObject* pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: struct bConstraint* m_constraint; diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp index d88997e2128..a4dc68b92e5 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp @@ -783,7 +783,7 @@ void KX_BlenderMaterial::SetBlenderGLSLShader(int layer) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyMethodDef KX_BlenderMaterial::Methods[] = { @@ -967,4 +967,4 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( bge.logic.sr return NULL; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h index 239e334f68a..745045ff784 100644 --- a/source/gameengine/Ketsji/KX_BlenderMaterial.h +++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h @@ -98,7 +98,7 @@ public: } }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // -------------------------------- virtual PyObject* py_repr(void) { return PyUnicode_FromString(mMaterial->matname.ReadPtr()); } @@ -113,7 +113,7 @@ public: KX_PYMETHOD_DOC( KX_BlenderMaterial, setTexture ); KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending ); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON // -------------------------------- // pre calculate to avoid pops/lag at startup diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp index 2402baf92ac..46a92365302 100644 --- a/source/gameengine/Ketsji/KX_Camera.cpp +++ b/source/gameengine/Ketsji/KX_Camera.cpp @@ -474,7 +474,7 @@ int KX_Camera::GetViewportTop() const return m_camdata.m_viewporttop; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //---------------------------------------------------------------------------- //Python diff --git a/source/gameengine/Ketsji/KX_Camera.h b/source/gameengine/Ketsji/KX_Camera.h index ad2460d34ef..130dfd4067d 100644 --- a/source/gameengine/Ketsji/KX_Camera.h +++ b/source/gameengine/Ketsji/KX_Camera.h @@ -41,7 +41,7 @@ #include "IntValue.h" #include "RAS_CameraData.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* utility conversion function */ bool ConvertPythonToCamera(PyObject * value, KX_Camera **object, bool py_none_ok, const char *error_prefix); #endif @@ -269,7 +269,7 @@ public: virtual int GetGameObjectType() { return OBJ_CAMERA; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC_VARARGS(KX_Camera, sphereInsideFrustum); KX_PYMETHOD_DOC_O(KX_Camera, boxInsideFrustum); KX_PYMETHOD_DOC_O(KX_Camera, pointInsideFrustum); diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp index bc67ecbe1a5..18d3e046577 100644 --- a/source/gameengine/Ketsji/KX_CameraActuator.cpp +++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp @@ -346,7 +346,7 @@ CValue *KX_CameraActuator::findObject(char *obName) return NULL; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -414,6 +414,6 @@ int KX_CameraActuator::pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_CameraActuator.h b/source/gameengine/Ketsji/KX_CameraActuator.h index 2bc0ee18593..0a0a47f1ce2 100644 --- a/source/gameengine/Ketsji/KX_CameraActuator.h +++ b/source/gameengine/Ketsji/KX_CameraActuator.h @@ -114,7 +114,7 @@ private : /** Methods inherited from SCA_ILogicBrick */ virtual void Relink(GEN_Map *obj_map); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -124,7 +124,7 @@ private : static PyObject* pyattr_get_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp index 9380f4b5d2f..15a4a4680bb 100644 --- a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp +++ b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp @@ -557,7 +557,7 @@ bool KX_ConstraintActuator::IsValidMode(KX_ConstraintActuator::KX_CONSTRAINTTYPE return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp index b1baa5fe9e1..2882ca5a371 100644 --- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp +++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp @@ -45,7 +45,7 @@ KX_ConstraintWrapper::~KX_ConstraintWrapper() { } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* KX_ConstraintWrapper::PyGetConstraintId() { @@ -120,4 +120,4 @@ PyObject* KX_ConstraintWrapper::pyattr_get_constraintId(void *self_v, const KX_P return self->PyGetConstraintId(); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h index db9543c23ae..58c204d5da0 100644 --- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h +++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h @@ -40,7 +40,7 @@ public: virtual ~KX_ConstraintWrapper (); int getConstraintId() { return m_constraintId;}; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_NOARGS(KX_ConstraintWrapper,GetConstraintId); KX_PYMETHOD(KX_ConstraintWrapper,SetParam); KX_PYMETHOD(KX_ConstraintWrapper,GetParam); diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp index 64ef06a4e09..36fc02ab833 100644 --- a/source/gameengine/Ketsji/KX_Dome.cpp +++ b/source/gameengine/Ketsji/KX_Dome.cpp @@ -24,7 +24,7 @@ Developed as part of a Research and Development project for SAT - La Société d #include "KX_Dome.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include #endif diff --git a/source/gameengine/Ketsji/KX_GameActuator.cpp b/source/gameengine/Ketsji/KX_GameActuator.cpp index 208c526398a..1a195913e4a 100644 --- a/source/gameengine/Ketsji/KX_GameActuator.cpp +++ b/source/gameengine/Ketsji/KX_GameActuator.cpp @@ -124,7 +124,7 @@ bool KX_GameActuator::Update() } case KX_GAME_SAVECFG: { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_ketsjiengine) { char mashal_path[512]; @@ -152,11 +152,11 @@ bool KX_GameActuator::Update() delete [] marshal_buffer; } break; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } case KX_GAME_LOADCFG: { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_ketsjiengine) { char mashal_path[512]; @@ -191,7 +191,7 @@ bool KX_GameActuator::Update() } } break; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } default: ; /* do nothing? this is an internal error !!! */ @@ -201,7 +201,7 @@ bool KX_GameActuator::Update() } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -241,4 +241,4 @@ PyAttributeDef KX_GameActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp index bbb17cd1df9..6b1c36a1589 100644 --- a/source/gameengine/Ketsji/KX_GameObject.cpp +++ b/source/gameengine/Ketsji/KX_GameObject.cpp @@ -102,7 +102,7 @@ KX_GameObject::KX_GameObject( m_xray(false), m_pHitObject(NULL), m_isDeformable(false) -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON , m_attr_dict(NULL) #endif { @@ -148,12 +148,12 @@ KX_GameObject::~KX_GameObject() { delete m_pGraphicController; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_attr_dict) { PyDict_Clear(m_attr_dict); /* incase of circular refs or other weired cases */ Py_DECREF(m_attr_dict); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } KX_GameObject* KX_GameObject::GetClientObject(KX_ClientObjectInfo* info) @@ -348,7 +348,7 @@ void KX_GameObject::ProcessReplica() m_pClient_info->m_gameobject = this; m_state = 0; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if(m_attr_dict) m_attr_dict= PyDict_Copy(m_attr_dict); #endif @@ -1448,7 +1448,7 @@ void KX_GameObject_Mathutils_Callback_Init(void) #endif // USE_MATHUTILS -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------- python stuff ---------------------------------------------------*/ PyMethodDef KX_GameObject::Methods[] = { {"applyForce", (PyCFunction) KX_GameObject::sPyApplyForce, METH_VARARGS}, @@ -3053,4 +3053,4 @@ bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py return false; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h index 14587d25c7f..640816e19ca 100644 --- a/source/gameengine/Ketsji/KX_GameObject.h +++ b/source/gameengine/Ketsji/KX_GameObject.h @@ -60,7 +60,7 @@ class PHY_IGraphicController; class PHY_IPhysicsEnvironment; struct Object; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* utility conversion function */ bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py_none_ok, const char *error_prefix); #endif @@ -116,7 +116,7 @@ public: */ static KX_GameObject* GetClientObject(KX_ClientObjectInfo* info); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Python attributes that wont convert into CValue // // there are 2 places attributes can be stored, in the CValue, @@ -796,7 +796,7 @@ public: CListValue* GetChildren(); CListValue* GetChildrenRecursive(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /** * @section Python interface functions. */ diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp index eca40cafb0e..605aea5f592 100644 --- a/source/gameengine/Ketsji/KX_IpoActuator.cpp +++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp @@ -400,7 +400,7 @@ int KX_IpoActuator::string2mode(char* modename) { return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -448,6 +448,6 @@ PyAttributeDef KX_IpoActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp index 4f3b6e5bb96..a1c7957dc72 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp @@ -112,7 +112,7 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system) m_rendertools(NULL), m_sceneconverter(NULL), m_networkdevice(NULL), -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pythondictionary(NULL), #endif m_keyboarddevice(NULL), @@ -233,7 +233,7 @@ void KX_KetsjiEngine::SetRasterizer(RAS_IRasterizer* rasterizer) m_rasterizer = rasterizer; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* * At the moment the bge.logic module is imported into 'pythondictionary' after this function is called. * if this function ever changes to assign a copy, make sure the game logic module is imported into this dictionary before hand. @@ -370,7 +370,7 @@ void KX_KetsjiEngine::RenderDome() } m_dome->Draw(); // Draw Callback for the last scene -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON scene->RunDrawingCallbacks(scene->GetPostDrawCB()); #endif EndFrame(); @@ -612,7 +612,7 @@ else m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true); SG_SetActiveStage(SG_STAGE_PHYSICS1); // set Python hooks for each scene -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment()); #endif KX_SetActiveScene(scene); @@ -716,7 +716,7 @@ else m_suspendeddelta = scene->getSuspendedDelta(); // set Python hooks for each scene -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment()); #endif KX_SetActiveScene(scene); @@ -1287,7 +1287,7 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam) m_logger->StartLog(tc_rasterizer, m_kxsystem->GetTimeInSeconds(), true); SG_SetActiveStage(SG_STAGE_RENDER); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // Run any pre-drawing python callbacks scene->RunDrawingCallbacks(scene->GetPreDrawCB()); #endif @@ -1304,7 +1304,7 @@ void KX_KetsjiEngine::PostRenderScene(KX_Scene* scene) { m_rendertools->MotionBlur(m_rasterizer); scene->Render2DFilters(m_canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON scene->RunDrawingCallbacks(scene->GetPostDrawCB()); #endif m_rasterizer->FlushDebugLines(); diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h index f52ec8192cc..4ce14e100cc 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.h +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h @@ -70,7 +70,7 @@ private: class RAS_IRenderTools* m_rendertools; class KX_ISceneConverter* m_sceneconverter; class NG_NetworkDeviceInterface* m_networkdevice; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* borrowed from sys.modules["__main__"], dont manage ref's */ PyObject* m_pythondictionary; #endif @@ -204,7 +204,7 @@ public: void SetCanvas(RAS_ICanvas* canvas); void SetRenderTools(RAS_IRenderTools* rendertools); void SetRasterizer(RAS_IRasterizer* rasterizer); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void SetPyNamespace(PyObject* pythondictionary); PyObject* GetPyNamespace(){return m_pythondictionary;}; #endif diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp index fdd325c46a1..b608be4c89f 100644 --- a/source/gameengine/Ketsji/KX_Light.cpp +++ b/source/gameengine/Ketsji/KX_Light.cpp @@ -259,7 +259,7 @@ void KX_LightObject::UnbindShadowBuffer(RAS_IRasterizer *ras) GPU_lamp_shadow_buffer_unbind(lamp); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Integration Hooks */ /* ------------------------------------------------------------------------- */ @@ -385,4 +385,4 @@ int KX_LightObject::pyattr_set_type(void* self_v, const KX_PYATTRIBUTE_DEF *attr return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h index 334aed1995d..f7b40d24293 100644 --- a/source/gameengine/Ketsji/KX_Light.h +++ b/source/gameengine/Ketsji/KX_Light.h @@ -69,7 +69,7 @@ public: virtual int GetGameObjectType() { return OBJ_LIGHT; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* attributes */ static PyObject* pyattr_get_color(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_color(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject* value); diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp index a5ff7ebcbc1..3cedda38201 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.cpp +++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp @@ -26,7 +26,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_MeshProxy.h" #include "RAS_IPolygonMaterial.h" @@ -308,4 +308,4 @@ bool ConvertPythonToMesh(PyObject * value, RAS_MeshObject **object, bool py_none return false; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_MeshProxy.h b/source/gameengine/Ketsji/KX_MeshProxy.h index 7b627040b4c..29231498163 100644 --- a/source/gameengine/Ketsji/KX_MeshProxy.h +++ b/source/gameengine/Ketsji/KX_MeshProxy.h @@ -29,7 +29,7 @@ #ifndef __KX_MESHPROXY #define __KX_MESHPROXY -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "SCA_IObject.h" @@ -74,7 +74,7 @@ public: static PyObject * pyattr_get_numPolygons(void * self, const KX_PYATTRIBUTE_DEF * attrdef); }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //__KX_MESHPROXY diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp index 19114c86c98..637210525f8 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp @@ -347,7 +347,7 @@ const MT_Vector2& KX_MouseFocusSensor::HitUV() const return m_hitUV; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -442,7 +442,7 @@ PyObject* KX_MouseFocusSensor::pyattr_get_hit_uv(void *self_v, const KX_PYATTRIB return PyObjectFrom(self->HitUV()); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h index c969aa3ec74..3ea0f932314 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h @@ -94,7 +94,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor const MT_Vector3& HitNormal() const; const MT_Vector2& HitUV() const; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -109,7 +109,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor static PyObject* pyattr_get_hit_normal(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_hit_uv(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* --------------------------------------------------------------------- */ SCA_IObject* m_hitObject; diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp index 36c1b0f5bd1..c9af5d8d2a5 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.cpp +++ b/source/gameengine/Ketsji/KX_NearSensor.cpp @@ -242,7 +242,7 @@ bool KX_NearSensor::NewHandleCollision(void* obj1,void* obj2,const PHY_CollData return false; // was DT_CONTINUE; but this was defined in Sumo as false } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Functions */ @@ -285,4 +285,4 @@ PyAttributeDef KX_NearSensor::Attributes[] = { {NULL} //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_NearSensor.h b/source/gameengine/Ketsji/KX_NearSensor.h index 10dba22c4e9..67f235ceae2 100644 --- a/source/gameengine/Ketsji/KX_NearSensor.h +++ b/source/gameengine/Ketsji/KX_NearSensor.h @@ -78,7 +78,7 @@ public: virtual bool BroadPhaseSensorFilterCollision(void*obj1,void*obj2) { return false; }; virtual sensortype GetSensorType() { return ST_NEAR; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -99,7 +99,7 @@ public: return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.cpp b/source/gameengine/Ketsji/KX_ObjectActuator.cpp index 0d0cac3c084..9f1df329005 100644 --- a/source/gameengine/Ketsji/KX_ObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_ObjectActuator.cpp @@ -313,7 +313,7 @@ bool KX_ObjectActuator::isValid(KX_ObjectActuator::KX_OBJECT_ACT_VEC_TYPE type) return res; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -636,6 +636,6 @@ int KX_ObjectActuator::pyattr_set_reference(void *self, const struct KX_PYATTRIB return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.h b/source/gameengine/Ketsji/KX_ObjectActuator.h index b12cf77d3e1..9dab1e39cba 100644 --- a/source/gameengine/Ketsji/KX_ObjectActuator.h +++ b/source/gameengine/Ketsji/KX_ObjectActuator.h @@ -157,7 +157,7 @@ public: } virtual bool Update(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -217,7 +217,7 @@ public: return 0; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_ParentActuator.cpp b/source/gameengine/Ketsji/KX_ParentActuator.cpp index 62740585831..b41d48f5cf3 100644 --- a/source/gameengine/Ketsji/KX_ParentActuator.cpp +++ b/source/gameengine/Ketsji/KX_ParentActuator.cpp @@ -130,7 +130,7 @@ bool KX_ParentActuator::Update() return false; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -199,6 +199,6 @@ int KX_ParentActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_ParentActuator.h b/source/gameengine/Ketsji/KX_ParentActuator.h index 884b1829ae3..28745c6d0f5 100644 --- a/source/gameengine/Ketsji/KX_ParentActuator.h +++ b/source/gameengine/Ketsji/KX_ParentActuator.h @@ -77,7 +77,7 @@ class KX_ParentActuator : public SCA_IActuator virtual void Relink(GEN_Map *obj_map); virtual bool UnlinkObject(SCA_IObject* clientobj); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -87,7 +87,7 @@ class KX_ParentActuator : public SCA_IActuator static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_ParentActuator : public SCA_PropertyActuator */ diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp index 15fc3e5c471..471774866ac 100644 --- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp +++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp @@ -46,7 +46,7 @@ KX_PhysicsObjectWrapper::~KX_PhysicsObjectWrapper() { } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* KX_PhysicsObjectWrapper::PySetPosition(PyObject* args) { diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h index 01980c0f644..ca7e99350c4 100644 --- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h +++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h @@ -39,14 +39,14 @@ public: KX_PhysicsObjectWrapper(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsEnvironment* physenv); virtual ~KX_PhysicsObjectWrapper(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetPosition); KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetLinearVelocity); KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetAngularVelocity); KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetActive); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: class PHY_IPhysicsController* m_ctrl; diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp index 9395e57e68b..9843d93c506 100644 --- a/source/gameengine/Ketsji/KX_PolyProxy.cpp +++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp @@ -26,7 +26,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_PolyProxy.h" #include "KX_MeshProxy.h" @@ -267,4 +267,4 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterial, } } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h index 3e669630e30..179fb67f85f 100644 --- a/source/gameengine/Ketsji/KX_PolyProxy.h +++ b/source/gameengine/Ketsji/KX_PolyProxy.h @@ -29,7 +29,7 @@ #ifndef __KX_POLYROXY #define __KX_POLYPROXY -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "SCA_IObject.h" @@ -77,7 +77,7 @@ public: }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //__KX_POLYPROXY diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp index 63204b16e8b..89889845125 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp @@ -54,7 +54,7 @@ KX_PolygonMaterial::KX_PolygonMaterial() m_tface(NULL), m_mcol(NULL), m_material(NULL), -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pymaterial(NULL), #endif m_pass(0) @@ -90,7 +90,7 @@ void KX_PolygonMaterial::Initialize( m_tface = tface; m_mcol = mcol; m_material = ma; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_pymaterial = 0; #endif m_pass = 0; @@ -98,19 +98,19 @@ void KX_PolygonMaterial::Initialize( KX_PolygonMaterial::~KX_PolygonMaterial() { -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_pymaterial) { Py_DECREF(m_pymaterial); } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON } bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const { bool dopass = false; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON if (m_pymaterial) { PyObject *pyRasty = PyCObject_FromVoidPtr((void*)rasty, NULL); /* new reference */ @@ -130,7 +130,7 @@ bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingI } } else -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON { switch (m_pass++) { @@ -201,7 +201,7 @@ void KX_PolygonMaterial::GetMaterialRGBAColor(unsigned char *rgba) const RAS_IPolyMaterial::GetMaterialRGBAColor(rgba); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON //---------------------------------------------------------------------------- //Python @@ -393,4 +393,4 @@ int KX_PolygonMaterial::pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.h b/source/gameengine/Ketsji/KX_PolygonMaterial.h index 03b4bf11a18..17adbac79c0 100644 --- a/source/gameengine/Ketsji/KX_PolygonMaterial.h +++ b/source/gameengine/Ketsji/KX_PolygonMaterial.h @@ -58,7 +58,7 @@ private: unsigned int* m_mcol; Material* m_material; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_pymaterial; #endif @@ -122,7 +122,7 @@ public: } virtual void GetMaterialRGBAColor(unsigned char *rgba) const; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC(KX_PolygonMaterial, updateTexture); KX_PYMETHOD_DOC(KX_PolygonMaterial, setTexture); KX_PYMETHOD_DOC(KX_PolygonMaterial, activate); diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp index bbf8152bd68..d2cb9aef985 100644 --- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp +++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp @@ -37,7 +37,7 @@ #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON // nasty glob variable to connect scripting language // if there is a better way (without global), please do so! @@ -659,5 +659,5 @@ PHY_IPhysicsEnvironment* PHY_GetActiveEnvironment() return g_CurrentActivePhysicsEnvironment; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.h b/source/gameengine/Ketsji/KX_PyConstraintBinding.h index a1b3c3d6da3..6da60794eb0 100644 --- a/source/gameengine/Ketsji/KX_PyConstraintBinding.h +++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.h @@ -29,7 +29,7 @@ #ifndef PHY_PYTHON_CONSTRAINTBINDING #define PHY_PYTHON_CONSTRAINTBINDING -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include @@ -37,7 +37,7 @@ PyObject* initPythonConstraintBinding(); void PHY_RemovePythonConstraintBinding(); void PHY_SetActiveEnvironment(class PHY_IPhysicsEnvironment* env); PHY_IPhysicsEnvironment* PHY_GetActiveEnvironment(); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //PHY_PYTHON_CONSTRAINTBINDING diff --git a/source/gameengine/Ketsji/KX_PyMath.cpp b/source/gameengine/Ketsji/KX_PyMath.cpp index 12f88331d15..45957ca1911 100644 --- a/source/gameengine/Ketsji/KX_PyMath.cpp +++ b/source/gameengine/Ketsji/KX_PyMath.cpp @@ -32,7 +32,7 @@ #pragma warning (disable : 4786) #endif //WIN32 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "MT_Vector3.h" #include "MT_Vector4.h" @@ -190,4 +190,4 @@ PyObject* PyObjectFrom(const MT_Tuple2 &vec) #endif } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PyMath.h b/source/gameengine/Ketsji/KX_PyMath.h index 9c9688f79cd..589bd72c760 100644 --- a/source/gameengine/Ketsji/KX_PyMath.h +++ b/source/gameengine/Ketsji/KX_PyMath.h @@ -42,7 +42,7 @@ #include "KX_Python.h" #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #ifdef USE_MATHUTILS extern "C" { #include "../../blender/python/generic/mathutils.h" /* so we can have mathutils callbacks */ @@ -239,4 +239,4 @@ PyObject* PyObjectFrom(const MT_Tuple4 &pos); #endif -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 42c3771ba94..99870c42018 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -34,7 +34,7 @@ #pragma warning (disable : 4786) #endif //WIN32 -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #ifdef _POSIX_C_SOURCE #undef _POSIX_C_SOURCE @@ -56,7 +56,6 @@ extern "C" { #include "marshal.h" /* python header for loading/saving dicts */ } -#define WITH_PYTHON #include "AUD_PyInit.h" #endif @@ -139,7 +138,7 @@ extern "C" { // 'local' copy of canvas ptr, for window height/width python scripts -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static RAS_ICanvas* gp_Canvas = NULL; static char gp_GamePythonPath[FILE_MAXDIR + FILE_MAXFILE] = ""; @@ -147,7 +146,7 @@ static char gp_GamePythonPathOrig[FILE_MAXDIR + FILE_MAXFILE] = ""; // not super static SCA_PythonKeyboard* gp_PythonKeyboard = NULL; static SCA_PythonMouse* gp_PythonMouse = NULL; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON static KX_Scene* gp_KetsjiScene = NULL; static KX_KetsjiEngine* gp_KetsjiEngine = NULL; @@ -176,7 +175,7 @@ void KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,cons gp_Rasterizer->DrawDebugLine(from,to,color); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON static PyObject *gp_OrigPythonSysPath= NULL; static PyObject *gp_OrigPythonSysModules= NULL; @@ -2452,4 +2451,4 @@ void resetGamePythonPath() gp_GamePythonPathOrig[0] = '\0'; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PythonInit.h b/source/gameengine/Ketsji/KX_PythonInit.h index fb59a2f21eb..7b0ed08c6bb 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.h +++ b/source/gameengine/Ketsji/KX_PythonInit.h @@ -39,7 +39,7 @@ typedef enum { extern bool gUseVisibilityTemp; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* initGameLogic(class KX_KetsjiEngine *engine, class KX_Scene* ketsjiscene); PyObject* initGameKeys(); PyObject* initRasterizer(class RAS_IRasterizer* rasty,class RAS_ICanvas* canvas); diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp index 6b9d7a2cccf..3cca4f39f85 100644 --- a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp +++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp @@ -32,7 +32,7 @@ #ifndef _adr_py_init_types_h_ // only process once, #define _adr_py_init_types_h_ // even if multiply included -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Only for Class::Parents */ #include "BL_BlenderShader.h" @@ -256,6 +256,6 @@ void initPyTypes(void) #endif } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.h b/source/gameengine/Ketsji/KX_PythonInitTypes.h index c16fafedf93..1053f320e5e 100644 --- a/source/gameengine/Ketsji/KX_PythonInitTypes.h +++ b/source/gameengine/Ketsji/KX_PythonInitTypes.h @@ -30,7 +30,7 @@ #ifndef _adr_py_init_types_h_ // only process once, #define _adr_py_init_types_h_ // even if multiply included -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void initPyTypes(void); #endif diff --git a/source/gameengine/Ketsji/KX_PythonSeq.cpp b/source/gameengine/Ketsji/KX_PythonSeq.cpp index 5c87fe2e757..bed3f33ab77 100644 --- a/source/gameengine/Ketsji/KX_PythonSeq.cpp +++ b/source/gameengine/Ketsji/KX_PythonSeq.cpp @@ -28,7 +28,7 @@ * Readonly sequence wrapper for lookups on logic bricks */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_PythonSeq.h" #include "KX_GameObject.h" @@ -512,4 +512,4 @@ PyTypeObject KX_PythonSeq_Type = { NULL }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_PythonSeq.h b/source/gameengine/Ketsji/KX_PythonSeq.h index ca8f667852a..7ca36cc19f4 100644 --- a/source/gameengine/Ketsji/KX_PythonSeq.h +++ b/source/gameengine/Ketsji/KX_PythonSeq.h @@ -31,7 +31,7 @@ #ifndef _adr_py_seq_h_ // only process once, #define _adr_py_seq_h_ // even if multiply included -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "PyObjectPlus.h" @@ -61,6 +61,6 @@ typedef struct { PyObject *KX_PythonSeq_CreatePyObject(PyObject *base, short type); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif // _adr_py_seq_h_ diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp index 041559158dd..60dc3be7d6e 100644 --- a/source/gameengine/Ketsji/KX_RadarSensor.cpp +++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp @@ -172,7 +172,7 @@ void KX_RadarSensor::SynchronizeTransform() /* Python Functions */ /* ------------------------------------------------------------------------- */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python Integration Hooks */ @@ -212,4 +212,4 @@ PyAttributeDef KX_RadarSensor::Attributes[] = { {NULL} //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_RaySensor.cpp b/source/gameengine/Ketsji/KX_RaySensor.cpp index e745d1f0334..001c7a290d7 100644 --- a/source/gameengine/Ketsji/KX_RaySensor.cpp +++ b/source/gameengine/Ketsji/KX_RaySensor.cpp @@ -309,7 +309,7 @@ bool KX_RaySensor::Evaluate() return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -365,4 +365,4 @@ PyObject* KX_RaySensor::pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_ Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_RaySensor.h b/source/gameengine/Ketsji/KX_RaySensor.h index 34f7d8a7b1d..ac0b5eba26b 100644 --- a/source/gameengine/Ketsji/KX_RaySensor.h +++ b/source/gameengine/Ketsji/KX_RaySensor.h @@ -90,12 +90,12 @@ public: KX_RAY_AXIS_NEG_Z }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Attributes */ static PyObject* pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp index eee6146f6ed..34b49045337 100644 --- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp @@ -159,7 +159,7 @@ void KX_SCA_AddObjectActuator::Relink(GEN_Map *obj_map) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -246,7 +246,7 @@ PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject() Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON void KX_SCA_AddObjectActuator::InstantAddObject() { diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h index c2068d157ee..16612f9a743 100644 --- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h @@ -122,7 +122,7 @@ public: void InstantAddObject(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,InstantAddObject); @@ -130,7 +130,7 @@ public: static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); static PyObject* pyattr_get_objectLastCreated(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_SCA_AddObjectActuator : public KX_EditObjectActuator */ diff --git a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp index bc59c63dc69..6e36bde59ec 100644 --- a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp @@ -37,7 +37,7 @@ #include "KX_SCA_DynamicActuator.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -77,7 +77,7 @@ PyAttributeDef KX_SCA_DynamicActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Native functions */ diff --git a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp index c9ead726905..f50dc9fc46a 100644 --- a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp @@ -80,7 +80,7 @@ CValue* KX_SCA_EndObjectActuator::GetReplica() return replica; }; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions : integration hooks */ @@ -116,6 +116,6 @@ PyAttributeDef KX_SCA_EndObjectActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp index 20c3168d7ba..51a3979830d 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp @@ -40,7 +40,7 @@ #include "PyObjectPlus.h" -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -110,7 +110,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, instantReplaceMesh, Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Native functions */ diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h index 4a6ae9f8fce..573ec76782c 100644 --- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h +++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h @@ -74,7 +74,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator void InstantReplaceMesh(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ @@ -90,7 +90,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,instantReplaceMesh); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp index 3753f3d6bd6..c48112dbcb7 100644 --- a/source/gameengine/Ketsji/KX_Scene.cpp +++ b/source/gameengine/Ketsji/KX_Scene.cpp @@ -208,7 +208,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice, m_bucketmanager=new RAS_BucketManager(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON m_attr_dict = PyDict_New(); /* new ref */ m_draw_call_pre = NULL; m_draw_call_post = NULL; @@ -262,7 +262,7 @@ KX_Scene::~KX_Scene() delete m_bucketmanager; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyDict_Clear(m_attr_dict); Py_DECREF(m_attr_dict); @@ -1839,7 +1839,7 @@ void KX_Scene::Render2DFilters(RAS_ICanvas* canvas) m_filtermanager.RenderFilters(canvas); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON void KX_Scene::RunDrawingCallbacks(PyObject* cb_list) { @@ -2249,4 +2249,4 @@ KX_PYMETHODDEF_DOC(KX_Scene, get, "") return def; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h index cd8277ec39f..9b4a6ec5ec6 100644 --- a/source/gameengine/Ketsji/KX_Scene.h +++ b/source/gameengine/Ketsji/KX_Scene.h @@ -99,7 +99,7 @@ class KX_Scene : public PyObjectPlus, public SCA_IScene { Py_Header; -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* m_attr_dict; PyObject* m_draw_call_pre; PyObject* m_draw_call_post; @@ -544,7 +544,7 @@ public: void Update2DFilter(vector& propNames, void* gameObj, RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text); void Render2DFilters(RAS_ICanvas* canvas); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ /* --------------------------------------------------------------------- */ diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp index 8f6000ebc3d..f991b843c99 100644 --- a/source/gameengine/Ketsji/KX_SceneActuator.cpp +++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp @@ -210,7 +210,7 @@ KX_Scene* KX_SceneActuator::FindScene(char * sceneName) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -283,6 +283,6 @@ int KX_SceneActuator::pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_ return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_SceneActuator.h b/source/gameengine/Ketsji/KX_SceneActuator.h index 360488f9f74..b49357b21ca 100644 --- a/source/gameengine/Ketsji/KX_SceneActuator.h +++ b/source/gameengine/Ketsji/KX_SceneActuator.h @@ -89,7 +89,7 @@ class KX_SceneActuator : public SCA_IActuator virtual bool Update(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON virtual void Replace_IScene(SCA_IScene *val) { @@ -103,7 +103,7 @@ class KX_SceneActuator : public SCA_IActuator static PyObject* pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KXSceneActuator */ diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp index 9ebb36578c4..d5f8aa74880 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.cpp +++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp @@ -233,7 +233,7 @@ bool KX_SoundActuator::Update(double curtime, bool frame) } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -496,4 +496,4 @@ int KX_SoundActuator::pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h index c175a184a15..7c1108ea8fb 100644 --- a/source/gameengine/Ketsji/KX_SoundActuator.h +++ b/source/gameengine/Ketsji/KX_SoundActuator.h @@ -93,7 +93,7 @@ public: CValue* GetReplica(); void ProcessReplica(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* -------------------------------------------------------------------- */ /* Python interface --------------------------------------------------- */ @@ -115,7 +115,7 @@ public: static PyObject* pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; diff --git a/source/gameengine/Ketsji/KX_StateActuator.cpp b/source/gameengine/Ketsji/KX_StateActuator.cpp index 33f21f49810..ff4c3985a04 100644 --- a/source/gameengine/Ketsji/KX_StateActuator.cpp +++ b/source/gameengine/Ketsji/KX_StateActuator.cpp @@ -124,7 +124,7 @@ void KX_StateActuator::Activate(SG_DList& head) } } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -165,4 +165,4 @@ PyAttributeDef KX_StateActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp index 9b44f487682..b590624e6c7 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.cpp +++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp @@ -283,7 +283,7 @@ bool KX_TouchSensor::NewHandleCollision(void*object1,void*object2,const PHY_Coll return false; // was DT_CONTINUE but this was defined in sumo as false. } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ diff --git a/source/gameengine/Ketsji/KX_TouchSensor.h b/source/gameengine/Ketsji/KX_TouchSensor.h index c9448897936..80e5a0f938e 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.h +++ b/source/gameengine/Ketsji/KX_TouchSensor.h @@ -118,7 +118,7 @@ public: // todo: put some info for collision maybe -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* --------------------------------------------------------------------- */ /* Python interface ---------------------------------------------------- */ diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.cpp b/source/gameengine/Ketsji/KX_TrackToActuator.cpp index ae8d2f6459b..cae183ac4a2 100644 --- a/source/gameengine/Ketsji/KX_TrackToActuator.cpp +++ b/source/gameengine/Ketsji/KX_TrackToActuator.cpp @@ -417,7 +417,7 @@ bool KX_TrackToActuator::Update(double curtime, bool frame) return result; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -486,6 +486,6 @@ int KX_TrackToActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUT return PY_SET_ATTR_SUCCESS; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.h b/source/gameengine/Ketsji/KX_TrackToActuator.h index 2b44994f103..33b2ecb1aa5 100644 --- a/source/gameengine/Ketsji/KX_TrackToActuator.h +++ b/source/gameengine/Ketsji/KX_TrackToActuator.h @@ -69,7 +69,7 @@ class KX_TrackToActuator : public SCA_IActuator virtual void Relink(GEN_Map *obj_map); virtual bool Update(double curtime, bool frame); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* Python part */ @@ -77,7 +77,7 @@ class KX_TrackToActuator : public SCA_IActuator static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON }; /* end of class KX_TrackToActuator : public KX_EditObjectActuator */ diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp index 4ee80c64570..17368357cc4 100644 --- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp +++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp @@ -29,7 +29,7 @@ KX_VehicleWrapper::~KX_VehicleWrapper() m_motionStates.clear(); } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON PyObject* KX_VehicleWrapper::PyAddWheel(PyObject* args) { @@ -319,4 +319,4 @@ PyAttributeDef KX_VehicleWrapper::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.h b/source/gameengine/Ketsji/KX_VehicleWrapper.h index 2ca06da18fc..4cde50b0932 100644 --- a/source/gameengine/Ketsji/KX_VehicleWrapper.h +++ b/source/gameengine/Ketsji/KX_VehicleWrapper.h @@ -20,7 +20,7 @@ public: virtual ~KX_VehicleWrapper (); int getConstraintId(); -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON KX_PYMETHOD_VARARGS(KX_VehicleWrapper,AddWheel); KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetNumWheels); @@ -47,7 +47,7 @@ public: KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetSuspensionCompression); KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetRollInfluence); -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON private: PHY_IVehicle* m_vehicle; diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp index 09630ad2851..f66d11394fd 100644 --- a/source/gameengine/Ketsji/KX_VertexProxy.cpp +++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp @@ -26,7 +26,7 @@ * ***** END GPL LICENSE BLOCK ***** */ -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "KX_VertexProxy.h" #include "KX_MeshProxy.h" @@ -553,4 +553,4 @@ PyObject* KX_VertexProxy::PySetUV2(PyObject* args) Py_RETURN_NONE; } -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h index b39d3ecb7d4..a5f2e5a08e0 100644 --- a/source/gameengine/Ketsji/KX_VertexProxy.h +++ b/source/gameengine/Ketsji/KX_VertexProxy.h @@ -29,7 +29,7 @@ #ifndef __KX_VERTEXPROXY #define __KX_VERTEXPROXY -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON #include "SCA_IObject.h" @@ -102,7 +102,7 @@ public: }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON #endif //__KX_VERTEXPROXY diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp index e2f2badf051..464dbd14721 100644 --- a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp +++ b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp @@ -79,7 +79,7 @@ KX_VisibilityActuator::Update() return false; } -#ifndef DISABLE_PYTHON +#ifdef WITH_PYTHON /* ------------------------------------------------------------------------- */ /* Python functions */ @@ -121,4 +121,4 @@ PyAttributeDef KX_VisibilityActuator::Attributes[] = { { NULL } //Sentinel }; -#endif // DISABLE_PYTHON +#endif // WITH_PYTHON diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript index 6f06d0ff19c..5f7cf9edcd8 100644 --- a/source/gameengine/Ketsji/SConscript +++ b/source/gameengine/Ketsji/SConscript @@ -30,8 +30,7 @@ else: if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') diff --git a/source/gameengine/Physics/Bullet/SConscript b/source/gameengine/Physics/Bullet/SConscript index 6cebe0638b0..272d0003c1a 100644 --- a/source/gameengine/Physics/Bullet/SConscript +++ b/source/gameengine/Physics/Bullet/SConscript @@ -24,8 +24,7 @@ defs = [] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/Rasterizer/SConscript b/source/gameengine/Rasterizer/SConscript index dc189c54a40..045714e80ac 100644 --- a/source/gameengine/Rasterizer/SConscript +++ b/source/gameengine/Rasterizer/SConscript @@ -10,8 +10,7 @@ defs = [ 'GLEW_STATIC' ] if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_CXX_GUARDEDALLOC']: defs.append('WITH_CXX_GUARDEDALLOC') diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt index eb623065a75..1bde0bc8a40 100644 --- a/source/gameengine/VideoTexture/CMakeLists.txt +++ b/source/gameengine/VideoTexture/CMakeLists.txt @@ -75,8 +75,7 @@ ENDIF(WITH_FFMPEG) IF(WITH_PYTHON) LIST(APPEND INC ${PYTHON_INC}) -ELSE(WITH_PYTHON) - ADD_DEFINITIONS(-DDISABLE_PYTHON) + ADD_DEFINITIONS(-DWITH_PYTHON) ENDIF(WITH_PYTHON) BLENDERLIB(bf_videotex "${SRC}" "${INC}") diff --git a/source/gameengine/VideoTexture/SConscript b/source/gameengine/VideoTexture/SConscript index 21a5f8ce3fe..8a5e3726aa7 100644 --- a/source/gameengine/VideoTexture/SConscript +++ b/source/gameengine/VideoTexture/SConscript @@ -21,8 +21,7 @@ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc','win32-mingw'): if env['WITH_BF_PYTHON']: incs += ' ' + env['BF_PYTHON_INC'] -else: - defs.append('DISABLE_PYTHON') + defs.append('WITH_PYTHON') if env['WITH_BF_FFMPEG']: defs.append('WITH_FFMPEG') From beb5f84991ad9ab40b7187bf7e327ff938c9f747 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sun, 31 Oct 2010 08:42:42 +0000 Subject: [PATCH 078/163] stdint include needed on non-msvc platforms --- source/gameengine/Physics/Bullet/CcdPhysicsController.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp index 421a9fc64b8..54f98d16cf6 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp @@ -13,6 +13,10 @@ subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ +#ifndef WIN32 +#include +#endif + #include "CcdPhysicsController.h" #include "btBulletDynamicsCommon.h" #include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h" From 06abc862b0d67c2e7d1274ef0c90f55d24d8f625 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 31 Oct 2010 11:51:10 +0000 Subject: [PATCH 079/163] Fix crashing running read full sample layers operator. --- source/blender/editors/space_node/node_edit.c | 3 ++- source/blender/render/extern/include/RE_pipeline.h | 2 +- source/blender/render/intern/source/pipeline.c | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index b8bfed2b75e..c9f51078cec 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1904,13 +1904,14 @@ void NODE_OT_read_renderlayers(wmOperatorType *ot) static int node_read_fullsamplelayers_exec(bContext *C, wmOperator *UNUSED(op)) { + Main *bmain= CTX_data_main(C); SpaceNode *snode= CTX_wm_space_node(C); Scene *curscene= CTX_data_scene(C); Render *re= RE_NewRender(curscene->id.name); // WM_cursor_wait(1); - RE_MergeFullSample(re, curscene, snode->nodetree); + RE_MergeFullSample(re, bmain, curscene, snode->nodetree); snode_notify(C, snode); // WM_cursor_wait(0); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index b12e45ecd9c..faa14231584 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -220,7 +220,7 @@ void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress); struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty); /* do a full sample buffer compo */ -void RE_MergeFullSample(struct Render *re, struct Scene *sce, struct bNodeTree *ntree); +void RE_MergeFullSample(struct Render *re, struct Main *bmain, struct Scene *sce, struct bNodeTree *ntree); /* ancient stars function... go away! */ void RE_make_stars(struct Render *re, struct Scene *scenev3d, void (*initfunc)(void), diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 68b6a04035e..6fac7e7b4aa 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2313,10 +2313,12 @@ static void do_merge_fullsample(Render *re, bNodeTree *ntree) BLI_rw_mutex_unlock(&re->resultmutex); } -void RE_MergeFullSample(Render *re, Scene *sce, bNodeTree *ntree) +void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree) { Scene *scene; bNode *node; + + re->main= bmain; /* first call RE_ReadRenderResult on every renderlayer scene. this creates Render structs */ From 89ceb3b87a1ab08c6ee56fdb8bfd7fa633af8ace Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Sun, 31 Oct 2010 12:12:57 +0000 Subject: [PATCH 080/163] bugfix: "glsl lamp not (directly) updated when there is no material in the object" reported by Olivier Amrein lamps require a depsgraph update. There is no more need to ED_render_id_flush_update because this is called by the DAG_id_flush_update. help (and the right fix) from Brecht. --- source/blender/editors/object/object_add.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index f9d0bddf6b2..9c234266673 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -1647,7 +1647,7 @@ static int duplicate_exec(bContext *C, wmOperator *op) if(BASACT==base) ED_base_object_activate(C, basen); - ED_render_id_flush_update(bmain, basen->object->data); + DAG_id_flush_update(base->object->data, 0); } CTX_DATA_END; From 12812e494f63b0c7e5ffcb30c67ca88be9e34513 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 31 Oct 2010 12:31:15 +0000 Subject: [PATCH 081/163] Fix cmake building of blender player. --- source/gameengine/GamePlayer/common/CMakeLists.txt | 5 +++++ source/gameengine/GamePlayer/ghost/CMakeLists.txt | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt index 02c0cb8a83c..39667a27c7d 100644 --- a/source/gameengine/GamePlayer/common/CMakeLists.txt +++ b/source/gameengine/GamePlayer/common/CMakeLists.txt @@ -69,6 +69,11 @@ SET(SRC GPC_System.cpp ) +IF(WITH_PYTHON) + LIST(APPEND INC ${PYTHON_INC}) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) + ADD_DEFINITIONS(-DGLEW_STATIC) BLENDERLIB_NOLIST(gp_common "${SRC}" "${INC}") diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt index b6e381359df..e02a8a53ba2 100644 --- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt +++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt @@ -70,4 +70,9 @@ IF(WITH_FFMPEG) ADD_DEFINITIONS(-DWITH_FFMPEG) ENDIF(WITH_FFMPEG) +IF(WITH_PYTHON) + LIST(APPEND INC ${PYTHON_INC}) + ADD_DEFINITIONS(-DWITH_PYTHON) +ENDIF(WITH_PYTHON) + BLENDERLIB_NOLIST(gp_ghost "${SRC}" "${INC}") From 3a3ac0de8f13b8c06a6c0dea63107d9d3f151f42 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 31 Oct 2010 12:43:42 +0000 Subject: [PATCH 082/163] Fix #23283: crash exiting blender player, IMB_exit got called twice. --- source/blender/imbuf/intern/cache.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/source/blender/imbuf/intern/cache.c b/source/blender/imbuf/intern/cache.c index 77e01d8ebef..5650a4f9b94 100644 --- a/source/blender/imbuf/intern/cache.c +++ b/source/blender/imbuf/intern/cache.c @@ -82,6 +82,8 @@ typedef struct ImGlobalTileCache { int totthread; ThreadMutex mutex; + + int initialized; } ImGlobalTileCache; static ImGlobalTileCache GLOBAL_CACHE; @@ -203,6 +205,8 @@ void imb_tile_cache_init(void) /* initialize for one thread, for places that access textures outside of rendering (displace modifier, painting, ..) */ IMB_tile_cache_params(0, 0); + + GLOBAL_CACHE.initialized = 1; } void imb_tile_cache_exit(void) @@ -210,19 +214,23 @@ void imb_tile_cache_exit(void) ImGlobalTile *gtile; int a; - for(gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next) - imb_global_cache_tile_unload(gtile); + if(GLOBAL_CACHE.initialized) { + for(gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next) + imb_global_cache_tile_unload(gtile); - for(a=0; a Date: Sun, 31 Oct 2010 13:17:39 +0000 Subject: [PATCH 083/163] own recent commit broke this python import: from mathutils.geometry import PolyFill I couldn't find a way for python's inittab to do this so just inserting mathutils.geometry into sys.modules manually. --- CMakeLists.txt | 27 +++++++++++--------- source/blender/blenkernel/BKE_utildefines.h | 2 +- source/blender/python/generic/mathutils.c | 10 ++++++-- source/blender/python/intern/bpy_interface.c | 2 ++ 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1aaec87f7c3..a8673c926f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -543,25 +543,28 @@ IF(WIN32) SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libcmt.lib;libc.lib ") - ELSE(MSVC) # MINGW - SET(LLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid") - SET(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing") + ELSE(MSVC) + # keep GCC spesific stuff here + IF(CMAKE_COMPILER_IS_GNUCC) + SET(LLIBS "-lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid") + SET(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing") - # Better warnings - SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") - SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") + # Better warnings + SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") + SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") + + IF(WITH_OPENMP) + SET(LLIBS "${LLIBS} -lgomp") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") + ENDIF(WITH_OPENMP) + ENDIF(CMAKE_COMPILER_IS_GNUCC) ADD_DEFINITIONS(-DFREE_WINDOWS) SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") - IF(WITH_OPENMP) - SET(LLIBS "${LLIBS} -lgomp") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") - ENDIF(WITH_OPENMP) - IF(WITH_INTERNATIONAL) SET(GETTEXT ${LIBDIR}/gcc/gettext) SET(GETTEXT_INC ${GETTEXT}/include) diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h index a7b4a71c84d..a1968459fd6 100644 --- a/source/blender/blenkernel/BKE_utildefines.h +++ b/source/blender/blenkernel/BKE_utildefines.h @@ -282,7 +282,7 @@ behaviour, though it may not be the best in practice. #elif defined(__GNUC__) #define BM_INLINE static inline __attribute((always_inline)) #else -#warning "MSC/GNUC defines not found, inline non-functional" +/* #warning "MSC/GNUC defines not found, inline non-functional" */ #define BM_INLINE static #endif diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c index 4f54ee9e90e..73f16cb0cf1 100644 --- a/source/blender/python/generic/mathutils.c +++ b/source/blender/python/generic/mathutils.c @@ -248,6 +248,7 @@ static struct PyModuleDef M_Mathutils_module_def = { PyMODINIT_FUNC BPyInit_mathutils(void) { PyObject *submodule; + PyObject *item; if( PyType_Ready( &vector_Type ) < 0 ) return NULL; @@ -270,8 +271,13 @@ PyMODINIT_FUNC BPyInit_mathutils(void) PyModule_AddObject( submodule, "Color", (PyObject *)&color_Type ); /* submodule */ - PyModule_AddObject( submodule, "geometry", BPyInit_mathutils_geometry()); - + PyModule_AddObject( submodule, "geometry", (item=BPyInit_mathutils_geometry())); + /* XXX, python doesnt do imports with this usefully yet + * 'from mathutils.geometry import PolyFill' + * ...fails without this. */ + PyDict_SetItemString(PyThreadState_GET()->interp->modules, "mathutils.geometry", item); + Py_INCREF(item); + mathutils_matrix_vector_cb_index= Mathutils_RegisterCallback(&mathutils_matrix_vector_cb); return submodule; diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index ab8a355be47..a894fa60237 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -199,6 +199,7 @@ void BPY_set_context(bContext *C) /* init-tab */ extern PyObject *BPyInit_noise(void); extern PyObject *BPyInit_mathutils(void); +// extern PyObject *BPyInit_mathutils_geometry(void); // BPyInit_mathutils calls, py doesnt work with thos :S extern PyObject *BPyInit_bgl(void); extern PyObject *BPyInit_blf(void); extern PyObject *AUD_initPython(void); @@ -206,6 +207,7 @@ extern PyObject *AUD_initPython(void); static struct _inittab bpy_internal_modules[]= { {"noise", BPyInit_noise}, {"mathutils", BPyInit_mathutils}, +// {"mathutils.geometry", BPyInit_mathutils_geometry}, {"bgl", BPyInit_bgl}, {"blf", BPyInit_blf}, {"aud", AUD_initPython}, From 391c547208184e80d1d16acb792574d9f5b63d10 Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Sun, 31 Oct 2010 14:21:06 +0000 Subject: [PATCH 084/163] Fix for #24453: Missing delete statement. --- intern/audaspace/intern/AUD_C-API.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index 1dd0ab1ac95..2e7309bf5c9 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -241,6 +241,7 @@ AUD_SoundInfo AUD_getInfo(AUD_Sound* sound) { info.specs = reader->getSpecs(); info.length = reader->getLength() / (float) info.specs.rate; + delete reader; } } catch(AUD_Exception&) @@ -721,7 +722,7 @@ int AUD_setDeviceVolume(AUD_Device* device, float volume) return true; } catch(AUD_Exception&) {} - + return false; } From 184b5fd6db4dfedb5c436ca1021bbe52df289a32 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 14:43:30 +0000 Subject: [PATCH 085/163] bugfix [#24466] Selecting of object with pattern leads to strange behavior The undo problem was caused by python operators returning 'RUNNING_MODAL' rather then the return value from wm.invoke_props_popup(self, event) - 'FINISHED'. This was done because returning FINISHED would free the operator causing the buttons redo handler to try and run a freed operator and crash. So the real fix is to disallow any operators to use wm.invoke_props_popup(self, event) if they dont have the REGISTER option enabled, fixing the crash and redo problem. --- release/scripts/op/object.py | 4 +--- release/scripts/op/presets.py | 7 ++----- release/scripts/op/wm.py | 7 ++----- .../windowmanager/intern/wm_event_system.c | 4 ++-- .../blender/windowmanager/intern/wm_operators.c | 16 ++++++++++++++++ 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py index 8dd55fc5b92..b5c46c757b3 100644 --- a/release/scripts/op/object.py +++ b/release/scripts/op/object.py @@ -60,9 +60,7 @@ class SelectPattern(bpy.types.Operator): def invoke(self, context, event): wm = context.window_manager - # return wm.invoke_props_popup(self, event) - wm.invoke_props_popup(self, event) - return {'RUNNING_MODAL'} + return wm.invoke_props_popup(self, event) def draw(self, context): layout = self.layout diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py index 2f6a5b69c20..ec14e305c51 100644 --- a/release/scripts/op/presets.py +++ b/release/scripts/op/presets.py @@ -29,6 +29,7 @@ class AddPresetBase(): - preset_subdir ''' # bl_idname = "script.preset_base_add" # bl_label = "Add a Python Preset" + bl_options = {'REGISTER'} # only because invoke_props_popup requires. name = bpy.props.StringProperty(name="Name", description="Name of the preset, used to make the path name", maxlen=64, default="") remove_active = bpy.props.BoolProperty(default=False, options={'HIDDEN'}) @@ -110,11 +111,7 @@ class AddPresetBase(): def invoke(self, context, event): if not self.remove_active: wm = context.window_manager - #crashes, TODO - fix - #return wm.invoke_props_popup(self, event) - - wm.invoke_props_popup(self, event) - return {'RUNNING_MODAL'} + return wm.invoke_props_popup(self, event) else: return self.execute(context) diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py index de2403a773f..ca1ed6ed168 100644 --- a/release/scripts/op/wm.py +++ b/release/scripts/op/wm.py @@ -661,6 +661,7 @@ class WM_OT_properties_edit(bpy.types.Operator): '''Internal use (edit a property data_path)''' bl_idname = "wm.properties_edit" bl_label = "Edit Property" + bl_options = {'REGISTER'} # only because invoke_props_popup requires. data_path = rna_path property = rna_property @@ -721,11 +722,7 @@ class WM_OT_properties_edit(bpy.types.Operator): self.description = prop_ui.get("description", "") wm = context.window_manager - # This crashes, TODO - fix - #return wm.invoke_props_popup(self, event) - - wm.invoke_props_popup(self, event) - return {'RUNNING_MODAL'} + return wm.invoke_props_popup(self, event) class WM_OT_properties_add(bpy.types.Operator): diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 47ca4314cc7..4eba45c61b9 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -364,9 +364,9 @@ int WM_operator_poll(bContext *C, wmOperatorType *ot) wmOperatorTypeMacro *otmacro; for(otmacro= ot->macro.first; otmacro; otmacro= otmacro->next) { - wmOperatorType *ot= WM_operatortype_find(otmacro->idname, 0); + wmOperatorType *ot_macro= WM_operatortype_find(otmacro->idname, 0); - if(0==WM_operator_poll(C, ot)) + if(0==WM_operator_poll(C, ot_macro)) return 0; } diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index ccdb19adfce..2a9ef1e752e 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef WIN32 #include #include @@ -889,6 +890,11 @@ static uiBlock *wm_block_create_redo(bContext *C, ARegion *ar, void *arg_op) block= uiBeginBlock(C, ar, "redo_popup", UI_EMBOSS); uiBlockClearFlag(block, UI_BLOCK_LOOP); uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1|UI_BLOCK_MOVEMOUSE_QUIT); + + /* if register is not enabled, the operator gets freed on OPERATOR_FINISHED + * ui_apply_but_funcs_after calls redo_cb and crashes */ + assert(op->type->flag & OPTYPE_REGISTER); + uiBlockSetHandleFunc(block, redo_cb, arg_op); if(!op->properties) { @@ -1021,6 +1027,11 @@ int WM_operator_props_popup(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { int retval= OPERATOR_CANCELLED; + if((op->type->flag & OPTYPE_REGISTER)==0) { + BKE_reportf(op->reports, RPT_ERROR, "Operator '%s' does not have register enabled, incorrect invoke function.", op->type->idname); + return OPERATOR_CANCELLED; + } + if(op->type->exec) { retval= op->type->exec(C, op); @@ -1059,6 +1070,11 @@ int WM_operator_ui_popup(bContext *C, wmOperator *op, int width, int height) int WM_operator_redo_popup(bContext *C, wmOperator *op) { + if((op->type->flag & OPTYPE_REGISTER)==0) { + BKE_reportf(op->reports, RPT_ERROR, "Operator '%s' does not have register enabled, incorrect invoke function.", op->type->idname); + return OPERATOR_CANCELLED; + } + uiPupBlock(C, wm_block_create_redo, op); return OPERATOR_CANCELLED; From 4c80d13e54f5421774a992c1f1ff1c1ae832c2fc Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Sun, 31 Oct 2010 14:44:45 +0000 Subject: [PATCH 086/163] Audaspace: Disabling High- and Lowpass for Bake Sound to F-Curve Operator in case they're unused. --- intern/audaspace/intern/AUD_C-API.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index 2e7309bf5c9..5e4e45d4e1e 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -782,10 +782,20 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high, AUD_Sound* sound; AUD_FileFactory file(filename); + + AUD_IReader* reader = file.createReader(); + AUD_SampleRate rate = reader->getSpecs().rate; + delete reader; + AUD_ChannelMapperFactory mapper(&file, specs); - AUD_LowpassFactory lowpass(&mapper, high); - AUD_HighpassFactory highpass(&lowpass, low); - AUD_EnvelopeFactory envelope(&highpass, attack, release, threshold, 0.1f); + sound = &mapper; + AUD_LowpassFactory lowpass(sound, high); + if(high < rate) + sound = &lowpass; + AUD_HighpassFactory highpass(sound, low); + if(low > 0) + sound = &highpass; + AUD_EnvelopeFactory envelope(sound, attack, release, threshold, 0.1f); AUD_LinearResampleFactory resampler(&envelope, specs); sound = &resampler; AUD_SquareFactory squaref(sound, sthreshold); @@ -798,7 +808,7 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high, else if(additive) sound = ∑ - AUD_IReader* reader = sound->createReader(); + reader = sound->createReader(); if(reader == NULL) return NULL; From 3367ef8b6591b62b1b76f07fccb310485f6d45c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 15:39:37 +0000 Subject: [PATCH 087/163] initialize structs to zero rather then using memset(). --- source/blender/blenkernel/intern/action.c | 3 +-- source/blender/blenkernel/intern/brush.c | 8 ++---- source/blender/blenkernel/intern/constraint.c | 3 +-- source/blender/blenkernel/intern/context.c | 3 +-- source/blender/blenkernel/intern/multires.c | 6 ++--- source/blender/blenkernel/intern/seqeffects.c | 8 ++---- source/blender/blenkernel/intern/sequencer.c | 7 ++---- source/blender/blenkernel/intern/shrinkwrap.c | 3 +-- .../blender/blenkernel/intern/subsurf_ccg.c | 4 +-- source/blender/blenloader/intern/readfile.c | 12 +++------ source/blender/editors/animation/anim_draw.c | 3 +-- source/blender/editors/animation/drivers.c | 12 +++------ source/blender/editors/animation/keyframing.c | 3 +-- source/blender/editors/animation/keyingsets.c | 6 ++--- source/blender/editors/armature/poselib.c | 7 ++---- source/blender/editors/armature/poseobject.c | 10 +++----- source/blender/editors/object/object_bake.c | 4 +-- .../editors/space_action/action_edit.c | 16 +++++------- .../editors/space_action/action_select.c | 25 +++++++------------ .../editors/space_graph/graph_select.c | 3 +-- .../blender/editors/space_info/info_stats.c | 4 +-- source/blender/editors/space_nla/nla_edit.c | 3 +-- source/blender/editors/space_node/node_draw.c | 4 +-- .../blender/editors/space_time/space_time.c | 3 +-- .../editors/space_view3d/view3d_draw.c | 17 ++++--------- .../editors/space_view3d/view3d_view.c | 3 +-- source/blender/editors/transform/transform.c | 6 ++--- .../editors/transform/transform_generics.c | 4 +-- source/blender/gpu/intern/gpu_material.c | 4 +-- source/blender/makesrna/intern/rna_access.c | 10 +++----- .../render/intern/source/volume_precache.c | 3 +-- .../blender/windowmanager/intern/wm_cursors.c | 7 ++---- 32 files changed, 67 insertions(+), 147 deletions(-) diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 5a96575452b..902807126c9 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -1134,10 +1134,9 @@ void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose animsys_evaluate_action_group(&id_ptr, act, agrp, NULL, cframe); } else { - AnimData adt; + AnimData adt= {0}; /* init animdata, and attach to workob */ - memset(&adt, 0, sizeof(AnimData)); workob->adt= &adt; adt.recalc= ADT_RECALC_ANIM; diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index d894aef4ac5..7a10f9082e5 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -228,10 +228,8 @@ void make_local_brush(Brush *brush) void brush_debug_print_state(Brush *br) { - Brush def; - /* create a fake brush and set it to the defaults */ - memset(&def, 0, sizeof(Brush)); + Brush def= {{0}}; brush_set_defaults(&def); #define BR_TEST(field, t) \ @@ -1098,11 +1096,9 @@ unsigned int *brush_gen_texture_cache(Brush *br, int half_side) { unsigned int *texcache = NULL; MTex *mtex = &br->mtex; - TexResult texres; + TexResult texres= {0}; int hasrgb, ix, iy; int side = half_side * 2; - - memset(&texres, 0, sizeof(TexResult)); if(mtex->tex) { float x, y, step = 2.0 / side, co[3]; diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 5f387500dd1..bf694732b46 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -3427,8 +3427,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr BVHTreeRayHit hit; BVHTreeNearest nearest; - BVHTreeFromMesh treeData; - memset(&treeData, 0, sizeof(treeData)); + BVHTreeFromMesh treeData= {0}; nearest.index = -1; nearest.dist = FLT_MAX; diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index e1a7ef7bbef..899ae6031d6 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -554,8 +554,7 @@ ListBase CTX_data_collection_get(const bContext *C, const char *member) return result.list; } else { - ListBase list; - memset(&list, 0, sizeof(list)); + ListBase list= {NULL, NULL}; return list; } } diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index b6e48a12676..5324d5dde62 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -492,9 +492,8 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple) { - MultiresModifierData mmd; + MultiresModifierData mmd= {{0}}; - memset(&mmd, 0, sizeof(MultiresModifierData)); mmd.lvl = lvl; mmd.sculptlvl = lvl; mmd.renderlvl = lvl; @@ -506,9 +505,8 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, int lvl, int simple, int optimal) { - SubsurfModifierData smd; + SubsurfModifierData smd= {{0}}; - memset(&smd, 0, sizeof(SubsurfModifierData)); smd.levels = smd.renderLevels = lvl; smd.flags |= eSubsurfModifierFlag_SubsurfUv; if(simple) diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index 66cad5090f8..b8307a9fb04 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -3260,9 +3260,7 @@ static struct SeqEffectHandle get_sequence_effect_impl(int seq_type) struct SeqEffectHandle get_sequence_effect(Sequence * seq) { - struct SeqEffectHandle rval; - - memset(&rval, 0, sizeof(struct SeqEffectHandle)); + struct SeqEffectHandle rval= {0}; if (seq->type & SEQ_EFFECT) { rval = get_sequence_effect_impl(seq->type); @@ -3277,9 +3275,7 @@ struct SeqEffectHandle get_sequence_effect(Sequence * seq) struct SeqEffectHandle get_sequence_blend(Sequence * seq) { - struct SeqEffectHandle rval; - - memset(&rval, 0, sizeof(struct SeqEffectHandle)); + struct SeqEffectHandle rval= {0}; if (seq->blend_mode != 0) { rval = get_sequence_effect_impl(seq->blend_mode); diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index c379ca43f82..0207340bd32 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -1474,13 +1474,10 @@ static ImBuf * input_preprocess( } if(seq->flag & (SEQ_USE_CROP|SEQ_USE_TRANSFORM)) { - StripCrop c; - StripTransform t; + StripCrop c= {0}; + StripTransform t= {0}; int sx,sy,dx,dy; - memset(&c, 0, sizeof(StripCrop)); - memset(&t, 0, sizeof(StripTransform)); - if(seq->flag & SEQ_USE_CROP && seq->strip->crop) { c = *seq->strip->crop; } diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index f64854f90de..4746341876f 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -559,8 +559,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Scene *scene, Object //Using vertexs positions/normals as if a subsurface was applied if(smd->subsurfLevels) { - SubsurfModifierData ssmd; - memset(&ssmd, 0, sizeof(ssmd)); + SubsurfModifierData ssmd= {{0}}; ssmd.subdivType = ME_CC_SUBSURF; //catmull clark ssmd.levels = smd->subsurfLevels; //levels diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 26bd981db4a..56491b8d692 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -1357,7 +1357,7 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v CCGSubSurf *ss = ccgdm->ss; CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); GPUVertexAttribs gattribs; - DMVertexAttribs attribs; + DMVertexAttribs attribs= {{{0}}}; MTFace *tf = dm->getFaceDataArray(dm, CD_MTFACE); int gridSize = ccgSubSurf_getGridSize(ss); int gridFaces = gridSize - 1; @@ -1374,8 +1374,6 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v transp = GPU_get_material_blend_mode(); orig_transp = transp; - memset(&attribs, 0, sizeof(attribs)); - #define PASSATTRIB(dx, dy, vert) { \ if(attribs.totorco) { \ index = getFaceIndex(ss, f, S, x+dx, y+dy, edgeSize, gridSize); \ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index b50b1bcf57c..595781ac9bd 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -588,20 +588,16 @@ static void bh8_from_bh4(BHead *bhead, BHead4 *bhead4) static BHeadN *get_bhead(FileData *fd) { - BHead8 bhead8; - BHead4 bhead4; - BHead bhead; BHeadN *new_bhead = 0; int readsize; if (fd) { if ( ! fd->eof) { - - /* not strictly needed but shuts valgrind up + /* initializing to zero isn't strictly needed but shuts valgrind up * since uninitialized memory gets compared */ - memset(&bhead8, 0, sizeof(BHead8)); - memset(&bhead4, 0, sizeof(BHead4)); - memset(&bhead, 0, sizeof(BHead)); + BHead8 bhead8= {0}; + BHead4 bhead4= {0}; + BHead bhead= {0}; // First read the bhead structure. // Depending on the platform the file was written on this can diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c index 373ad5472ab..7cfe180a7bf 100644 --- a/source/blender/editors/animation/anim_draw.c +++ b/source/blender/editors/animation/anim_draw.c @@ -352,14 +352,13 @@ static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt) */ void ANIM_nla_mapping_apply_fcurve (AnimData *adt, FCurve *fcu, short restore, short only_keys) { - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc map_cb; /* init edit data * - AnimData is stored in 'data' * - only_keys is stored in 'i1' */ - memset(&ked, 0, sizeof(KeyframeEditData)); ked.data= (void *)adt; ked.i1= (int)only_keys; diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c index 6ace48dd301..a6bdc8d36d4 100644 --- a/source/blender/editors/animation/drivers.c +++ b/source/blender/editors/animation/drivers.c @@ -364,14 +364,13 @@ short ANIM_paste_driver (ID *id, const char rna_path[], int array_index, short U static int add_driver_button_exec (bContext *C, wmOperator *op) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index, all= RNA_boolean_get(op->ptr, "all"); /* try to create driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (all) @@ -421,14 +420,13 @@ void ANIM_OT_driver_button_add (wmOperatorType *ot) static int remove_driver_button_exec (bContext *C, wmOperator *op) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index, all= RNA_boolean_get(op->ptr, "all"); /* try to find driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (all) @@ -474,14 +472,13 @@ void ANIM_OT_driver_button_remove (wmOperatorType *ot) static int copy_driver_button_exec (bContext *C, wmOperator *UNUSED(op)) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index; /* try to create driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) { @@ -520,14 +517,13 @@ void ANIM_OT_copy_driver_button (wmOperatorType *ot) static int paste_driver_button_exec (bContext *C, wmOperator *UNUSED(op)) { - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; short success= 0; int index; /* try to create driver using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) { diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index ddd692d26ea..7f99a5e3b47 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -1439,7 +1439,7 @@ static int delete_key_button_exec (bContext *C, wmOperator *op) { Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); - PointerRNA ptr; + PointerRNA ptr= {{0}}; PropertyRNA *prop= NULL; char *path; float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap @@ -1447,7 +1447,6 @@ static int delete_key_button_exec (bContext *C, wmOperator *op) int a, index, length, all= RNA_boolean_get(op->ptr, "all"); /* try to insert keyframe using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop) { diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c index 57617651823..aec35df5dd5 100644 --- a/source/blender/editors/animation/keyingsets.c +++ b/source/blender/editors/animation/keyingsets.c @@ -286,7 +286,7 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); KeyingSet *ks = NULL; PropertyRNA *prop= NULL; - PointerRNA ptr; + PointerRNA ptr= {{0}}; char *path = NULL; short success= 0; int index=0, pflag=0; @@ -322,7 +322,6 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op) ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1); /* try to add to keyingset using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); /* check if property is able to be added */ @@ -387,7 +386,7 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); KeyingSet *ks = NULL; PropertyRNA *prop= NULL; - PointerRNA ptr; + PointerRNA ptr= {{0}}; char *path = NULL; short success= 0; int index=0; @@ -408,7 +407,6 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op) ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1); /* try to add to keyingset using property retrieved from UI */ - memset(&ptr, 0, sizeof(PointerRNA)); uiContextActiveProperty(C, &ptr, &prop, &index); if (ptr.id.data && ptr.data && prop) { diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index a595396b15d..d1430808fca 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -407,15 +407,13 @@ static EnumPropertyItem *poselib_stored_pose_itemf(bContext *C, PointerRNA *UNUS Object *ob= ED_object_pose_armature(CTX_data_active_object(C)); bAction *act= (ob) ? ob->poselib : NULL; TimeMarker *marker; - EnumPropertyItem *item= NULL, item_tmp; + EnumPropertyItem *item= NULL, item_tmp= {0}; int totitem= 0; int i= 0; if (C==NULL) { return DummyRNA_DEFAULT_items; } - - memset(&item_tmp, 0, sizeof(item_tmp)); /* check that the action exists */ if (act) { @@ -708,7 +706,7 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld) bAction *act= pld->act; bActionGroup *agrp; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc group_ok_cb; int frame= 1; @@ -721,7 +719,6 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld) /* init settings for testing groups for keyframes */ group_ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); - memset(&ked, 0, sizeof(KeyframeEditData)); ked.f1= ((float)frame) - 0.5f; ked.f2= ((float)frame) + 0.5f; diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index ecb34609b2d..217a83c3b31 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -1682,11 +1682,9 @@ void ARMATURE_OT_armature_layers (wmOperatorType *ot) /* Present a popup to get the layers that should be used */ static int pose_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) { - int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ - - /* get layers that are active already */ - memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */ + int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ + /* get layers that are active already */ CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones) { short bit; @@ -1756,11 +1754,9 @@ void POSE_OT_bone_layers (wmOperatorType *ot) /* Present a popup to get the layers that should be used */ static int armature_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt) { - int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ + int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */ /* get layers that are active already */ - memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */ - CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { short bit; diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 0c28d4a608b..dd422f6d221 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -307,9 +307,7 @@ static int bake_image_exec(bContext *C, wmOperator *op) } else { ListBase threads; - BakeRender bkr; - - memset(&bkr, 0, sizeof(bkr)); + BakeRender bkr= {0}; init_bake_internal(&bkr, C); bkr.reports= op->reports; diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index b0704e76138..32bb02ddcda 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -1102,15 +1102,13 @@ static int actkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op)) ListBase anim_data= {NULL, NULL}; bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) return OPERATOR_CANCELLED; - /* init edit data */ - memset(&ked, 0, sizeof(KeyframeEditData)); - + /* init edit data */ /* loop over action data, averaging values */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS); ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); @@ -1174,7 +1172,7 @@ static void snap_action_keys(bAnimContext *ac, short mode) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc edit_cb; /* filter data */ @@ -1186,8 +1184,7 @@ static void snap_action_keys(bAnimContext *ac, short mode) /* get beztriple editing callbacks */ edit_cb= ANIM_editkeyframes_snap(mode); - - memset(&ked, 0, sizeof(KeyframeEditData)); + ked.scene= ac->scene; if (mode == ACTKEYS_SNAP_NEAREST_MARKER) { ked.list.first= (ac->markers) ? ac->markers->first : NULL; @@ -1274,13 +1271,12 @@ static void mirror_action_keys(bAnimContext *ac, short mode) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc edit_cb; /* get beztriple editing callbacks */ edit_cb= ANIM_editkeyframes_mirror(mode); - - memset(&ked, 0, sizeof(KeyframeEditData)); + ked.scene= ac->scene; /* for 'first selected marker' mode, need to find first selected marker first! */ diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 11b6123dbbb..d6039acce38 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -85,7 +85,7 @@ static void deselect_action_keys (bAnimContext *ac, short test, short sel) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc test_cb, sel_cb; /* determine type-based settings */ @@ -98,7 +98,6 @@ static void deselect_action_keys (bAnimContext *ac, short test, short sel) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* init BezTriple looping data */ - memset(&ked, 0, sizeof(KeyframeEditData)); test_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED); /* See if we should be selecting or deselecting */ @@ -367,7 +366,7 @@ static void markers_selectkeys_between (bAnimContext *ac) int filter; KeyframeEditFunc ok_cb, select_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; float min, max; /* get extreme markers */ @@ -378,8 +377,7 @@ static void markers_selectkeys_between (bAnimContext *ac) /* get editing funcs + data */ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); select_cb= ANIM_editkeyframes_select(SELECT_ADD); - - memset(&ked, 0, sizeof(KeyframeEditData)); + ked.f1= min; ked.f2= max; @@ -416,10 +414,9 @@ static void columnselect_action_keys (bAnimContext *ac, short mode) Scene *scene= ac->scene; CfraElem *ce; KeyframeEditFunc select_cb, ok_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}};; /* initialise keyframe editing data */ - memset(&ked, 0, sizeof(KeyframeEditData)); /* build list of columns */ switch (mode) { @@ -613,13 +610,12 @@ static void select_moreless_action_keys (bAnimContext *ac, short mode) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc build_cb; /* init selmap building data */ build_cb= ANIM_editkeyframes_buildselmap(mode); - memset(&ked, 0, sizeof(KeyframeEditData)); /* loop through all of the keys and select additional keyframes based on these */ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS); @@ -746,13 +742,12 @@ static void actkeys_mselect_single (bAnimContext *ac, bAnimListElem *ale, short bDopeSheet *ads= (ac->datatype == ANIMCONT_DOPESHEET) ? ac->data : NULL; int ds_filter = ((ads) ? (ads->filterflag) : (0)); - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc select_cb, ok_cb; /* get functions for selecting keyframes */ select_cb= ANIM_editkeyframes_select(select_mode); ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME); - memset(&ked, 0, sizeof(KeyframeEditData)); ked.f1= selx; /* select the nominated keyframe on the given frame */ @@ -767,7 +762,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short int filter; KeyframeEditFunc ok_cb, select_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; Scene *scene= ac->scene; /* if select mode is replace, deselect all keyframes (and channels) first */ @@ -782,8 +777,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short /* set callbacks and editing data */ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); select_cb= ANIM_editkeyframes_select(select_mode); - - memset(&ked, 0, sizeof(KeyframeEditFunc)); + if (leftright == ACTKEYS_LRSEL_LEFT) { ked.f1 = MINAFRAMEF; ked.f2 = (float)(CFRA + FRAME_CLICK_THRESH); @@ -847,10 +841,9 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se int filter; KeyframeEditFunc select_cb, ok_cb; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; /* initialise keyframe editing data */ - memset(&ked, 0, sizeof(KeyframeEditData)); /* set up BezTriple edit callbacks */ select_cb= ANIM_editkeyframes_select(select_mode); diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 0aa0a87dbac..4e42e199521 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -85,7 +85,7 @@ static void deselect_graph_keys (bAnimContext *ac, short test, short sel) int filter; SpaceIpo *sipo= (SpaceIpo *)ac->sa->spacedata.first; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; KeyframeEditFunc test_cb, sel_cb; /* determine type-based settings */ @@ -95,7 +95,6 @@ static void deselect_graph_keys (bAnimContext *ac, short test, short sel) ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* init BezTriple looping data */ - memset(&ked, 0, sizeof(KeyframeEditData)); test_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED); /* See if we should be selecting or deselecting */ diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index 0789114c054..846812cc1f0 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -327,12 +327,10 @@ static void stats_dupli_object(Base *base, Object *ob, SceneStats *stats) /* Statistics displayed in info header. Called regularly on scene changes. */ static void stats_update(Scene *scene) { - SceneStats stats; + SceneStats stats= {0}; Object *ob= (scene->basact)? scene->basact->object: NULL; Base *base; - memset(&stats, 0, sizeof(stats)); - if(scene->obedit) { /* Edit Mode */ stats_object_edit(scene->obedit, &stats); diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index e13a229fdd1..886bd59235e 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -1258,7 +1258,7 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *UNUSED(op)) bAnimListElem *ale; int filter; - KeyframeEditData ked; + KeyframeEditData ked= {{0}}; /* get editor data */ if (ANIM_animdata_get_context(C, &ac) == 0) @@ -1269,7 +1269,6 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *UNUSED(op)) ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); /* init the editing data */ - memset(&ked, 0, sizeof(KeyframeEditData)); /* for each NLA-Track, apply scale of all selected strips */ for (ale= anim_data.first; ale; ale= ale->next) { diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index a81d6e3b0ce..172163ea8a5 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -432,11 +432,9 @@ static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node) { bNodeSocket *valsock= NULL, *colsock= NULL, *vecsock= NULL; bNodeSocket *sock; - bNodeLink link; + bNodeLink link= {0}; int a; - memset(&link, 0, sizeof(bNodeLink)); - /* connect the first value buffer in with first value out */ /* connect the first RGBA buffer in with first RGBA out */ diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index a03baa2fa72..1de7704c3f0 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -281,7 +281,7 @@ static ActKeyColumn *time_cfra_find_ak (ActKeyColumn *ak, float cframe) /* helper for time_draw_keyframes() */ static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel) { - bDopeSheet ads; + bDopeSheet ads= {0}; DLRBT_Tree keys; ActKeyColumn *ak; @@ -290,7 +290,6 @@ static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel) /* init dopesheet settings */ // FIXME: the ob_to_keylist function currently doesn't take this into account... - memset(&ads, 0, sizeof(bDopeSheet)); if (onlysel) ads.filterflag |= ADS_FILTER_ONLYSEL; diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index de373d54be6..b8fff234347 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1871,8 +1871,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) Scene *sce; Base *base; Object *ob; - ARegion ar; - RegionView3D rv3d; shadows.first= shadows.last= NULL; @@ -1901,6 +1899,8 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) /* this needs to be done better .. */ float viewmat[4][4], winmat[4][4]; int drawtype, lay, winsize, flag2=v3d->flag2; + ARegion ar= {0}; + RegionView3D rv3d= {{{0}}}; drawtype= v3d->drawtype; lay= v3d->lay; @@ -1912,9 +1912,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat); - memset(&ar, 0, sizeof(ar)); - memset(&rv3d, 0, sizeof(rv3d)); - ar.regiondata= &rv3d; ar.regiontype= RGN_TYPE_WINDOW; rv3d.persp= RV3D_CAMOB; @@ -2180,13 +2177,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in /* creates own 3d views, used by the sequencer */ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype) { - View3D v3d; - ARegion ar; - RegionView3D rv3d; - - memset(&v3d, 0, sizeof(v3d)); - memset(&ar, 0, sizeof(ar)); - memset(&rv3d, 0, sizeof(rv3d)); + View3D v3d= {0}; + ARegion ar= {0}; + RegionView3D rv3d= {{{0}}}; /* connect data */ v3d.regionbase.first= v3d.regionbase.last= &ar; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 089658c6953..8d6eec3285c 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -175,10 +175,9 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); - struct SmoothViewStore sms; + struct SmoothViewStore sms= {0}; /* initialize sms */ - memset(&sms,0,sizeof(struct SmoothViewStore)); copy_v3_v3(sms.new_ofs, rv3d->ofs); copy_qt_qt(sms.new_quat, rv3d->viewquat); sms.new_dist= rv3d->dist; diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index dbeee4fddbd..fa8931d47aa 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1919,14 +1919,13 @@ static void constraintTransLim(TransInfo *UNUSED(t), TransData *td) { if (td->con) { bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_LOCLIMIT); - bConstraintOb cob; + bConstraintOb cob= {0}; bConstraint *con; /* Make a temporary bConstraintOb for using these limit constraints * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ - memset(&cob, 0, sizeof(bConstraintOb)); unit_m4(cob.matrix); VECCOPY(cob.matrix[3], td->loc); @@ -2084,14 +2083,13 @@ static void constraintSizeLim(TransInfo *t, TransData *td) { if (td->con && td->ext) { bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_SIZELIMIT); - bConstraintOb cob; + bConstraintOb cob= {0}; bConstraint *con; /* Make a temporary bConstraintOb for using these limit constraints * - they only care that cob->matrix is correctly set ;-) * - current space should be local */ - memset(&cob, 0, sizeof(bConstraintOb)); if ((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)) { /* scale val and reset size */ return; // TODO: fix this case diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index cd40cb3bb25..453a48bd500 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -334,15 +334,13 @@ void recalcData(TransInfo *t) Scene *scene= t->scene; SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first; - bAnimContext ac; + bAnimContext ac= {0}; ListBase anim_data = {NULL, NULL}; bAnimListElem *ale; int filter; /* initialise relevant anim-context 'context' data from TransInfo data */ /* NOTE: sync this with the code in ANIM_animdata_get_context() */ - memset(&ac, 0, sizeof(bAnimContext)); - ac.scene= t->scene; ac.obact= OBACT; ac.sa= t->sa; diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index a31ec950711..d7aa7c3377d 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -629,10 +629,8 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la } else { if(lamp->type == LA_AREA) { - float area[4][4], areasize; + float area[4][4]= {{0.0f}}, areasize= 0.0f; - memset(&area, 0, sizeof(area)); - memset(&areasize, 0, sizeof(areasize)); mat->dynproperty |= DYN_LAMP_VEC|DYN_LAMP_CO; GPU_link(mat, "shade_inp_area", GPU_builtin(GPU_VIEW_POSITION), GPU_dynamic_uniform(lamp->dynco), GPU_dynamic_uniform(lamp->dynvec), vn, GPU_uniform((float*)area), GPU_uniform(&areasize), GPU_uniform(&lamp->k), &inp); diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index 6cdb842fbc2..fe82c6e06e1 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -101,11 +101,10 @@ void RNA_main_pointer_create(struct Main *main, PointerRNA *r_ptr) void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr) { - PointerRNA tmp; StructRNA *type, *idtype= NULL; if(id) { - memset(&tmp, 0, sizeof(tmp)); + PointerRNA tmp= {{0}}; tmp.data= id; idtype= rna_ID_refine(&tmp); @@ -126,11 +125,10 @@ void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr) void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr) { - PointerRNA tmp; StructRNA *idtype= NULL; if(id) { - memset(&tmp, 0, sizeof(tmp)); + PointerRNA tmp= {{0}}; tmp.data= id; idtype= rna_ID_refine(&tmp); } @@ -1974,9 +1972,7 @@ PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop) return RNA_property_pointer_get(ptr, prop); } else { - PointerRNA result; - - memset(&result, 0, sizeof(result)); + PointerRNA result= {{0}}; return result; } } diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c index 39e8315e7cf..a76a3e978f5 100644 --- a/source/blender/render/intern/source/volume_precache.c +++ b/source/blender/render/intern/source/volume_precache.c @@ -91,12 +91,11 @@ int intersect_outside_volume(RayObject *tree, Isect *isect, float *offset, int l /* Uses ray tracing to check if a point is inside or outside an ObjectInstanceRen */ int point_inside_obi(RayObject *tree, ObjectInstanceRen *UNUSED(obi), float *co) { - Isect isect; + Isect isect= {{0}}; float vec[3] = {0.0f,0.0f,1.0f}; int final_depth=0, depth=0, limit=20; /* set up the isect */ - memset(&isect, 0, sizeof(isect)); VECCOPY(isect.start, co); VECCOPY(isect.vec, vec); isect.mode= RE_RAY_MIRROR; diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c index 1803a1cee91..ab49c8a34bf 100644 --- a/source/blender/windowmanager/intern/wm_cursors.c +++ b/source/blender/windowmanager/intern/wm_cursors.c @@ -216,16 +216,13 @@ void WM_timecursor(wmWindow *win, int nr) {0, 60, 66, 66, 60, 66, 66, 60}, {0, 56, 68, 68, 120, 64, 68, 56} }; - unsigned char mask[16][2]; - unsigned char bitmap[16][2]; + unsigned char mask[16][2]= {{0}}; + unsigned char bitmap[16][2]= {{0}}; int i, idx; if(win->lastcursor == 0) win->lastcursor= win->cursor; - memset(&bitmap, 0x00, sizeof(bitmap)); - memset(&mask, 0xFF, sizeof(mask)); - /* print number bottom right justified */ for (idx= 3; nr && idx>=0; idx--) { char *digit= number_bitmaps[nr%10]; From 24cd951f422338040473552dbad4ced16756e762 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 22:19:52 +0000 Subject: [PATCH 088/163] bugfix [#24470] Ctrl+Tweak cutting connections fail --- source/blender/editors/space_node/node_edit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index c9f51078cec..28de4c232e9 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1785,7 +1785,7 @@ static int cut_links_intersect(bNodeLink *link, float mcoords[][2], int tot) if(node_link_bezier_points(NULL, NULL, link, coord_array, LINK_RESOL)) { for(i=0; i 0) return 1; } From 604f0ae3014499617a53a1ac082dabbadc5ba8c5 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Mon, 1 Nov 2010 00:09:33 +0000 Subject: [PATCH 089/163] Fix name, update others to match style. --- source/blender/makesrna/intern/rna_space.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 8d807d0cc8c..80a053c3c99 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1008,17 +1008,17 @@ static void rna_def_space_view3d(BlenderRNA *brna) prop= RNA_def_property(srna, "lock_object", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_pointer_sdna(prop, NULL, "ob_centre"); - RNA_def_property_ui_text(prop, "Lock Object", "3D View center is locked to this object's position"); + RNA_def_property_ui_text(prop, "Lock to Object", "3D View center is locked to this object's position"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); prop= RNA_def_property(srna, "lock_bone", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "ob_centre_bone"); - RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to this bone's position"); + RNA_def_property_ui_text(prop, "Lock to Bone", "3D View center is locked to this bone's position"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); prop= RNA_def_property(srna, "lock_cursor", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "ob_centre_cursor", 1); - RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to the cursor's position"); + RNA_def_property_ui_text(prop, "Lock to Cursor", "3D View center is locked to the cursor's position"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); prop= RNA_def_property(srna, "viewport_shade", PROP_ENUM, PROP_NONE); From a6007d1a5c37d6e544285965be7c2caa74930a9b Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Mon, 1 Nov 2010 00:15:12 +0000 Subject: [PATCH 090/163] A couple of changes to 2D filters to make adding new built-in ones nicer: * Built-in filters were not being analyzed, which means no depth or luminance textures for them * Removed an unnecessary if that becomes really hairy when new built-in filters are added (ie, when filters are defined beyond the value used for custom filters) --- .../gameengine/Rasterizer/RAS_2DFilterManager.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp index 0c16d6a29c2..93d82702e90 100644 --- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp +++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp @@ -512,11 +512,11 @@ void RAS_2DFilterManager::EnableFilter(vector& propNames, void* game return; } - if(mode>=RAS_2DFILTER_MOTIONBLUR && mode<=RAS_2DFILTER_INVERT) - { - if(m_filters[pass]) - glDeleteObjectARB(m_filters[pass]); - m_filters[pass] = CreateShaderProgram(mode); - m_enabled[pass] = 1; - } + // We've checked all other cases, which means we must be dealing with a builtin filter + if(m_filters[pass]) + glDeleteObjectARB(m_filters[pass]); + m_filters[pass] = CreateShaderProgram(mode); + m_gameObjects[pass] = NULL; + AnalyseShader(pass, propNames); + m_enabled[pass] = 1; } From 29bcda37fd506ed70b955c631f009307ea2e1ebc Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Mon, 1 Nov 2010 01:45:40 +0000 Subject: [PATCH 091/163] Provide a way to get non-AA font rendering, which some see as "sharper". "Configuration" by recompilation for now (feel free to code that). --- source/blender/blenfont/intern/blf_glyph.c | 34 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 0d694c28b2b..4ac3397cb22 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -36,6 +36,7 @@ #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H +#include FT_BITMAP_H #include "MEM_guardedalloc.h" @@ -49,6 +50,7 @@ #include "blf_internal_types.h" #include "blf_internal.h" +FT_Library global_ft_lib; GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi) { @@ -190,22 +192,40 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) FT_GlyphSlot slot; GlyphBLF *g; FT_Error err; - FT_Bitmap bitmap; + FT_Bitmap bitmap, tempbitmap; + int sharp; FT_BBox bbox; unsigned int key; + sharp = 0; /* TODO make the value be configurable somehow */ + g= blf_glyph_search(font->glyph_cache, c); if (g) return(g); - err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); + if (sharp) + err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_MONO); + else + err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_NORMAL | FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); /* Sure about NO_* flags? */ if (err) return(NULL); /* get the glyph. */ slot= font->face->glyph; - err= FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + if (sharp) { + err = FT_Render_Glyph(slot, FT_RENDER_MODE_MONO); + + /* Convert result from 1 bit per pixel to 8 bit per pixel */ + /* Accum errors for later, fine if not interested beyond "ok vs any error" */ + err += FT_Bitmap_New(&tempbitmap); + err += FT_Bitmap_Convert(global_ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */ + err += FT_Bitmap_Copy(global_ft_lib, &tempbitmap, &slot->bitmap); + err += FT_Bitmap_Done(global_ft_lib, &tempbitmap); + } else { + err = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + } + if (err || slot->format != FT_GLYPH_FORMAT_BITMAP) return(NULL); @@ -228,6 +248,14 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) g->height= bitmap.rows; if (g->width && g->height) { + if (sharp) { + /* Font buffer uses only 0 or 1 values, Blender expects full 0..255 range */ + int i; + for (i=0; i < (g->width * g->height); i++) { + bitmap.buffer[i] = 255 * bitmap.buffer[i]; + } + } + g->bitmap= (unsigned char *)MEM_mallocN(g->width * g->height, "glyph bitmap"); memcpy((void *)g->bitmap, (void *)bitmap.buffer, g->width * g->height); } From d9a7358b4cd09980e35ea8e51e77d487c8c99444 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 01:46:26 +0000 Subject: [PATCH 092/163] bugfix [#24462] UV Layouts saved as PNG results in two files (one is 0 KB, other has corrupted filename) --- source/blender/blenlib/intern/path_util.c | 13 ++++++++++++- source/blender/makesrna/RNA_define.h | 1 + source/blender/makesrna/intern/rna_define.c | 5 +++++ source/blender/makesrna/intern/rna_scene_api.c | 3 ++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index 8a6f6205eac..91558d4806e 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -543,9 +543,20 @@ int BLI_path_frame(char *path, int frame, int digits) ensure_digits(path, digits); if (stringframe_chars(path, &ch_sta, &ch_end)) { /* warning, ch_end is the last # +1 */ - char tmp[FILE_MAX], format[64]; + char tmp[FILE_MAX]; +#if 0 // neat but breaks on non ascii strings. + char format[64]; sprintf(format, "%%.%ds%%.%dd%%s", ch_sta, ch_end-ch_sta); /* example result: "%.12s%.5d%s" */ sprintf(tmp, format, path, frame, path+ch_end); +#else + char format[8]; + char *p; + sprintf(format, "%%.%dd", ch_end-ch_sta); /* example result: "%.5d" */ + memcpy(tmp, path, sizeof(char) * ch_sta); + p= tmp + ch_sta; + p += sprintf(p, format, frame); + memcpy(p, path + ch_end, strlen(path + ch_end)); +#endif strcpy(path, tmp); return 1; } diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h index 16ca718e335..dc31573e8dd 100644 --- a/source/blender/makesrna/RNA_define.h +++ b/source/blender/makesrna/RNA_define.h @@ -132,6 +132,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, void RNA_def_property_flag(PropertyRNA *prop, int flag); void RNA_def_property_clear_flag(PropertyRNA *prop, int flag); +void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype); void RNA_def_property_array(PropertyRNA *prop, int length); void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, int length[]); void RNA_def_property_range(PropertyRNA *prop, double min, double max); diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 0a8e0bad7f0..66ef0f3b950 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -1005,6 +1005,11 @@ void RNA_def_property_clear_flag(PropertyRNA *prop, int flag) prop->flag &= ~flag; } +void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype) +{ + prop->subtype= subtype; +} + void RNA_def_property_array(PropertyRNA *prop, int length) { StructRNA *srna= DefRNA.laststruct; diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 800922ceba0..4b5edb5c6e9 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -96,8 +96,9 @@ void RNA_api_scene_render(StructRNA *srna) func= RNA_def_function(srna, "frame_path", "rna_SceneRender_get_frame_path"); RNA_def_function_ui_description(func, "Return the absolute path to the filename to be written for a given frame."); parm= RNA_def_int(func, "frame", INT_MIN, INT_MIN, INT_MAX, "", "Frame number to use, if unset the current frame will be used.", MINAFRAME, MAXFRAME); - parm= RNA_def_string(func, "name", "", FILE_MAX, "File Name", "the resulting filename from the scenes render settings."); + parm= RNA_def_string(func, "filepath", "", FILE_MAX, "File Path", "the resulting filepath from the scenes render settings."); RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */ + RNA_def_property_subtype(parm, PROP_FILEPATH); /* allow non utf8 */ RNA_def_function_output(func, parm); } From f1e10b093582fdb3370becc89ea25cfd0948f11d Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Mon, 1 Nov 2010 01:48:43 +0000 Subject: [PATCH 093/163] Fix silly column paste. --- source/blender/blenfont/intern/blf_glyph.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 4ac3397cb22..2c0b833297e 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -218,7 +218,7 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) /* Convert result from 1 bit per pixel to 8 bit per pixel */ /* Accum errors for later, fine if not interested beyond "ok vs any error" */ - err += FT_Bitmap_New(&tempbitmap); + FT_Bitmap_New(&tempbitmap); err += FT_Bitmap_Convert(global_ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */ err += FT_Bitmap_Copy(global_ft_lib, &tempbitmap, &slot->bitmap); err += FT_Bitmap_Done(global_ft_lib, &tempbitmap); From 8bbcef4c7a377045f6b93580efda93eb4adf800d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 02:22:20 +0000 Subject: [PATCH 094/163] bugfix [#24449] User Preferences - Interface - Manipulator --- .../editors/space_view3d/space_view3d.c | 1 + source/blender/makesrna/intern/rna_userdef.c | 34 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 77f6e63e860..22143db7769 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -206,6 +206,7 @@ static SpaceLink *view3d_new(const bContext *C) v3d->near= 0.01f; v3d->far= 500.0f; + v3d->twflag |= U.tw_flag & V3D_USE_MANIPULATOR; v3d->twtype= V3D_MANIP_TRANSLATE; v3d->around= V3D_CENTROID; diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index b00afa73ca9..161ce2e198c 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -33,6 +33,7 @@ #include "DNA_space_types.h" #include "DNA_userdef_types.h" #include "DNA_brush_types.h" +#include "DNA_view3d_types.h" #include "WM_api.h" #include "WM_types.h" @@ -47,6 +48,7 @@ #include "BKE_DerivedMesh.h" #include "BKE_depsgraph.h" #include "DNA_object_types.h" +#include "DNA_screen_types.h" #include "GPU_draw.h" #include "BKE_global.h" @@ -58,6 +60,34 @@ static void rna_userdef_update(Main *bmain, Scene *scene, PointerRNA *ptr) WM_main_add_notifier(NC_WINDOW, NULL); } +static void rna_userdef_show_manipulator_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + UserDef *userdef = (UserDef *)ptr->data; + + /* lame, loop over all views and set */ + bScreen *sc; + ScrArea *sa; + SpaceLink *sl; + + /* from scene copy to the other views */ + for(sc=bmain->screen.first; sc; sc=sc->id.next) { + for(sa=sc->areabase.first; sa; sa=sa->next) { + for(sl=sa->spacedata.first; sl; sl=sl->next) { + if(sl->spacetype==SPACE_VIEW3D) { + View3D *v3d= (View3D *)sl; + if(userdef->tw_flag & V3D_USE_MANIPULATOR) + v3d->twflag |= V3D_USE_MANIPULATOR; + else + v3d->twflag &= ~V3D_USE_MANIPULATOR; + } + } + } + } + + rna_userdef_update(bmain, scene, ptr); +} + + static void rna_userdef_script_autoexec_update(Main *bmain, Scene *scene, PointerRNA *ptr) { UserDef *userdef = (UserDef*)ptr->data; @@ -2008,9 +2038,9 @@ static void rna_def_userdef_view(BlenderRNA *brna) /* 3D transform widget */ prop= RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", 1); + RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", V3D_USE_MANIPULATOR); RNA_def_property_ui_text(prop, "Manipulator", "Use 3D transform manipulator"); - RNA_def_property_update(prop, 0, "rna_userdef_update"); + RNA_def_property_update(prop, 0, "rna_userdef_show_manipulator_update"); prop= RNA_def_property(srna, "manipulator_size", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "tw_size"); From daa4feaaeae4312eb23f66b948b668a7e9dc1959 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 07:19:41 +0000 Subject: [PATCH 095/163] bugfix [#24477] Can easily create bones with duplicate names - fixed this error 7 different functions (deform groups, uv layers & similar). - support for numbers over 999. - renamed splitIDname() to BLI_split_name_num(), moved to BLI_path_utils --- source/blender/blenkernel/BKE_library.h | 1 - source/blender/blenkernel/intern/customdata.c | 93 ++++++++--------- source/blender/blenkernel/intern/deform.c | 68 ++++++------- source/blender/blenkernel/intern/library.c | 33 +------ source/blender/blenkernel/intern/mball.c | 18 ++-- source/blender/blenkernel/intern/nla.c | 32 +++--- source/blender/blenlib/BLI_path_util.h | 1 + source/blender/blenlib/intern/path_util.c | 99 ++++++++++++------- .../blender/editors/armature/editarmature.c | 64 +++++------- source/blender/editors/object/object_vgroup.c | 21 ++-- .../editors/space_view3d/space_view3d.c | 6 +- .../transform/transform_orientations.c | 36 +++---- 12 files changed, 202 insertions(+), 270 deletions(-) diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h index b74de66f7b6..d98fb082aa9 100644 --- a/source/blender/blenkernel/BKE_library.h +++ b/source/blender/blenkernel/BKE_library.h @@ -67,7 +67,6 @@ void free_libblock_us(struct ListBase *lb, void *idv); void free_main(struct Main *mainvar); void tag_main(struct Main *mainvar, int tag); -int splitIDname(char *name, char *left, int *nr); void rename_id(struct ID *id, char *name); void name_uiprefix_id(char *name, struct ID *id); void test_idbutton(char *name); diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 9c4f0d790ca..c1aaa869876 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2249,69 +2249,56 @@ static int CustomData_is_property_layer(int type) return 0; } +static int cd_layer_find_dupe(CustomData *data, const char *name, int type, int index) +{ + int i; + /* see if there is a duplicate */ + for(i=0; itotlayer; i++) { + if(i != index) { + CustomDataLayer *layer= &data->layers[i]; + + if(CustomData_is_property_layer(type)) { + if(CustomData_is_property_layer(layer->type) && strcmp(layer->name, name)==0) { + return 1; + } + } + else{ + if(i!=index && layer->type==type && strcmp(layer->name, name)==0) { + return 1; + } + } + } + } + + return 0; +} + void CustomData_set_layer_unique_name(CustomData *data, int index) { - char tempname[64]; - int number, i, type; - char *dot, *name; - CustomDataLayer *layer, *nlayer= &data->layers[index]; + CustomDataLayer *nlayer= &data->layers[index]; const LayerTypeInfo *typeInfo= layerType_getInfo(nlayer->type); if (!typeInfo->defaultname) return; - type = nlayer->type; - name = nlayer->name; - - if (name[0] == '\0') + if (nlayer->name[0] == '\0') BLI_strncpy(nlayer->name, typeInfo->defaultname, sizeof(nlayer->name)); - - /* see if there is a duplicate */ - for(i=0; itotlayer; i++) { - layer = &data->layers[i]; + + if(cd_layer_find_dupe(data, nlayer->name, nlayer->type, index)) { + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(nlayer->name)]; + char left[sizeof(nlayer->name)]; + int number; + int len= BLI_split_name_num(left, &number, nlayer->name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ + } + } while(number++, cd_layer_find_dupe(data, tempname, nlayer->type, index)); - if(CustomData_is_property_layer(type)){ - if(i!=index && CustomData_is_property_layer(layer->type) && - strcmp(layer->name, name)==0) - break; - - } - else{ - if(i!=index && layer->type==type && strcmp(layer->name, name)==0) - break; - } + BLI_strncpy(nlayer->name, tempname, sizeof(nlayer->name)); } - - if(i == data->totlayer) - return; - - /* strip off the suffix */ - dot = strchr(nlayer->name, '.'); - if(dot) *dot=0; - - for(number=1; number <=999; number++) { - sprintf(tempname, "%s.%03d", nlayer->name, number); - - for(i=0; itotlayer; i++) { - layer = &data->layers[i]; - - if(CustomData_is_property_layer(type)){ - if(i!=index && CustomData_is_property_layer(layer->type) && - strcmp(layer->name, tempname)==0) - - break; - } - else{ - if(i!=index && layer->type==type && strcmp(layer->name, tempname)==0) - break; - } - } - - if(i == data->totlayer) { - BLI_strncpy(nlayer->name, tempname, sizeof(nlayer->name)); - return; - } - } } int CustomData_verify_versions(struct CustomData *data, int index) diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index 91584b6236f..10fbd247c84 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -304,14 +304,23 @@ int defgroup_flip_index(Object *ob, int index, int use_default) return (flip_index==-1 && use_default) ? index : flip_index; } -void defgroup_unique_name (bDeformGroup *dg, Object *ob) +static int defgroup_find_name_dupe(const char *name, bDeformGroup *dg, Object *ob) { bDeformGroup *curdef; - int number; - int exists = 0; - char tempname[64]; - char *dot; + for (curdef = ob->defbase.first; curdef; curdef=curdef->next) { + if (dg!=curdef) { + if (!strcmp(curdef->name, name)) { + return 1; + } + } + } + + return 0; +} + +void defgroup_unique_name (bDeformGroup *dg, Object *ob) +{ if (!ob) return; @@ -320,45 +329,24 @@ void defgroup_unique_name (bDeformGroup *dg, Object *ob) /* give it default name first */ strcpy (dg->name, "Group"); } - - /* See if we even need to do this */ - for (curdef = ob->defbase.first; curdef; curdef=curdef->next) { - if (dg!=curdef) { - if (!strcmp(curdef->name, dg->name)) { - exists = 1; - break; + + if(defgroup_find_name_dupe(dg->name, dg, ob)) { + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(dg->name)]; + char left[sizeof(dg->name)]; + int number; + int len= BLI_split_name_num(left, &number, dg->name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, defgroup_find_name_dupe(tempname, dg, ob)); + + BLI_strncpy(dg->name, tempname, sizeof(dg->name)); } - - if (!exists) - return; - - /* Strip off the suffix */ - dot=strchr(dg->name, '.'); - if (dot) - *dot=0; - - for (number = 1; number <=999; number++) { - sprintf (tempname, "%s.%03d", dg->name, number); - - exists = 0; - for (curdef=ob->defbase.first; curdef; curdef=curdef->next) { - if (dg!=curdef) { - if (!strcmp (curdef->name, tempname)) { - exists = 1; - break; - } - } - } - if (!exists) { - BLI_strncpy (dg->name, tempname, 32); - return; - } - } } - /* finds the best possible flipped name. For renaming; check for unique names afterwards */ /* if strip_number: removes number extensions */ void flip_side_name (char *name, const char *from_name, int strip_number) diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index dc3c120ab19..4227c633c0b 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -984,35 +984,6 @@ void IMAnames_to_pupstring(char **str, char *title, char *extraops, ListBase *lb BLI_dynstr_free(pupds); } - -/* used by buttons.c library.c mball.c */ -int splitIDname(char *name, char *left, int *nr) -{ - int a; - - *nr= 0; - strncpy(left, name, 21); - - a= strlen(name); - if(a>1 && name[a-1]=='.') return a; - - while(a--) { - if( name[a]=='.' ) { - left[a]= 0; - *nr= atol(name+a+1); - return a; - } - if( isdigit(name[a])==0 ) break; - - left[a]= 0; - } - - for(a= 0; name[a]; a++) - left[a]= name[a]; - - return a; -} - static void sort_alpha_id(ListBase *lb, ID *id) { ID *idtest; @@ -1092,7 +1063,7 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name) memset(in_use, 0, sizeof(in_use)); /* get name portion, number portion ("name.number") */ - left_len= splitIDname(name, left, &nr); + left_len= BLI_split_name_num(left, &nr, name); /* if new name will be too long, truncate it */ if(nr > 999 && left_len > 16) { @@ -1109,7 +1080,7 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name) (idtest->lib == NULL) && (*name == *(idtest->name+2)) && (strncmp(name, idtest->name+2, left_len)==0) && - (splitIDname(idtest->name+2, leftest, &nrtest) == left_len) + (BLI_split_name_num(leftest, &nrtest, idtest->name+2) == left_len) ) { if(nrtest < sizeof(in_use)) in_use[nrtest]= 1; /* mark as used */ diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c index e6f38e04d76..fd3bc47da9e 100644 --- a/source/blender/blenkernel/intern/mball.c +++ b/source/blender/blenkernel/intern/mball.c @@ -330,8 +330,8 @@ int is_mball_basis_for(Object *ob1, Object *ob2) int basis1nr, basis2nr; char basis1name[32], basis2name[32]; - splitIDname(ob1->id.name+2, basis1name, &basis1nr); - splitIDname(ob2->id.name+2, basis2name, &basis2nr); + BLI_split_name_num(basis1name, &basis1nr, ob1->id.name+2); + BLI_split_name_num(basis2name, &basis2nr, ob2->id.name+2); if(!strcmp(basis1name, basis2name)) return is_basis_mball(ob1); else return 0; @@ -352,7 +352,7 @@ void copy_mball_properties(Scene *scene, Object *active_object) int basisnr, obnr; char basisname[32], obname[32]; - splitIDname(active_object->id.name+2, basisname, &basisnr); + BLI_split_name_num(basisname, &basisnr, active_object->id.name+2); /* XXX recursion check, see scene.c, just too simple code this next_object() */ if(F_ERROR==next_object(&sce_iter, 0, 0, 0)) @@ -361,7 +361,7 @@ void copy_mball_properties(Scene *scene, Object *active_object) while(next_object(&sce_iter, 1, &base, &ob)) { if (ob->type==OB_MBALL) { if(ob!=active_object){ - splitIDname(ob->id.name+2, obname, &obnr); + BLI_split_name_num(obname, &obnr, ob->id.name+2); /* Object ob has to be in same "group" ... it means, that it has to have * same base of its name */ @@ -394,8 +394,8 @@ Object *find_basis_mball(Scene *scene, Object *basis) MetaElem *ml=NULL; int basisnr, obnr; char basisname[32], obname[32]; - - splitIDname(basis->id.name+2, basisname, &basisnr); + + BLI_split_name_num(basisname, &basisnr, basis->id.name+2); totelem= 0; /* XXX recursion check, see scene.c, just too simple code this next_object() */ @@ -415,7 +415,7 @@ Object *find_basis_mball(Scene *scene, Object *basis) else ml= mb->elems.first; } else{ - splitIDname(ob->id.name+2, obname, &obnr); + BLI_split_name_num(obname, &obnr, ob->id.name+2); /* object ob has to be in same "group" ... it means, that it has to have * same base of its name */ @@ -1572,7 +1572,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ invert_m4_m4(obinv, ob->obmat); a= 0; - splitIDname(ob->id.name+2, obname, &obnr); + BLI_split_name_num(obname, &obnr, ob->id.name+2); /* make main array */ next_object(&sce_iter, 0, 0, 0); @@ -1593,7 +1593,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */ char name[32]; int nr; - splitIDname(bob->id.name+2, name, &nr); + BLI_split_name_num(name, &nr, bob->id.name+2); if( strcmp(obname, name)==0 ) { mb= bob->data; diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 67c3e746a63..6c8eb69703f 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -1260,27 +1260,21 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip) * - in an extreme case, it might not be able to find a name, but then everything else in Blender would fail too :) */ if (BLI_ghash_haskey(gh, strip->name)) { - char tempname[128]; - int number = 1; - char *dot; - - /* Strip off the suffix */ - dot = strrchr(strip->name, '.'); - if (dot) *dot=0; - - /* Try different possibilities */ - for (number = 1; number <= 999; number++) { - /* assemble alternative name */ - BLI_snprintf(tempname, 128, "%s.%03d", strip->name, number); - - /* if hash doesn't have this, set it */ - if (BLI_ghash_haskey(gh, tempname) == 0) { - BLI_strncpy(strip->name, tempname, sizeof(strip->name)); - break; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(strip->name)]; + char left[sizeof(strip->name)]; + int number; + int len= BLI_split_name_num(left, &number, strip->name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } - } + } while(number++, BLI_ghash_haskey(gh, tempname)); + BLI_strncpy(strip->name, tempname, sizeof(strip->name)); + } + /* free the hash... */ BLI_ghash_free(gh, NULL, NULL); } diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h index 5dbb137ec07..69b10661e23 100644 --- a/source/blender/blenlib/BLI_path_util.h +++ b/source/blender/blenlib/BLI_path_util.h @@ -120,6 +120,7 @@ void BLI_uniquename(struct ListBase *list, void *vlink, const char defname[], ch void BLI_newname(char * name, int add); int BLI_stringdec(const char *string, char *head, char *start, unsigned short *numlen); void BLI_stringenc(char *string, const char *head, const char *tail, unsigned short numlen, int pic); +int BLI_split_name_num(char *left, int *nr, const char *name); void BLI_splitdirstring(char *di,char *fi); /* make sure path separators conform to system one */ diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index 91558d4806e..466012eb9b8 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -136,6 +136,37 @@ void BLI_stringenc(char *string, const char *head, const char *tail, unsigned sh sprintf(string, fmtstr, head, pic, tail); } +/* Foo.001 -> "Foo", 1 + * Returns the length of "Foo" */ +int BLI_split_name_num(char *left, int *nr, const char *name) +{ + int a; + + *nr= 0; + a= strlen(name); + memcpy(left, name, (a + 1) * sizeof(char)); + + if(a>1 && name[a-1]=='.') return a; + + while(a--) { + if( name[a]=='.' ) { + left[a]= 0; + *nr= atol(name+a+1); + /* casting down to an int, can overflow for large numbers */ + if(*nr < 0) + *nr= 0; + return a; + } + if( isdigit(name[a])==0 ) break; + + left[a]= 0; + } + + for(a= 0; name[a]; a++) + left[a]= name[a]; + + return a; +} void BLI_newname(char *name, int add) { @@ -174,15 +205,25 @@ void BLI_newname(char *name, int add) * defname: the name that should be used by default if none is specified already * delim: the character which acts as a delimeter between parts of the name */ -void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short len) +static int uniquename_find_dupe(ListBase *list, void *vlink, const char *name, short name_offs) { Link *link; - char tempname[128]; - int number = 1, exists = 0; - char *dot; - + + for (link = list->first; link; link= link->next) { + if (link != vlink) { + if (!strcmp(GIVE_STRADDR(link, name_offs), name)) { + return 1; + } + } + } + + return 0; +} + +void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short name_len) +{ /* Make sure length can be handled */ - if ((len < 0) || (len > 128)) + if ((name_len < 0) || (name_len > 128)) return; /* See if we are given an empty string */ @@ -191,45 +232,27 @@ void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char deli if (GIVE_STRADDR(vlink, name_offs) == '\0') { /* give it default name first */ - BLI_strncpy(GIVE_STRADDR(vlink, name_offs), defname, len); + BLI_strncpy(GIVE_STRADDR(vlink, name_offs), defname, name_len); } /* See if we even need to do this */ if (list == NULL) return; - - for (link = list->first; link; link= link->next) { - if (link != vlink) { - if (!strcmp(GIVE_STRADDR(link, name_offs), GIVE_STRADDR(vlink, name_offs))) { - exists = 1; - break; - } - } - } - if (exists == 0) - return; - /* Strip off the suffix */ - dot = strrchr(GIVE_STRADDR(vlink, name_offs), delim); - if (dot) - *dot=0; - - for (number = 1; number <= 999; number++) { - BLI_snprintf(tempname, sizeof(tempname), "%s%c%03d", GIVE_STRADDR(vlink, name_offs), delim, number); - - exists = 0; - for (link= list->first; link; link= link->next) { - if (vlink != link) { - if (!strcmp(GIVE_STRADDR(link, name_offs), tempname)) { - exists = 1; - break; - } + if(uniquename_find_dupe(list,vlink, GIVE_STRADDR(vlink, name_offs), name_offs)) { + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[128]; + char left[128]; + int number; + int len= BLI_split_name_num(left, &number, GIVE_STRADDR(vlink, name_offs)); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, name_len, "%s%c%03d", left, delim, number) >= name_len) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } - if (exists == 0) { - BLI_strncpy(GIVE_STRADDR(vlink, name_offs), tempname, len); - return; - } + } while(number++, uniquename_find_dupe(list, vlink, tempname, name_offs)); + + BLI_strncpy(GIVE_STRADDR(vlink, name_offs), tempname, name_len); } } diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index fd747cc32aa..0be27e943f4 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -509,28 +509,23 @@ static EditBone *editbone_name_exists (ListBase *edbo, const char *name) void unique_editbone_name (ListBase *edbo, char *name, EditBone *bone) { EditBone *dupli; - char tempname[64]; - int number; - char *dot; dupli = editbone_name_exists(edbo, name); if (dupli && bone != dupli) { - /* Strip off the suffix, if it's a number */ - number= strlen(name); - if (number && isdigit(name[number-1])) { - dot= strrchr(name, '.'); // last occurrence - if (dot) - *dot=0; - } - - for (number = 1; number <= 999; number++) { - sprintf(tempname, "%s.%03d", name, number); - if (!editbone_name_exists(edbo, tempname)) { - BLI_strncpy(name, tempname, 32); - return; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(bone->name)]; + char left[sizeof(bone->name)]; + int number; + int len= BLI_split_name_num(left, &number, name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, ((dupli= editbone_name_exists(edbo, tempname)) && bone != dupli)); + + BLI_strncpy(name, tempname, sizeof(bone->name)); } } @@ -5389,29 +5384,22 @@ void POSE_OT_reveal(wmOperatorType *ot) /* ************* RENAMING DISASTERS ************ */ /* note: there's a unique_editbone_name() too! */ -void unique_bone_name (bArmature *arm, char *name) -{ - char tempname[64]; - int number; - char *dot; - +static void unique_bone_name (bArmature *arm, char *name) +{ if (get_named_bone(arm, name)) { - - /* Strip off the suffix, if it's a number */ - number= strlen(name); - if(number && isdigit(name[number-1])) { - dot= strrchr(name, '.'); // last occurrence - if (dot) - *dot=0; - } - - for (number = 1; number <=999; number++) { - sprintf (tempname, "%s.%03d", name, number); - if (!get_named_bone(arm, tempname)) { - BLI_strncpy (name, tempname, 32); - return; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(((Bone *)NULL)->name)]; + char left[sizeof(((Bone *)NULL)->name)]; + int number; + int len= BLI_split_name_num(left, &number, name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, get_named_bone(arm, tempname)); + + BLI_strncpy(name, tempname, sizeof(tempname)); } } diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 015fab05828..dd4864f928f 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -596,7 +596,7 @@ static void vgroup_select_verts(Object *ob, int select) static void vgroup_duplicate(Object *ob) { bDeformGroup *dg, *cdg; - char name[32], s[32]; + char name[sizeof(dg->name)]; MDeformWeight *org, *cpy; MDeformVert *dvert, **dvert_array=NULL; int i, idg, icdg, dvert_tot=0; @@ -605,26 +605,17 @@ static void vgroup_duplicate(Object *ob) if(!dg) return; - if(strstr(dg->name, "_copy")) { - BLI_strncpy(name, dg->name, 32); /* will be renamed _copy.001... etc */ + if(!strstr(dg->name, "_copy")) { + BLI_snprintf(name, sizeof(name), "%s_copy", dg->name); } else { - BLI_snprintf(name, 32, "%s_copy", dg->name); - while(defgroup_find_name(ob, name)) { - if((strlen(name) + 6) > 32) { - if (G.f & G_DEBUG) - printf("Internal error: the name for the new vertex group is > 32 characters"); - return; - } - strcpy(s, name); - BLI_snprintf(name, 32, "%s_copy", s); - } - } + BLI_snprintf(name, sizeof(name), "%s", dg->name); + } cdg = defgroup_duplicate(dg); strcpy(cdg->name, name); defgroup_unique_name(cdg, ob); - + BLI_addtail(&ob->defbase, cdg); idg = (ob->actdef-1); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 22143db7769..f5c1612f786 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -191,7 +191,7 @@ static SpaceLink *view3d_new(const bContext *C) v3d->lay= v3d->layact= scene->lay; v3d->camera= scene->camera; } - v3d->scenelock= 1; + v3d->scenelock= TRUE; v3d->grid= 1.0f; v3d->gridlines= 16; v3d->gridsubdiv = 10; @@ -250,8 +250,8 @@ static SpaceLink *view3d_new(const bContext *C) ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region view3d"); rv3d= ar->regiondata; rv3d->viewquat[0]= 1.0f; - rv3d->persp= 1; - rv3d->view= 7; + rv3d->persp= RV3D_PERSP; + rv3d->view= RV3D_VIEW_PERSPORTHO; rv3d->dist= 10.0; return (SpaceLink *)v3d; diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index a01a3b17cd2..2d936460c53 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -86,33 +86,23 @@ TransformOrientation* findOrientationName(bContext *C, char *name) return NULL; } -void uniqueOrientationName(bContext *C, char *name) +static void uniqueOrientationName(bContext *C, char *name) { if (findOrientationName(C, name) != NULL) { - char tempname[64]; - int number; - char *dot; - - - number = strlen(name); - - if (number && isdigit(name[number-1])) - { - dot = strrchr(name, '.'); // last occurrence - if (dot) - *dot=0; - } - - for (number = 1; number <= 999; number++) - { - sprintf(tempname, "%s.%03d", name, number); - if (findOrientationName(C, tempname) == NULL) - { - BLI_strncpy(name, tempname, 32); - break; + /* note: this block is used in other places, when changing logic apply to all others, search this message */ + char tempname[sizeof(((TransformOrientation *)NULL)->name)]; + char left[sizeof(((TransformOrientation *)NULL)->name)]; + int number; + int len= BLI_split_name_num(left, &number, name); + do { /* nested while loop looks bad but likely it wont run most times */ + while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) { + if(len > 0) left[--len]= '\0'; /* word too long */ + else number= 0; /* reset, must be a massive number */ } - } + } while(number++, findOrientationName(C, tempname)); + + BLI_strncpy(name, tempname, sizeof(tempname)); } } From 84a32829334644afe80139d0513533be1f6d2e13 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Mon, 1 Nov 2010 10:22:46 +0000 Subject: [PATCH 096/163] Patch: [#24479] fix for bug 24474, by Anthony Edlin. Thanks! This fixes [#24474] Pressing or clicking "Play Animation ... reverse = True" does not play animation backwards --- source/blender/editors/include/ED_screen_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h index 18d6a1a48cc..240075565af 100644 --- a/source/blender/editors/include/ED_screen_types.h +++ b/source/blender/editors/include/ED_screen_types.h @@ -52,7 +52,7 @@ enum { /* don't drop frames (and ignore SCE_FRAME_DROP flag) */ ANIMPLAY_FLAG_NO_SYNC = (1<<3), /* use nextfra at next timer update */ - ANIMPLAY_FLAG_USE_NEXT_FRAME, + ANIMPLAY_FLAG_USE_NEXT_FRAME = (1<<4) }; /* ----------------------------------------------------- */ From 08fbe28464b165c0003a313c0461abcb30936725 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 10:29:05 +0000 Subject: [PATCH 097/163] bugfix [#24480] Axis Angle + manipulators: bad behaviour --- .../editors/transform/transform_manipulator.c | 60 +++++++++++++------ 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index f3afd5793bc..5bce18ef5f7 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -201,24 +201,50 @@ int gimbal_axis(Object *ob, float gmat[][3]) } else { if(test_rotmode_euler(ob->rotmode)) { - - - if (ob->parent) - { - float parent_mat[3][3], amat[3][3]; - - eulO_to_gimbal_axis(amat, ob->rot, ob->rotmode); - copy_m3_m4(parent_mat, ob->parent->obmat); - normalize_m3(parent_mat); - mul_m3_m3m3(gmat, parent_mat, amat); - return 1; - } - else - { - eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode); - return 1; - } + eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode); } + else if(ob->rotmode == ROT_MODE_AXISANGLE) { + /* X/Y are arbitrary axies, most importantly Z is the axis of rotation + * there is also an axis flipping problem if the rotation axis points + * exactly on Z and Y value is modified. */ + float cross_vec[3]= {0}; + float quat[4]; + + if(ob->rotAxis[0] || ob->rotAxis[1]) { + cross_vec[2]= 1.0f; + } + else { + cross_vec[0]= 1.0f; /* could be X or Y */ + } + + /* X-axis */ + cross_v3_v3v3(gmat[0], cross_vec, ob->rotAxis); + normalize_v3(gmat[0]); + axis_angle_to_quat(quat, ob->rotAxis, ob->rotAngle); + mul_qt_v3(quat, gmat[0]); + + /* Y-axis */ + axis_angle_to_quat(quat, ob->rotAxis, M_PI/2.0); + copy_v3_v3(gmat[1], gmat[0]); + mul_qt_v3(quat, gmat[1]); + + /* Z-axis */ + copy_v3_v3(gmat[2], ob->rotAxis); + + normalize_m3(gmat); + } + else { /* quat */ + return 0; + } + + if (ob->parent) + { + float parent_mat[3][3]; + copy_m3_m4(parent_mat, ob->parent->obmat); + normalize_m3(parent_mat); + mul_m3_m3m3(gmat, parent_mat, gmat); + } + return 1; } } From a55627339c8946985d2ecb348ae59b756a9f9596 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Mon, 1 Nov 2010 10:48:48 +0000 Subject: [PATCH 098/163] Temporary revert recent changes in blf_glyph.c until its fixed. >> Compile failure on windows platform (see ML for Errors). SVN Revert of Revisions: 32805, 32804 and 32802 --- source/blender/blenfont/intern/blf_glyph.c | 34 ++-------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 2c0b833297e..0d694c28b2b 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -36,7 +36,6 @@ #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H -#include FT_BITMAP_H #include "MEM_guardedalloc.h" @@ -50,7 +49,6 @@ #include "blf_internal_types.h" #include "blf_internal.h" -FT_Library global_ft_lib; GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi) { @@ -192,40 +190,22 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) FT_GlyphSlot slot; GlyphBLF *g; FT_Error err; - FT_Bitmap bitmap, tempbitmap; - int sharp; + FT_Bitmap bitmap; FT_BBox bbox; unsigned int key; - sharp = 0; /* TODO make the value be configurable somehow */ - g= blf_glyph_search(font->glyph_cache, c); if (g) return(g); - if (sharp) - err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_MONO); - else - err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_NORMAL | FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); /* Sure about NO_* flags? */ + err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); if (err) return(NULL); /* get the glyph. */ slot= font->face->glyph; - if (sharp) { - err = FT_Render_Glyph(slot, FT_RENDER_MODE_MONO); - - /* Convert result from 1 bit per pixel to 8 bit per pixel */ - /* Accum errors for later, fine if not interested beyond "ok vs any error" */ - FT_Bitmap_New(&tempbitmap); - err += FT_Bitmap_Convert(global_ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */ - err += FT_Bitmap_Copy(global_ft_lib, &tempbitmap, &slot->bitmap); - err += FT_Bitmap_Done(global_ft_lib, &tempbitmap); - } else { - err = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); - } - + err= FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); if (err || slot->format != FT_GLYPH_FORMAT_BITMAP) return(NULL); @@ -248,14 +228,6 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) g->height= bitmap.rows; if (g->width && g->height) { - if (sharp) { - /* Font buffer uses only 0 or 1 values, Blender expects full 0..255 range */ - int i; - for (i=0; i < (g->width * g->height); i++) { - bitmap.buffer[i] = 255 * bitmap.buffer[i]; - } - } - g->bitmap= (unsigned char *)MEM_mallocN(g->width * g->height, "glyph bitmap"); memcpy((void *)g->bitmap, (void *)bitmap.buffer, g->width * g->height); } From e40b4d80c6869c2d112c68999447a0556a5f99f5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 11:50:15 +0000 Subject: [PATCH 099/163] improvement to axis/angle gimble conversion added last commit. fixed flipping problems and enabled for pose bones. --- .../editors/transform/transform_manipulator.c | 72 +++++++++++-------- 1 file changed, 42 insertions(+), 30 deletions(-) diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 5bce18ef5f7..73b58b51ffc 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -156,6 +156,37 @@ static void stats_editbone(RegionView3D *rv3d, EditBone *ebo) protectflag_to_drawflags(OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE, &rv3d->twdrawflag); } +/* could move into BLI_math however this is only useful for display/editing purposes */ +static void axis_angle_to_gimbal_axis(float gmat[3][3], float axis[3], float angle) +{ + /* X/Y are arbitrary axies, most importantly Z is the axis of rotation */ + + float cross_vec[3]; + float quat[4]; + + /* this is an un-scientific method to get a vector to cross with + * XYZ intentionally YZX */ + cross_vec[0]= axis[1]; + cross_vec[1]= axis[2]; + cross_vec[2]= axis[0]; + + /* X-axis */ + cross_v3_v3v3(gmat[0], cross_vec, axis); + normalize_v3(gmat[0]); + axis_angle_to_quat(quat, axis, angle); + mul_qt_v3(quat, gmat[0]); + + /* Y-axis */ + axis_angle_to_quat(quat, axis, M_PI/2.0); + copy_v3_v3(gmat[1], gmat[0]); + mul_qt_v3(quat, gmat[1]); + + /* Z-axis */ + copy_v3_v3(gmat[2], axis); + + normalize_m3(gmat); +} + static int test_rotmode_euler(short rotmode) { @@ -169,10 +200,18 @@ int gimbal_axis(Object *ob, float gmat[][3]) { bPoseChannel *pchan= get_active_posechannel(ob); - if(pchan && test_rotmode_euler(pchan->rotmode)) { + if(pchan) { float mat[3][3], tmat[3][3], obmat[3][3]; + if(test_rotmode_euler(pchan->rotmode)) { + eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode); + } + else if (pchan->rotmode == ROT_MODE_AXISANGLE) { + axis_angle_to_gimbal_axis(mat, pchan->rotAxis, pchan->rotAngle); + } + else { /* quat */ + return 0; + } - eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode); /* apply bone transformation */ mul_m3_m3m3(tmat, pchan->bone->bone_mat, mat); @@ -204,34 +243,7 @@ int gimbal_axis(Object *ob, float gmat[][3]) eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode); } else if(ob->rotmode == ROT_MODE_AXISANGLE) { - /* X/Y are arbitrary axies, most importantly Z is the axis of rotation - * there is also an axis flipping problem if the rotation axis points - * exactly on Z and Y value is modified. */ - float cross_vec[3]= {0}; - float quat[4]; - - if(ob->rotAxis[0] || ob->rotAxis[1]) { - cross_vec[2]= 1.0f; - } - else { - cross_vec[0]= 1.0f; /* could be X or Y */ - } - - /* X-axis */ - cross_v3_v3v3(gmat[0], cross_vec, ob->rotAxis); - normalize_v3(gmat[0]); - axis_angle_to_quat(quat, ob->rotAxis, ob->rotAngle); - mul_qt_v3(quat, gmat[0]); - - /* Y-axis */ - axis_angle_to_quat(quat, ob->rotAxis, M_PI/2.0); - copy_v3_v3(gmat[1], gmat[0]); - mul_qt_v3(quat, gmat[1]); - - /* Z-axis */ - copy_v3_v3(gmat[2], ob->rotAxis); - - normalize_m3(gmat); + axis_angle_to_gimbal_axis(gmat, ob->rotAxis, ob->rotAngle); } else { /* quat */ return 0; From 726e6d85305a228f3e13f348cd8d209c6734d1e5 Mon Sep 17 00:00:00 2001 From: Luca Bonavita Date: Mon, 1 Nov 2010 13:27:33 +0000 Subject: [PATCH 100/163] == blender file format == - added a readme so that it's easy to understand how to use the py files. - fixed typos in the usage message. --- .../BlendFileDnaExporter_25.py | 4 +-- doc/blender_file_format/README | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 doc/blender_file_format/README diff --git a/doc/blender_file_format/BlendFileDnaExporter_25.py b/doc/blender_file_format/BlendFileDnaExporter_25.py index 77656f43ae5..afc58ce6730 100755 --- a/doc/blender_file_format/BlendFileDnaExporter_25.py +++ b/doc/blender_file_format/BlendFileDnaExporter_25.py @@ -383,8 +383,8 @@ def usage(): print("Options:") print("\t--dna-keep-blend: doesn't delete the produced blend file DNA export to html") print("\t--dna-debug: sets the logging level to DEBUG (lots of additional info)") - print("\t--dna-versioned' saves version informations in the html and blend filenames") - print("\t--dna-overwrite-css' overwrite dna.css, useful when modifying css in the script") + print("\t--dna-versioned saves version informations in the html and blend filenames") + print("\t--dna-overwrite-css overwrite dna.css, useful when modifying css in the script") print("Examples:") print("\tdefault: % blender2.5 -b -P BlendFileDnaExporter_25.py") print("\twith options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug\n") diff --git a/doc/blender_file_format/README b/doc/blender_file_format/README new file mode 100644 index 00000000000..55dc3b83e49 --- /dev/null +++ b/doc/blender_file_format/README @@ -0,0 +1,29 @@ +To inspect the blend-file-format used by a certain version of blender 2.5x, +navigate to this folder and run this command: + +blender2.5 -b -P BlendFileDnaExporter_25.py + +where "blender2.5" is your blender executable or a symlink to it. + +This creates a temporary dna.blend to be inspected and it produces two new files: + +* dna.html: the list of all the structures saved in a blend file with the blender2.5 + executable you have used. If you enable build informations when you build blender, + the dna.html file will also show which svn revision the html refers to. +* dna.css: the css for the html above + +Below you have the help message with a list of options you can use. + + +Usage: + blender2.5 -b -P BlendFileDnaExporter_25.py [-- [options]] +Options: + --dna-keep-blend: doesn't delete the produced blend file DNA export to html + --dna-debug: sets the logging level to DEBUG (lots of additional info) + --dna-versioned saves version informations in the html and blend filenames + --dna-overwrite-css overwrite dna.css, useful when modifying css in the script +Examples: + default: % blender2.5 -b -P BlendFileDnaExporter_25.py + with options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug + + From 3a8c37bb240f9226526b70165c04c911ed4d3c14 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Mon, 1 Nov 2010 13:51:11 +0000 Subject: [PATCH 101/163] "Fix" for [#22537] motion blur render result incorrect when full sample anti-aliasing is selected * FSA and motion blur can't work nicely together the way they're currently implemented, so I disabled this in the ui and code. * FSA is used if both are selected. * Also changed the name "Full Sample Motion Blur" to "Sampled Motion Blur" to avoid confusion with full sample anti-aliasing. --- release/scripts/ui/properties_render.py | 7 ++++++- source/blender/render/intern/source/pipeline.c | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py index 44f1223aa93..4d421c8f0ea 100644 --- a/release/scripts/ui/properties_render.py +++ b/release/scripts/ui/properties_render.py @@ -483,9 +483,14 @@ class RENDER_PT_antialiasing(RenderButtonsPanel, bpy.types.Panel): class RENDER_PT_motion_blur(RenderButtonsPanel, bpy.types.Panel): - bl_label = "Full Sample Motion Blur" + bl_label = "Sampled Motion Blur" bl_options = {'DEFAULT_CLOSED'} COMPAT_ENGINES = {'BLENDER_RENDER'} + + @classmethod + def poll(cls, context): + rd = context.scene.render + return not rd.use_full_sample def draw_header(self, context): rd = context.scene.render diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 6fac7e7b4aa..1b08f9adfab 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1965,7 +1965,7 @@ static void do_render_fields_3d(Render *re) /* first field, we have to call camera routine for correct aspect and subpixel offset */ RE_SetCamera(re, re->scene->camera); - if(re->r.mode & R_MBLUR) + if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0) do_render_blur_3d(re); else do_render_3d(re); @@ -1985,7 +1985,7 @@ static void do_render_fields_3d(Render *re) re->field_offs = 0.5f; } RE_SetCamera(re, re->scene->camera); - if(re->r.mode & R_MBLUR) + if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0) do_render_blur_3d(re); else do_render_3d(re); @@ -2075,7 +2075,7 @@ static void do_render_fields_blur_3d(Render *re) if(re->r.mode & R_FIELDS) do_render_fields_3d(re); - else if(re->r.mode & R_MBLUR) + else if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0) do_render_blur_3d(re); else do_render_3d(re); From 1b18ea58239b39538f1947cbc1ee0fba9cd26dd9 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Mon, 1 Nov 2010 18:13:10 +0000 Subject: [PATCH 102/163] == FFMPEG == This fixes a rather subtle seeking issue with ffmpeg and Sony XDCAM-footage. Problem is: MPEG2 streams within an MP4 container can contain a start time - at several places. There is a starttime within the video and audio streams and one within the container. FFMpeg commandline tool only uses the container starttime and we used the stream starttime. The world would be a better place, if those two timestamps always match up, since in XDCAM-footage those two starttimes differ in 4 frames - and the container has the right one. We now always use the container start time as ffmpeg commandline tool does (in the hope, that there is a good explaination for this and this is the right thing(tm) to do). I tested this also with HDV footage, which seems to work with the new code, too. Additional fix: disabled seek_by_bytes again, since it will only work correctly, if ffmpeg guessed the HDV bitrate right (which it doesn't). If you have seeking issues with HDV and have an older version of ffmpeg installed, please upgrade, newer versions have some fixes in them. --- intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp | 16 +++++++++------ source/blender/imbuf/intern/anim_movie.c | 21 ++++++++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp index 09fdb31e938..5526b0dcf5a 100644 --- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp +++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp @@ -246,10 +246,8 @@ void AUD_FFMPEGReader::seek(int position) { if(position >= 0) { - uint64_t st_time = m_formatCtx->streams[m_stream]->start_time; - double time_base = - av_q2d(m_formatCtx->streams[m_stream]->time_base); - uint64_t seek_pos = position / time_base / m_specs.rate; + uint64_t st_time = m_formatCtx->start_time; + uint64_t seek_pos = position * AV_TIME_BASE / m_specs.rate; if (seek_pos < 0) { seek_pos = 0; @@ -259,9 +257,14 @@ void AUD_FFMPEGReader::seek(int position) seek_pos += st_time; } + double pts_time_base = + av_q2d(m_formatCtx->streams[m_stream]->time_base); + uint64_t pts_st_time = + ((st_time != AV_NOPTS_VALUE) ? st_time : 0) + / pts_time_base / (uint64_t) AV_TIME_BASE; // a value < 0 tells us that seeking failed - if(av_seek_frame(m_formatCtx, m_stream, seek_pos, + if(av_seek_frame(m_formatCtx, -1, seek_pos, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0) { avcodec_flush_buffers(m_codecCtx); @@ -284,7 +287,7 @@ void AUD_FFMPEGReader::seek(int position) { // calculate real position, and read to frame! m_position = (packet.pts - - ((st_time != AV_NOPTS_VALUE) ? st_time : 0)) * time_base * m_specs.rate; + pts_st_time) * pts_time_base * m_specs.rate; if(m_position < position) { @@ -307,6 +310,7 @@ void AUD_FFMPEGReader::seek(int position) } else { + fprintf(stderr, "seeking failed!\n"); // Seeking failed, do nothing. } } diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c index 8df0d69bcfa..421ef08dc25 100644 --- a/source/blender/imbuf/intern/anim_movie.c +++ b/source/blender/imbuf/intern/anim_movie.c @@ -839,7 +839,15 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { } } +/* disable seek_by_bytes for now, since bitrates are guessed wrong! + also: MPEG2TS-seeking was fixed in later versions of ffmpeg, so problem + is somewhat fixed by now (until we add correct timecode management code...) +*/ +#if 0 seek_by_bytes = !!(anim->pFormatCtx->iformat->flags & AVFMT_TS_DISCONT); +#else + seek_by_bytes = FALSE; +#endif if (position != anim->curposition + 1) { #ifdef FFMPEG_OLD_FRAME_RATE @@ -851,12 +859,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { av_q2d(anim->pFormatCtx->streams[anim->videoStream] ->r_frame_rate); #endif - double time_base = - av_q2d(anim->pFormatCtx->streams[anim->videoStream] - ->time_base); + double pts_time_base = av_q2d(anim->pFormatCtx->streams[anim->videoStream]->time_base); long long pos; - long long st_time = anim->pFormatCtx - ->streams[anim->videoStream]->start_time; + long long st_time = anim->pFormatCtx->start_time; int ret; if (seek_by_bytes) { @@ -876,7 +881,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { } if (st_time != AV_NOPTS_VALUE) { - pos += st_time * AV_TIME_BASE * time_base; + pos += st_time; } } @@ -891,9 +896,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { } pts_to_search = (long long) - (((double) position) / time_base / frame_rate); + (((double) position) / pts_time_base / frame_rate); if (st_time != AV_NOPTS_VALUE) { - pts_to_search += st_time; + pts_to_search += st_time / pts_time_base/ AV_TIME_BASE; } pos_found = 0; From f890b00851317a9acd8e4f784b99bf2986c8b872 Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Mon, 1 Nov 2010 18:55:12 +0000 Subject: [PATCH 103/163] Sequencer: fix for the fix of: #23318 also known as: broken multicam strip caused by other fix. Calculated render_size where it belongs (within the glow effect) and restored old functionality. also: renamed render_size to preview_render_size at all relevant places, where the naming wasn't used correctly. Hopefully it's now a little bit more clear. render_size := render size from scene (just rescales width/height) preview_render_size := preview render size from sequencer preview, controls the resolution and the use of sequencer proxy sources --- source/blender/blenkernel/BKE_sequencer.h | 8 +- source/blender/blenkernel/intern/seqeffects.c | 6 +- source/blender/blenkernel/intern/sequencer.c | 111 ++++++++---------- 3 files changed, 59 insertions(+), 66 deletions(-) diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index 6e20b912811..568a36cdb2f 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -153,10 +153,10 @@ void seq_free_editing(struct Scene *scene); void seq_free_clipboard(void); struct Editing *seq_give_editing(struct Scene *scene, int alloc); char *give_seqname(struct Sequence *seq); -struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size); -struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size); -struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int render_size, struct Sequence *seq); -struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int render_size, struct ListBase *seqbasep); +struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size); +struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size); +struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int preview_render_size, struct Sequence *seq); +struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int preview_render_size, struct ListBase *seqbasep); void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size); void calc_sequence(struct Scene *scene, struct Sequence *seq); void calc_sequence_disp(struct Scene *scene, struct Sequence *seq); diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index b8307a9fb04..f5dc04ca569 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -2660,14 +2660,16 @@ static void do_glow_effect_float(Sequence *seq, int render_size, float facf0, fl } static struct ImBuf * do_glow_effect( - Main *UNUSED(bmain), Scene *UNUSED(scene), Sequence *seq, float UNUSED(cfra), + Main *UNUSED(bmain), Scene * scene, Sequence *seq, float UNUSED(cfra), float facf0, float facf1, int x, int y, - int render_size, + int UNUSED(preview_render_size), struct ImBuf *ibuf1, struct ImBuf *ibuf2, struct ImBuf *ibuf3) { struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3); + int render_size = 100*x/scene->r.xsch; + if (out->rect_float) { do_glow_effect_float(seq, render_size, facf0, facf1, x, y, diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 0207340bd32..ef470821d22 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -1022,7 +1022,7 @@ static int get_shown_sequences( ListBase * seqbasep, int cfra, int chanshown, Se #define PROXY_MAXFILE (2*FILE_MAXDIR+FILE_MAXFILE) -static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, char * name, int render_size) +static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, char * name, int preview_render_size) { int frameno; char dir[FILE_MAXDIR]; @@ -1053,17 +1053,17 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c switch(seq->type) { case SEQ_IMAGE: snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", dir, - render_size, give_stripelem(seq, cfra)->name); + preview_render_size, give_stripelem(seq, cfra)->name); frameno = 1; break; case SEQ_MOVIE: frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; snprintf(name, PROXY_MAXFILE, "%s/%s/%d/####", dir, - seq->strip->stripdata->name, render_size); + seq->strip->stripdata->name, preview_render_size); break; default: frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; - snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, render_size); + snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, preview_render_size); } BLI_path_abs(name, G.main->name); @@ -1074,7 +1074,7 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c return TRUE; } -static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, int render_size) +static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, int preview_render_size) { char name[PROXY_MAXFILE]; @@ -1083,14 +1083,14 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in } /* rendering at 100% ? No real sense in proxy-ing, right? */ - if (render_size == 100) { + if (preview_render_size == 100) { return 0; } if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) { int frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs; if (seq->strip->proxy->anim == NULL) { - if (seq_proxy_get_fname(scene, seq, cfra, name, render_size)==0) { + if (seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)==0) { return 0; } @@ -1103,7 +1103,7 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in return IMB_anim_absolute(seq->strip->proxy->anim, frameno); } - if (seq_proxy_get_fname(scene, seq, cfra, name, render_size)==0) { + if (seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)==0) { return 0; } @@ -1116,9 +1116,9 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in #if 0 static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int cfra, - int build_proxy_run, int render_size); + int build_proxy_run, int preview_render_size); -static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int render_size, int seqrectx, int seqrecty) +static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int preview_render_size, int seqrectx, int seqrecty) { char name[PROXY_MAXFILE]; int quality; @@ -1132,7 +1132,7 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re } /* rendering at 100% ? No real sense in proxy-ing, right? */ - if (render_size == 100) { + if (preview_render_size == 100) { return; } @@ -1141,7 +1141,7 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re return; } - if (!seq_proxy_get_fname(scene, seq, cfra, name, render_size)) { + if (!seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)) { return; } @@ -1155,15 +1155,15 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re se->ibuf = 0; } - do_build_seq_ibuf(scene, seq, se, cfra, TRUE, render_size, + do_build_seq_ibuf(scene, seq, se, cfra, TRUE, preview_render_size, seqrectx, seqrecty); if (!se->ibuf) { return; } - rectx= (render_size*scene->r.xsch)/100; - recty= (render_size*scene->r.ysch)/100; + rectx= (preview_render_size*scene->r.xsch)/100; + recty= (preview_render_size*scene->r.ysch)/100; ibuf = se->ibuf; @@ -1629,14 +1629,14 @@ static void copy_to_ibuf_still(Sequence * seq, float nr, ********************************************************************** */ static ImBuf* seq_render_strip_stack( Main *bmain, Scene *scene, ListBase *seqbasep, - float cfra, int chanshown, int render_size, int seqrectx, int seqrecty); + float cfra, int chanshown, int preview_render_size, int seqrectx, int seqrecty); static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra, - int render_size, int seqrectx, int seqrecty); + int preview_render_size, int seqrectx, int seqrecty); static ImBuf* seq_render_effect_strip_impl(Main *bmain, Scene *scene, float cfra, - Sequence *seq, int render_size, int seqrectx, int seqrecty) + Sequence *seq, int preview_render_size, int seqrectx, int seqrecty) { float fac, facf; int early_out; @@ -1656,15 +1656,6 @@ static ImBuf* seq_render_effect_strip_impl(Main *bmain, Scene *scene, float cfra return out; } - /* Override render size here, effects need to get the actual - * ratio so they can scale appropriately. This whole business - * with render size, proxy size, and seqrectx, etc. is a bit - * complicated and should probably be cleaned up and handled - * properly way before we get to this point. -jahka - * (fix for bug #23318) - */ - render_size = 100*seqrectx/scene->r.xsch; - if (seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) { sh.get_default_fac(seq, cfra, &fac, &facf); @@ -1688,23 +1679,23 @@ static ImBuf* seq_render_effect_strip_impl(Main *bmain, Scene *scene, float cfra switch (early_out) { case EARLY_NO_INPUT: out = sh.execute(bmain, scene, seq, cfra, fac, facf, - seqrectx, seqrecty, render_size, NULL, NULL, NULL); + seqrectx, seqrecty, preview_render_size, NULL, NULL, NULL); case EARLY_DO_EFFECT: for(i=0; i<3; i++) { if(input[i]) ibuf[i] = seq_render_strip(bmain, scene, input[i], cfra, - render_size, seqrectx, seqrecty); + preview_render_size, seqrectx, seqrecty); } if (ibuf[0] && ibuf[1]) { out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty, - render_size, ibuf[0], ibuf[1], ibuf[2]); + preview_render_size, ibuf[0], ibuf[1], ibuf[2]); } break; case EARLY_USE_INPUT_1: if (input[0]) { ibuf[0] = seq_render_strip(bmain, scene, input[0], cfra, - render_size, seqrectx, seqrecty); + preview_render_size, seqrectx, seqrecty); } if (ibuf[0]) { if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) { @@ -1718,7 +1709,7 @@ static ImBuf* seq_render_effect_strip_impl(Main *bmain, Scene *scene, float cfra case EARLY_USE_INPUT_2: if (input[1]) { ibuf[1] = seq_render_strip(bmain, scene, input[1], cfra, - render_size, seqrectx, seqrecty); + preview_render_size, seqrectx, seqrecty); } if (ibuf[1]) { if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) { @@ -1880,7 +1871,7 @@ static ImBuf * seq_render_scene_strip_impl( } static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra, - int render_size, int seqrectx, int seqrecty) + int preview_render_size, int seqrectx, int seqrecty) { ImBuf * ibuf = NULL; char name[FILE_MAXDIR+FILE_MAXFILE]; @@ -1899,7 +1890,7 @@ static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float use_preprocess = FALSE; if (ibuf == NULL) - ibuf = seq_proxy_fetch(scene, seq, cfra, render_size); + ibuf = seq_proxy_fetch(scene, seq, cfra, preview_render_size); if(ibuf == NULL) switch(type) { case SEQ_META: @@ -1908,7 +1899,7 @@ static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float if(seq->seqbase.first) meta_ibuf = seq_render_strip_stack(bmain, scene, &seq->seqbase, - seq->start + nr, 0, render_size, seqrectx, seqrecty); + seq->start + nr, 0, preview_render_size, seqrectx, seqrecty); if(meta_ibuf) { ibuf = meta_ibuf; @@ -1934,7 +1925,7 @@ static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float /* weeek! */ f_cfra = seq->start + s->frameMap[(int) nr]; - child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra, render_size, + child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra, preview_render_size, seqrectx, seqrecty); if (child_ibuf) { @@ -1951,7 +1942,7 @@ static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float } case SEQ_EFFECT: { - ibuf = seq_render_effect_strip_impl(bmain, scene, cfra, seq, render_size, + ibuf = seq_render_effect_strip_impl(bmain, scene, cfra, seq, preview_render_size, seqrectx, seqrecty); break; } @@ -2061,7 +2052,7 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq) static ImBuf* seq_render_strip_stack( Main *bmain, Scene *scene, ListBase *seqbasep, float cfra, int chanshown, - int render_size, int seqrectx, int seqrecty) + int preview_render_size, int seqrectx, int seqrecty) { Sequence* seq_arr[MAXSEQ+1]; int count; @@ -2089,7 +2080,7 @@ static ImBuf* seq_render_strip_stack( } if(count == 1) { - out = seq_render_strip(bmain, scene, seq_arr[0], cfra, render_size, seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq_arr[0], cfra, preview_render_size, seqrectx, seqrecty); seq_stripelem_cache_put(seq_arr[0], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP, out); return out; @@ -2106,7 +2097,7 @@ static ImBuf* seq_render_strip_stack( break; } if (seq->blend_mode == SEQ_BLEND_REPLACE) { - out = seq_render_strip(bmain, scene, seq, cfra, render_size, seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty); break; } @@ -2115,7 +2106,7 @@ static ImBuf* seq_render_strip_stack( switch (early_out) { case EARLY_NO_INPUT: case EARLY_USE_INPUT_2: - out = seq_render_strip(bmain, scene, seq, cfra, render_size, seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty); break; case EARLY_USE_INPUT_1: if (i == 0) { @@ -2124,7 +2115,7 @@ static ImBuf* seq_render_strip_stack( break; case EARLY_DO_EFFECT: if (i == 0) { - out = seq_render_strip(bmain, scene, seq, cfra, render_size, seqrectx, seqrecty); + out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty); } break; @@ -2145,7 +2136,7 @@ static ImBuf* seq_render_strip_stack( if (seq_get_early_out_for_blend_mode(seq) == EARLY_DO_EFFECT) { struct SeqEffectHandle sh = get_sequence_blend(seq); ImBuf * ibuf1 = out; - ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra, render_size, + ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty); float facf = seq->blend_opacity / 100.0; @@ -2156,10 +2147,10 @@ static ImBuf* seq_render_strip_stack( if (swap_input) { out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y, - render_size, ibuf2, ibuf1, 0); + preview_render_size, ibuf2, ibuf1, 0); } else { out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y, - render_size, ibuf1, ibuf2, 0); + preview_render_size, ibuf1, ibuf2, 0); } IMB_freeImBuf(ibuf1); @@ -2178,7 +2169,7 @@ static ImBuf* seq_render_strip_stack( * you have to free after usage! */ -ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size) +ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size) { Editing *ed= seq_give_editing(scene, FALSE); int count; @@ -2195,18 +2186,18 @@ ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, } return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, - render_size, rectx, recty); + preview_render_size, rectx, recty); } -ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep) +ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size, ListBase *seqbasep) { - return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty); + return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, preview_render_size, rectx, recty); } -ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int render_size, Sequence *seq) +ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int preview_render_size, Sequence *seq) { - return seq_render_strip(bmain, scene, seq, cfra, render_size, rectx, recty); + return seq_render_strip(bmain, scene, seq, cfra, preview_render_size, rectx, recty); } #if 0 @@ -2258,7 +2249,7 @@ typedef struct PrefetchQueueElem { int recty; int cfra; int chanshown; - int render_size; + int preview_render_size; int monoton_cfra; @@ -2306,7 +2297,7 @@ static void *seq_prefetch_thread(void * This_) if (e->cfra >= s_last) { e->ibuf = give_ibuf_seq_impl(This->scene, e->rectx, e->recty, e->cfra, e->chanshown, - e->render_size); + e->preview_render_size); } pthread_mutex_lock(&queue_lock); @@ -2416,7 +2407,7 @@ static void seq_stop_threads() } #endif -void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size) +void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int preview_render_size) { PrefetchQueueElem *e; if (seq_thread_shutdown) { @@ -2428,7 +2419,7 @@ void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, i e->recty = recty; e->cfra = cfra; e->chanshown = chanshown; - e->render_size = render_size; + e->preview_render_size = preview_render_size; e->monoton_cfra = monoton_cfra++; pthread_mutex_lock(&queue_lock); @@ -2471,13 +2462,13 @@ static void seq_wait_for_prefetch_ready() } #endif -ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size) +ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size) { PrefetchQueueElem *e = NULL; int found_something = FALSE; if (seq_thread_shutdown) { - return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, render_size); + return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, preview_render_size); } while (!e) { @@ -2489,7 +2480,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i chanshown == e->chanshown && rectx == e->rectx && recty == e->recty && - render_size == e->render_size) { + preview_render_size == e->preview_render_size) { success = TRUE; found_something = TRUE; break; @@ -2502,7 +2493,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i chanshown == e->chanshown && rectx == e->rectx && recty == e->recty && - render_size == e->render_size) { + preview_render_size == e->preview_render_size) { found_something = TRUE; break; } @@ -2519,7 +2510,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i chanshown == tslot->current->chanshown && rectx == tslot->current->rectx && recty == tslot->current->recty && - render_size== tslot->current->render_size){ + preview_render_size== tslot->current->preview_render_size){ found_something = TRUE; break; } From 010106a1f6f5b8f17eae9aeef38ad2ec4fe74627 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 21:07:25 +0000 Subject: [PATCH 104/163] [#24491] not possible to create a new Rendering preset than "add render preset.py" - Setting operator properties was broken because of bpy_types.py meta-classing (surprising this wasn't noticed before!) - Presets now use a dialog with an OK button. - Presets use a check function on the filename so invalid chars are replaced editing. - Submit docs operator was broken. --- release/scripts/modules/bpy_types.py | 4 ++-- release/scripts/op/presets.py | 11 +++++++---- release/scripts/op/wm.py | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index 6ecb8a2e207..472fae59abe 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -650,14 +650,14 @@ class Operator(StructRNA, metaclass=OrderedMeta): properties = StructRNA.path_resolve(self, "properties") bl_rna = getattr(properties, "bl_rna", None) if bl_rna and attr in bl_rna.properties: - setattr(properties, attr, value) + return setattr(properties, attr, value) return super().__setattr__(attr, value) def __delattr__(self, attr): properties = StructRNA.path_resolve(self, "properties") bl_rna = getattr(properties, "bl_rna", None) if bl_rna and attr in bl_rna.properties: - delattr(properties, attr) + return delattr(properties, attr) return super().__delattr__(attr) diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py index ec14e305c51..3a78f15d770 100644 --- a/release/scripts/op/presets.py +++ b/release/scripts/op/presets.py @@ -54,7 +54,7 @@ class AddPresetBase(): return {'FINISHED'} filename = self.as_filename(self.name) - + target_path = bpy.utils.preset_paths(self.preset_subdir)[0] # we need some way to tell the user and system preset path filepath = os.path.join(target_path, filename) + ".py" @@ -76,8 +76,8 @@ class AddPresetBase(): file_preset.write("%s = %r\n" % (rna_path, value)) file_preset.close() - - preset_menu_class.bl_label = bpy.path.display_name(self.name) + + preset_menu_class.bl_label = bpy.path.display_name(filename) else: preset_active = preset_menu_class.bl_label @@ -108,10 +108,13 @@ class AddPresetBase(): return {'FINISHED'} + def check(self, context): + self.name = self.as_filename(self.name) + def invoke(self, context, event): if not self.remove_active: wm = context.window_manager - return wm.invoke_props_popup(self, event) + return wm.invoke_props_dialog(self) else: return self.execute(context) diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py index ca1ed6ed168..9827c93f218 100644 --- a/release/scripts/op/wm.py +++ b/release/scripts/op/wm.py @@ -632,7 +632,7 @@ class WM_OT_doc_edit(bpy.types.Operator): def draw(self, context): layout = self.layout - layout.label(text="Descriptor ID: '%s'" % props.doc_id) + layout.label(text="Descriptor ID: '%s'" % self.doc_id) layout.prop(self, "doc_new", text="") def invoke(self, context, event): From 5ef1cf4b199999d2ecf1bb1fb9076017c88f14f5 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 1 Nov 2010 21:45:38 +0000 Subject: [PATCH 105/163] Fix for some enum property identifiers, that were not using upper case with underscore, or were simply not set correctly after code copy/paste. --- source/blender/makesrna/intern/rna_actuator.c | 22 +++++++++---------- source/blender/makesrna/intern/rna_material.c | 4 ++-- source/blender/makesrna/intern/rna_sensor.c | 2 +- source/blender/makesrna/intern/rna_texture.c | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c index a4becb87e28..49df68d6681 100644 --- a/source/blender/makesrna/intern/rna_actuator.c +++ b/source/blender/makesrna/intern/rna_actuator.c @@ -41,7 +41,7 @@ EnumPropertyItem actuator_type_items[] ={ {ACT_CAMERA, "CAMERA", 0, "Camera", ""}, {ACT_CONSTRAINT, "CONSTRAINT", 0, "Constraint", ""}, {ACT_EDIT_OBJECT, "EDIT_OBJECT", 0, "Edit Object", ""}, - {ACT_IPO, "F-Curve", 0, "F-Curve", ""}, + {ACT_IPO, "FCURVE", 0, "F-Curve", ""}, {ACT_2DFILTER, "FILTER_2D", 0, "Filter 2D", ""}, {ACT_GAME, "GAME", 0, "Game", ""}, {ACT_MESSAGE, "MESSAGE", 0, "Message", ""}, @@ -1384,16 +1384,16 @@ static void rna_def_random_actuator(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem prop_distribution_items[] ={ - {ACT_RANDOM_BOOL_CONST, "RESTART", 0, "Bool Constant", ""}, - {ACT_RANDOM_BOOL_UNIFORM, "SET", 0, "Bool Uniform", ""}, - {ACT_RANDOM_BOOL_BERNOUILLI, "CAMERA", 0, "Bool Bernoulli", ""}, - {ACT_RANDOM_INT_CONST, "ADDFRONT", 0, "Int Constant", ""}, - {ACT_RANDOM_INT_UNIFORM, "ADDBACK", 0, "Int Uniform", ""}, - {ACT_RANDOM_INT_POISSON, "REMOVE", 0, "Int Poisson", ""}, - {ACT_RANDOM_FLOAT_CONST, "SUSPEND", 0, "Float Constant", ""}, - {ACT_RANDOM_FLOAT_UNIFORM, "RESUME", 0, "Float Uniform", ""}, - {ACT_RANDOM_FLOAT_NORMAL, "RESUME", 0, "Float Normal", ""}, - {ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL, "RESUME", 0, "Float Neg. Exp.", ""}, + {ACT_RANDOM_BOOL_CONST, "BOOL_CONSTANT", 0, "Bool Constant", ""}, + {ACT_RANDOM_BOOL_UNIFORM, "BOOL_UNIFORM", 0, "Bool Uniform", ""}, + {ACT_RANDOM_BOOL_BERNOUILLI, "BOOL_BERNOUILLI", 0, "Bool Bernouilli", ""}, + {ACT_RANDOM_INT_CONST, "INT_CONSTANT", 0, "Int Constant", ""}, + {ACT_RANDOM_INT_UNIFORM, "INT_UNIFORM", 0, "Int Uniform", ""}, + {ACT_RANDOM_INT_POISSON, "INT_POISSON", 0, "Int Poisson", ""}, + {ACT_RANDOM_FLOAT_CONST, "FLOAT_CONSTANT", 0, "Float Constant", ""}, + {ACT_RANDOM_FLOAT_UNIFORM, "FLOAT_UNIFORM", 0, "Float Uniform", ""}, + {ACT_RANDOM_FLOAT_NORMAL, "FLOAT_NORMAL", 0, "Float Normal", ""}, + {ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL, "FLOAT_NEGATIVE_EXPONENTIAL", 0, "Float Neg. Exp.", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "RandomActuator", "Actuator"); diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c index bf4a958eeb4..8557f115737 100644 --- a/source/blender/makesrna/intern/rna_material.c +++ b/source/blender/makesrna/intern/rna_material.c @@ -695,8 +695,8 @@ static void rna_def_material_colors(StructRNA *srna) {MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""}, {MA_RAMP_VAL, "VALUE", 0, "Value", ""}, {MA_RAMP_COLOR, "COLOR", 0, "Color", ""}, - {MA_RAMP_SOFT, "SOFT LIGHT", 0, "Soft Light", ""}, - {MA_RAMP_LINEAR, "LINEAR LIGHT", 0, "Linear Light", ""}, + {MA_RAMP_SOFT, "SOFT_LIGHT", 0, "Soft Light", ""}, + {MA_RAMP_LINEAR, "LINEAR_LIGHT", 0, "Linear Light", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem prop_ramp_input_items[] = { diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c index 6dddb042533..a1e25207f1f 100644 --- a/source/blender/makesrna/intern/rna_sensor.c +++ b/source/blender/makesrna/intern/rna_sensor.c @@ -491,7 +491,7 @@ static void rna_def_armature_sensor(BlenderRNA *brna) {SENS_ARM_LIN_ERROR_BELOW, "LINERRORBELOW", 0, "Lin error below", ""}, {SENS_ARM_LIN_ERROR_ABOVE, "LINERRORABOVE", 0, "Lin error above", ""}, {SENS_ARM_ROT_ERROR_BELOW, "ROTERRORBELOW", 0, "Rot error below", ""}, - {SENS_ARM_ROT_ERROR_ABOVE, "ROTERRORBELOW", 0, "Rot error above", ""}, + {SENS_ARM_ROT_ERROR_ABOVE, "ROTERRORABOVE", 0, "Rot error above", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "ArmatureSensor", "Sensor"); diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c index 567166fd15f..4b5b450a620 100644 --- a/source/blender/makesrna/intern/rna_texture.c +++ b/source/blender/makesrna/intern/rna_texture.c @@ -429,8 +429,8 @@ static void rna_def_mtex(BlenderRNA *brna) {MTEX_BLEND_SAT, "SATURATION", 0, "Saturation", ""}, {MTEX_BLEND_VAL, "VALUE", 0, "Value", ""}, {MTEX_BLEND_COLOR, "COLOR", 0, "Color", ""}, - {MTEX_SOFT_LIGHT, "SOFT LIGHT", 0, "Soft Light", ""}, - {MTEX_LIN_LIGHT , "LINEAR LIGHT", 0, "Linear Light", ""}, + {MTEX_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""}, + {MTEX_LIN_LIGHT , "LINEAR_LIGHT", 0, "Linear Light", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem output_node_items[] = { From 6ee21ceefb709fa877d85fabe5d3700edbbfbc84 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 1 Nov 2010 21:53:35 +0000 Subject: [PATCH 106/163] Fix #24489: decimate modifier: undecimated is "ratio 1.00%". Patch by Emil Brink, thanks! --- source/blender/makesrna/intern/rna_modifier.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index e83a17cc277..7fc07d6c193 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -811,7 +811,7 @@ static void rna_def_modifier_decimate(BlenderRNA *brna) RNA_def_struct_sdna(srna, "DecimateModifierData"); RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM); - prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_PERCENTAGE); + prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "percent"); RNA_def_property_range(prop, 0, 1); RNA_def_property_ui_range(prop, 0, 1, 1, 2); From 7e913f25c26284fac862ddc5ff241afd40e938e4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 22:26:56 +0000 Subject: [PATCH 107/163] throw an error is PREFIX isnt defined on X11 systems. defaults to /usr/local --- intern/ghost/SConscript | 2 ++ intern/ghost/intern/GHOST_SystemX11.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/intern/ghost/SConscript b/intern/ghost/SConscript index 25880e9679b..e6190c50577 100644 --- a/intern/ghost/SConscript +++ b/intern/ghost/SConscript @@ -21,6 +21,8 @@ if window_system in ('linux2', 'openbsd3', 'sunos5', 'freebsd7', 'freebsd8', 'fr sources.remove('intern' + os.sep + f + 'Carbon.cpp') except ValueError: pass + defs += ['PREFIX=\\"/usr/local/\\"'] + elif window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64-vc'): for f in pf: try: diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index 393761566ba..5f7c59fa5e6 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -68,7 +68,7 @@ #include // for exit #ifndef PREFIX -# define PREFIX "/usr/local" +#error "PREFIX not defined" #endif typedef struct NDOFPlatformInfo { From aef7d52ea7bbe6a3e330e8fe8d7230e0c3ac71ae Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 1 Nov 2010 22:28:58 +0000 Subject: [PATCH 108/163] Fix #24464: missing icons. It looks like there were some icons still named from the 2.4 them but they were never in the 2.5 theme, so marked as BLANK now. --- source/blender/editors/include/UI_icons.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index 3e8420df7eb..eef517ddda7 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -45,7 +45,7 @@ DEF_ICON(ICON_DISCLOSURE_TRI_RIGHT) DEF_ICON(ICON_RADIOBUT_OFF) DEF_ICON(ICON_RADIOBUT_ON) DEF_ICON(ICON_MENU_PANEL) -DEF_ICON(ICON_PYTHON) +DEF_ICON(ICON_BLANK002) DEF_ICON(ICON_BLANK003) DEF_ICON(ICON_DOT) DEF_ICON(ICON_BLANK004) @@ -621,7 +621,7 @@ DEF_ICON(ICON_BLANK208b) DEF_ICON(ICON_VERTEXSEL) DEF_ICON(ICON_EDGESEL) DEF_ICON(ICON_FACESEL) -DEF_ICON(ICON_LINKEDSEL) +DEF_ICON(ICON_BLANK209) DEF_ICON(ICON_BLANK210) DEF_ICON(ICON_ROTATE) DEF_ICON(ICON_CURSOR) @@ -658,7 +658,7 @@ DEF_ICON(ICON_SNAP_VERTEX) DEF_ICON(ICON_SNAP_EDGE) DEF_ICON(ICON_SNAP_FACE) DEF_ICON(ICON_SNAP_VOLUME) -DEF_ICON(ICON_UVS_FACE) +DEF_ICON(ICON_BLANK220) DEF_ICON(ICON_STICKY_UVS_LOC) DEF_ICON(ICON_STICKY_UVS_DISABLE) DEF_ICON(ICON_STICKY_UVS_VERT) @@ -666,8 +666,8 @@ DEF_ICON(ICON_CLIPUV_DEHLT) DEF_ICON(ICON_CLIPUV_HLT) DEF_ICON(ICON_SNAP_PEEL_OBJECT) DEF_ICON(ICON_GRID) -DEF_ICON(ICON_GEARS) DEF_ICON(ICON_BLANK221) +DEF_ICON(ICON_BLANK222) DEF_ICON(ICON_BLANK224) DEF_ICON(ICON_BLANK225) DEF_ICON(ICON_BLANK226) @@ -709,11 +709,11 @@ DEF_ICON(ICON_SMOOTH) DEF_ICON(ICON_POTATO) DEF_ICON(ICON_BLANK248) DEF_ICON(ICON_ORTHO) -DEF_ICON(ICON_ORTHO_OFF) -DEF_ICON(ICON_CAMERA) +DEF_ICON(ICON_BLANK249) +DEF_ICON(ICON_BLANK250) DEF_ICON(ICON_LOCKVIEW_OFF) DEF_ICON(ICON_LOCKVIEW_ON) -DEF_ICON(ICON_BLANK250) +DEF_ICON(ICON_BLANK251) DEF_ICON(ICON_AXIS_SIDE) DEF_ICON(ICON_AXIS_FRONT) DEF_ICON(ICON_AXIS_TOP) From 2cef9203bab2526540b9a07fb63f9ea4a9ba0644 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Mon, 1 Nov 2010 23:17:58 +0000 Subject: [PATCH 109/163] Add PREFIX support to makefiles. --- build_files/make/nan_definitions.mk | 7 +++++++ intern/ghost/intern/Makefile | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/build_files/make/nan_definitions.mk b/build_files/make/nan_definitions.mk index d8da2189e6d..307bf19153b 100644 --- a/build_files/make/nan_definitions.mk +++ b/build_files/make/nan_definitions.mk @@ -296,6 +296,7 @@ ifndef CONFIG_GUESS export HOST = $(shell hostname -s) export FREEDESKTOP ?= true + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= /usr/local export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) @@ -334,6 +335,8 @@ ifndef CONFIG_GUESS export HOST = $(shell /usr/bsd/hostname -s) #export NAN_NO_KETSJI=true export NAN_JUST_BLENDERDYNAMIC=true + + export BF_PREFIX ?= /usr/local export NAN_PYTHON_VERSION ?= 3.1 ifeq ($(IRIX_USE_GCC), true) export NAN_PYTHON ?= $(LCGDIR)/python_gcc @@ -392,6 +395,7 @@ ifndef CONFIG_GUESS export HOST = $(shell hostname -s) export FREEDESKTOP ?= true + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= /usr export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) @@ -458,6 +462,7 @@ ifndef CONFIG_GUESS export HOST = $(shell hostname -s) export FREEDESKTOP ?= true + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= $(LCGDIR)/python export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) @@ -494,6 +499,8 @@ ifndef CONFIG_GUESS export ID = $(shell /usr/ucb/whoami) export HOST = $(shell hostname) + + export BF_PREFIX ?= /usr/local export NAN_PYTHON ?= $(LCGDIR)/python export NAN_PYTHON_VERSION ?= 3.1 export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION) diff --git a/intern/ghost/intern/Makefile b/intern/ghost/intern/Makefile index 2f5e088f4fe..a251ce26b31 100644 --- a/intern/ghost/intern/Makefile +++ b/intern/ghost/intern/Makefile @@ -71,4 +71,4 @@ CPPFLAGS += -I.. CPPFLAGS += -I$(OPENGL_HEADERS) CPPFLAGS += -I../../../source/blender/imbuf CPPFLAGS += -I../../../source/blender/makesdna - +CPPFLAGS += -DPREFIX=\"$(BF_PREFIX)\" From 562731fc12dc67e7b9132ec4dc2cdb301a627a2a Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Mon, 1 Nov 2010 23:26:04 +0000 Subject: [PATCH 110/163] Recommit sharp font optional code as all Freetype should be above 2.1.10 now. If still fails, check & update Freetype (OS one or Blender's lib/). --- source/blender/blenfont/intern/blf_glyph.c | 34 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 0d694c28b2b..2c0b833297e 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -36,6 +36,7 @@ #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H +#include FT_BITMAP_H #include "MEM_guardedalloc.h" @@ -49,6 +50,7 @@ #include "blf_internal_types.h" #include "blf_internal.h" +FT_Library global_ft_lib; GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi) { @@ -190,22 +192,40 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) FT_GlyphSlot slot; GlyphBLF *g; FT_Error err; - FT_Bitmap bitmap; + FT_Bitmap bitmap, tempbitmap; + int sharp; FT_BBox bbox; unsigned int key; + sharp = 0; /* TODO make the value be configurable somehow */ + g= blf_glyph_search(font->glyph_cache, c); if (g) return(g); - err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); + if (sharp) + err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_MONO); + else + err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_NORMAL | FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); /* Sure about NO_* flags? */ if (err) return(NULL); /* get the glyph. */ slot= font->face->glyph; - err= FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + if (sharp) { + err = FT_Render_Glyph(slot, FT_RENDER_MODE_MONO); + + /* Convert result from 1 bit per pixel to 8 bit per pixel */ + /* Accum errors for later, fine if not interested beyond "ok vs any error" */ + FT_Bitmap_New(&tempbitmap); + err += FT_Bitmap_Convert(global_ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */ + err += FT_Bitmap_Copy(global_ft_lib, &tempbitmap, &slot->bitmap); + err += FT_Bitmap_Done(global_ft_lib, &tempbitmap); + } else { + err = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + } + if (err || slot->format != FT_GLYPH_FORMAT_BITMAP) return(NULL); @@ -228,6 +248,14 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c) g->height= bitmap.rows; if (g->width && g->height) { + if (sharp) { + /* Font buffer uses only 0 or 1 values, Blender expects full 0..255 range */ + int i; + for (i=0; i < (g->width * g->height); i++) { + bitmap.buffer[i] = 255 * bitmap.buffer[i]; + } + } + g->bitmap= (unsigned char *)MEM_mallocN(g->width * g->height, "glyph bitmap"); memcpy((void *)g->bitmap, (void *)bitmap.buffer, g->width * g->height); } From 0e588cbf101e194d1180152d3a03cd9cdd676680 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 00:39:07 +0000 Subject: [PATCH 111/163] use __slots__ for fbx exporter classes, no functional change. --- release/scripts/op/io_scene_fbx/export_fbx.py | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/release/scripts/op/io_scene_fbx/export_fbx.py b/release/scripts/op/io_scene_fbx/export_fbx.py index 4859e87620f..c9c9c81ac01 100644 --- a/release/scripts/op/io_scene_fbx/export_fbx.py +++ b/release/scripts/op/io_scene_fbx/export_fbx.py @@ -382,18 +382,17 @@ def save(operator, context, filepath="", # ---------------------------------------------- # storage classes - class my_bone_class: - __slots__ =(\ - 'blenName',\ - 'blenBone',\ - 'blenMeshes',\ - 'restMatrix',\ - 'parent',\ - 'blenName',\ - 'fbxName',\ - 'fbxArm',\ - '__pose_bone',\ - '__anim_poselist') + class my_bone_class(object): + __slots__ =("blenName", + "blenBone", + "blenMeshes", + "restMatrix", + "parent", + "blenName", + "fbxName", + "fbxArm", + "__pose_bone", + "__anim_poselist") def __init__(self, blenBone, fbxArm): @@ -474,7 +473,25 @@ def save(operator, context, filepath="", self.__anim_poselist.clear() - class my_object_generic: + class my_object_generic(object): + __slots__ =("fbxName", + "blenObject", + "blenData", + "origData", + "blenTextures", + "blenMaterials", + "blenMaterialList", + "blenAction", + "blenActionList", + "fbxGroupNames", + "fbxParent", + "fbxBoneParent", + "fbxBones", + "fbxArm", + "matrixWorld", + "__anim_poselist", + ) + # Other settings can be applied for each type - mesh, armature etc. def __init__(self, ob, matrixWorld = None): self.fbxName = sane_obname(ob) From 8503bcde236be69bf4c3b156a847a4ac8c1f21e6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 01:12:00 +0000 Subject: [PATCH 112/163] bugfix for exporting an FBX animation for an object that was the child of an armature deformed mesh. --- release/scripts/op/io_scene_fbx/export_fbx.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/release/scripts/op/io_scene_fbx/export_fbx.py b/release/scripts/op/io_scene_fbx/export_fbx.py index c9c9c81ac01..bf44416b49d 100644 --- a/release/scripts/op/io_scene_fbx/export_fbx.py +++ b/release/scripts/op/io_scene_fbx/export_fbx.py @@ -509,8 +509,12 @@ def save(operator, context, filepath="", else: return self.matrixWorld - def setPoseFrame(self, f): - self.__anim_poselist[f] = self.blenObject.matrix_world.copy() + def setPoseFrame(self, f, fake=False): + if fake: + # annoying, have to clear GLOBAL_MATRIX + self.__anim_poselist[f] = self.matrixWorld * GLOBAL_MATRIX.copy().invert() + else: + self.__anim_poselist[f] = self.blenObject.matrix_world.copy() def getAnimParRelMatrix(self, frame): if self.fbxParent: @@ -2665,7 +2669,7 @@ Takes: {''') #Blender.Window.RedrawAll() if ob_generic == ob_meshes and my_ob.fbxArm: # We cant animate armature meshes! - pass + my_ob.setPoseFrame(i, fake=True) else: my_ob.setPoseFrame(i) From 8221ed36d05dd67ddb90b5e9c075c4d892948aa2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 04:12:00 +0000 Subject: [PATCH 113/163] patch [#24496] Fix for exporting animations to OBJ format. from Keith Astoria (kastoria) --- release/scripts/op/io_scene_obj/export_obj.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release/scripts/op/io_scene_obj/export_obj.py b/release/scripts/op/io_scene_obj/export_obj.py index 3fd91615bb6..352c82a4dbd 100644 --- a/release/scripts/op/io_scene_obj/export_obj.py +++ b/release/scripts/op/io_scene_obj/export_obj.py @@ -759,7 +759,7 @@ def _write(context, filepath, if EXPORT_ANIMATION: # Add frame to the filepath. context_name[2] = '_%.6d' % frame - scene.frame_current = frame + scene.frame_set(frame, 0.0) if EXPORT_SEL_ONLY: objects = context.selected_objects else: @@ -787,7 +787,7 @@ def _write(context, filepath, EXPORT_CURVE_AS_NURBS) - scene.frame_current = orig_frame + scene.frame_set(orig_frame, 0.0) # Restore old active scene. # orig_scene.makeCurrent() From ca3ade6ac483a529cf895610c7d2c1b5c351fb1a Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Tue, 2 Nov 2010 09:04:57 +0000 Subject: [PATCH 114/163] Patch [#24497] Fix for [#24484] Right Ctrl for snapping by Alexander Kuznetsov. Thank you! This fixes [#24484] Right Hand Ctrl key none functional for snapping? --- source/blender/editors/transform/transform.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index fa8931d47aa..8cf790f7a6e 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -534,6 +534,9 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf) WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_INV_ON); WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, TFM_MODAL_SNAP_INV_OFF); + + WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_INV_ON); + WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_RELEASE, KM_ANY, 0, TFM_MODAL_SNAP_INV_OFF); WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP); WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP); From f130d4c0a7d1b174454e423f3cdf753e12a09dce Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 09:34:32 +0000 Subject: [PATCH 115/163] bugfix [#24455] Scene is left at last rendered frame from rendering an animation --- source/blender/editors/include/ED_image.h | 3 ++- source/blender/editors/include/ED_screen.h | 3 ++- .../blender/editors/physics/physics_fluid.c | 4 ++-- .../blender/editors/render/render_internal.c | 5 ++++- source/blender/editors/render/render_opengl.c | 2 +- source/blender/editors/screen/screen_edit.c | 19 ++++++++----------- source/blender/editors/screen/screen_ops.c | 2 +- .../blender/editors/space_image/image_ops.c | 16 +++++++--------- .../windowmanager/intern/wm_event_system.c | 4 ++-- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h index c5f0983f494..7f507eab276 100644 --- a/source/blender/editors/include/ED_image.h +++ b/source/blender/editors/include/ED_image.h @@ -29,6 +29,7 @@ #define ED_IMAGE_H struct SpaceImage; +struct Main; struct bContext; struct Image; struct ImageUser; @@ -61,7 +62,7 @@ int ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit); int ED_space_image_show_uvshadow(struct SpaceImage *sima, struct Object *obedit); /* UI level image (texture) updating... render calls own stuff (too) */ -void ED_image_update_frame(const struct bContext *C); +void ED_image_update_frame(const struct Main *mainp, int cfra); /* image_render.c, export for screen_ops.c, render operator */ void ED_space_image_output(struct bContext *C); diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 8b8bb75b8e6..6904daa9868 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -109,7 +109,8 @@ struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, void ED_screen_new_window(struct bContext *C, struct rcti *position, int type); /* anim */ -void ED_update_for_newframe(const struct bContext *C, int mute); +void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute); + void ED_refresh_viewport_fps(struct bContext *C); int ED_screen_animation_play(struct bContext *C, int sync, int mode); diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c index b1c373e7a91..adf5d00355e 100644 --- a/source/blender/editors/physics/physics_fluid.c +++ b/source/blender/editors/physics/physics_fluid.c @@ -420,7 +420,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid /* Modifying the global scene isn't nice, but we can do it in * this part of the process before a threaded job is created */ scene->r.cfra = (int)eval_time; - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1); /* now scene data should be current according to animation system, so we fill the channels */ @@ -910,7 +910,7 @@ int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain) /* reset to original current frame */ scene->r.cfra = origFrame; - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1); /* ---- XXX: No Time animation curve for now, leaving this code here for reference diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 77fa51aa7b1..b875de8f8bc 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -427,7 +427,7 @@ static int screen_render_exec(bContext *C, wmOperator *op) RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra); // no redraw needed, we leave state as we entered it - ED_update_for_newframe(C, 1); + ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1); WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene); @@ -578,6 +578,9 @@ static void render_endjob(void *rjv) if(rj->main != G.main) free_main(rj->main); + /* else the frame will not update for the original value */ + ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1); + /* XXX render stability hack */ G.rendering = 0; WM_main_add_notifier(NC_WINDOW, NULL); diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index ef56a596855..eb24919f99b 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -347,7 +347,7 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op) /* update animated image textures for gpu, etc, * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */ - ED_image_update_frame(C); + ED_image_update_frame(bmain, scene->r.cfra); /* go to next frame */ while(CFRAnfra) { diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 196c8babf37..cd92c48f12a 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -1450,7 +1450,7 @@ void ED_screen_set_scene(bContext *C, Scene *scene) CTX_data_scene_set(C, scene); set_scene_bg(CTX_data_main(C), scene); - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, curscreen, 1); /* complete redraw */ WM_event_add_notifier(C, NC_WINDOW, NULL); @@ -1756,20 +1756,17 @@ void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh) } } -/* results in fully updated anim system */ -void ED_update_for_newframe(const bContext *C, int UNUSED(mute)) -{ - Main *bmain= CTX_data_main(C); - bScreen *screen= CTX_wm_screen(C); - Scene *scene= CTX_data_scene(C); - +/* results in fully updated anim system + * screen can be NULL */ +void ED_update_for_newframe(Main *bmain, Scene *scene, bScreen *screen, int UNUSED(mute)) +{ #ifdef DURIAN_CAMERA_SWITCH void *camera= scene_camera_switch_find(scene); if(camera && scene->camera != camera) { bScreen *sc; scene->camera= camera; /* are there cameras in the views that are not in the scene? */ - for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) { + for(sc= bmain->screen.first; sc; sc= sc->id.next) { BKE_screen_view3d_scene_sync(sc); } } @@ -1779,7 +1776,7 @@ void ED_update_for_newframe(const bContext *C, int UNUSED(mute)) /* update animated image textures for gpu, etc, * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */ - ED_image_update_frame(C); + ED_image_update_frame(bmain, scene->r.cfra); /* this function applies the changes too */ /* XXX future: do all windows */ @@ -1801,7 +1798,7 @@ void ED_update_for_newframe(const bContext *C, int UNUSED(mute)) /* update animated texture nodes */ { Tex *tex; - for(tex= CTX_data_main(C)->tex.first; tex; tex= tex->id.next) + for(tex= bmain->tex.first; tex; tex= tex->id.next) if( tex->use_nodes && tex->nodetree ) { ntreeTexTagAnimated( tex->nodetree ); } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 5a6acd24c5f..845ef2bae4d 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -2547,7 +2547,7 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), wmEvent *e sound_seek_scene(C); /* since we follow drawflags, we can't send notifier but tag regions ourselves */ - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, screen, 1); for (sa= screen->areabase.first; sa; sa= sa->next) { ARegion *ar; diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 429ba64ed0f..19af0b3f79e 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -2098,11 +2098,9 @@ void IMAGE_OT_cycle_render_slot(wmOperatorType *ot) /* goes over all ImageUsers, and sets frame numbers if auto-refresh is set */ -void ED_image_update_frame(const bContext *C) +void ED_image_update_frame(const Main *mainp, int cfra) { - Main *mainp= CTX_data_main(C); - Scene *scene= CTX_data_scene(C); - wmWindowManager *wm= CTX_wm_manager(C); + wmWindowManager *wm; wmWindow *win; Tex *tex; @@ -2111,13 +2109,13 @@ void ED_image_update_frame(const bContext *C) if(tex->type==TEX_IMAGE && tex->ima) { if(ELEM(tex->ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) { if(tex->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(&tex->iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(&tex->iuser, cfra, 0); } } } /* image window, compo node users */ - if(wm) { + for(wm=mainp->wm.first; wm; wm= wm->id.next) { /* only 1 wm */ for(win= wm->windows.first; win; win= win->next) { ScrArea *sa; for(sa= win->screen->areabase.first; sa; sa= sa->next) { @@ -2126,12 +2124,12 @@ void ED_image_update_frame(const bContext *C) BGpic *bgpic; for(bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) if(bgpic->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(&bgpic->iuser, cfra, 0); } else if(sa->spacetype==SPACE_IMAGE) { SpaceImage *sima= sa->spacedata.first; if(sima->iuser.flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(&sima->iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(&sima->iuser, cfra, 0); } else if(sa->spacetype==SPACE_NODE) { SpaceNode *snode= sa->spacedata.first; @@ -2143,7 +2141,7 @@ void ED_image_update_frame(const bContext *C) ImageUser *iuser= node->storage; if(ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) if(iuser->flag & IMA_ANIM_ALWAYS) - BKE_image_user_calc_frame(iuser, scene->r.cfra, 0); + BKE_image_user_calc_frame(iuser, cfra, 0); } } } diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 4eba45c61b9..ed1caa5fafe 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -241,7 +241,7 @@ void wm_event_do_notifiers(bContext *C) if(!G.rendering) { /* depsgraph gets called, might send more notifiers */ - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), win->screen->scene, win->screen, 1); } } } @@ -1636,7 +1636,7 @@ void wm_event_do_handlers(bContext *C) int ncfra = sound_sync_scene(scene) * FPS + 0.5; if(ncfra != scene->r.cfra) { scene->r.cfra = ncfra; - ED_update_for_newframe(C, 1); + ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1); WM_event_add_notifier(C, NC_WINDOW, NULL); } } From 5fb6c942b7932904b53d6a04de8b7a02be7f0f75 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 2 Nov 2010 10:55:49 +0000 Subject: [PATCH 116/163] Fix #24485: Applying scale to multires object end up in a blender crash Fixed multires_apply_smat to work properly with different current and total subdivision levels. --- source/blender/blenkernel/intern/multires.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 5324d5dde62..bf1cd9b9994 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1471,15 +1471,19 @@ void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) int i, numGrids, gridSize, dGridSize, dSkip, totvert; float (*vertCos)[3] = NULL; MultiresModifierData *mmd= get_multires_modifier(scene, ob); + MultiresModifierData high_mmd; CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS); if(!mdisps || !mmd) return; + /* we need derived mesh created from highest resolution */ + high_mmd= *mmd; + high_mmd.lvl= high_mmd.totlvl; /* unscaled multires with applied displacement */ - subdm= get_multires_dm(scene, mmd, ob); + subdm= get_multires_dm(scene, &high_mmd, ob); /* prepare scaled CDDM to create ccgDN */ cddm= mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH); @@ -1495,7 +1499,7 @@ void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) mvert= cddm->getVertArray(cddm); /* scaled ccgDM for tangent space of object with applied scale */ - dm= subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0); + dm= subsurf_dm_create_local(ob, cddm, high_mmd.totlvl, high_mmd.simple, 0); cddm->release(cddm); numGrids= dm->getNumGrids(dm); @@ -1504,7 +1508,7 @@ void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) gridOffset= dm->getGridOffset(dm); subGridData= subdm->getGridData(subdm); - dGridSize= multires_side_tot[mmd->totlvl]; + dGridSize= multires_side_tot[high_mmd.totlvl]; dSkip= (dGridSize-1)/(gridSize-1); #pragma omp parallel for private(i) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT) From 55ad8623864ab90588ebd4a1d1ade0a273fbdfda Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Tue, 2 Nov 2010 11:10:21 +0000 Subject: [PATCH 117/163] UI: * Sampled Motion Blur Panel missed check for compatible engines, causing the panel to appear in Game Engine and Netrender as well. --- release/scripts/ui/properties_render.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py index 4d421c8f0ea..c6b1e8816e0 100644 --- a/release/scripts/ui/properties_render.py +++ b/release/scripts/ui/properties_render.py @@ -490,7 +490,7 @@ class RENDER_PT_motion_blur(RenderButtonsPanel, bpy.types.Panel): @classmethod def poll(cls, context): rd = context.scene.render - return not rd.use_full_sample + return not rd.use_full_sample and (rd.engine in cls.COMPAT_ENGINES) def draw_header(self, context): rd = context.scene.render From 342e79461b93241bb363049720268dd5cb7f402d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 11:14:04 +0000 Subject: [PATCH 118/163] bugfix [#24398] Select Nth - use first selected if non active (clears confusion since this isn't at all clear) - dont take unselected into account when calculating connectivity, would mess up in many cases. --- source/blender/editors/mesh/editmesh_lib.c | 147 ++++++++++++++------ source/blender/editors/mesh/editmesh_mods.c | 5 +- 2 files changed, 105 insertions(+), 47 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c index b632cb2a842..b7ae0759f7e 100644 --- a/source/blender/editors/mesh/editmesh_lib.c +++ b/source/blender/editors/mesh/editmesh_lib.c @@ -2578,18 +2578,23 @@ void em_deselect_nth_face(EditMesh *em, int nth, EditFace *efa_act) ok = 0; for (efa= em->faces.first; efa; efa= efa->next) { - if(efa->tmp.l==1) { /* initialize */ - tag_face_edges(efa); + if(efa->f & SELECT) { + if(efa->tmp.l==1) { /* initialize */ + tag_face_edges(efa); + } + + if(efa->tmp.l) { + efa->tmp.l++; + } } - - if(efa->tmp.l) - efa->tmp.l++; } for (efa= em->faces.first; efa; efa= efa->next) { - if(efa->tmp.l==0 && tag_face_edges_test(efa)) { - efa->tmp.l= 1; - ok = 1; /* keep looping */ + if(efa->f & SELECT) { + if(efa->tmp.l==0 && tag_face_edges_test(efa)) { + efa->tmp.l= 1; + ok = 1; /* keep looping */ + } } } } @@ -2644,18 +2649,23 @@ void em_deselect_nth_edge(EditMesh *em, int nth, EditEdge *eed_act) ok = 0; for (eed= em->edges.first; eed; eed= eed->next) { - if(eed->tmp.l==1) { /* initialize */ - tag_edge_verts(eed); + if(eed->f & SELECT) { + if(eed->tmp.l==1) { /* initialize */ + tag_edge_verts(eed); + } + + if(eed->tmp.l) { + eed->tmp.l++; + } } - - if(eed->tmp.l) - eed->tmp.l++; } for (eed= em->edges.first; eed; eed= eed->next) { - if(eed->tmp.l==0 && tag_edge_verts_test(eed)) { - eed->tmp.l= 1; - ok = 1; /* keep looping */ + if(eed->f & SELECT) { + if(eed->tmp.l==0 && tag_edge_verts_test(eed)) { + eed->tmp.l= 1; + ok = 1; /* keep looping */ + } } } } @@ -2711,18 +2721,22 @@ void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act) ok = 0; for (eve= em->verts.first; eve; eve= eve->next) { - if(eve->tmp.l) - eve->tmp.l++; + if(eve->f & SELECT) { + if(eve->tmp.l) + eve->tmp.l++; + } } for (eed= em->edges.first; eed; eed= eed->next) { - if(eed->v1->tmp.l==2 && eed->v2->tmp.l==0) { /* initialize */ - eed->v2->tmp.l= 1; - ok = 1; /* keep looping */ - } - else if(eed->v2->tmp.l==2 && eed->v1->tmp.l==0) { /* initialize */ - eed->v1->tmp.l= 1; - ok = 1; /* keep looping */ + if(eed->f & SELECT) { + if(eed->v1->tmp.l==2 && eed->v2->tmp.l==0) { /* initialize */ + eed->v2->tmp.l= 1; + ok = 1; /* keep looping */ + } + else if(eed->v2->tmp.l==2 && eed->v1->tmp.l==0) { /* initialize */ + eed->v1->tmp.l= 1; + ok = 1; /* keep looping */ + } } } } @@ -2740,30 +2754,77 @@ void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act) // EM_nfaces_selected(em); // flush does these } -int EM_deselect_nth(EditMesh *em, int nth) +static void deselect_nth_active(EditMesh *em, EditVert **eve_p, EditEdge **eed_p, EditFace **efa_p) { EditSelection *ese; - ese = ((EditSelection*)em->selected.last); + + *eve_p= NULL; + *eed_p= NULL; + *efa_p= NULL; + + ese= (EditSelection*)em->selected.last; + if(ese) { - if(ese->type == EDITVERT) { - em_deselect_nth_vert(em, nth, (EditVert*)ese->data); - return 1; - } - - if(ese->type == EDITEDGE) { - em_deselect_nth_edge(em, nth, (EditEdge*)ese->data); - return 1; - } - } - else { - EditFace *efa_act = EM_get_actFace(em, 0); - if(efa_act) { - em_deselect_nth_face(em, nth, efa_act); - return 1; + switch(ese->type) { + case EDITVERT: + *eve_p= (EditVert *)ese->data; + return; + case EDITEDGE: + *eed_p= (EditEdge *)ese->data; + return; + case EDITFACE: + *efa_p= (EditFace *)ese->data; + return; } } - return 0; + if(em->selectmode & SCE_SELECT_VERTEX) { + EditVert *eve; + for (eve= em->verts.first; eve; eve= eve->next) { + if(eve->f & SELECT) { + *eve_p= eve; + return; + } + } + } + + if(em->selectmode & SCE_SELECT_EDGE) { + EditEdge *eed; + for (eed= em->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { + *eed_p= eed; + return; + } + } + } + + if(em->selectmode & SCE_SELECT_FACE) { + EditFace *efa= EM_get_actFace(em, 1); + if(efa) { + *efa_p= efa; + return; + } + } +} + +int EM_deselect_nth(EditMesh *em, int nth) +{ + EditVert *eve; + EditEdge *eed; + EditFace *efa; + + deselect_nth_active(em, &eve, &eed, &efa); + + if(eve) + em_deselect_nth_vert(em, nth, eve); + else if (eed) + em_deselect_nth_edge(em, nth, eed); + else if (efa) + em_deselect_nth_face(em, nth, efa); + else + return 0; + + return 1; } void EM_project_snap_verts(bContext *C, ARegion *ar, Object *obedit, EditMesh *em) diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index ab01a773020..309ee6b57e2 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -4581,10 +4581,7 @@ static int mesh_select_nth_exec(bContext *C, wmOperator *op) EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data)); int nth = RNA_int_get(op->ptr, "nth"); - if(EM_deselect_nth(em, nth) == 0) { - BKE_report(op->reports, RPT_ERROR, "Mesh has no active vert/edge/face."); - return OPERATOR_CANCELLED; - } + EM_deselect_nth(em, nth); BKE_mesh_end_editmesh(obedit->data, em); From f3e3d59f043a54ce384014459a9ce44d3022bdcc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 2 Nov 2010 11:41:25 +0000 Subject: [PATCH 119/163] Fix #24435: GLSL 3D view lacks refresh on node setups, patch by Lukas Toenne. --- source/blender/editors/space_node/node_draw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index 172163ea8a5..07fe497781e 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -78,7 +78,7 @@ void ED_node_changed_update(ID *id, bNode *node) if(treetype==NTREE_SHADER) { DAG_id_flush_update(id, 0); - WM_main_add_notifier(NC_MATERIAL|ND_SHADING, id); + WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, id); } else if(treetype==NTREE_COMPOSIT) { NodeTagChanged(edittree, node); From 5d7ed88f17c7a253c81ee48c147149d73dd88e6a Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 2 Nov 2010 12:18:49 +0000 Subject: [PATCH 120/163] Fix #24436: GLSL + Node material gives wrong color. --- source/blender/blenkernel/intern/node.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 41c4fece1a4..6c4c566f5b1 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -2718,7 +2718,7 @@ static void gpu_from_node_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack gs[i].name = ""; gs[i].hasinput= ns[i]->hasinput && ns[i]->data; - gs[i].hasoutput= ns[i]->hasinput && ns[i]->data; + gs[i].hasoutput= ns[i]->hasoutput && ns[i]->data; gs[i].sockettype= ns[i]->sockettype; } @@ -2732,8 +2732,6 @@ static void data_from_gpu_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack for (sock=sockets->first, i=0; sock; sock=sock->next, i++) { ns[i]->data= gs[i].link; - ns[i]->hasinput= gs[i].hasinput && gs[i].link; - ns[i]->hasoutput= gs[i].hasoutput; ns[i]->sockettype= gs[i].sockettype; } } From 369a5cc29e80d0ac30f9db444f2c0f9c1da32e01 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 13:12:30 +0000 Subject: [PATCH 121/163] fix for compiling with the c90 standard, support for non-static variable initializers is a c99 feature. --- source/blender/blenkernel/intern/anim.c | 6 +- source/blender/blenkernel/intern/boids.c | 13 +- source/blender/blenlib/intern/math_geom.c | 20 +- source/blender/blenlib/intern/math_matrix.c | 36 +- source/blender/blenlib/intern/math_rotation.c | 8 +- source/blender/editors/include/UI_icons.h | 1641 ++++++++--------- source/blender/editors/include/UI_resources.h | 4 +- source/blender/editors/mesh/editmesh_add.c | 7 +- .../blender/editors/physics/particle_edit.c | 31 +- .../editors/sculpt_paint/paint_image.c | 7 +- .../editors/space_console/console_draw.c | 12 +- .../editors/space_console/console_ops.c | 16 +- source/blender/editors/space_text/text_ops.c | 12 +- source/blender/editors/transform/transform.c | 5 +- .../editors/transform/transform_conversions.c | 7 +- .../editors/transform/transform_generics.c | 7 +- source/blender/gpu/intern/gpu_buffers.c | 6 +- source/blender/imbuf/intern/divers.c | 8 +- source/blender/makesrna/intern/rna_define.c | 7 +- source/blender/makesrna/intern/rna_ui_api.c | 5 +- source/blender/modifiers/intern/MOD_explode.c | 7 +- 21 files changed, 999 insertions(+), 866 deletions(-) diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index a4e791aa6b3..500161fee2e 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -1145,7 +1145,6 @@ static void new_particle_duplilist(ListBase *lb, ID *UNUSED(id), Scene *scene, O Object *ob=0, **oblist=0, obcopy, *obcopylist=0; DupliObject *dob; ParticleDupliWeight *dw; - ParticleSimulationData sim = {scene, par, psys, psys_get_modifier(par, psys)}; ParticleSettings *part; ParticleData *pa; ChildParticle *cpa=0; @@ -1180,6 +1179,11 @@ static void new_particle_duplilist(ListBase *lb, ID *UNUSED(id), Scene *scene, O lay= scene->lay; if((psys->renderdata || part->draw_as==PART_DRAW_REND) && ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) { + ParticleSimulationData sim= {0}; + sim.scene= scene; + sim.ob= par; + sim.psys= psys; + sim.psmd= psys_get_modifier(par, psys); /* first check for loops (particle system object used as dupli object) */ if(part->ren_as == PART_DRAW_OB) { diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c index 943cf20720e..5c2c0721972 100644 --- a/source/blender/blenkernel/intern/boids.c +++ b/source/blender/blenkernel/intern/boids.c @@ -1257,7 +1257,11 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) switch(bpa->data.mode) { case eBoidMode_InAir: { - float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f}; + float grav[3]; + + grav[0]= 0.0f; + grav[1]= 0.0f; + grav[2]= bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f; /* don't take forward acceleration into account (better banking) */ if(dot_v3v3(bpa->data.acc, pa->state.vel) > 0.0f) { @@ -1296,7 +1300,12 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa) } case eBoidMode_Falling: { - float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f}; + float grav[3]; + + grav[0]= 0.0f; + grav[1]= 0.0f; + grav[2]= bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f; + /* gather apparent gravity */ VECADDFAC(bpa->gravity, bpa->gravity, grav, dtime); diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c index c2e765388c8..88ca739a39e 100644 --- a/source/blender/blenlib/intern/math_geom.c +++ b/source/blender/blenlib/intern/math_geom.c @@ -1651,11 +1651,21 @@ void window_translate_m4(float winmat[][4], float perspmat[][4], float x, float { if(winmat[2][3] == -1.0f) { /* in the case of a win-matrix, this means perspective always */ - float v1[3]= {perspmat[0][0], perspmat[1][0], perspmat[2][0]}; - float v2[3]= {perspmat[0][1], perspmat[1][1], perspmat[2][1]}; - float len1= (1.0f / len_v3(v1)); - float len2= (1.0f / len_v3(v2)); - + float v1[3]; + float v2[3]; + float len1, len2; + + v1[0]= perspmat[0][0]; + v1[1]= perspmat[1][0]; + v1[2]= perspmat[2][0]; + + v2[0]= perspmat[0][1]; + v2[1]= perspmat[1][1]; + v2[2]= perspmat[2][1]; + + len1= (1.0f / len_v3(v1)); + len2= (1.0f / len_v3(v2)); + winmat[2][0] += len1 * winmat[0][0] * x; winmat[2][1] += len2 * winmat[1][1] * y; } diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index aadd08f0c90..58fb3b9b76b 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -609,7 +609,11 @@ void orthogonalize_m3(float mat[][3], int axis) normalize_v3(mat[1]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; + float vec[3]; + + vec[0]= mat[0][1]; + vec[1]= mat[0][2]; + vec[2]= mat[0][0]; cross_v3_v3v3(mat[2], mat[0], vec); normalize_v3(mat[2]); @@ -625,7 +629,11 @@ void orthogonalize_m3(float mat[][3], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; + float vec[3]; + + vec[0]= mat[1][1]; + vec[1]= mat[1][2]; + vec[2]= mat[1][0]; cross_v3_v3v3(mat[0], mat[1], vec); normalize_v3(mat[0]); @@ -641,7 +649,11 @@ void orthogonalize_m3(float mat[][3], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[1], mat[2], mat[0]); } else { - float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; + float vec[3]; + + vec[0]= mat[2][1]; + vec[1]= mat[2][2]; + vec[2]= mat[2][0]; cross_v3_v3v3(mat[0], vec, mat[2]); normalize_v3(mat[0]); @@ -670,7 +682,11 @@ void orthogonalize_m4(float mat[][4], int axis) normalize_v3(mat[1]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[0][1], mat[0][2], mat[0][0]}; + float vec[3]; + + vec[0]= mat[0][1]; + vec[1]= mat[0][2]; + vec[2]= mat[0][0]; cross_v3_v3v3(mat[2], mat[0], vec); normalize_v3(mat[2]); @@ -687,7 +703,11 @@ void orthogonalize_m4(float mat[][4], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[2], mat[0], mat[1]); } else { - float vec[3] = {mat[1][1], mat[1][2], mat[1][0]}; + float vec[3]; + + vec[0]= mat[1][1]; + vec[1]= mat[1][2]; + vec[2]= mat[1][0]; cross_v3_v3v3(mat[0], mat[1], vec); normalize_v3(mat[0]); @@ -703,7 +723,11 @@ void orthogonalize_m4(float mat[][4], int axis) normalize_v3(mat[0]); cross_v3_v3v3(mat[1], mat[2], mat[0]); } else { - float vec[3] = {mat[2][1], mat[2][2], mat[2][0]}; + float vec[3]; + + vec[0]= mat[2][1]; + vec[1]= mat[2][2]; + vec[2]= mat[2][0]; cross_v3_v3v3(mat[0], vec, mat[2]); normalize_v3(mat[0]); diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index af537af8ccf..2d0e347b2e6 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -121,7 +121,13 @@ void mul_qt_fl(float *q, const float f) void sub_qt_qtqt(float q[4], const float q1[4], const float q2[4]) { - const float nq2[4]= {-q2[0], q2[1], q2[2], q2[3]}; + float nq2[4]; + + nq2[0]= -q2[0]; + nq2[1]= q2[1]; + nq2[2]= q2[2]; + nq2[3]= q2[3]; + mul_qt_qtqt(q, q1, nq2); } diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index eef517ddda7..5aff480647e 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -30,886 +30,885 @@ once from UI_resources.h for the internal icon enum and once for interface_api.c for the definition of the RNA enum for the icons */ -DEF_ICON(ICON_BLENDER) -DEF_ICON(ICON_QUESTION) -DEF_ICON(ICON_ERROR) -DEF_ICON(ICON_CANCEL) -DEF_ICON(ICON_TRIA_RIGHT) -DEF_ICON(ICON_TRIA_DOWN) -DEF_ICON(ICON_TRIA_LEFT) -DEF_ICON(ICON_TRIA_UP) -DEF_ICON(ICON_ARROW_LEFTRIGHT) -DEF_ICON(ICON_PLUS) -DEF_ICON(ICON_DISCLOSURE_TRI_DOWN) -DEF_ICON(ICON_DISCLOSURE_TRI_RIGHT) -DEF_ICON(ICON_RADIOBUT_OFF) -DEF_ICON(ICON_RADIOBUT_ON) -DEF_ICON(ICON_MENU_PANEL) -DEF_ICON(ICON_BLANK002) -DEF_ICON(ICON_BLANK003) -DEF_ICON(ICON_DOT) -DEF_ICON(ICON_BLANK004) -DEF_ICON(ICON_X) -DEF_ICON(ICON_BLANK005) -DEF_ICON(ICON_GO_LEFT) -DEF_ICON(ICON_PLUG) -DEF_ICON(ICON_UI) -DEF_ICON(ICON_NODE) -DEF_ICON(ICON_NODE_SEL) +/* ICON_ prefix added */ +DEF_ICON(BLENDER) +DEF_ICON(QUESTION) +DEF_ICON(ERROR) +DEF_ICON(CANCEL) +DEF_ICON(TRIA_RIGHT) +DEF_ICON(TRIA_DOWN) +DEF_ICON(TRIA_LEFT) +DEF_ICON(TRIA_UP) +DEF_ICON(ARROW_LEFTRIGHT) +DEF_ICON(PLUS) +DEF_ICON(DISCLOSURE_TRI_DOWN) +DEF_ICON(DISCLOSURE_TRI_RIGHT) +DEF_ICON(RADIOBUT_OFF) +DEF_ICON(RADIOBUT_ON) +DEF_ICON(MENU_PANEL) +DEF_ICON(BLANK002) +DEF_ICON(BLANK003) +DEF_ICON(DOT) +DEF_ICON(BLANK004) +DEF_ICON(X) +DEF_ICON(BLANK005) +DEF_ICON(GO_LEFT) +DEF_ICON(PLUG) +DEF_ICON(UI) +DEF_ICON(NODE) +DEF_ICON(NODE_SEL) /* ui */ -DEF_ICON(ICON_FULLSCREEN) -DEF_ICON(ICON_SPLITSCREEN) -DEF_ICON(ICON_RIGHTARROW_THIN) -DEF_ICON(ICON_BORDERMOVE) -DEF_ICON(ICON_VIEWZOOM) -DEF_ICON(ICON_ZOOMIN) -DEF_ICON(ICON_ZOOMOUT) -DEF_ICON(ICON_PANEL_CLOSE) -DEF_ICON(ICON_COPY_ID) //ICON_BLANK009 -DEF_ICON(ICON_EYEDROPPER) -DEF_ICON(ICON_LINK_AREA) //ICON_BLANK010 -DEF_ICON(ICON_AUTO) -DEF_ICON(ICON_CHECKBOX_DEHLT) -DEF_ICON(ICON_CHECKBOX_HLT) -DEF_ICON(ICON_UNLOCKED) -DEF_ICON(ICON_LOCKED) -DEF_ICON(ICON_UNPINNED) -DEF_ICON(ICON_PINNED) -DEF_ICON(ICON_SCREEN_BACK) -DEF_ICON(ICON_RIGHTARROW) -DEF_ICON(ICON_DOWNARROW_HLT) -DEF_ICON(ICON_DOTSUP) -DEF_ICON(ICON_DOTSDOWN) -DEF_ICON(ICON_LINK) -DEF_ICON(ICON_INLINK) -DEF_ICON(ICON_PLUGIN) +DEF_ICON(FULLSCREEN) +DEF_ICON(SPLITSCREEN) +DEF_ICON(RIGHTARROW_THIN) +DEF_ICON(BORDERMOVE) +DEF_ICON(VIEWZOOM) +DEF_ICON(ZOOMIN) +DEF_ICON(ZOOMOUT) +DEF_ICON(PANEL_CLOSE) +DEF_ICON(COPY_ID) //ICON_BLANK009 +DEF_ICON(EYEDROPPER) +DEF_ICON(LINK_AREA) //ICON_BLANK010 +DEF_ICON(AUTO) +DEF_ICON(CHECKBOX_DEHLT) +DEF_ICON(CHECKBOX_HLT) +DEF_ICON(UNLOCKED) +DEF_ICON(LOCKED) +DEF_ICON(UNPINNED) +DEF_ICON(PINNED) +DEF_ICON(SCREEN_BACK) +DEF_ICON(RIGHTARROW) +DEF_ICON(DOWNARROW_HLT) +DEF_ICON(DOTSUP) +DEF_ICON(DOTSDOWN) +DEF_ICON(LINK) +DEF_ICON(INLINK) +DEF_ICON(PLUGIN) /* various ui */ -DEF_ICON(ICON_HELP) -DEF_ICON(ICON_GHOST_ENABLED) -DEF_ICON(ICON_COLOR) -DEF_ICON(ICON_LINKED) -DEF_ICON(ICON_UNLINKED) -DEF_ICON(ICON_HAND) -DEF_ICON(ICON_ZOOM_ALL) -DEF_ICON(ICON_ZOOM_SELECTED) -DEF_ICON(ICON_ZOOM_PREVIOUS) -DEF_ICON(ICON_ZOOM_IN) -DEF_ICON(ICON_ZOOM_OUT) -DEF_ICON(ICON_RENDER_REGION) -DEF_ICON(ICON_BORDER_RECT) -DEF_ICON(ICON_BORDER_LASSO) -DEF_ICON(ICON_FREEZE) -DEF_ICON(ICON_STYLUS_PRESSURE) -DEF_ICON(ICON_GHOST_DISABLED) -DEF_ICON(ICON_NEW) -DEF_ICON(ICON_FILE_TICK) -DEF_ICON(ICON_QUIT) -DEF_ICON(ICON_URL) -DEF_ICON(ICON_RECOVER_LAST) -DEF_ICON(ICON_BLANK038) -DEF_ICON(ICON_FULLSCREEN_ENTER) -DEF_ICON(ICON_FULLSCREEN_EXIT) -DEF_ICON(ICON_BLANK1) // Not actually blank - this is used all over the place +DEF_ICON(HELP) +DEF_ICON(GHOST_ENABLED) +DEF_ICON(COLOR) +DEF_ICON(LINKED) +DEF_ICON(UNLINKED) +DEF_ICON(HAND) +DEF_ICON(ZOOM_ALL) +DEF_ICON(ZOOM_SELECTED) +DEF_ICON(ZOOM_PREVIOUS) +DEF_ICON(ZOOM_IN) +DEF_ICON(ZOOM_OUT) +DEF_ICON(RENDER_REGION) +DEF_ICON(BORDER_RECT) +DEF_ICON(BORDER_LASSO) +DEF_ICON(FREEZE) +DEF_ICON(STYLUS_PRESSURE) +DEF_ICON(GHOST_DISABLED) +DEF_ICON(NEW) +DEF_ICON(FILE_TICK) +DEF_ICON(QUIT) +DEF_ICON(URL) +DEF_ICON(RECOVER_LAST) +DEF_ICON(BLANK038) +DEF_ICON(FULLSCREEN_ENTER) +DEF_ICON(FULLSCREEN_EXIT) +DEF_ICON(BLANK1) // Not actually blank - this is used all over the place /* BUTTONS */ -DEF_ICON(ICON_LAMP) -DEF_ICON(ICON_MATERIAL) -DEF_ICON(ICON_TEXTURE) -DEF_ICON(ICON_ANIM) -DEF_ICON(ICON_WORLD) -DEF_ICON(ICON_SCENE) -DEF_ICON(ICON_EDIT) -DEF_ICON(ICON_GAME) -DEF_ICON(ICON_RADIO) -DEF_ICON(ICON_SCRIPT) -DEF_ICON(ICON_PARTICLES) -DEF_ICON(ICON_PHYSICS) -DEF_ICON(ICON_SPEAKER) -DEF_ICON(ICON_TEXTURE_SHADED) //ICON_BLANK041 -DEF_ICON(ICON_BLANK042) -DEF_ICON(ICON_BLANK043) -DEF_ICON(ICON_BLANK044) -DEF_ICON(ICON_BLANK045) -DEF_ICON(ICON_BLANK046) -DEF_ICON(ICON_BLANK047) -DEF_ICON(ICON_BLANK048) -DEF_ICON(ICON_BLANK049) -DEF_ICON(ICON_BLANK050) -DEF_ICON(ICON_BLANK051) -DEF_ICON(ICON_BLANK052) -DEF_ICON(ICON_BLANK052b) +DEF_ICON(LAMP) +DEF_ICON(MATERIAL) +DEF_ICON(TEXTURE) +DEF_ICON(ANIM) +DEF_ICON(WORLD) +DEF_ICON(SCENE) +DEF_ICON(EDIT) +DEF_ICON(GAME) +DEF_ICON(RADIO) +DEF_ICON(SCRIPT) +DEF_ICON(PARTICLES) +DEF_ICON(PHYSICS) +DEF_ICON(SPEAKER) +DEF_ICON(TEXTURE_SHADED) //ICON_BLANK041 +DEF_ICON(BLANK042) +DEF_ICON(BLANK043) +DEF_ICON(BLANK044) +DEF_ICON(BLANK045) +DEF_ICON(BLANK046) +DEF_ICON(BLANK047) +DEF_ICON(BLANK048) +DEF_ICON(BLANK049) +DEF_ICON(BLANK050) +DEF_ICON(BLANK051) +DEF_ICON(BLANK052) +DEF_ICON(BLANK052b) /* EDITORS */ -DEF_ICON(ICON_VIEW3D) -DEF_ICON(ICON_IPO) -DEF_ICON(ICON_OOPS) -DEF_ICON(ICON_BUTS) -DEF_ICON(ICON_FILESEL) -DEF_ICON(ICON_IMAGE_COL) -DEF_ICON(ICON_INFO) -DEF_ICON(ICON_SEQUENCE) -DEF_ICON(ICON_TEXT) -DEF_ICON(ICON_IMASEL) -DEF_ICON(ICON_SOUND) -DEF_ICON(ICON_ACTION) -DEF_ICON(ICON_NLA) -DEF_ICON(ICON_SCRIPTWIN) -DEF_ICON(ICON_TIME) -DEF_ICON(ICON_NODETREE) -DEF_ICON(ICON_LOGIC) -DEF_ICON(ICON_CONSOLE) -DEF_ICON(ICON_PREFERENCES) -DEF_ICON(ICON_ASSET_MANAGER) -DEF_ICON(ICON_BLANK057) -DEF_ICON(ICON_BLANK058) -DEF_ICON(ICON_BLANK059) -DEF_ICON(ICON_BLANK060) -DEF_ICON(ICON_BLANK061) -DEF_ICON(ICON_BLANK061b) +DEF_ICON(VIEW3D) +DEF_ICON(IPO) +DEF_ICON(OOPS) +DEF_ICON(BUTS) +DEF_ICON(FILESEL) +DEF_ICON(IMAGE_COL) +DEF_ICON(INFO) +DEF_ICON(SEQUENCE) +DEF_ICON(TEXT) +DEF_ICON(IMASEL) +DEF_ICON(SOUND) +DEF_ICON(ACTION) +DEF_ICON(NLA) +DEF_ICON(SCRIPTWIN) +DEF_ICON(TIME) +DEF_ICON(NODETREE) +DEF_ICON(LOGIC) +DEF_ICON(CONSOLE) +DEF_ICON(PREFERENCES) +DEF_ICON(ASSET_MANAGER) +DEF_ICON(BLANK057) +DEF_ICON(BLANK058) +DEF_ICON(BLANK059) +DEF_ICON(BLANK060) +DEF_ICON(BLANK061) +DEF_ICON(BLANK061b) /* MODES */ -DEF_ICON(ICON_OBJECT_DATAMODE) // XXX fix this up -DEF_ICON(ICON_EDITMODE_HLT) -DEF_ICON(ICON_FACESEL_HLT) -DEF_ICON(ICON_VPAINT_HLT) -DEF_ICON(ICON_TPAINT_HLT) -DEF_ICON(ICON_WPAINT_HLT) -DEF_ICON(ICON_SCULPTMODE_HLT) -DEF_ICON(ICON_POSE_HLT) -DEF_ICON(ICON_PARTICLEMODE) -DEF_ICON(ICON_LIGHTPAINT) -DEF_ICON(ICON_BLANK063) -DEF_ICON(ICON_BLANK064) -DEF_ICON(ICON_BLANK065) -DEF_ICON(ICON_BLANK066) -DEF_ICON(ICON_BLANK067) -DEF_ICON(ICON_BLANK068) -DEF_ICON(ICON_BLANK069) -DEF_ICON(ICON_BLANK070) -DEF_ICON(ICON_BLANK071) -DEF_ICON(ICON_BLANK072) -DEF_ICON(ICON_BLANK073) -DEF_ICON(ICON_BLANK074) -DEF_ICON(ICON_BLANK075) -DEF_ICON(ICON_BLANK076) -DEF_ICON(ICON_BLANK077) -DEF_ICON(ICON_BLANK077b) +DEF_ICON(OBJECT_DATAMODE) // XXX fix this up +DEF_ICON(EDITMODE_HLT) +DEF_ICON(FACESEL_HLT) +DEF_ICON(VPAINT_HLT) +DEF_ICON(TPAINT_HLT) +DEF_ICON(WPAINT_HLT) +DEF_ICON(SCULPTMODE_HLT) +DEF_ICON(POSE_HLT) +DEF_ICON(PARTICLEMODE) +DEF_ICON(LIGHTPAINT) +DEF_ICON(BLANK063) +DEF_ICON(BLANK064) +DEF_ICON(BLANK065) +DEF_ICON(BLANK066) +DEF_ICON(BLANK067) +DEF_ICON(BLANK068) +DEF_ICON(BLANK069) +DEF_ICON(BLANK070) +DEF_ICON(BLANK071) +DEF_ICON(BLANK072) +DEF_ICON(BLANK073) +DEF_ICON(BLANK074) +DEF_ICON(BLANK075) +DEF_ICON(BLANK076) +DEF_ICON(BLANK077) +DEF_ICON(BLANK077b) /* DATA */ -DEF_ICON(ICON_SCENE_DATA) -DEF_ICON(ICON_RENDERLAYERS) -DEF_ICON(ICON_WORLD_DATA) -DEF_ICON(ICON_OBJECT_DATA) -DEF_ICON(ICON_MESH_DATA) -DEF_ICON(ICON_CURVE_DATA) -DEF_ICON(ICON_META_DATA) -DEF_ICON(ICON_LATTICE_DATA) -DEF_ICON(ICON_LAMP_DATA) -DEF_ICON(ICON_MATERIAL_DATA) -DEF_ICON(ICON_TEXTURE_DATA) -DEF_ICON(ICON_ANIM_DATA) -DEF_ICON(ICON_CAMERA_DATA) -DEF_ICON(ICON_PARTICLE_DATA) -DEF_ICON(ICON_LIBRARY_DATA_DIRECT) -DEF_ICON(ICON_GROUP) -DEF_ICON(ICON_ARMATURE_DATA) -DEF_ICON(ICON_POSE_DATA) -DEF_ICON(ICON_BONE_DATA) -DEF_ICON(ICON_CONSTRAINT) -DEF_ICON(ICON_SHAPEKEY_DATA) -DEF_ICON(ICON_CONSTRAINT_BONE) -DEF_ICON(ICON_BLANK079) -DEF_ICON(ICON_PACKAGE) -DEF_ICON(ICON_UGLYPACKAGE) -DEF_ICON(ICON_BLANK079b) +DEF_ICON(SCENE_DATA) +DEF_ICON(RENDERLAYERS) +DEF_ICON(WORLD_DATA) +DEF_ICON(OBJECT_DATA) +DEF_ICON(MESH_DATA) +DEF_ICON(CURVE_DATA) +DEF_ICON(META_DATA) +DEF_ICON(LATTICE_DATA) +DEF_ICON(LAMP_DATA) +DEF_ICON(MATERIAL_DATA) +DEF_ICON(TEXTURE_DATA) +DEF_ICON(ANIM_DATA) +DEF_ICON(CAMERA_DATA) +DEF_ICON(PARTICLE_DATA) +DEF_ICON(LIBRARY_DATA_DIRECT) +DEF_ICON(GROUP) +DEF_ICON(ARMATURE_DATA) +DEF_ICON(POSE_DATA) +DEF_ICON(BONE_DATA) +DEF_ICON(CONSTRAINT) +DEF_ICON(SHAPEKEY_DATA) +DEF_ICON(CONSTRAINT_BONE) +DEF_ICON(BLANK079) +DEF_ICON(PACKAGE) +DEF_ICON(UGLYPACKAGE) +DEF_ICON(BLANK079b) /* DATA */ -DEF_ICON(ICON_BRUSH_DATA) -DEF_ICON(ICON_IMAGE_DATA) -DEF_ICON(ICON_FILE) -DEF_ICON(ICON_FCURVE) -DEF_ICON(ICON_FONT_DATA) -DEF_ICON(ICON_RENDER_RESULT) -DEF_ICON(ICON_SURFACE_DATA) -DEF_ICON(ICON_EMPTY_DATA) -DEF_ICON(ICON_SETTINGS) -DEF_ICON(ICON_RENDER_ANIMATION) -DEF_ICON(ICON_RENDER_STILL) -DEF_ICON(ICON_BLANK080F) -DEF_ICON(ICON_BOIDS) -DEF_ICON(ICON_STRANDS) -DEF_ICON(ICON_LIBRARY_DATA_INDIRECT) -DEF_ICON(ICON_GREASEPENCIL) -DEF_ICON(ICON_BLANK083) -DEF_ICON(ICON_BLANK084) -DEF_ICON(ICON_GROUP_BONE) -DEF_ICON(ICON_GROUP_VERTEX) -DEF_ICON(ICON_GROUP_VCOL) -DEF_ICON(ICON_GROUP_UVS) -DEF_ICON(ICON_BLANK089) -DEF_ICON(ICON_BLANK090) -DEF_ICON(ICON_RNA) -DEF_ICON(ICON_RNA_ADD) +DEF_ICON(BRUSH_DATA) +DEF_ICON(IMAGE_DATA) +DEF_ICON(FILE) +DEF_ICON(FCURVE) +DEF_ICON(FONT_DATA) +DEF_ICON(RENDER_RESULT) +DEF_ICON(SURFACE_DATA) +DEF_ICON(EMPTY_DATA) +DEF_ICON(SETTINGS) +DEF_ICON(RENDER_ANIMATION) +DEF_ICON(RENDER_STILL) +DEF_ICON(BLANK080F) +DEF_ICON(BOIDS) +DEF_ICON(STRANDS) +DEF_ICON(LIBRARY_DATA_INDIRECT) +DEF_ICON(GREASEPENCIL) +DEF_ICON(BLANK083) +DEF_ICON(BLANK084) +DEF_ICON(GROUP_BONE) +DEF_ICON(GROUP_VERTEX) +DEF_ICON(GROUP_VCOL) +DEF_ICON(GROUP_UVS) +DEF_ICON(BLANK089) +DEF_ICON(BLANK090) +DEF_ICON(RNA) +DEF_ICON(RNA_ADD) /* available */ -DEF_ICON(ICON_BLANK092) -DEF_ICON(ICON_BLANK093) -DEF_ICON(ICON_BLANK094) -DEF_ICON(ICON_BLANK095) -DEF_ICON(ICON_BLANK096) -DEF_ICON(ICON_BLANK097) -DEF_ICON(ICON_BLANK098) -DEF_ICON(ICON_BLANK099) -DEF_ICON(ICON_BLANK100) -DEF_ICON(ICON_BLANK101) -DEF_ICON(ICON_BLANK102) -DEF_ICON(ICON_BLANK103) -DEF_ICON(ICON_BLANK104) -DEF_ICON(ICON_BLANK105) -DEF_ICON(ICON_BLANK106) -DEF_ICON(ICON_BLANK107) -DEF_ICON(ICON_BLANK108) -DEF_ICON(ICON_BLANK109) -DEF_ICON(ICON_BLANK110) -DEF_ICON(ICON_BLANK111) -DEF_ICON(ICON_BLANK112) -DEF_ICON(ICON_BLANK113) -DEF_ICON(ICON_BLANK114) -DEF_ICON(ICON_BLANK115) -DEF_ICON(ICON_BLANK116) -DEF_ICON(ICON_BLANK116b) +DEF_ICON(BLANK092) +DEF_ICON(BLANK093) +DEF_ICON(BLANK094) +DEF_ICON(BLANK095) +DEF_ICON(BLANK096) +DEF_ICON(BLANK097) +DEF_ICON(BLANK098) +DEF_ICON(BLANK099) +DEF_ICON(BLANK100) +DEF_ICON(BLANK101) +DEF_ICON(BLANK102) +DEF_ICON(BLANK103) +DEF_ICON(BLANK104) +DEF_ICON(BLANK105) +DEF_ICON(BLANK106) +DEF_ICON(BLANK107) +DEF_ICON(BLANK108) +DEF_ICON(BLANK109) +DEF_ICON(BLANK110) +DEF_ICON(BLANK111) +DEF_ICON(BLANK112) +DEF_ICON(BLANK113) +DEF_ICON(BLANK114) +DEF_ICON(BLANK115) +DEF_ICON(BLANK116) +DEF_ICON(BLANK116b) /* OUTLINER */ -DEF_ICON(ICON_OUTLINER_OB_EMPTY) -DEF_ICON(ICON_OUTLINER_OB_MESH) -DEF_ICON(ICON_OUTLINER_OB_CURVE) -DEF_ICON(ICON_OUTLINER_OB_LATTICE) -DEF_ICON(ICON_OUTLINER_OB_META) -DEF_ICON(ICON_OUTLINER_OB_LAMP) -DEF_ICON(ICON_OUTLINER_OB_CAMERA) -DEF_ICON(ICON_OUTLINER_OB_ARMATURE) -DEF_ICON(ICON_OUTLINER_OB_FONT) -DEF_ICON(ICON_OUTLINER_OB_SURFACE) -DEF_ICON(ICON_BLANK119) -DEF_ICON(ICON_BLANK120) -DEF_ICON(ICON_BLANK121) -DEF_ICON(ICON_BLANK122) -DEF_ICON(ICON_BLANK123) -DEF_ICON(ICON_BLANK124) -DEF_ICON(ICON_BLANK125) -DEF_ICON(ICON_BLANK126) -DEF_ICON(ICON_BLANK127) -DEF_ICON(ICON_RESTRICT_VIEW_OFF) -DEF_ICON(ICON_RESTRICT_VIEW_ON) -DEF_ICON(ICON_RESTRICT_SELECT_OFF) -DEF_ICON(ICON_RESTRICT_SELECT_ON) -DEF_ICON(ICON_RESTRICT_RENDER_OFF) -DEF_ICON(ICON_RESTRICT_RENDER_ON) -DEF_ICON(ICON_BLANK127b) +DEF_ICON(OUTLINER_OB_EMPTY) +DEF_ICON(OUTLINER_OB_MESH) +DEF_ICON(OUTLINER_OB_CURVE) +DEF_ICON(OUTLINER_OB_LATTICE) +DEF_ICON(OUTLINER_OB_META) +DEF_ICON(OUTLINER_OB_LAMP) +DEF_ICON(OUTLINER_OB_CAMERA) +DEF_ICON(OUTLINER_OB_ARMATURE) +DEF_ICON(OUTLINER_OB_FONT) +DEF_ICON(OUTLINER_OB_SURFACE) +DEF_ICON(BLANK119) +DEF_ICON(BLANK120) +DEF_ICON(BLANK121) +DEF_ICON(BLANK122) +DEF_ICON(BLANK123) +DEF_ICON(BLANK124) +DEF_ICON(BLANK125) +DEF_ICON(BLANK126) +DEF_ICON(BLANK127) +DEF_ICON(RESTRICT_VIEW_OFF) +DEF_ICON(RESTRICT_VIEW_ON) +DEF_ICON(RESTRICT_SELECT_OFF) +DEF_ICON(RESTRICT_SELECT_ON) +DEF_ICON(RESTRICT_RENDER_OFF) +DEF_ICON(RESTRICT_RENDER_ON) +DEF_ICON(BLANK127b) /* OUTLINER */ -DEF_ICON(ICON_OUTLINER_DATA_EMPTY) -DEF_ICON(ICON_OUTLINER_DATA_MESH) -DEF_ICON(ICON_OUTLINER_DATA_CURVE) -DEF_ICON(ICON_OUTLINER_DATA_LATTICE) -DEF_ICON(ICON_OUTLINER_DATA_META) -DEF_ICON(ICON_OUTLINER_DATA_LAMP) -DEF_ICON(ICON_OUTLINER_DATA_CAMERA) -DEF_ICON(ICON_OUTLINER_DATA_ARMATURE) -DEF_ICON(ICON_OUTLINER_DATA_FONT) -DEF_ICON(ICON_OUTLINER_DATA_SURFACE) -DEF_ICON(ICON_OUTLINER_DATA_POSE) -DEF_ICON(ICON_BLANK129) -DEF_ICON(ICON_BLANK130) -DEF_ICON(ICON_BLANK131) -DEF_ICON(ICON_BLANK132) -DEF_ICON(ICON_BLANK133) -DEF_ICON(ICON_BLANK134) -DEF_ICON(ICON_BLANK135) -DEF_ICON(ICON_BLANK136) -DEF_ICON(ICON_BLANK137) -DEF_ICON(ICON_BLANK138) -DEF_ICON(ICON_BLANK139) -DEF_ICON(ICON_BLANK140) -DEF_ICON(ICON_BLANK141) -DEF_ICON(ICON_BLANK142) -DEF_ICON(ICON_BLANK142b) +DEF_ICON(OUTLINER_DATA_EMPTY) +DEF_ICON(OUTLINER_DATA_MESH) +DEF_ICON(OUTLINER_DATA_CURVE) +DEF_ICON(OUTLINER_DATA_LATTICE) +DEF_ICON(OUTLINER_DATA_META) +DEF_ICON(OUTLINER_DATA_LAMP) +DEF_ICON(OUTLINER_DATA_CAMERA) +DEF_ICON(OUTLINER_DATA_ARMATURE) +DEF_ICON(OUTLINER_DATA_FONT) +DEF_ICON(OUTLINER_DATA_SURFACE) +DEF_ICON(OUTLINER_DATA_POSE) +DEF_ICON(BLANK129) +DEF_ICON(BLANK130) +DEF_ICON(BLANK131) +DEF_ICON(BLANK132) +DEF_ICON(BLANK133) +DEF_ICON(BLANK134) +DEF_ICON(BLANK135) +DEF_ICON(BLANK136) +DEF_ICON(BLANK137) +DEF_ICON(BLANK138) +DEF_ICON(BLANK139) +DEF_ICON(BLANK140) +DEF_ICON(BLANK141) +DEF_ICON(BLANK142) +DEF_ICON(BLANK142b) /* PRIMITIVES */ -DEF_ICON(ICON_MESH_PLANE) -DEF_ICON(ICON_MESH_CUBE) -DEF_ICON(ICON_MESH_CIRCLE) -DEF_ICON(ICON_MESH_UVSPHERE) -DEF_ICON(ICON_MESH_ICOSPHERE) -DEF_ICON(ICON_MESH_GRID) -DEF_ICON(ICON_MESH_MONKEY) -DEF_ICON(ICON_MESH_CYLINDER) -DEF_ICON(ICON_MESH_TORUS) -DEF_ICON(ICON_MESH_CONE) -DEF_ICON(ICON_BLANK610) -DEF_ICON(ICON_BLANK611) -DEF_ICON(ICON_LAMP_POINT) -DEF_ICON(ICON_LAMP_SUN) -DEF_ICON(ICON_LAMP_SPOT) -DEF_ICON(ICON_LAMP_HEMI) -DEF_ICON(ICON_LAMP_AREA) -DEF_ICON(ICON_BLANK617) -DEF_ICON(ICON_BLANK618) -DEF_ICON(ICON_BLANK619) -DEF_ICON(ICON_META_PLANE) -DEF_ICON(ICON_META_CUBE) -DEF_ICON(ICON_META_BALL) -DEF_ICON(ICON_META_ELLIPSOID) -DEF_ICON(ICON_META_CAPSULE) -DEF_ICON(ICON_BLANK625) +DEF_ICON(MESH_PLANE) +DEF_ICON(MESH_CUBE) +DEF_ICON(MESH_CIRCLE) +DEF_ICON(MESH_UVSPHERE) +DEF_ICON(MESH_ICOSPHERE) +DEF_ICON(MESH_GRID) +DEF_ICON(MESH_MONKEY) +DEF_ICON(MESH_CYLINDER) +DEF_ICON(MESH_TORUS) +DEF_ICON(MESH_CONE) +DEF_ICON(BLANK610) +DEF_ICON(BLANK611) +DEF_ICON(LAMP_POINT) +DEF_ICON(LAMP_SUN) +DEF_ICON(LAMP_SPOT) +DEF_ICON(LAMP_HEMI) +DEF_ICON(LAMP_AREA) +DEF_ICON(BLANK617) +DEF_ICON(BLANK618) +DEF_ICON(BLANK619) +DEF_ICON(META_PLANE) +DEF_ICON(META_CUBE) +DEF_ICON(META_BALL) +DEF_ICON(META_ELLIPSOID) +DEF_ICON(META_CAPSULE) +DEF_ICON(BLANK625) /* PRIMITIVES */ -DEF_ICON(ICON_SURFACE_NCURVE) -DEF_ICON(ICON_SURFACE_NCIRCLE) -DEF_ICON(ICON_SURFACE_NSURFACE) -DEF_ICON(ICON_SURFACE_NCYLINDER) -DEF_ICON(ICON_SURFACE_NSPHERE) -DEF_ICON(ICON_SURFACE_NTORUS) -DEF_ICON(ICON_BLANK636) -DEF_ICON(ICON_BLANK637) -DEF_ICON(ICON_BLANK638) -DEF_ICON(ICON_CURVE_BEZCURVE) -DEF_ICON(ICON_CURVE_BEZCIRCLE) -DEF_ICON(ICON_CURVE_NCURVE) -DEF_ICON(ICON_CURVE_NCIRCLE) -DEF_ICON(ICON_CURVE_PATH) -DEF_ICON(ICON_BLANK644) -DEF_ICON(ICON_BLANK645) -DEF_ICON(ICON_BLANK646) -DEF_ICON(ICON_BLANK647) -DEF_ICON(ICON_BLANK648) -DEF_ICON(ICON_BLANK649) -DEF_ICON(ICON_BLANK650) -DEF_ICON(ICON_BLANK651) -DEF_ICON(ICON_BLANK652) -DEF_ICON(ICON_BLANK653) -DEF_ICON(ICON_BLANK654) -DEF_ICON(ICON_BLANK655) +DEF_ICON(SURFACE_NCURVE) +DEF_ICON(SURFACE_NCIRCLE) +DEF_ICON(SURFACE_NSURFACE) +DEF_ICON(SURFACE_NCYLINDER) +DEF_ICON(SURFACE_NSPHERE) +DEF_ICON(SURFACE_NTORUS) +DEF_ICON(BLANK636) +DEF_ICON(BLANK637) +DEF_ICON(BLANK638) +DEF_ICON(CURVE_BEZCURVE) +DEF_ICON(CURVE_BEZCIRCLE) +DEF_ICON(CURVE_NCURVE) +DEF_ICON(CURVE_NCIRCLE) +DEF_ICON(CURVE_PATH) +DEF_ICON(BLANK644) +DEF_ICON(BLANK645) +DEF_ICON(BLANK646) +DEF_ICON(BLANK647) +DEF_ICON(BLANK648) +DEF_ICON(BLANK649) +DEF_ICON(BLANK650) +DEF_ICON(BLANK651) +DEF_ICON(BLANK652) +DEF_ICON(BLANK653) +DEF_ICON(BLANK654) +DEF_ICON(BLANK655) /* EMPTY */ -DEF_ICON(ICON_FORCE_FORCE) -DEF_ICON(ICON_FORCE_WIND) -DEF_ICON(ICON_FORCE_VORTEX) -DEF_ICON(ICON_FORCE_MAGNETIC) -DEF_ICON(ICON_FORCE_HARMONIC) -DEF_ICON(ICON_FORCE_CHARGE) -DEF_ICON(ICON_FORCE_LENNARDJONES) -DEF_ICON(ICON_FORCE_TEXTURE) -DEF_ICON(ICON_FORCE_CURVE) -DEF_ICON(ICON_FORCE_BOID) -DEF_ICON(ICON_FORCE_TURBULENCE) -DEF_ICON(ICON_FORCE_DRAG) -DEF_ICON(ICON_BLANK672) -DEF_ICON(ICON_BLANK673) -DEF_ICON(ICON_BLANK674) -DEF_ICON(ICON_BLANK675) -DEF_ICON(ICON_BLANK676) -DEF_ICON(ICON_BLANK677) -DEF_ICON(ICON_BLANK678) -DEF_ICON(ICON_BLANK679) -DEF_ICON(ICON_BLANK680) -DEF_ICON(ICON_BLANK681) -DEF_ICON(ICON_BLANK682) -DEF_ICON(ICON_BLANK683) -DEF_ICON(ICON_BLANK684) -DEF_ICON(ICON_BLANK685) +DEF_ICON(FORCE_FORCE) +DEF_ICON(FORCE_WIND) +DEF_ICON(FORCE_VORTEX) +DEF_ICON(FORCE_MAGNETIC) +DEF_ICON(FORCE_HARMONIC) +DEF_ICON(FORCE_CHARGE) +DEF_ICON(FORCE_LENNARDJONES) +DEF_ICON(FORCE_TEXTURE) +DEF_ICON(FORCE_CURVE) +DEF_ICON(FORCE_BOID) +DEF_ICON(FORCE_TURBULENCE) +DEF_ICON(FORCE_DRAG) +DEF_ICON(BLANK672) +DEF_ICON(BLANK673) +DEF_ICON(BLANK674) +DEF_ICON(BLANK675) +DEF_ICON(BLANK676) +DEF_ICON(BLANK677) +DEF_ICON(BLANK678) +DEF_ICON(BLANK679) +DEF_ICON(BLANK680) +DEF_ICON(BLANK681) +DEF_ICON(BLANK682) +DEF_ICON(BLANK683) +DEF_ICON(BLANK684) +DEF_ICON(BLANK685) /* EMPTY */ -DEF_ICON(ICON_BLANK690) -DEF_ICON(ICON_BLANK691) -DEF_ICON(ICON_BLANK692) -DEF_ICON(ICON_BLANK693) -DEF_ICON(ICON_BLANK694) -DEF_ICON(ICON_BLANK695) -DEF_ICON(ICON_BLANK696) -DEF_ICON(ICON_BLANK697) -DEF_ICON(ICON_BLANK698) -DEF_ICON(ICON_BLANK699) -DEF_ICON(ICON_BLANK700) -DEF_ICON(ICON_BLANK701) -DEF_ICON(ICON_BLANK702) -DEF_ICON(ICON_BLANK703) -DEF_ICON(ICON_BLANK704) -DEF_ICON(ICON_BLANK705) -DEF_ICON(ICON_BLANK706) -DEF_ICON(ICON_BLANK707) -DEF_ICON(ICON_BLANK708) -DEF_ICON(ICON_BLANK709) -DEF_ICON(ICON_BLANK710) -DEF_ICON(ICON_BLANK711) -DEF_ICON(ICON_BLANK712) -DEF_ICON(ICON_BLANK713) -DEF_ICON(ICON_BLANK714) -DEF_ICON(ICON_BLANK715) +DEF_ICON(BLANK690) +DEF_ICON(BLANK691) +DEF_ICON(BLANK692) +DEF_ICON(BLANK693) +DEF_ICON(BLANK694) +DEF_ICON(BLANK695) +DEF_ICON(BLANK696) +DEF_ICON(BLANK697) +DEF_ICON(BLANK698) +DEF_ICON(BLANK699) +DEF_ICON(BLANK700) +DEF_ICON(BLANK701) +DEF_ICON(BLANK702) +DEF_ICON(BLANK703) +DEF_ICON(BLANK704) +DEF_ICON(BLANK705) +DEF_ICON(BLANK706) +DEF_ICON(BLANK707) +DEF_ICON(BLANK708) +DEF_ICON(BLANK709) +DEF_ICON(BLANK710) +DEF_ICON(BLANK711) +DEF_ICON(BLANK712) +DEF_ICON(BLANK713) +DEF_ICON(BLANK714) +DEF_ICON(BLANK715) /* EMPTY */ -DEF_ICON(ICON_BLANK720) -DEF_ICON(ICON_BLANK721) -DEF_ICON(ICON_BLANK722) -DEF_ICON(ICON_BLANK733) -DEF_ICON(ICON_BLANK734) -DEF_ICON(ICON_BLANK735) -DEF_ICON(ICON_BLANK736) -DEF_ICON(ICON_BLANK737) -DEF_ICON(ICON_BLANK738) -DEF_ICON(ICON_BLANK739) -DEF_ICON(ICON_BLANK740) -DEF_ICON(ICON_BLANK741) -DEF_ICON(ICON_BLANK742) -DEF_ICON(ICON_BLANK743) -DEF_ICON(ICON_BLANK744) -DEF_ICON(ICON_BLANK745) -DEF_ICON(ICON_BLANK746) -DEF_ICON(ICON_BLANK747) -DEF_ICON(ICON_BLANK748) -DEF_ICON(ICON_BLANK749) -DEF_ICON(ICON_BLANK750) -DEF_ICON(ICON_BLANK751) -DEF_ICON(ICON_BLANK752) -DEF_ICON(ICON_BLANK753) -DEF_ICON(ICON_BLANK754) -DEF_ICON(ICON_BLANK755) +DEF_ICON(BLANK720) +DEF_ICON(BLANK721) +DEF_ICON(BLANK722) +DEF_ICON(BLANK733) +DEF_ICON(BLANK734) +DEF_ICON(BLANK735) +DEF_ICON(BLANK736) +DEF_ICON(BLANK737) +DEF_ICON(BLANK738) +DEF_ICON(BLANK739) +DEF_ICON(BLANK740) +DEF_ICON(BLANK741) +DEF_ICON(BLANK742) +DEF_ICON(BLANK743) +DEF_ICON(BLANK744) +DEF_ICON(BLANK745) +DEF_ICON(BLANK746) +DEF_ICON(BLANK747) +DEF_ICON(BLANK748) +DEF_ICON(BLANK749) +DEF_ICON(BLANK750) +DEF_ICON(BLANK751) +DEF_ICON(BLANK752) +DEF_ICON(BLANK753) +DEF_ICON(BLANK754) +DEF_ICON(BLANK755) /* EMPTY */ -DEF_ICON(ICON_BLANK760) -DEF_ICON(ICON_BLANK761) -DEF_ICON(ICON_BLANK762) -DEF_ICON(ICON_BLANK763) -DEF_ICON(ICON_BLANK764) -DEF_ICON(ICON_BLANK765) -DEF_ICON(ICON_BLANK766) -DEF_ICON(ICON_BLANK767) -DEF_ICON(ICON_BLANK768) -DEF_ICON(ICON_BLANK769) -DEF_ICON(ICON_BLANK770) -DEF_ICON(ICON_BLANK771) -DEF_ICON(ICON_BLANK772) -DEF_ICON(ICON_BLANK773) -DEF_ICON(ICON_BLANK774) -DEF_ICON(ICON_BLANK775) -DEF_ICON(ICON_BLANK776) -DEF_ICON(ICON_BLANK777) -DEF_ICON(ICON_BLANK778) -DEF_ICON(ICON_BLANK779) -DEF_ICON(ICON_BLANK780) -DEF_ICON(ICON_BLANK781) -DEF_ICON(ICON_BLANK782) -DEF_ICON(ICON_BLANK783) -DEF_ICON(ICON_BLANK784) -DEF_ICON(ICON_BLANK785) +DEF_ICON(BLANK760) +DEF_ICON(BLANK761) +DEF_ICON(BLANK762) +DEF_ICON(BLANK763) +DEF_ICON(BLANK764) +DEF_ICON(BLANK765) +DEF_ICON(BLANK766) +DEF_ICON(BLANK767) +DEF_ICON(BLANK768) +DEF_ICON(BLANK769) +DEF_ICON(BLANK770) +DEF_ICON(BLANK771) +DEF_ICON(BLANK772) +DEF_ICON(BLANK773) +DEF_ICON(BLANK774) +DEF_ICON(BLANK775) +DEF_ICON(BLANK776) +DEF_ICON(BLANK777) +DEF_ICON(BLANK778) +DEF_ICON(BLANK779) +DEF_ICON(BLANK780) +DEF_ICON(BLANK781) +DEF_ICON(BLANK782) +DEF_ICON(BLANK783) +DEF_ICON(BLANK784) +DEF_ICON(BLANK785) /* MODIFIERS */ -DEF_ICON(ICON_MODIFIER) -DEF_ICON(ICON_MOD_WAVE) -DEF_ICON(ICON_MOD_BUILD) -DEF_ICON(ICON_MOD_DECIM) -DEF_ICON(ICON_MOD_MIRROR) -DEF_ICON(ICON_MOD_SOFT) -DEF_ICON(ICON_MOD_SUBSURF) -DEF_ICON(ICON_HOOK) -DEF_ICON(ICON_MOD_PHYSICS) -DEF_ICON(ICON_MOD_PARTICLES) -DEF_ICON(ICON_MOD_BOOLEAN) -DEF_ICON(ICON_MOD_EDGESPLIT) -DEF_ICON(ICON_MOD_ARRAY) -DEF_ICON(ICON_MOD_UVPROJECT) -DEF_ICON(ICON_MOD_DISPLACE) -DEF_ICON(ICON_MOD_CURVE) -DEF_ICON(ICON_MOD_LATTICE) -DEF_ICON(ICON_CONSTRAINT_DATA) -DEF_ICON(ICON_MOD_ARMATURE) -DEF_ICON(ICON_MOD_SHRINKWRAP) -DEF_ICON(ICON_MOD_CAST) -DEF_ICON(ICON_MOD_MESHDEFORM) -DEF_ICON(ICON_MOD_BEVEL) -DEF_ICON(ICON_MOD_SMOOTH) -DEF_ICON(ICON_MOD_SIMPLEDEFORM) -DEF_ICON(ICON_MOD_MASK) +DEF_ICON(MODIFIER) +DEF_ICON(MOD_WAVE) +DEF_ICON(MOD_BUILD) +DEF_ICON(MOD_DECIM) +DEF_ICON(MOD_MIRROR) +DEF_ICON(MOD_SOFT) +DEF_ICON(MOD_SUBSURF) +DEF_ICON(HOOK) +DEF_ICON(MOD_PHYSICS) +DEF_ICON(MOD_PARTICLES) +DEF_ICON(MOD_BOOLEAN) +DEF_ICON(MOD_EDGESPLIT) +DEF_ICON(MOD_ARRAY) +DEF_ICON(MOD_UVPROJECT) +DEF_ICON(MOD_DISPLACE) +DEF_ICON(MOD_CURVE) +DEF_ICON(MOD_LATTICE) +DEF_ICON(CONSTRAINT_DATA) +DEF_ICON(MOD_ARMATURE) +DEF_ICON(MOD_SHRINKWRAP) +DEF_ICON(MOD_CAST) +DEF_ICON(MOD_MESHDEFORM) +DEF_ICON(MOD_BEVEL) +DEF_ICON(MOD_SMOOTH) +DEF_ICON(MOD_SIMPLEDEFORM) +DEF_ICON(MOD_MASK) /* MODIFIERS */ -DEF_ICON(ICON_MOD_CLOTH) -DEF_ICON(ICON_MOD_EXPLODE) -DEF_ICON(ICON_MOD_FLUIDSIM) -DEF_ICON(ICON_MOD_MULTIRES) -DEF_ICON(ICON_MOD_SMOKE) -DEF_ICON(ICON_MOD_SOLIDIFY) -DEF_ICON(ICON_MOD_SCREW) -DEF_ICON(ICON_BLANK160) -DEF_ICON(ICON_BLANK161) -DEF_ICON(ICON_BLANK162) -DEF_ICON(ICON_BLANK163) -DEF_ICON(ICON_BLANK164) -DEF_ICON(ICON_BLANK165) -DEF_ICON(ICON_BLANK166) -DEF_ICON(ICON_BLANK167) -DEF_ICON(ICON_BLANK168) -DEF_ICON(ICON_BLANK169) -DEF_ICON(ICON_BLANK170) -DEF_ICON(ICON_BLANK171) -DEF_ICON(ICON_BLANK172) -DEF_ICON(ICON_BLANK173) -DEF_ICON(ICON_BLANK174) -DEF_ICON(ICON_BLANK175) -DEF_ICON(ICON_BLANK176) -DEF_ICON(ICON_BLANK177) -DEF_ICON(ICON_BLANK177b) +DEF_ICON(MOD_CLOTH) +DEF_ICON(MOD_EXPLODE) +DEF_ICON(MOD_FLUIDSIM) +DEF_ICON(MOD_MULTIRES) +DEF_ICON(MOD_SMOKE) +DEF_ICON(MOD_SOLIDIFY) +DEF_ICON(MOD_SCREW) +DEF_ICON(BLANK160) +DEF_ICON(BLANK161) +DEF_ICON(BLANK162) +DEF_ICON(BLANK163) +DEF_ICON(BLANK164) +DEF_ICON(BLANK165) +DEF_ICON(BLANK166) +DEF_ICON(BLANK167) +DEF_ICON(BLANK168) +DEF_ICON(BLANK169) +DEF_ICON(BLANK170) +DEF_ICON(BLANK171) +DEF_ICON(BLANK172) +DEF_ICON(BLANK173) +DEF_ICON(BLANK174) +DEF_ICON(BLANK175) +DEF_ICON(BLANK176) +DEF_ICON(BLANK177) +DEF_ICON(BLANK177b) /* ANIMATION */ -DEF_ICON(ICON_REC) -DEF_ICON(ICON_PLAY) -DEF_ICON(ICON_FF) -DEF_ICON(ICON_REW) -DEF_ICON(ICON_PAUSE) -DEF_ICON(ICON_PREV_KEYFRAME) -DEF_ICON(ICON_NEXT_KEYFRAME) -DEF_ICON(ICON_PLAY_AUDIO) -DEF_ICON(ICON_PLAY_REVERSE) -DEF_ICON(ICON_PREVIEW_RANGE) -DEF_ICON(ICON_BLANK180) -DEF_ICON(ICON_PMARKER_ACT) -DEF_ICON(ICON_PMARKER_SEL) -DEF_ICON(ICON_PMARKER) -DEF_ICON(ICON_MARKER_HLT) -DEF_ICON(ICON_MARKER) -DEF_ICON(ICON_SPACE2) // XXX -DEF_ICON(ICON_SPACE3) // XXX -DEF_ICON(ICON_BLANK181) -DEF_ICON(ICON_KEY_DEHLT) -DEF_ICON(ICON_KEY_HLT) -DEF_ICON(ICON_MUTE_IPO_OFF) -DEF_ICON(ICON_MUTE_IPO_ON) -DEF_ICON(ICON_BLANK182) -DEF_ICON(ICON_BLANK183) -DEF_ICON(ICON_BLANK183b) +DEF_ICON(REC) +DEF_ICON(PLAY) +DEF_ICON(FF) +DEF_ICON(REW) +DEF_ICON(PAUSE) +DEF_ICON(PREV_KEYFRAME) +DEF_ICON(NEXT_KEYFRAME) +DEF_ICON(PLAY_AUDIO) +DEF_ICON(PLAY_REVERSE) +DEF_ICON(PREVIEW_RANGE) +DEF_ICON(BLANK180) +DEF_ICON(PMARKER_ACT) +DEF_ICON(PMARKER_SEL) +DEF_ICON(PMARKER) +DEF_ICON(MARKER_HLT) +DEF_ICON(MARKER) +DEF_ICON(SPACE2) // XXX +DEF_ICON(SPACE3) // XXX +DEF_ICON(BLANK181) +DEF_ICON(KEY_DEHLT) +DEF_ICON(KEY_HLT) +DEF_ICON(MUTE_IPO_OFF) +DEF_ICON(MUTE_IPO_ON) +DEF_ICON(BLANK182) +DEF_ICON(BLANK183) +DEF_ICON(BLANK183b) /* available */ -DEF_ICON(ICON_BLANK184) -DEF_ICON(ICON_BLANK185) -DEF_ICON(ICON_BLANK186) -DEF_ICON(ICON_BLANK187) -DEF_ICON(ICON_BLANK188) -DEF_ICON(ICON_BLANK189) -DEF_ICON(ICON_BLANK190) -DEF_ICON(ICON_BLANK191) -DEF_ICON(ICON_BLANK192) -DEF_ICON(ICON_BLANK193) -DEF_ICON(ICON_BLANK194) -DEF_ICON(ICON_BLANK195) -DEF_ICON(ICON_BLANK196) -DEF_ICON(ICON_BLANK197) -DEF_ICON(ICON_BLANK198) -DEF_ICON(ICON_BLANK199) -DEF_ICON(ICON_BLANK200) -DEF_ICON(ICON_BLANK201) -DEF_ICON(ICON_BLANK202) -DEF_ICON(ICON_BLANK203) -DEF_ICON(ICON_BLANK204) -DEF_ICON(ICON_BLANK205) -DEF_ICON(ICON_BLANK206) -DEF_ICON(ICON_BLANK207) -DEF_ICON(ICON_BLANK208) -DEF_ICON(ICON_BLANK208b) +DEF_ICON(BLANK184) +DEF_ICON(BLANK185) +DEF_ICON(BLANK186) +DEF_ICON(BLANK187) +DEF_ICON(BLANK188) +DEF_ICON(BLANK189) +DEF_ICON(BLANK190) +DEF_ICON(BLANK191) +DEF_ICON(BLANK192) +DEF_ICON(BLANK193) +DEF_ICON(BLANK194) +DEF_ICON(BLANK195) +DEF_ICON(BLANK196) +DEF_ICON(BLANK197) +DEF_ICON(BLANK198) +DEF_ICON(BLANK199) +DEF_ICON(BLANK200) +DEF_ICON(BLANK201) +DEF_ICON(BLANK202) +DEF_ICON(BLANK203) +DEF_ICON(BLANK204) +DEF_ICON(BLANK205) +DEF_ICON(BLANK206) +DEF_ICON(BLANK207) +DEF_ICON(BLANK208) +DEF_ICON(BLANK208b) /* EDITING */ -DEF_ICON(ICON_VERTEXSEL) -DEF_ICON(ICON_EDGESEL) -DEF_ICON(ICON_FACESEL) -DEF_ICON(ICON_BLANK209) -DEF_ICON(ICON_BLANK210) -DEF_ICON(ICON_ROTATE) -DEF_ICON(ICON_CURSOR) -DEF_ICON(ICON_ROTATECOLLECTION) -DEF_ICON(ICON_ROTATECENTER) -DEF_ICON(ICON_ROTACTIVE) -DEF_ICON(ICON_ALIGN) -DEF_ICON(ICON_BLANK211) -DEF_ICON(ICON_SMOOTHCURVE) -DEF_ICON(ICON_SPHERECURVE) -DEF_ICON(ICON_ROOTCURVE) -DEF_ICON(ICON_SHARPCURVE) -DEF_ICON(ICON_LINCURVE) -DEF_ICON(ICON_NOCURVE) -DEF_ICON(ICON_RNDCURVE) -DEF_ICON(ICON_PROP_OFF) -DEF_ICON(ICON_PROP_ON) -DEF_ICON(ICON_PROP_CON) -DEF_ICON(ICON_BLANK212) -DEF_ICON(ICON_PARTICLE_POINT) -DEF_ICON(ICON_PARTICLE_TIP) -DEF_ICON(ICON_PARTICLE_PATH) +DEF_ICON(VERTEXSEL) +DEF_ICON(EDGESEL) +DEF_ICON(FACESEL) +DEF_ICON(BLANK209) +DEF_ICON(BLANK210) +DEF_ICON(ROTATE) +DEF_ICON(CURSOR) +DEF_ICON(ROTATECOLLECTION) +DEF_ICON(ROTATECENTER) +DEF_ICON(ROTACTIVE) +DEF_ICON(ALIGN) +DEF_ICON(BLANK211) +DEF_ICON(SMOOTHCURVE) +DEF_ICON(SPHERECURVE) +DEF_ICON(ROOTCURVE) +DEF_ICON(SHARPCURVE) +DEF_ICON(LINCURVE) +DEF_ICON(NOCURVE) +DEF_ICON(RNDCURVE) +DEF_ICON(PROP_OFF) +DEF_ICON(PROP_ON) +DEF_ICON(PROP_CON) +DEF_ICON(BLANK212) +DEF_ICON(PARTICLE_POINT) +DEF_ICON(PARTICLE_TIP) +DEF_ICON(PARTICLE_PATH) /* EDITING */ -DEF_ICON(ICON_MAN_TRANS) -DEF_ICON(ICON_MAN_ROT) -DEF_ICON(ICON_MAN_SCALE) -DEF_ICON(ICON_MANIPUL) -DEF_ICON(ICON_SNAP_OFF) -DEF_ICON(ICON_SNAP_ON) -DEF_ICON(ICON_SNAP_NORMAL) -DEF_ICON(ICON_SNAP_INCREMENT) -DEF_ICON(ICON_SNAP_VERTEX) -DEF_ICON(ICON_SNAP_EDGE) -DEF_ICON(ICON_SNAP_FACE) -DEF_ICON(ICON_SNAP_VOLUME) -DEF_ICON(ICON_BLANK220) -DEF_ICON(ICON_STICKY_UVS_LOC) -DEF_ICON(ICON_STICKY_UVS_DISABLE) -DEF_ICON(ICON_STICKY_UVS_VERT) -DEF_ICON(ICON_CLIPUV_DEHLT) -DEF_ICON(ICON_CLIPUV_HLT) -DEF_ICON(ICON_SNAP_PEEL_OBJECT) -DEF_ICON(ICON_GRID) -DEF_ICON(ICON_BLANK221) -DEF_ICON(ICON_BLANK222) -DEF_ICON(ICON_BLANK224) -DEF_ICON(ICON_BLANK225) -DEF_ICON(ICON_BLANK226) -DEF_ICON(ICON_BLANK226b) +DEF_ICON(MAN_TRANS) +DEF_ICON(MAN_ROT) +DEF_ICON(MAN_SCALE) +DEF_ICON(MANIPUL) +DEF_ICON(SNAP_OFF) +DEF_ICON(SNAP_ON) +DEF_ICON(SNAP_NORMAL) +DEF_ICON(SNAP_INCREMENT) +DEF_ICON(SNAP_VERTEX) +DEF_ICON(SNAP_EDGE) +DEF_ICON(SNAP_FACE) +DEF_ICON(SNAP_VOLUME) +DEF_ICON(BLANK220) +DEF_ICON(STICKY_UVS_LOC) +DEF_ICON(STICKY_UVS_DISABLE) +DEF_ICON(STICKY_UVS_VERT) +DEF_ICON(CLIPUV_DEHLT) +DEF_ICON(CLIPUV_HLT) +DEF_ICON(SNAP_PEEL_OBJECT) +DEF_ICON(GRID) +DEF_ICON(BLANK221) +DEF_ICON(BLANK222) +DEF_ICON(BLANK224) +DEF_ICON(BLANK225) +DEF_ICON(BLANK226) +DEF_ICON(BLANK226b) /* EDITING */ -DEF_ICON(ICON_PASTEDOWN) -DEF_ICON(ICON_COPYDOWN) -DEF_ICON(ICON_PASTEFLIPUP) -DEF_ICON(ICON_PASTEFLIPDOWN) -DEF_ICON(ICON_BLANK227) -DEF_ICON(ICON_BLANK228) -DEF_ICON(ICON_BLANK229) -DEF_ICON(ICON_BLANK230) -DEF_ICON(ICON_SNAP_SURFACE) -DEF_ICON(ICON_BLANK232) -DEF_ICON(ICON_BLANK233) -DEF_ICON(ICON_RETOPO) -DEF_ICON(ICON_UV_VERTEXSEL) -DEF_ICON(ICON_UV_EDGESEL) -DEF_ICON(ICON_UV_FACESEL) -DEF_ICON(ICON_UV_ISLANDSEL) -DEF_ICON(ICON_UV_SYNC_SELECT) -DEF_ICON(ICON_BLANK240) -DEF_ICON(ICON_BLANK241) -DEF_ICON(ICON_BLANK242) -DEF_ICON(ICON_BLANK243) -DEF_ICON(ICON_BLANK244) -DEF_ICON(ICON_BLANK245) -DEF_ICON(ICON_BLANK246) -DEF_ICON(ICON_BLANK247) -DEF_ICON(ICON_BLANK247b) +DEF_ICON(PASTEDOWN) +DEF_ICON(COPYDOWN) +DEF_ICON(PASTEFLIPUP) +DEF_ICON(PASTEFLIPDOWN) +DEF_ICON(BLANK227) +DEF_ICON(BLANK228) +DEF_ICON(BLANK229) +DEF_ICON(BLANK230) +DEF_ICON(SNAP_SURFACE) +DEF_ICON(BLANK232) +DEF_ICON(BLANK233) +DEF_ICON(RETOPO) +DEF_ICON(UV_VERTEXSEL) +DEF_ICON(UV_EDGESEL) +DEF_ICON(UV_FACESEL) +DEF_ICON(UV_ISLANDSEL) +DEF_ICON(UV_SYNC_SELECT) +DEF_ICON(BLANK240) +DEF_ICON(BLANK241) +DEF_ICON(BLANK242) +DEF_ICON(BLANK243) +DEF_ICON(BLANK244) +DEF_ICON(BLANK245) +DEF_ICON(BLANK246) +DEF_ICON(BLANK247) +DEF_ICON(BLANK247b) /* 3D VIEW */ -DEF_ICON(ICON_BBOX) -DEF_ICON(ICON_WIRE) -DEF_ICON(ICON_SOLID) -DEF_ICON(ICON_SMOOTH) -DEF_ICON(ICON_POTATO) -DEF_ICON(ICON_BLANK248) -DEF_ICON(ICON_ORTHO) -DEF_ICON(ICON_BLANK249) -DEF_ICON(ICON_BLANK250) -DEF_ICON(ICON_LOCKVIEW_OFF) -DEF_ICON(ICON_LOCKVIEW_ON) -DEF_ICON(ICON_BLANK251) -DEF_ICON(ICON_AXIS_SIDE) -DEF_ICON(ICON_AXIS_FRONT) -DEF_ICON(ICON_AXIS_TOP) -DEF_ICON(ICON_NDOF_DOM) -DEF_ICON(ICON_NDOF_TURN) -DEF_ICON(ICON_NDOF_FLY) -DEF_ICON(ICON_NDOF_TRANS) -DEF_ICON(ICON_LAYER_USED) -DEF_ICON(ICON_LAYER_ACTIVE) -DEF_ICON(ICON_BLANK254) -DEF_ICON(ICON_BLANK255) -DEF_ICON(ICON_BLANK256) -DEF_ICON(ICON_BLANK257) -DEF_ICON(ICON_BLANK257b) +DEF_ICON(BBOX) +DEF_ICON(WIRE) +DEF_ICON(SOLID) +DEF_ICON(SMOOTH) +DEF_ICON(POTATO) +DEF_ICON(BLANK248) +DEF_ICON(ORTHO) +DEF_ICON(BLANK249) +DEF_ICON(BLANK250) +DEF_ICON(LOCKVIEW_OFF) +DEF_ICON(LOCKVIEW_ON) +DEF_ICON(BLANK251) +DEF_ICON(AXIS_SIDE) +DEF_ICON(AXIS_FRONT) +DEF_ICON(AXIS_TOP) +DEF_ICON(NDOF_DOM) +DEF_ICON(NDOF_TURN) +DEF_ICON(NDOF_FLY) +DEF_ICON(NDOF_TRANS) +DEF_ICON(LAYER_USED) +DEF_ICON(LAYER_ACTIVE) +DEF_ICON(BLANK254) +DEF_ICON(BLANK255) +DEF_ICON(BLANK256) +DEF_ICON(BLANK257) +DEF_ICON(BLANK257b) /* available */ -DEF_ICON(ICON_BLANK258) -DEF_ICON(ICON_BLANK259) -DEF_ICON(ICON_BLANK260) -DEF_ICON(ICON_BLANK261) -DEF_ICON(ICON_BLANK262) -DEF_ICON(ICON_BLANK263) -DEF_ICON(ICON_BLANK264) -DEF_ICON(ICON_BLANK265) -DEF_ICON(ICON_BLANK266) -DEF_ICON(ICON_BLANK267) -DEF_ICON(ICON_BLANK268) -DEF_ICON(ICON_BLANK269) -DEF_ICON(ICON_BLANK270) -DEF_ICON(ICON_BLANK271) -DEF_ICON(ICON_BLANK272) -DEF_ICON(ICON_BLANK273) -DEF_ICON(ICON_BLANK274) -DEF_ICON(ICON_BLANK275) -DEF_ICON(ICON_BLANK276) -DEF_ICON(ICON_BLANK277) -DEF_ICON(ICON_BLANK278) -DEF_ICON(ICON_BLANK279) -DEF_ICON(ICON_BLANK280) -DEF_ICON(ICON_BLANK281) -DEF_ICON(ICON_BLANK282) -DEF_ICON(ICON_BLANK282b) +DEF_ICON(BLANK258) +DEF_ICON(BLANK259) +DEF_ICON(BLANK260) +DEF_ICON(BLANK261) +DEF_ICON(BLANK262) +DEF_ICON(BLANK263) +DEF_ICON(BLANK264) +DEF_ICON(BLANK265) +DEF_ICON(BLANK266) +DEF_ICON(BLANK267) +DEF_ICON(BLANK268) +DEF_ICON(BLANK269) +DEF_ICON(BLANK270) +DEF_ICON(BLANK271) +DEF_ICON(BLANK272) +DEF_ICON(BLANK273) +DEF_ICON(BLANK274) +DEF_ICON(BLANK275) +DEF_ICON(BLANK276) +DEF_ICON(BLANK277) +DEF_ICON(BLANK278) +DEF_ICON(BLANK279) +DEF_ICON(BLANK280) +DEF_ICON(BLANK281) +DEF_ICON(BLANK282) +DEF_ICON(BLANK282b) /* FILE SELECT */ -DEF_ICON(ICON_SORTALPHA) -DEF_ICON(ICON_SORTBYEXT) -DEF_ICON(ICON_SORTTIME) -DEF_ICON(ICON_SORTSIZE) -DEF_ICON(ICON_LONGDISPLAY) -DEF_ICON(ICON_SHORTDISPLAY) -DEF_ICON(ICON_GHOST) -DEF_ICON(ICON_IMGDISPLAY) -DEF_ICON(ICON_BLANK284) -DEF_ICON(ICON_BLANK285) -DEF_ICON(ICON_BOOKMARKS) -DEF_ICON(ICON_FONTPREVIEW) -DEF_ICON(ICON_FILTER) -DEF_ICON(ICON_NEWFOLDER) -DEF_ICON(ICON_BLANK285F) -DEF_ICON(ICON_FILE_PARENT) -DEF_ICON(ICON_FILE_REFRESH) -DEF_ICON(ICON_FILE_FOLDER) -DEF_ICON(ICON_FILE_BLANK) -DEF_ICON(ICON_FILE_BLEND) -DEF_ICON(ICON_FILE_IMAGE) -DEF_ICON(ICON_FILE_MOVIE) -DEF_ICON(ICON_FILE_SCRIPT) -DEF_ICON(ICON_FILE_SOUND) -DEF_ICON(ICON_FILE_FONT) -DEF_ICON(ICON_BLANK291b) +DEF_ICON(SORTALPHA) +DEF_ICON(SORTBYEXT) +DEF_ICON(SORTTIME) +DEF_ICON(SORTSIZE) +DEF_ICON(LONGDISPLAY) +DEF_ICON(SHORTDISPLAY) +DEF_ICON(GHOST) +DEF_ICON(IMGDISPLAY) +DEF_ICON(BLANK284) +DEF_ICON(BLANK285) +DEF_ICON(BOOKMARKS) +DEF_ICON(FONTPREVIEW) +DEF_ICON(FILTER) +DEF_ICON(NEWFOLDER) +DEF_ICON(BLANK285F) +DEF_ICON(FILE_PARENT) +DEF_ICON(FILE_REFRESH) +DEF_ICON(FILE_FOLDER) +DEF_ICON(FILE_BLANK) +DEF_ICON(FILE_BLEND) +DEF_ICON(FILE_IMAGE) +DEF_ICON(FILE_MOVIE) +DEF_ICON(FILE_SCRIPT) +DEF_ICON(FILE_SOUND) +DEF_ICON(FILE_FONT) +DEF_ICON(BLANK291b) /* available */ -DEF_ICON(ICON_BLANK292) -DEF_ICON(ICON_BLANK293) -DEF_ICON(ICON_BLANK294) -DEF_ICON(ICON_BLANK295) -DEF_ICON(ICON_BLANK296) -DEF_ICON(ICON_BLANK297) -DEF_ICON(ICON_BLANK298) -DEF_ICON(ICON_BLANK299) -DEF_ICON(ICON_BLANK300) -DEF_ICON(ICON_BLANK301) -DEF_ICON(ICON_BLANK302) -DEF_ICON(ICON_BLANK303) -DEF_ICON(ICON_BLANK304) -DEF_ICON(ICON_BLANK305) -DEF_ICON(ICON_BLANK306) -DEF_ICON(ICON_BACK) -DEF_ICON(ICON_FORWARD) -DEF_ICON(ICON_BLANK309) -DEF_ICON(ICON_BLANK310) -DEF_ICON(ICON_BLANK311) -DEF_ICON(ICON_BLANK312) -DEF_ICON(ICON_BLANK313) -DEF_ICON(ICON_BLANK314) -DEF_ICON(ICON_BLANK315) -DEF_ICON(ICON_BLANK316) -DEF_ICON(ICON_DISK_DRIVE) +DEF_ICON(BLANK292) +DEF_ICON(BLANK293) +DEF_ICON(BLANK294) +DEF_ICON(BLANK295) +DEF_ICON(BLANK296) +DEF_ICON(BLANK297) +DEF_ICON(BLANK298) +DEF_ICON(BLANK299) +DEF_ICON(BLANK300) +DEF_ICON(BLANK301) +DEF_ICON(BLANK302) +DEF_ICON(BLANK303) +DEF_ICON(BLANK304) +DEF_ICON(BLANK305) +DEF_ICON(BLANK306) +DEF_ICON(BACK) +DEF_ICON(FORWARD) +DEF_ICON(BLANK309) +DEF_ICON(BLANK310) +DEF_ICON(BLANK311) +DEF_ICON(BLANK312) +DEF_ICON(BLANK313) +DEF_ICON(BLANK314) +DEF_ICON(BLANK315) +DEF_ICON(BLANK316) +DEF_ICON(DISK_DRIVE) /* SHADING / TEXT */ -DEF_ICON(ICON_MATPLANE) -DEF_ICON(ICON_MATSPHERE) -DEF_ICON(ICON_MATCUBE) -DEF_ICON(ICON_MONKEY) -DEF_ICON(ICON_HAIR) -DEF_ICON(ICON_ALIASED) -DEF_ICON(ICON_ANTIALIASED) -DEF_ICON(ICON_MAT_SPHERE_SKY) -DEF_ICON(ICON_BLANK319) -DEF_ICON(ICON_BLANK320) -DEF_ICON(ICON_BLANK321) -DEF_ICON(ICON_BLANK322) -DEF_ICON(ICON_WORDWRAP_OFF) -DEF_ICON(ICON_WORDWRAP_ON) -DEF_ICON(ICON_SYNTAX_OFF) -DEF_ICON(ICON_SYNTAX_ON) -DEF_ICON(ICON_LINENUMBERS_OFF) -DEF_ICON(ICON_LINENUMBERS_ON) -DEF_ICON(ICON_SCRIPTPLUGINS) // XXX CREATE NEW -DEF_ICON(ICON_BLANK323) -DEF_ICON(ICON_BLANK324) -DEF_ICON(ICON_BLANK325) -DEF_ICON(ICON_BLANK326) -DEF_ICON(ICON_BLANK327) -DEF_ICON(ICON_BLANK328) -DEF_ICON(ICON_BLANK328b) +DEF_ICON(MATPLANE) +DEF_ICON(MATSPHERE) +DEF_ICON(MATCUBE) +DEF_ICON(MONKEY) +DEF_ICON(HAIR) +DEF_ICON(ALIASED) +DEF_ICON(ANTIALIASED) +DEF_ICON(MAT_SPHERE_SKY) +DEF_ICON(BLANK319) +DEF_ICON(BLANK320) +DEF_ICON(BLANK321) +DEF_ICON(BLANK322) +DEF_ICON(WORDWRAP_OFF) +DEF_ICON(WORDWRAP_ON) +DEF_ICON(SYNTAX_OFF) +DEF_ICON(SYNTAX_ON) +DEF_ICON(LINENUMBERS_OFF) +DEF_ICON(LINENUMBERS_ON) +DEF_ICON(SCRIPTPLUGINS) // XXX CREATE NEW +DEF_ICON(BLANK323) +DEF_ICON(BLANK324) +DEF_ICON(BLANK325) +DEF_ICON(BLANK326) +DEF_ICON(BLANK327) +DEF_ICON(BLANK328) +DEF_ICON(BLANK328b) /* SEQUENCE / IMAGE EDITOR */ -DEF_ICON(ICON_SEQ_SEQUENCER) -DEF_ICON(ICON_SEQ_PREVIEW) -DEF_ICON(ICON_SEQ_LUMA_WAVEFORM) -DEF_ICON(ICON_SEQ_CHROMA_SCOPE) -DEF_ICON(ICON_SEQ_HISTOGRAM) -DEF_ICON(ICON_SEQ_SPLITVIEW) -DEF_ICON(ICON_BLANK331) -DEF_ICON(ICON_BLANK332) -DEF_ICON(ICON_BLANK333) -DEF_ICON(ICON_IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC -DEF_ICON(ICON_IMAGE_RGB_ALPHA) -DEF_ICON(ICON_IMAGE_ALPHA) -DEF_ICON(ICON_IMAGE_ZDEPTH) -DEF_ICON(ICON_IMAGEFILE) -DEF_ICON(ICON_BLANK336) -DEF_ICON(ICON_BLANK337) -DEF_ICON(ICON_BLANK338) -DEF_ICON(ICON_BLANK339) -DEF_ICON(ICON_BLANK340) -DEF_ICON(ICON_BLANK341) -DEF_ICON(ICON_BLANK342) -DEF_ICON(ICON_BLANK343) -DEF_ICON(ICON_BLANK344) -DEF_ICON(ICON_BLANK345) -DEF_ICON(ICON_BLANK346) -DEF_ICON(ICON_BLANK346b) +DEF_ICON(SEQ_SEQUENCER) +DEF_ICON(SEQ_PREVIEW) +DEF_ICON(SEQ_LUMA_WAVEFORM) +DEF_ICON(SEQ_CHROMA_SCOPE) +DEF_ICON(SEQ_HISTOGRAM) +DEF_ICON(SEQ_SPLITVIEW) +DEF_ICON(BLANK331) +DEF_ICON(BLANK332) +DEF_ICON(BLANK333) +DEF_ICON(IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC +DEF_ICON(IMAGE_RGB_ALPHA) +DEF_ICON(IMAGE_ALPHA) +DEF_ICON(IMAGE_ZDEPTH) +DEF_ICON(IMAGEFILE) +DEF_ICON(BLANK336) +DEF_ICON(BLANK337) +DEF_ICON(BLANK338) +DEF_ICON(BLANK339) +DEF_ICON(BLANK340) +DEF_ICON(BLANK341) +DEF_ICON(BLANK342) +DEF_ICON(BLANK343) +DEF_ICON(BLANK344) +DEF_ICON(BLANK345) +DEF_ICON(BLANK346) +DEF_ICON(BLANK346b) /* brush icons */ -DEF_ICON(ICON_BRUSH_ADD) -DEF_ICON(ICON_BRUSH_BLOB) -DEF_ICON(ICON_BRUSH_BLUR) -DEF_ICON(ICON_BRUSH_CLAY) -DEF_ICON(ICON_BRUSH_CLONE) -DEF_ICON(ICON_BRUSH_CREASE) -DEF_ICON(ICON_BRUSH_DARKEN) -DEF_ICON(ICON_BRUSH_FILL) -DEF_ICON(ICON_BRUSH_FLATTEN) -DEF_ICON(ICON_BRUSH_GRAB) -DEF_ICON(ICON_BRUSH_INFLATE) -DEF_ICON(ICON_BRUSH_LAYER) -DEF_ICON(ICON_BRUSH_LIGHTEN) -DEF_ICON(ICON_BRUSH_MIX) -DEF_ICON(ICON_BRUSH_MULTIPLY) -DEF_ICON(ICON_BRUSH_NUDGE) -DEF_ICON(ICON_BRUSH_PINCH) -DEF_ICON(ICON_BRUSH_SCRAPE) -DEF_ICON(ICON_BRUSH_SCULPT_DRAW) -DEF_ICON(ICON_BRUSH_SMEAR) -DEF_ICON(ICON_BRUSH_SMOOTH) -DEF_ICON(ICON_BRUSH_SNAKE_HOOK) -DEF_ICON(ICON_BRUSH_SOFTEN) -DEF_ICON(ICON_BRUSH_SUBTRACT) -DEF_ICON(ICON_BRUSH_TEXDRAW) -DEF_ICON(ICON_BRUSH_THUMB) -DEF_ICON(ICON_BRUSH_ROTATE) -DEF_ICON(ICON_BRUSH_VERTEXDRAW) - - /* vector icons */ - -DEF_ICON(VICO_VIEW3D_VEC) -DEF_ICON(VICO_EDIT_VEC) -DEF_ICON(VICO_EDITMODE_DEHLT) -DEF_ICON(VICO_EDITMODE_HLT) -DEF_ICON(VICO_DISCLOSURE_TRI_RIGHT_VEC) -DEF_ICON(VICO_DISCLOSURE_TRI_DOWN_VEC) -DEF_ICON(VICO_MOVE_UP_VEC) -DEF_ICON(VICO_MOVE_DOWN_VEC) -DEF_ICON(VICO_X_VEC) -DEF_ICON(VICO_SMALL_TRI_RIGHT_VEC) +DEF_ICON(BRUSH_ADD) +DEF_ICON(BRUSH_BLOB) +DEF_ICON(BRUSH_BLUR) +DEF_ICON(BRUSH_CLAY) +DEF_ICON(BRUSH_CLONE) +DEF_ICON(BRUSH_CREASE) +DEF_ICON(BRUSH_DARKEN) +DEF_ICON(BRUSH_FILL) +DEF_ICON(BRUSH_FLATTEN) +DEF_ICON(BRUSH_GRAB) +DEF_ICON(BRUSH_INFLATE) +DEF_ICON(BRUSH_LAYER) +DEF_ICON(BRUSH_LIGHTEN) +DEF_ICON(BRUSH_MIX) +DEF_ICON(BRUSH_MULTIPLY) +DEF_ICON(BRUSH_NUDGE) +DEF_ICON(BRUSH_PINCH) +DEF_ICON(BRUSH_SCRAPE) +DEF_ICON(BRUSH_SCULPT_DRAW) +DEF_ICON(BRUSH_SMEAR) +DEF_ICON(BRUSH_SMOOTH) +DEF_ICON(BRUSH_SNAKE_HOOK) +DEF_ICON(BRUSH_SOFTEN) +DEF_ICON(BRUSH_SUBTRACT) +DEF_ICON(BRUSH_TEXDRAW) +DEF_ICON(BRUSH_THUMB) +DEF_ICON(BRUSH_ROTATE) +DEF_ICON(BRUSH_VERTEXDRAW) +/* vector icons, VICO_ prefix added */ +DEF_VICO(VIEW3D_VEC) +DEF_VICO(EDIT_VEC) +DEF_VICO(EDITMODE_DEHLT) +DEF_VICO(EDITMODE_HLT) +DEF_VICO(DISCLOSURE_TRI_RIGHT_VEC) +DEF_VICO(DISCLOSURE_TRI_DOWN_VEC) +DEF_VICO(MOVE_UP_VEC) +DEF_VICO(MOVE_DOWN_VEC) +DEF_VICO(X_VEC) +DEF_VICO(SMALL_TRI_RIGHT_VEC) diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index af3f91f8ba8..e3c83291089 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -35,7 +35,8 @@ /* elubie: TODO: move the typedef for icons to UI_interface_icons.h */ /* and add/replace include of UI_resources.h by UI_interface_icons.h */ -#define DEF_ICON(name) name, +#define DEF_ICON(name) ICON_##name, +#define DEF_VICO(name) VICO_##name, typedef enum { #define BIFICONID_FIRST (ICON_BLENDER) @@ -45,6 +46,7 @@ typedef enum { #define BIFNICONIDS (BIFICONID_LAST-BIFICONID_FIRST + 1) } BIFIconID; #undef DEF_ICON +#undef DEF_VICO typedef enum { diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 89991015419..5dd1b1227a3 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -138,8 +138,11 @@ printf("%d\n", event->val); float nor[3]= {0.0, 0.0, 0.0}; /* 2D normal calc */ - float mval_f[2]= {(float)event->mval[0], (float)event->mval[1]}; - + float mval_f[2]; + + mval_f[0]= (float)event->mval[0]; + mval_f[1]= (float)event->mval[1]; + done= 0; /* calculate the normal for selected edges */ diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index 0357083fc63..fed4b8d9722 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -1890,7 +1890,7 @@ static void rekey_particle(PEData *data, int pa_index) { PTCacheEdit *edit= data->edit; ParticleSystem *psys= edit->psys; - ParticleSimulationData sim = {data->scene, data->ob, edit->psys, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa= psys->particles + pa_index; PTCacheEditPoint *point = edit->points + pa_index; ParticleKey state; @@ -1899,6 +1899,10 @@ static void rekey_particle(PEData *data, int pa_index) float dval, sta, end; int k; + sim.scene= data->scene; + sim.ob= data->ob; + sim.psys= edit->psys; + pa->flag |= PARS_REKEY; key= new_keys= MEM_callocN(data->totrekey * sizeof(HairKey),"Hair re-key keys"); @@ -1983,7 +1987,7 @@ static void rekey_particle_to_time(Scene *scene, Object *ob, int pa_index, float { PTCacheEdit *edit= PE_get_current(scene, ob); ParticleSystem *psys; - ParticleSimulationData sim = {scene, ob, edit ? edit->psys : NULL, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa; ParticleKey state; HairKey *new_keys, *key; @@ -1994,6 +1998,10 @@ static void rekey_particle_to_time(Scene *scene, Object *ob, int pa_index, float psys = edit->psys; + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + pa= psys->particles + pa_index; pa->flag |= PARS_REKEY; @@ -2188,7 +2196,7 @@ static void subdivide_particle(PEData *data, int pa_index) { PTCacheEdit *edit= data->edit; ParticleSystem *psys= edit->psys; - ParticleSimulationData sim = {data->scene, data->ob, edit->psys, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa= psys->particles + pa_index; PTCacheEditPoint *point = edit->points + pa_index; ParticleKey state; @@ -2199,6 +2207,10 @@ static void subdivide_particle(PEData *data, int pa_index) short totnewkey=0; float endtime; + sim.scene= data->scene; + sim.ob= data->ob; + sim.psys= edit->psys; + for(k=0, ekey=point->keys; ktotkey-1; k++,ekey++) { if(ekey->flag&PEK_SELECT && (ekey+1)->flag&PEK_SELECT) totnewkey++; @@ -3088,13 +3100,13 @@ static int brush_add(PEData *data, short number) ParticleSystem *psys= edit->psys; ParticleData *add_pars= MEM_callocN(number*sizeof(ParticleData),"ParticleData add"); ParticleSystemModifierData *psmd= psys_get_modifier(ob,psys); - ParticleSimulationData sim = {scene, ob, psys, psmd}; + ParticleSimulationData sim= {0}; ParticleEditSettings *pset= PE_settings(scene); int i, k, n= 0, totpart= psys->totpart; float mco[2]; short dmx= 0, dmy= 0; float co1[3], co2[3], min_d, imat[4][4]; - float framestep, timestep= psys_get_timestep(&sim); + float framestep, timestep; short size= pset->brush[PE_BRUSH_ADD].size; short size2= size*size; DerivedMesh *dm=0; @@ -3104,7 +3116,14 @@ static int brush_add(PEData *data, short number) return 0; BLI_srandom(psys->seed+data->mval[0]+data->mval[1]); - + + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psmd; + + timestep= psys_get_timestep(&sim); + /* painting onto the deformed mesh, could be an option? */ if(psmd->dm->deformedOnly) dm= psmd->dm; diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index 939955353c8..b6e7c823c9d 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -1011,8 +1011,11 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl float puv[4][2]; /* pixelspace uv's */ float no1[2], no2[2], no3[2], no4[2]; /* normals */ float dir1[2], dir2[2], dir3[2], dir4[2]; - float ibuf_inv[2] = {1.0f / (float)ibuf_x, 1.0f / (float)ibuf_y}; - + float ibuf_inv[2]; + + ibuf_inv[0]= 1.0f / (float)ibuf_x; + ibuf_inv[1]= 1.0f / (float)ibuf_y; + /* make UV's in pixel space so we can */ puv[0][0] = orig_uv[0][0] * ibuf_x; puv[0][1] = orig_uv[0][1] * ibuf_y; diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index edbb539e836..f1fead47a0a 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -270,7 +270,11 @@ static int console_draw_string(ConsoleDrawContext *cdc, char *str, int str_len, BLF_draw(mono, str); if(cdc->sel[0] != cdc->sel[1]) { - int isel[2]= {str_len - cdc->sel[1], str_len - cdc->sel[0]}; + int isel[2]; + + isel[0]= str_len - cdc->sel[1]; + isel[1]= str_len - cdc->sel[0]; + // glColor4ub(255, 255, 0, 96); // debug console_draw_sel(isel, cdc->xy, str_len, cdc->cwidth, cdc->lheight); STEP_SEL(-(str_len + 1)); @@ -447,8 +451,12 @@ int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mouse_y) { - int mval[2] = {0, mouse_y}; void *mouse_pick= NULL; + int mval[2]; + + mval[0]= 0; + mval[1]= mouse_y; + console_text_main__internal(sc, ar, reports, 0, mval, &mouse_pick, NULL); return (void *)mouse_pick; } diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 2b419b0a833..ceb16d2aab9 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -404,12 +404,17 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) { // if(!RNA_property_is_set(op->ptr, "text")) { /* always set from keymap XXX */ if(!RNA_string_length(op->ptr, "text")) { - char str[2] = {event->ascii, '\0'}; /* if alt/ctrl/super are pressed pass through */ - if(event->ctrl || event->oskey) + if(event->ctrl || event->oskey) { return OPERATOR_PASS_THROUGH; + } + else { + char str[2]; + str[0]= event->ascii; + str[1]= '\0'; - RNA_string_set(op->ptr, "text", str); + RNA_string_set(op->ptr, "text", str); + } } return insert_exec(C, op); } @@ -863,7 +868,10 @@ static void console_modal_select_apply(bContext *C, wmOperator *op, wmEvent *eve SpaceConsole *sc= CTX_wm_space_console(C); ARegion *ar= CTX_wm_region(C); SetConsoleCursor *scu= op->customdata; - int mval[2] = {event->mval[0], event->mval[1]}; + int mval[2]; + + mval[0]= event->mval[0]; + mval[1]= event->mval[1]; set_cursor_to_pos(sc, ar, scu, mval, TRUE); ED_area_tag_redraw(CTX_wm_area(C)); diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index d2defb0341d..1a0514c9735 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -2603,12 +2603,16 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event) // if(!RNA_property_is_set(op->ptr, "text")) { /* always set from keymap XXX */ if(!RNA_string_length(op->ptr, "text")) { - char str[2] = {event->ascii, '\0'}; /* if alt/ctrl/super are pressed pass through */ - if(event->ctrl || event->oskey) + if(event->ctrl || event->oskey) { return OPERATOR_PASS_THROUGH; - - RNA_string_set(op->ptr, "text", str); + } + else { + char str[2]; + str[0]= event->ascii; + str[1]= '\0'; + RNA_string_set(op->ptr, "text", str); + } } ret = insert_exec(C, op); diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 8cf790f7a6e..57298bdd0d3 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1230,7 +1230,10 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata) if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) { float vecrot[3], cent[2]; - int mval[2] = {x, y}; + int mval[2]; + + mval[0]= x; + mval[1]= y; VECCOPY(vecrot, t->center); if(t->flag & T_EDIT) { diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 818e5c2df66..123db2ce65a 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -3868,8 +3868,13 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count #ifdef XXX_DURIAN_ANIM_TX_HACK /* hack */ if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) { - Sequence *seq_t[3] = {seq->seq1, seq->seq2, seq->seq3}; + Sequence *seq_t[3]; int i; + + seq_t[0]= seq->seq1; + seq_t[1]= seq->seq2; + seq_t[2]= seq->seq3; + for(i=0; i<3; i++) { if (seq_t[i] && ((seq_t[i])->flag & SELECT) && !(seq_t[i]->flag & SEQ_LOCK) && !(seq_t[i]->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL))) seq->flag |= SELECT; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 453a48bd500..7ff93be87ee 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1572,8 +1572,13 @@ void calculatePropRatio(TransInfo *t) float get_drawsize(ARegion *ar, float *co) { RegionView3D *rv3d= ar->regiondata; - float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]}; float size= rv3d->pixsize * 5; + float vec[3]; + + vec[0]= rv3d->persmat[0][3]; + vec[1]= rv3d->persmat[1][3]; + vec[2]= rv3d->persmat[2][3]; + size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; return size; } diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 90c33f68c65..7d2006a3aab 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -491,7 +491,11 @@ void *GPU_build_mesh_buffers(GHash *map, MVert *mvert, MFace *mface, if(tri_data) { for(i = 0; i < totface; ++i) { MFace *f = mface + face_indices[i]; - int v[3] = {f->v1, f->v2, f->v3}; + int v[3]; + + v[0]= f->v1; + v[1]= f->v2; + v[2]= f->v3; for(j = 0; j < (f->v4 ? 2 : 1); ++j) { for(k = 0; k < 3; ++k) { diff --git a/source/blender/imbuf/intern/divers.c b/source/blender/imbuf/intern/divers.c index dfe316628f6..245dcfb7fae 100644 --- a/source/blender/imbuf/intern/divers.c +++ b/source/blender/imbuf/intern/divers.c @@ -163,7 +163,13 @@ void IMB_rect_from_float(struct ImBuf *ibuf) if (dither != 0.f) { for (i = ibuf->x * ibuf->y; i > 0; i--, to+=4, tof+=4) { const float d = (BLI_frand()-0.5)*dither; - const float col[4] = {d+tof[0], d+tof[1], d+tof[2], d+tof[3]}; + float col[4]; + + col[0]= d + tof[0]; + col[1]= d + tof[1]; + col[2]= d + tof[2]; + col[3]= d + tof[3]; + to[0] = FTOCHAR(col[0]); to[1] = FTOCHAR(col[1]); to[2] = FTOCHAR(col[2]); diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 66ef0f3b950..85f31e245d4 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -2240,8 +2240,11 @@ PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont_, const char *identi { ContainerRNA *cont= cont_; PropertyRNA *prop; - int length[2]= {rows, columns}; - + int length[2]; + + length[0]= rows; + length[1]= columns; + prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_MATRIX); RNA_def_property_multi_array(prop, 2, length); if(default_value) RNA_def_property_float_array_default(prop, default_value); diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index a230a51e792..dfecd016f45 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -65,11 +65,14 @@ static PointerRNA rna_uiItemO(uiLayout *layout, char *opname, char *name, int ic #else -#define DEF_ICON(name) {name, (#name)+5, 0, (#name)+5, ""}, +#define DEF_ICON(name) {ICON_##name, (#name), 0, (#name), ""}, +#define DEF_VICO(name) {VICO_##name, (#name), 0, (#name), ""}, + static EnumPropertyItem icon_items[] = { #include "UI_icons.h" {0, NULL, 0, NULL, NULL}}; #undef DEF_ICON +#undef DEF_VICO static void api_ui_item_common(FunctionRNA *func) { diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c index dd2c4b6efb6..9e93557968d 100644 --- a/source/blender/modifiers/intern/MOD_explode.c +++ b/source/blender/modifiers/intern/MOD_explode.c @@ -663,7 +663,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, DerivedMesh *explode, *dm=to_explode; MFace *mf=0, *mface; ParticleSettings *part=psmd->psys->part; - ParticleSimulationData sim = {scene, ob, psmd->psys, psmd}; + ParticleSimulationData sim= {0}; ParticleData *pa=NULL, *pars=psmd->psys->particles; ParticleKey state; EdgeHash *vertpahash; @@ -680,6 +680,11 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd, mface= dm->getFaceArray(dm); totpart= psmd->psys->totpart; + sim.scene= scene; + sim.ob= ob; + sim.psys= psmd->psys; + sim.psmd= psmd; + timestep= psys_get_timestep(&sim); //if(part->flag & PART_GLOB_TIME) From 130088300bec57aa0f11042bb09e48a67417a514 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Tue, 2 Nov 2010 15:21:43 +0000 Subject: [PATCH 122/163] Fix for [#24501] Apeend object with cloth sim from another file crash. --- source/blender/blenkernel/intern/pointcache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 37d2b103ef0..bd37abc266b 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -2002,7 +2002,7 @@ void BKE_ptcache_id_clear(PTCacheID *pid, int mode, int cfra) if((mode==PTCACHE_CLEAR_BEFORE && pm->frame < cfra) || (mode==PTCACHE_CLEAR_AFTER && pm->frame > cfra) ) { link = pm; - if(pm->frame >=sta && pm->frame <= end) + if(pid->cache->cached_frames && pm->frame >=sta && pm->frame <= end) pid->cache->cached_frames[pm->frame-sta] = 0; ptcache_free_data(pm); pm = pm->next; From 09435ec149b499fabb112114bcdd24a9b3dc6cda Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Tue, 2 Nov 2010 21:16:41 +0000 Subject: [PATCH 123/163] Oops, particle collisions didn't take simulation subframes into account at all. * This caused nearly all particles to leak through the collision surface if simulation subframes were used and the collision object was moving. * In addition to fixing this I also did some more cleanup of the collision code and refined some of the comments. --- source/blender/blenkernel/BKE_particle.h | 4 +- source/blender/blenkernel/intern/boids.c | 12 +++-- .../blenkernel/intern/particle_system.c | 50 +++++++++++-------- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 1416e1280cf..5bcd69865fc 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -171,7 +171,9 @@ typedef struct ParticleCollision float co1[3], co2[3]; // ray start and end points float ve1[3], ve2[3]; // particle velocities float ray_len; // original length of co2-co1, needed for collision time evaluation - float t; // time of previous collision, needed for substracting face velocity + float f; // time factor of previous collision, needed for substracting face velocity + float cfra; // start of the timestep (during frame change, since previous integer frame) + float dfra; // duration of timestep in frames } ParticleCollision; typedef struct ParticleDrawData { diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c index 5c2c0721972..1bde0639055 100644 --- a/source/blender/blenkernel/intern/boids.c +++ b/source/blender/blenkernel/intern/boids.c @@ -205,7 +205,9 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues * add_v3_v3v3(col.co2, pa->prev_state.co, pa->prev_state.vel); sub_v3_v3v3(ray_dir, col.co2, col.co1); mul_v3_fl(ray_dir, acbr->look_ahead); - col.t = 0.0f; + col.f = 0.0f; + col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f); + col.dfra = bbd->dfra; hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); @@ -772,7 +774,9 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro sub_v3_v3v3(col.co2, pa->state.co, zvec); sub_v3_v3(col.co2, zvec); sub_v3_v3v3(ray_dir, col.co2, col.co1); - col.t = 0.0f; + col.f = 0.0f; + col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f); + col.dfra = bbd->dfra; hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); @@ -796,7 +800,9 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro sub_v3_v3v3(col.co2, pa->state.co, zvec); sub_v3_v3(col.co2, zvec); sub_v3_v3v3(ray_dir, col.co2, col.co1); - col.t = 0.0f; + col.f = 0.0f; + col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f); + col.dfra = bbd->dfra; hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index a4c0776f5df..504105d5950 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -2777,23 +2777,26 @@ void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, B MVert *x = col->md->x; MVert *v = col->md->current_v; float vel[3], co1[3], co2[3], uv[2], ipoint[3], temp[3], t; + float x0[3], x1[3], x2[3], x3[3]; + float *t0=x0, *t1=x1, *t2=x2, *t3=(face->v4 ? x3 : NULL); - float *t0, *t1, *t2, *t3; - t0 = x[ face->v1 ].co; - t1 = x[ face->v2 ].co; - t2 = x[ face->v3 ].co; - t3 = face->v4 ? x[ face->v4].co : NULL; + /* move collision face to start of timestep */ + madd_v3_v3v3fl(t0, x[face->v1].co, v[face->v1].co, col->cfra); + madd_v3_v3v3fl(t1, x[face->v2].co, v[face->v2].co, col->cfra); + madd_v3_v3v3fl(t2, x[face->v3].co, v[face->v3].co, col->cfra); + if(t3) + madd_v3_v3v3fl(t3, x[face->v4].co, v[face->v4].co, col->cfra); /* calculate average velocity of face */ - VECCOPY(vel, v[ face->v1 ].co); - VECADD(vel, vel, v[ face->v2 ].co); - VECADD(vel, vel, v[ face->v3 ].co); - mul_v3_fl(vel, 0.33334f); + copy_v3_v3(vel, v[ face->v1 ].co); + add_v3_v3(vel, v[ face->v2 ].co); + add_v3_v3(vel, v[ face->v3 ].co); + mul_v3_fl(vel, 0.33334f*col->dfra); /* substract face velocity, in other words convert to a coordinate system where only the particle moves */ - VECADDFAC(co1, col->co1, vel, -col->t); - VECSUB(co2, col->co2, vel); + madd_v3_v3v3fl(co1, col->co1, vel, -col->f); + sub_v3_v3v3(co2, col->co2, vel); do { @@ -2875,7 +2878,7 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo copy_v3_v3(col.co2, pa->state.co); copy_v3_v3(col.ve1, pa->prev_state.vel); copy_v3_v3(col.ve2, pa->state.vel); - col.t = 0.0f; + col.f = 0.0f; /* override for boids */ if(part->phystype == PART_PHYS_BOIDS) { @@ -2893,6 +2896,9 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo hit.index = -1; hit.dist = col.ray_len = len_v3(ray_dir); + col.cfra = fmod(cfra-dfra, 1.0f); + col.dfra = dfra; + /* even if particle is stationary we want to check for moving colliders */ /* if hit.dist is zero the bvhtree_ray_cast will just ignore everything */ if(hit.dist == 0.0f) @@ -2917,11 +2923,11 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo /* 2. */ if(hit.index>=0) { PartDeflect *pd = col.hit_ob->pd; - float co[3]; /* point of collision */ - float x = hit.dist/col.ray_len; /* location of collision between this iteration */ - float df = col.t + x * (1.0f - col.t); /* time of collision between frame change*/ - float dt1 = (df - col.t) * timestep; /* iteration time of collision (in seconds) */ - float dt2 = (1.0f - df) * timestep; /* time left after collision (in seconds) */ + float co[3]; /* point of collision */ + float x = hit.dist/col.ray_len; /* location factor of collision between this iteration */ + float f = col.f + x * (1.0f - col.f); /* time factor of collision between timestep */ + float dt1 = (f - col.f) * timestep; /* time since previous collision (in seconds) */ + float dt2 = (1.0f - f) * timestep; /* time left after collision (in seconds) */ int through = (BLI_frand() < pd->pdef_perm) ? 1 : 0; /* did particle pass through the collision surface? */ deflections++; @@ -2935,12 +2941,12 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo /* particle dies in collision */ if(through == 0 && (part->flag & PART_DIE_ON_COL || pd->flag & PDEFLE_KILL_PART)) { pa->alive = PARS_DYING; - pa->dietime = pa->state.time + (cfra - pa->state.time) * df; + pa->dietime = pa->state.time + (cfra - pa->state.time) * f; copy_v3_v3(pa->state.co, co); - interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, df); - interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, df); - interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, df); + interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, f); + interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, f); + interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, f); /* particle is dead so we don't need to calculate further */ return; @@ -3073,7 +3079,7 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo copy_v3_v3(col.ve1, v0); copy_v3_v3(col.ve2, pa->state.vel); - col.t = df; + col.f = f; } else { /* final chance to prevent failure, so stick to the surface and hope for the best */ From 1c5f72f273215c1d1bfda07443e9ccc93b42ca2b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 21:43:47 +0000 Subject: [PATCH 124/163] - remove BLANK* from rna icon enum, would string search this list for every python icon button call, enum from 818 down to 444. - remove unused space image members --- source/blender/editors/include/UI_icons.h | 843 +++++++++++--------- source/blender/makesdna/DNA_space_types.h | 36 +- source/blender/makesrna/intern/rna_ui_api.c | 3 +- 3 files changed, 485 insertions(+), 397 deletions(-) diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h index 5aff480647e..a145df908b9 100644 --- a/source/blender/editors/include/UI_icons.h +++ b/source/blender/editors/include/UI_icons.h @@ -46,12 +46,18 @@ DEF_ICON(DISCLOSURE_TRI_RIGHT) DEF_ICON(RADIOBUT_OFF) DEF_ICON(RADIOBUT_ON) DEF_ICON(MENU_PANEL) -DEF_ICON(BLANK002) -DEF_ICON(BLANK003) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK002) + DEF_ICON(BLANK003) +#endif DEF_ICON(DOT) -DEF_ICON(BLANK004) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK004) +#endif DEF_ICON(X) -DEF_ICON(BLANK005) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK005) +#endif DEF_ICON(GO_LEFT) DEF_ICON(PLUG) DEF_ICON(UI) @@ -109,7 +115,9 @@ DEF_ICON(FILE_TICK) DEF_ICON(QUIT) DEF_ICON(URL) DEF_ICON(RECOVER_LAST) -DEF_ICON(BLANK038) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK038) +#endif DEF_ICON(FULLSCREEN_ENTER) DEF_ICON(FULLSCREEN_EXIT) DEF_ICON(BLANK1) // Not actually blank - this is used all over the place @@ -129,19 +137,20 @@ DEF_ICON(PARTICLES) DEF_ICON(PHYSICS) DEF_ICON(SPEAKER) DEF_ICON(TEXTURE_SHADED) //ICON_BLANK041 -DEF_ICON(BLANK042) -DEF_ICON(BLANK043) -DEF_ICON(BLANK044) -DEF_ICON(BLANK045) -DEF_ICON(BLANK046) -DEF_ICON(BLANK047) -DEF_ICON(BLANK048) -DEF_ICON(BLANK049) -DEF_ICON(BLANK050) -DEF_ICON(BLANK051) -DEF_ICON(BLANK052) -DEF_ICON(BLANK052b) - +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK042) + DEF_ICON(BLANK043) + DEF_ICON(BLANK044) + DEF_ICON(BLANK045) + DEF_ICON(BLANK046) + DEF_ICON(BLANK047) + DEF_ICON(BLANK048) + DEF_ICON(BLANK049) + DEF_ICON(BLANK050) + DEF_ICON(BLANK051) + DEF_ICON(BLANK052) + DEF_ICON(BLANK052b) +#endif /* EDITORS */ DEF_ICON(VIEW3D) DEF_ICON(IPO) @@ -163,13 +172,15 @@ DEF_ICON(LOGIC) DEF_ICON(CONSOLE) DEF_ICON(PREFERENCES) DEF_ICON(ASSET_MANAGER) -DEF_ICON(BLANK057) -DEF_ICON(BLANK058) -DEF_ICON(BLANK059) -DEF_ICON(BLANK060) -DEF_ICON(BLANK061) -DEF_ICON(BLANK061b) - +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK057) + DEF_ICON(BLANK058) + DEF_ICON(BLANK059) + DEF_ICON(BLANK060) + DEF_ICON(BLANK061) + DEF_ICON(BLANK061b) +#endif + /* MODES */ DEF_ICON(OBJECT_DATAMODE) // XXX fix this up DEF_ICON(EDITMODE_HLT) @@ -181,22 +192,24 @@ DEF_ICON(SCULPTMODE_HLT) DEF_ICON(POSE_HLT) DEF_ICON(PARTICLEMODE) DEF_ICON(LIGHTPAINT) -DEF_ICON(BLANK063) -DEF_ICON(BLANK064) -DEF_ICON(BLANK065) -DEF_ICON(BLANK066) -DEF_ICON(BLANK067) -DEF_ICON(BLANK068) -DEF_ICON(BLANK069) -DEF_ICON(BLANK070) -DEF_ICON(BLANK071) -DEF_ICON(BLANK072) -DEF_ICON(BLANK073) -DEF_ICON(BLANK074) -DEF_ICON(BLANK075) -DEF_ICON(BLANK076) -DEF_ICON(BLANK077) -DEF_ICON(BLANK077b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK063) + DEF_ICON(BLANK064) + DEF_ICON(BLANK065) + DEF_ICON(BLANK066) + DEF_ICON(BLANK067) + DEF_ICON(BLANK068) + DEF_ICON(BLANK069) + DEF_ICON(BLANK070) + DEF_ICON(BLANK071) + DEF_ICON(BLANK072) + DEF_ICON(BLANK073) + DEF_ICON(BLANK074) + DEF_ICON(BLANK075) + DEF_ICON(BLANK076) + DEF_ICON(BLANK077) + DEF_ICON(BLANK077b) +#endif /* DATA */ DEF_ICON(SCENE_DATA) @@ -221,10 +234,14 @@ DEF_ICON(BONE_DATA) DEF_ICON(CONSTRAINT) DEF_ICON(SHAPEKEY_DATA) DEF_ICON(CONSTRAINT_BONE) -DEF_ICON(BLANK079) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK079) +#endif DEF_ICON(PACKAGE) DEF_ICON(UGLYPACKAGE) -DEF_ICON(BLANK079b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK079b) +#endif /* DATA */ DEF_ICON(BRUSH_DATA) @@ -238,49 +255,57 @@ DEF_ICON(EMPTY_DATA) DEF_ICON(SETTINGS) DEF_ICON(RENDER_ANIMATION) DEF_ICON(RENDER_STILL) -DEF_ICON(BLANK080F) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK080F) +#endif DEF_ICON(BOIDS) DEF_ICON(STRANDS) DEF_ICON(LIBRARY_DATA_INDIRECT) DEF_ICON(GREASEPENCIL) -DEF_ICON(BLANK083) -DEF_ICON(BLANK084) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK083) + DEF_ICON(BLANK084) +#endif DEF_ICON(GROUP_BONE) DEF_ICON(GROUP_VERTEX) DEF_ICON(GROUP_VCOL) DEF_ICON(GROUP_UVS) -DEF_ICON(BLANK089) -DEF_ICON(BLANK090) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK089) + DEF_ICON(BLANK090) +#endif DEF_ICON(RNA) DEF_ICON(RNA_ADD) /* available */ -DEF_ICON(BLANK092) -DEF_ICON(BLANK093) -DEF_ICON(BLANK094) -DEF_ICON(BLANK095) -DEF_ICON(BLANK096) -DEF_ICON(BLANK097) -DEF_ICON(BLANK098) -DEF_ICON(BLANK099) -DEF_ICON(BLANK100) -DEF_ICON(BLANK101) -DEF_ICON(BLANK102) -DEF_ICON(BLANK103) -DEF_ICON(BLANK104) -DEF_ICON(BLANK105) -DEF_ICON(BLANK106) -DEF_ICON(BLANK107) -DEF_ICON(BLANK108) -DEF_ICON(BLANK109) -DEF_ICON(BLANK110) -DEF_ICON(BLANK111) -DEF_ICON(BLANK112) -DEF_ICON(BLANK113) -DEF_ICON(BLANK114) -DEF_ICON(BLANK115) -DEF_ICON(BLANK116) -DEF_ICON(BLANK116b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK092) + DEF_ICON(BLANK093) + DEF_ICON(BLANK094) + DEF_ICON(BLANK095) + DEF_ICON(BLANK096) + DEF_ICON(BLANK097) + DEF_ICON(BLANK098) + DEF_ICON(BLANK099) + DEF_ICON(BLANK100) + DEF_ICON(BLANK101) + DEF_ICON(BLANK102) + DEF_ICON(BLANK103) + DEF_ICON(BLANK104) + DEF_ICON(BLANK105) + DEF_ICON(BLANK106) + DEF_ICON(BLANK107) + DEF_ICON(BLANK108) + DEF_ICON(BLANK109) + DEF_ICON(BLANK110) + DEF_ICON(BLANK111) + DEF_ICON(BLANK112) + DEF_ICON(BLANK113) + DEF_ICON(BLANK114) + DEF_ICON(BLANK115) + DEF_ICON(BLANK116) + DEF_ICON(BLANK116b) +#endif /* OUTLINER */ DEF_ICON(OUTLINER_OB_EMPTY) @@ -293,22 +318,26 @@ DEF_ICON(OUTLINER_OB_CAMERA) DEF_ICON(OUTLINER_OB_ARMATURE) DEF_ICON(OUTLINER_OB_FONT) DEF_ICON(OUTLINER_OB_SURFACE) -DEF_ICON(BLANK119) -DEF_ICON(BLANK120) -DEF_ICON(BLANK121) -DEF_ICON(BLANK122) -DEF_ICON(BLANK123) -DEF_ICON(BLANK124) -DEF_ICON(BLANK125) -DEF_ICON(BLANK126) -DEF_ICON(BLANK127) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK119) + DEF_ICON(BLANK120) + DEF_ICON(BLANK121) + DEF_ICON(BLANK122) + DEF_ICON(BLANK123) + DEF_ICON(BLANK124) + DEF_ICON(BLANK125) + DEF_ICON(BLANK126) + DEF_ICON(BLANK127) +#endif DEF_ICON(RESTRICT_VIEW_OFF) DEF_ICON(RESTRICT_VIEW_ON) DEF_ICON(RESTRICT_SELECT_OFF) DEF_ICON(RESTRICT_SELECT_ON) DEF_ICON(RESTRICT_RENDER_OFF) DEF_ICON(RESTRICT_RENDER_ON) -DEF_ICON(BLANK127b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK127b) +#endif /* OUTLINER */ DEF_ICON(OUTLINER_DATA_EMPTY) @@ -322,21 +351,23 @@ DEF_ICON(OUTLINER_DATA_ARMATURE) DEF_ICON(OUTLINER_DATA_FONT) DEF_ICON(OUTLINER_DATA_SURFACE) DEF_ICON(OUTLINER_DATA_POSE) -DEF_ICON(BLANK129) -DEF_ICON(BLANK130) -DEF_ICON(BLANK131) -DEF_ICON(BLANK132) -DEF_ICON(BLANK133) -DEF_ICON(BLANK134) -DEF_ICON(BLANK135) -DEF_ICON(BLANK136) -DEF_ICON(BLANK137) -DEF_ICON(BLANK138) -DEF_ICON(BLANK139) -DEF_ICON(BLANK140) -DEF_ICON(BLANK141) -DEF_ICON(BLANK142) -DEF_ICON(BLANK142b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK129) + DEF_ICON(BLANK130) + DEF_ICON(BLANK131) + DEF_ICON(BLANK132) + DEF_ICON(BLANK133) + DEF_ICON(BLANK134) + DEF_ICON(BLANK135) + DEF_ICON(BLANK136) + DEF_ICON(BLANK137) + DEF_ICON(BLANK138) + DEF_ICON(BLANK139) + DEF_ICON(BLANK140) + DEF_ICON(BLANK141) + DEF_ICON(BLANK142) + DEF_ICON(BLANK142b) +#endif /* PRIMITIVES */ DEF_ICON(MESH_PLANE) @@ -349,22 +380,28 @@ DEF_ICON(MESH_MONKEY) DEF_ICON(MESH_CYLINDER) DEF_ICON(MESH_TORUS) DEF_ICON(MESH_CONE) -DEF_ICON(BLANK610) -DEF_ICON(BLANK611) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK610) + DEF_ICON(BLANK611) +#endif DEF_ICON(LAMP_POINT) DEF_ICON(LAMP_SUN) DEF_ICON(LAMP_SPOT) DEF_ICON(LAMP_HEMI) DEF_ICON(LAMP_AREA) -DEF_ICON(BLANK617) -DEF_ICON(BLANK618) -DEF_ICON(BLANK619) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK617) + DEF_ICON(BLANK618) + DEF_ICON(BLANK619) +#endif DEF_ICON(META_PLANE) DEF_ICON(META_CUBE) DEF_ICON(META_BALL) DEF_ICON(META_ELLIPSOID) DEF_ICON(META_CAPSULE) -DEF_ICON(BLANK625) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK625) +#endif /* PRIMITIVES */ DEF_ICON(SURFACE_NCURVE) @@ -373,26 +410,30 @@ DEF_ICON(SURFACE_NSURFACE) DEF_ICON(SURFACE_NCYLINDER) DEF_ICON(SURFACE_NSPHERE) DEF_ICON(SURFACE_NTORUS) -DEF_ICON(BLANK636) -DEF_ICON(BLANK637) -DEF_ICON(BLANK638) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK636) + DEF_ICON(BLANK637) + DEF_ICON(BLANK638) +#endif DEF_ICON(CURVE_BEZCURVE) DEF_ICON(CURVE_BEZCIRCLE) DEF_ICON(CURVE_NCURVE) DEF_ICON(CURVE_NCIRCLE) DEF_ICON(CURVE_PATH) -DEF_ICON(BLANK644) -DEF_ICON(BLANK645) -DEF_ICON(BLANK646) -DEF_ICON(BLANK647) -DEF_ICON(BLANK648) -DEF_ICON(BLANK649) -DEF_ICON(BLANK650) -DEF_ICON(BLANK651) -DEF_ICON(BLANK652) -DEF_ICON(BLANK653) -DEF_ICON(BLANK654) -DEF_ICON(BLANK655) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK644) + DEF_ICON(BLANK645) + DEF_ICON(BLANK646) + DEF_ICON(BLANK647) + DEF_ICON(BLANK648) + DEF_ICON(BLANK649) + DEF_ICON(BLANK650) + DEF_ICON(BLANK651) + DEF_ICON(BLANK652) + DEF_ICON(BLANK653) + DEF_ICON(BLANK654) + DEF_ICON(BLANK655) +#endif /* EMPTY */ DEF_ICON(FORCE_FORCE) @@ -407,104 +448,106 @@ DEF_ICON(FORCE_CURVE) DEF_ICON(FORCE_BOID) DEF_ICON(FORCE_TURBULENCE) DEF_ICON(FORCE_DRAG) -DEF_ICON(BLANK672) -DEF_ICON(BLANK673) -DEF_ICON(BLANK674) -DEF_ICON(BLANK675) -DEF_ICON(BLANK676) -DEF_ICON(BLANK677) -DEF_ICON(BLANK678) -DEF_ICON(BLANK679) -DEF_ICON(BLANK680) -DEF_ICON(BLANK681) -DEF_ICON(BLANK682) -DEF_ICON(BLANK683) -DEF_ICON(BLANK684) -DEF_ICON(BLANK685) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK672) + DEF_ICON(BLANK673) + DEF_ICON(BLANK674) + DEF_ICON(BLANK675) + DEF_ICON(BLANK676) + DEF_ICON(BLANK677) + DEF_ICON(BLANK678) + DEF_ICON(BLANK679) + DEF_ICON(BLANK680) + DEF_ICON(BLANK681) + DEF_ICON(BLANK682) + DEF_ICON(BLANK683) + DEF_ICON(BLANK684) + DEF_ICON(BLANK685) /* EMPTY */ -DEF_ICON(BLANK690) -DEF_ICON(BLANK691) -DEF_ICON(BLANK692) -DEF_ICON(BLANK693) -DEF_ICON(BLANK694) -DEF_ICON(BLANK695) -DEF_ICON(BLANK696) -DEF_ICON(BLANK697) -DEF_ICON(BLANK698) -DEF_ICON(BLANK699) -DEF_ICON(BLANK700) -DEF_ICON(BLANK701) -DEF_ICON(BLANK702) -DEF_ICON(BLANK703) -DEF_ICON(BLANK704) -DEF_ICON(BLANK705) -DEF_ICON(BLANK706) -DEF_ICON(BLANK707) -DEF_ICON(BLANK708) -DEF_ICON(BLANK709) -DEF_ICON(BLANK710) -DEF_ICON(BLANK711) -DEF_ICON(BLANK712) -DEF_ICON(BLANK713) -DEF_ICON(BLANK714) -DEF_ICON(BLANK715) + DEF_ICON(BLANK690) + DEF_ICON(BLANK691) + DEF_ICON(BLANK692) + DEF_ICON(BLANK693) + DEF_ICON(BLANK694) + DEF_ICON(BLANK695) + DEF_ICON(BLANK696) + DEF_ICON(BLANK697) + DEF_ICON(BLANK698) + DEF_ICON(BLANK699) + DEF_ICON(BLANK700) + DEF_ICON(BLANK701) + DEF_ICON(BLANK702) + DEF_ICON(BLANK703) + DEF_ICON(BLANK704) + DEF_ICON(BLANK705) + DEF_ICON(BLANK706) + DEF_ICON(BLANK707) + DEF_ICON(BLANK708) + DEF_ICON(BLANK709) + DEF_ICON(BLANK710) + DEF_ICON(BLANK711) + DEF_ICON(BLANK712) + DEF_ICON(BLANK713) + DEF_ICON(BLANK714) + DEF_ICON(BLANK715) /* EMPTY */ -DEF_ICON(BLANK720) -DEF_ICON(BLANK721) -DEF_ICON(BLANK722) -DEF_ICON(BLANK733) -DEF_ICON(BLANK734) -DEF_ICON(BLANK735) -DEF_ICON(BLANK736) -DEF_ICON(BLANK737) -DEF_ICON(BLANK738) -DEF_ICON(BLANK739) -DEF_ICON(BLANK740) -DEF_ICON(BLANK741) -DEF_ICON(BLANK742) -DEF_ICON(BLANK743) -DEF_ICON(BLANK744) -DEF_ICON(BLANK745) -DEF_ICON(BLANK746) -DEF_ICON(BLANK747) -DEF_ICON(BLANK748) -DEF_ICON(BLANK749) -DEF_ICON(BLANK750) -DEF_ICON(BLANK751) -DEF_ICON(BLANK752) -DEF_ICON(BLANK753) -DEF_ICON(BLANK754) -DEF_ICON(BLANK755) + DEF_ICON(BLANK720) + DEF_ICON(BLANK721) + DEF_ICON(BLANK722) + DEF_ICON(BLANK733) + DEF_ICON(BLANK734) + DEF_ICON(BLANK735) + DEF_ICON(BLANK736) + DEF_ICON(BLANK737) + DEF_ICON(BLANK738) + DEF_ICON(BLANK739) + DEF_ICON(BLANK740) + DEF_ICON(BLANK741) + DEF_ICON(BLANK742) + DEF_ICON(BLANK743) + DEF_ICON(BLANK744) + DEF_ICON(BLANK745) + DEF_ICON(BLANK746) + DEF_ICON(BLANK747) + DEF_ICON(BLANK748) + DEF_ICON(BLANK749) + DEF_ICON(BLANK750) + DEF_ICON(BLANK751) + DEF_ICON(BLANK752) + DEF_ICON(BLANK753) + DEF_ICON(BLANK754) + DEF_ICON(BLANK755) /* EMPTY */ -DEF_ICON(BLANK760) -DEF_ICON(BLANK761) -DEF_ICON(BLANK762) -DEF_ICON(BLANK763) -DEF_ICON(BLANK764) -DEF_ICON(BLANK765) -DEF_ICON(BLANK766) -DEF_ICON(BLANK767) -DEF_ICON(BLANK768) -DEF_ICON(BLANK769) -DEF_ICON(BLANK770) -DEF_ICON(BLANK771) -DEF_ICON(BLANK772) -DEF_ICON(BLANK773) -DEF_ICON(BLANK774) -DEF_ICON(BLANK775) -DEF_ICON(BLANK776) -DEF_ICON(BLANK777) -DEF_ICON(BLANK778) -DEF_ICON(BLANK779) -DEF_ICON(BLANK780) -DEF_ICON(BLANK781) -DEF_ICON(BLANK782) -DEF_ICON(BLANK783) -DEF_ICON(BLANK784) -DEF_ICON(BLANK785) + DEF_ICON(BLANK760) + DEF_ICON(BLANK761) + DEF_ICON(BLANK762) + DEF_ICON(BLANK763) + DEF_ICON(BLANK764) + DEF_ICON(BLANK765) + DEF_ICON(BLANK766) + DEF_ICON(BLANK767) + DEF_ICON(BLANK768) + DEF_ICON(BLANK769) + DEF_ICON(BLANK770) + DEF_ICON(BLANK771) + DEF_ICON(BLANK772) + DEF_ICON(BLANK773) + DEF_ICON(BLANK774) + DEF_ICON(BLANK775) + DEF_ICON(BLANK776) + DEF_ICON(BLANK777) + DEF_ICON(BLANK778) + DEF_ICON(BLANK779) + DEF_ICON(BLANK780) + DEF_ICON(BLANK781) + DEF_ICON(BLANK782) + DEF_ICON(BLANK783) + DEF_ICON(BLANK784) + DEF_ICON(BLANK785) +#endif /* MODIFIERS */ DEF_ICON(MODIFIER) @@ -542,25 +585,27 @@ DEF_ICON(MOD_MULTIRES) DEF_ICON(MOD_SMOKE) DEF_ICON(MOD_SOLIDIFY) DEF_ICON(MOD_SCREW) -DEF_ICON(BLANK160) -DEF_ICON(BLANK161) -DEF_ICON(BLANK162) -DEF_ICON(BLANK163) -DEF_ICON(BLANK164) -DEF_ICON(BLANK165) -DEF_ICON(BLANK166) -DEF_ICON(BLANK167) -DEF_ICON(BLANK168) -DEF_ICON(BLANK169) -DEF_ICON(BLANK170) -DEF_ICON(BLANK171) -DEF_ICON(BLANK172) -DEF_ICON(BLANK173) -DEF_ICON(BLANK174) -DEF_ICON(BLANK175) -DEF_ICON(BLANK176) -DEF_ICON(BLANK177) -DEF_ICON(BLANK177b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK160) + DEF_ICON(BLANK161) + DEF_ICON(BLANK162) + DEF_ICON(BLANK163) + DEF_ICON(BLANK164) + DEF_ICON(BLANK165) + DEF_ICON(BLANK166) + DEF_ICON(BLANK167) + DEF_ICON(BLANK168) + DEF_ICON(BLANK169) + DEF_ICON(BLANK170) + DEF_ICON(BLANK171) + DEF_ICON(BLANK172) + DEF_ICON(BLANK173) + DEF_ICON(BLANK174) + DEF_ICON(BLANK175) + DEF_ICON(BLANK176) + DEF_ICON(BLANK177) + DEF_ICON(BLANK177b) +#endif /* ANIMATION */ DEF_ICON(REC) @@ -573,7 +618,9 @@ DEF_ICON(NEXT_KEYFRAME) DEF_ICON(PLAY_AUDIO) DEF_ICON(PLAY_REVERSE) DEF_ICON(PREVIEW_RANGE) -DEF_ICON(BLANK180) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK180) +#endif DEF_ICON(PMARKER_ACT) DEF_ICON(PMARKER_SEL) DEF_ICON(PMARKER) @@ -581,56 +628,64 @@ DEF_ICON(MARKER_HLT) DEF_ICON(MARKER) DEF_ICON(SPACE2) // XXX DEF_ICON(SPACE3) // XXX -DEF_ICON(BLANK181) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK181) +#endif DEF_ICON(KEY_DEHLT) DEF_ICON(KEY_HLT) DEF_ICON(MUTE_IPO_OFF) DEF_ICON(MUTE_IPO_ON) -DEF_ICON(BLANK182) -DEF_ICON(BLANK183) -DEF_ICON(BLANK183b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK182) + DEF_ICON(BLANK183) + DEF_ICON(BLANK183b) /* available */ -DEF_ICON(BLANK184) -DEF_ICON(BLANK185) -DEF_ICON(BLANK186) -DEF_ICON(BLANK187) -DEF_ICON(BLANK188) -DEF_ICON(BLANK189) -DEF_ICON(BLANK190) -DEF_ICON(BLANK191) -DEF_ICON(BLANK192) -DEF_ICON(BLANK193) -DEF_ICON(BLANK194) -DEF_ICON(BLANK195) -DEF_ICON(BLANK196) -DEF_ICON(BLANK197) -DEF_ICON(BLANK198) -DEF_ICON(BLANK199) -DEF_ICON(BLANK200) -DEF_ICON(BLANK201) -DEF_ICON(BLANK202) -DEF_ICON(BLANK203) -DEF_ICON(BLANK204) -DEF_ICON(BLANK205) -DEF_ICON(BLANK206) -DEF_ICON(BLANK207) -DEF_ICON(BLANK208) -DEF_ICON(BLANK208b) + DEF_ICON(BLANK184) + DEF_ICON(BLANK185) + DEF_ICON(BLANK186) + DEF_ICON(BLANK187) + DEF_ICON(BLANK188) + DEF_ICON(BLANK189) + DEF_ICON(BLANK190) + DEF_ICON(BLANK191) + DEF_ICON(BLANK192) + DEF_ICON(BLANK193) + DEF_ICON(BLANK194) + DEF_ICON(BLANK195) + DEF_ICON(BLANK196) + DEF_ICON(BLANK197) + DEF_ICON(BLANK198) + DEF_ICON(BLANK199) + DEF_ICON(BLANK200) + DEF_ICON(BLANK201) + DEF_ICON(BLANK202) + DEF_ICON(BLANK203) + DEF_ICON(BLANK204) + DEF_ICON(BLANK205) + DEF_ICON(BLANK206) + DEF_ICON(BLANK207) + DEF_ICON(BLANK208) + DEF_ICON(BLANK208b) +#endif /* EDITING */ DEF_ICON(VERTEXSEL) DEF_ICON(EDGESEL) DEF_ICON(FACESEL) -DEF_ICON(BLANK209) -DEF_ICON(BLANK210) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK209) + DEF_ICON(BLANK210) +#endif DEF_ICON(ROTATE) DEF_ICON(CURSOR) DEF_ICON(ROTATECOLLECTION) DEF_ICON(ROTATECENTER) DEF_ICON(ROTACTIVE) DEF_ICON(ALIGN) -DEF_ICON(BLANK211) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK211) +#endif DEF_ICON(SMOOTHCURVE) DEF_ICON(SPHERECURVE) DEF_ICON(ROOTCURVE) @@ -641,7 +696,9 @@ DEF_ICON(RNDCURVE) DEF_ICON(PROP_OFF) DEF_ICON(PROP_ON) DEF_ICON(PROP_CON) -DEF_ICON(BLANK212) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK212) +#endif DEF_ICON(PARTICLE_POINT) DEF_ICON(PARTICLE_TIP) DEF_ICON(PARTICLE_PATH) @@ -659,7 +716,9 @@ DEF_ICON(SNAP_VERTEX) DEF_ICON(SNAP_EDGE) DEF_ICON(SNAP_FACE) DEF_ICON(SNAP_VOLUME) -DEF_ICON(BLANK220) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK220) +#endif DEF_ICON(STICKY_UVS_LOC) DEF_ICON(STICKY_UVS_DISABLE) DEF_ICON(STICKY_UVS_VERT) @@ -667,40 +726,48 @@ DEF_ICON(CLIPUV_DEHLT) DEF_ICON(CLIPUV_HLT) DEF_ICON(SNAP_PEEL_OBJECT) DEF_ICON(GRID) -DEF_ICON(BLANK221) -DEF_ICON(BLANK222) -DEF_ICON(BLANK224) -DEF_ICON(BLANK225) -DEF_ICON(BLANK226) -DEF_ICON(BLANK226b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK221) + DEF_ICON(BLANK222) + DEF_ICON(BLANK224) + DEF_ICON(BLANK225) + DEF_ICON(BLANK226) + DEF_ICON(BLANK226b) +#endif /* EDITING */ DEF_ICON(PASTEDOWN) DEF_ICON(COPYDOWN) DEF_ICON(PASTEFLIPUP) DEF_ICON(PASTEFLIPDOWN) -DEF_ICON(BLANK227) -DEF_ICON(BLANK228) -DEF_ICON(BLANK229) -DEF_ICON(BLANK230) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK227) + DEF_ICON(BLANK228) + DEF_ICON(BLANK229) + DEF_ICON(BLANK230) +#endif DEF_ICON(SNAP_SURFACE) -DEF_ICON(BLANK232) -DEF_ICON(BLANK233) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK232) + DEF_ICON(BLANK233) +#endif DEF_ICON(RETOPO) DEF_ICON(UV_VERTEXSEL) DEF_ICON(UV_EDGESEL) DEF_ICON(UV_FACESEL) DEF_ICON(UV_ISLANDSEL) DEF_ICON(UV_SYNC_SELECT) -DEF_ICON(BLANK240) -DEF_ICON(BLANK241) -DEF_ICON(BLANK242) -DEF_ICON(BLANK243) -DEF_ICON(BLANK244) -DEF_ICON(BLANK245) -DEF_ICON(BLANK246) -DEF_ICON(BLANK247) -DEF_ICON(BLANK247b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK240) + DEF_ICON(BLANK241) + DEF_ICON(BLANK242) + DEF_ICON(BLANK243) + DEF_ICON(BLANK244) + DEF_ICON(BLANK245) + DEF_ICON(BLANK246) + DEF_ICON(BLANK247) + DEF_ICON(BLANK247b) +#endif /* 3D VIEW */ DEF_ICON(BBOX) @@ -708,13 +775,19 @@ DEF_ICON(WIRE) DEF_ICON(SOLID) DEF_ICON(SMOOTH) DEF_ICON(POTATO) -DEF_ICON(BLANK248) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK248) +#endif DEF_ICON(ORTHO) -DEF_ICON(BLANK249) -DEF_ICON(BLANK250) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK249) + DEF_ICON(BLANK250) +#endif DEF_ICON(LOCKVIEW_OFF) DEF_ICON(LOCKVIEW_ON) -DEF_ICON(BLANK251) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK251) +#endif DEF_ICON(AXIS_SIDE) DEF_ICON(AXIS_FRONT) DEF_ICON(AXIS_TOP) @@ -724,39 +797,41 @@ DEF_ICON(NDOF_FLY) DEF_ICON(NDOF_TRANS) DEF_ICON(LAYER_USED) DEF_ICON(LAYER_ACTIVE) -DEF_ICON(BLANK254) -DEF_ICON(BLANK255) -DEF_ICON(BLANK256) -DEF_ICON(BLANK257) -DEF_ICON(BLANK257b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK254) + DEF_ICON(BLANK255) + DEF_ICON(BLANK256) + DEF_ICON(BLANK257) + DEF_ICON(BLANK257b) /* available */ -DEF_ICON(BLANK258) -DEF_ICON(BLANK259) -DEF_ICON(BLANK260) -DEF_ICON(BLANK261) -DEF_ICON(BLANK262) -DEF_ICON(BLANK263) -DEF_ICON(BLANK264) -DEF_ICON(BLANK265) -DEF_ICON(BLANK266) -DEF_ICON(BLANK267) -DEF_ICON(BLANK268) -DEF_ICON(BLANK269) -DEF_ICON(BLANK270) -DEF_ICON(BLANK271) -DEF_ICON(BLANK272) -DEF_ICON(BLANK273) -DEF_ICON(BLANK274) -DEF_ICON(BLANK275) -DEF_ICON(BLANK276) -DEF_ICON(BLANK277) -DEF_ICON(BLANK278) -DEF_ICON(BLANK279) -DEF_ICON(BLANK280) -DEF_ICON(BLANK281) -DEF_ICON(BLANK282) -DEF_ICON(BLANK282b) + DEF_ICON(BLANK258) + DEF_ICON(BLANK259) + DEF_ICON(BLANK260) + DEF_ICON(BLANK261) + DEF_ICON(BLANK262) + DEF_ICON(BLANK263) + DEF_ICON(BLANK264) + DEF_ICON(BLANK265) + DEF_ICON(BLANK266) + DEF_ICON(BLANK267) + DEF_ICON(BLANK268) + DEF_ICON(BLANK269) + DEF_ICON(BLANK270) + DEF_ICON(BLANK271) + DEF_ICON(BLANK272) + DEF_ICON(BLANK273) + DEF_ICON(BLANK274) + DEF_ICON(BLANK275) + DEF_ICON(BLANK276) + DEF_ICON(BLANK277) + DEF_ICON(BLANK278) + DEF_ICON(BLANK279) + DEF_ICON(BLANK280) + DEF_ICON(BLANK281) + DEF_ICON(BLANK282) + DEF_ICON(BLANK282b) +#endif /* FILE SELECT */ DEF_ICON(SORTALPHA) @@ -767,13 +842,17 @@ DEF_ICON(LONGDISPLAY) DEF_ICON(SHORTDISPLAY) DEF_ICON(GHOST) DEF_ICON(IMGDISPLAY) -DEF_ICON(BLANK284) -DEF_ICON(BLANK285) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK284) + DEF_ICON(BLANK285) +#endif DEF_ICON(BOOKMARKS) DEF_ICON(FONTPREVIEW) DEF_ICON(FILTER) DEF_ICON(NEWFOLDER) -DEF_ICON(BLANK285F) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK285F) +#endif DEF_ICON(FILE_PARENT) DEF_ICON(FILE_REFRESH) DEF_ICON(FILE_FOLDER) @@ -784,34 +863,38 @@ DEF_ICON(FILE_MOVIE) DEF_ICON(FILE_SCRIPT) DEF_ICON(FILE_SOUND) DEF_ICON(FILE_FONT) -DEF_ICON(BLANK291b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK291b) /* available */ -DEF_ICON(BLANK292) -DEF_ICON(BLANK293) -DEF_ICON(BLANK294) -DEF_ICON(BLANK295) -DEF_ICON(BLANK296) -DEF_ICON(BLANK297) -DEF_ICON(BLANK298) -DEF_ICON(BLANK299) -DEF_ICON(BLANK300) -DEF_ICON(BLANK301) -DEF_ICON(BLANK302) -DEF_ICON(BLANK303) -DEF_ICON(BLANK304) -DEF_ICON(BLANK305) -DEF_ICON(BLANK306) + DEF_ICON(BLANK292) + DEF_ICON(BLANK293) + DEF_ICON(BLANK294) + DEF_ICON(BLANK295) + DEF_ICON(BLANK296) + DEF_ICON(BLANK297) + DEF_ICON(BLANK298) + DEF_ICON(BLANK299) + DEF_ICON(BLANK300) + DEF_ICON(BLANK301) + DEF_ICON(BLANK302) + DEF_ICON(BLANK303) + DEF_ICON(BLANK304) + DEF_ICON(BLANK305) + DEF_ICON(BLANK306) +#endif DEF_ICON(BACK) DEF_ICON(FORWARD) -DEF_ICON(BLANK309) -DEF_ICON(BLANK310) -DEF_ICON(BLANK311) -DEF_ICON(BLANK312) -DEF_ICON(BLANK313) -DEF_ICON(BLANK314) -DEF_ICON(BLANK315) -DEF_ICON(BLANK316) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK309) + DEF_ICON(BLANK310) + DEF_ICON(BLANK311) + DEF_ICON(BLANK312) + DEF_ICON(BLANK313) + DEF_ICON(BLANK314) + DEF_ICON(BLANK315) + DEF_ICON(BLANK316) +#endif DEF_ICON(DISK_DRIVE) /* SHADING / TEXT */ @@ -823,10 +906,12 @@ DEF_ICON(HAIR) DEF_ICON(ALIASED) DEF_ICON(ANTIALIASED) DEF_ICON(MAT_SPHERE_SKY) -DEF_ICON(BLANK319) -DEF_ICON(BLANK320) -DEF_ICON(BLANK321) -DEF_ICON(BLANK322) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK319) + DEF_ICON(BLANK320) + DEF_ICON(BLANK321) + DEF_ICON(BLANK322) +#endif DEF_ICON(WORDWRAP_OFF) DEF_ICON(WORDWRAP_ON) DEF_ICON(SYNTAX_OFF) @@ -834,13 +919,15 @@ DEF_ICON(SYNTAX_ON) DEF_ICON(LINENUMBERS_OFF) DEF_ICON(LINENUMBERS_ON) DEF_ICON(SCRIPTPLUGINS) // XXX CREATE NEW -DEF_ICON(BLANK323) -DEF_ICON(BLANK324) -DEF_ICON(BLANK325) -DEF_ICON(BLANK326) -DEF_ICON(BLANK327) -DEF_ICON(BLANK328) -DEF_ICON(BLANK328b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK323) + DEF_ICON(BLANK324) + DEF_ICON(BLANK325) + DEF_ICON(BLANK326) + DEF_ICON(BLANK327) + DEF_ICON(BLANK328) + DEF_ICON(BLANK328b) +#endif /* SEQUENCE / IMAGE EDITOR */ DEF_ICON(SEQ_SEQUENCER) @@ -849,26 +936,30 @@ DEF_ICON(SEQ_LUMA_WAVEFORM) DEF_ICON(SEQ_CHROMA_SCOPE) DEF_ICON(SEQ_HISTOGRAM) DEF_ICON(SEQ_SPLITVIEW) -DEF_ICON(BLANK331) -DEF_ICON(BLANK332) -DEF_ICON(BLANK333) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK331) + DEF_ICON(BLANK332) + DEF_ICON(BLANK333) +#endif DEF_ICON(IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC DEF_ICON(IMAGE_RGB_ALPHA) DEF_ICON(IMAGE_ALPHA) DEF_ICON(IMAGE_ZDEPTH) DEF_ICON(IMAGEFILE) -DEF_ICON(BLANK336) -DEF_ICON(BLANK337) -DEF_ICON(BLANK338) -DEF_ICON(BLANK339) -DEF_ICON(BLANK340) -DEF_ICON(BLANK341) -DEF_ICON(BLANK342) -DEF_ICON(BLANK343) -DEF_ICON(BLANK344) -DEF_ICON(BLANK345) -DEF_ICON(BLANK346) -DEF_ICON(BLANK346b) +#ifndef DEF_ICON_BLANK_SKIP + DEF_ICON(BLANK336) + DEF_ICON(BLANK337) + DEF_ICON(BLANK338) + DEF_ICON(BLANK339) + DEF_ICON(BLANK340) + DEF_ICON(BLANK341) + DEF_ICON(BLANK342) + DEF_ICON(BLANK343) + DEF_ICON(BLANK344) + DEF_ICON(BLANK345) + DEF_ICON(BLANK346) + DEF_ICON(BLANK346b) +#endif /* brush icons */ diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 0e2eea0b942..009c7d29102 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -241,34 +241,30 @@ typedef struct SpaceImage { ListBase regionbase; /* storage of regions for inactive spaces */ int spacetype; - float blockscale; - short blockhandler[8]; - + int flag; + struct Image *image; struct ImageUser iuser; + struct CurveMapping *cumap; - struct CurveMapping *cumap; - short menunr, imanr, pad2; + struct Scopes scopes; /* histogram waveform and vectorscope */ + struct Histogram sample_line_hist; /* sample line histogram */ + + struct bGPdata *gpd; /* grease pencil data */ + + float cursor[2]; /* UV editor 2d cursor */ + float xof, yof; /* user defined offset, image is centered */ + float zoom; /* user defined zoom level */ + float centx, centy; /* storage for offset while render drawing */ + short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */ - int flag; - short imtypenr, lock; - short pin, pad3; + short imtypenr; + short lock; + short pin; char dt_uv; /* UV draw type */ char sticky; /* sticky selection type */ char dt_uvstretch; char around; - float cursor[2]; /* UV editor 2d cursor */ - - float xof, yof; /* user defined offset, image is centered */ - float zoom, pad4; /* user defined zoom level */ - float centx, centy; /* storage for offset while render drawing */ - - struct bGPdata *gpd; /* grease pencil data */ - - struct Scopes scopes; /* histogram waveform and vectorscope */ - - struct Histogram sample_line_hist; /* sample line histogram */ - } SpaceImage; typedef struct SpaceNla { diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index dfecd016f45..2e4c6e5a7b7 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -65,12 +65,13 @@ static PointerRNA rna_uiItemO(uiLayout *layout, char *opname, char *name, int ic #else +#define DEF_ICON_BLANK_SKIP #define DEF_ICON(name) {ICON_##name, (#name), 0, (#name), ""}, #define DEF_VICO(name) {VICO_##name, (#name), 0, (#name), ""}, - static EnumPropertyItem icon_items[] = { #include "UI_icons.h" {0, NULL, 0, NULL, NULL}}; +#undef DEF_ICON_BLANK_SKIP #undef DEF_ICON #undef DEF_VICO From b9c3bfa053fb3e86ad00a5f551a96f715e4a6818 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Nov 2010 22:04:41 +0000 Subject: [PATCH 125/163] bugfix [#24392] 2d Image paint editor: no clone/smear/soften tools etc --- release/scripts/ui/space_image.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/release/scripts/ui/space_image.py b/release/scripts/ui/space_image.py index d46220ad7b9..93516457dd6 100644 --- a/release/scripts/ui/space_image.py +++ b/release/scripts/ui/space_image.py @@ -660,6 +660,26 @@ class IMAGE_PT_tools_brush_texture(BrushButtonsPanel, bpy.types.Panel): col.template_ID_preview(brush, "texture", new="texture.new", rows=3, cols=8) +class IMAGE_PT_tools_brush_tool(BrushButtonsPanel, bpy.types.Panel): + bl_label = "Tool" + bl_options = {'DEFAULT_CLOSED'} + + def draw(self, context): + layout = self.layout + settings = context.tool_settings.image_paint + brush = settings.brush + + col = layout.column(align=True) + + col.prop(brush, "imagepaint_tool", expand=False, text="") + + row = layout.row(align=True) + row.prop(brush, "use_paint_sculpt", text="", icon='SCULPTMODE_HLT') + row.prop(brush, "use_paint_vertex", text="", icon='VPAINT_HLT') + row.prop(brush, "use_paint_weight", text="", icon='WPAINT_HLT') + row.prop(brush, "use_paint_texture", text="", icon='TPAINT_HLT') + + class IMAGE_PT_paint_stroke(BrushButtonsPanel, bpy.types.Panel): bl_label = "Paint Stroke" bl_options = {'DEFAULT_CLOSED'} From 6b767b8018cbf5ca5657cad842271d8d6327ddd0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 01:56:02 +0000 Subject: [PATCH 126/163] fix [#24499] Consistency Issue with LassoSelect/ExtendOption Added extend option to lasso. also... - selecting bones wasn't checking their layer of if they were hidden in a number of places. - fixed memory leak. small unrealed changes - added PBONE_VISIBLE macro - renamed functions used for paint selectoin from *_tface to paintface_*. sine they no longer have anything todo with tface's. - removed scanfill include from BLI_blenlib.h, this is only used in very few places and quite specific. Noticed lasso select is broken for metaballs and face mask mode but this has been the case for a while, will look into it next. --- source/blender/blenkernel/BKE_armature.h | 4 + source/blender/blenkernel/intern/displist.c | 1 + source/blender/blenlib/BLI_blenlib.h | 2 - .../blender/editors/armature/editarmature.c | 33 +- source/blender/editors/armature/poseobject.c | 4 +- source/blender/editors/include/ED_armature.h | 7 +- source/blender/editors/include/ED_mesh.h | 11 +- source/blender/editors/include/ED_particle.h | 3 +- source/blender/editors/mesh/editface.c | 94 +-- source/blender/editors/mesh/editmesh_tools.c | 1 + .../blender/editors/physics/particle_edit.c | 28 +- .../blender/editors/screen/screen_context.c | 5 +- .../editors/sculpt_paint/paint_utils.c | 7 +- .../blender/editors/space_outliner/outliner.c | 4 +- .../editors/space_view3d/drawarmature.c | 4 +- .../editors/space_view3d/view3d_edit.c | 2 +- .../editors/space_view3d/view3d_select.c | 706 ++++++++++-------- .../editors/transform/transform_conversions.c | 2 +- .../editors/transform/transform_manipulator.c | 2 +- source/creator/CMakeLists.txt | 7 +- source/creator/creator.c | 4 +- 21 files changed, 499 insertions(+), 432 deletions(-) diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h index 06e24431df4..eacb61d122c 100644 --- a/source/blender/blenkernel/BKE_armature.h +++ b/source/blender/blenkernel/BKE_armature.h @@ -119,6 +119,10 @@ typedef struct Mat4 { Mat4 *b_bone_spline_setup(struct bPoseChannel *pchan, int rest); +/* like EBONE_VISIBLE */ +#define PBONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P)) +#define _BONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P)) + #ifdef __cplusplus } #endif diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index d1830cb8243..a8032f5a40d 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -45,6 +45,7 @@ #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_editVert.h" +#include "BLI_scanfill.h" #include "BKE_global.h" #include "BKE_displist.h" diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h index 3028161734c..8423c07e7c9 100644 --- a/source/blender/blenlib/BLI_blenlib.h +++ b/source/blender/blenlib/BLI_blenlib.h @@ -84,8 +84,6 @@ extern "C" { #include "BLI_rect.h" -#include "BLI_scanfill.h" - #include "BLI_noise.h" /** diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 0be27e943f4..cab2fdc547f 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -1359,8 +1359,9 @@ static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_ for (curbone= arm->edbo->first; curbone; curbone= curbone->next) { if (curbone->parent == pabone) { if (use_visibility) { - if ((arm->layer & curbone->layer) && !(pabone->flag & BONE_HIDDEN_A)) + if ((arm->layer & curbone->layer) && !(pabone->flag & BONE_HIDDEN_A)) { chbone = curbone; + } } else chbone = curbone; @@ -1887,7 +1888,7 @@ void ARMATURE_OT_delete(wmOperatorType *ot) * toggle==2: only active tag * toggle==3: swap (no test) */ -void ED_armature_deselectall(Object *obedit, int toggle) +void ED_armature_deselect_all(Object *obedit, int toggle) { bArmature *arm= obedit->data; EditBone *eBone; @@ -1914,7 +1915,7 @@ void ED_armature_deselectall(Object *obedit, int toggle) for (eBone=arm->edbo->first;eBone;eBone=eBone->next) { if (sel==3) { /* invert selection of bone */ - if ((arm->layer & eBone->layer) && (eBone->flag & BONE_HIDDEN_A)==0) { + if(EBONE_VISIBLE(arm, eBone)) { eBone->flag ^= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); if(arm->act_edbone==eBone) arm->act_edbone= NULL; @@ -1922,7 +1923,7 @@ void ED_armature_deselectall(Object *obedit, int toggle) } else if (sel==1) { /* select bone */ - if(arm->layer & eBone->layer && (eBone->flag & BONE_HIDDEN_A)==0) { + if(EBONE_VISIBLE(arm, eBone)) { eBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); if(eBone->parent) eBone->parent->flag |= (BONE_TIPSEL); @@ -1940,6 +1941,20 @@ void ED_armature_deselectall(Object *obedit, int toggle) ED_armature_sync_selection(arm->edbo); } +void ED_armature_deselect_all_visible(Object *obedit) +{ + bArmature *arm= obedit->data; + EditBone *ebone; + + for (ebone= arm->edbo->first; ebone; ebone= ebone->next) { + /* first and foremost, bone must be visible and selected */ + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE)==0) { + ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); + } + } + + ED_armature_sync_selection(arm->edbo); +} /* context: editmode armature in view3d */ int mouse_armature(bContext *C, short mval[2], int extend) @@ -1958,7 +1973,7 @@ int mouse_armature(bContext *C, short mval[2], int extend) if (nearBone) { if (!extend) - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* by definition the non-root connected bones have no root point drawn, so a root selection needs to be delivered to the parent tip */ @@ -2355,7 +2370,7 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d) mul_m3_m3m3(totmat, obmat, viewmat); invert_m3_m3(imat, totmat); - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* Create a bone */ bone= ED_armature_edit_bone_add(obedit->data, "Bone"); @@ -2408,7 +2423,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op)) to_root= 1; } - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* we re-use code for mirror editing... */ flipbone= NULL; @@ -3575,7 +3590,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) mul_m3_m3m3(totmat, obmat, viewmat); invert_m3_m3(imat, totmat); - ED_armature_deselectall(obedit, 0); + ED_armature_deselect_all(obedit, 0); /* Create a bone */ bone= ED_armature_edit_bone_add(obedit->data, name); @@ -4441,7 +4456,7 @@ void ED_pose_deselectall (Object *ob, int test) /* Determine if we're selecting or deselecting */ if (test==1) { for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - if ((pchan->bone->layer & arm->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pchan->bone)) { if (pchan->bone->flag & BONE_SELECTED) break; } diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c index 217a83c3b31..1bfbe869e6b 100644 --- a/source/blender/editors/armature/poseobject.c +++ b/source/blender/editors/armature/poseobject.c @@ -439,7 +439,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) if (pchan->parent == NULL) continue; else pabone= pchan->parent->bone; - if ((arm->layer & pabone->layer) && !(pabone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pabone)) { if (!add_to_sel) curbone->flag &= ~BONE_SELECTED; pabone->flag |= BONE_SELECTED; arm->act_bone= pabone; @@ -452,7 +452,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op) if (pchan->child == NULL) continue; else chbone = pchan->child->bone; - if ((arm->layer & chbone->layer) && !(chbone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, chbone)) { if (!add_to_sel) curbone->flag &= ~BONE_SELECTED; chbone->flag |= BONE_SELECTED; arm->act_bone= chbone; diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 32fe10783a7..3e16cae5527 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -91,8 +91,8 @@ typedef struct EditBone #define BONESEL_NOSEL (1<<31) /* Indicates a negative number */ /* useful macros */ -#define EBONE_VISIBLE(arm, ebone) ((arm->layer & ebone->layer) && !(ebone->flag & BONE_HIDDEN_A)) -#define EBONE_EDITABLE(ebone) ((ebone->flag & BONE_SELECTED) && !(ebone->flag & BONE_EDITMODE_LOCKED)) +#define EBONE_VISIBLE(arm, ebone) (((arm)->layer & (ebone)->layer) && !((ebone)->flag & BONE_HIDDEN_A)) +#define EBONE_EDITABLE(ebone) (((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & BONE_EDITMODE_LOCKED)) /* used in bone_select_hierachy() */ #define BONE_SELECT_PARENT 0 @@ -107,7 +107,8 @@ void ED_keymap_armature(struct wmKeyConfig *keyconf); void ED_armature_from_edit(struct Object *obedit); void ED_armature_to_edit(struct Object *ob); void ED_armature_edit_free(struct Object *ob); -void ED_armature_deselectall(struct Object *obedit, int toggle); +void ED_armature_deselect_all(struct Object *obedit, int toggle); +void ED_armature_deselect_all_visible(struct Object *obedit); int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer, short hits, short extend); diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h index 22779fbba0b..cf0334ce6b3 100644 --- a/source/blender/editors/include/ED_mesh.h +++ b/source/blender/editors/include/ED_mesh.h @@ -181,12 +181,13 @@ void EM_deselect_by_material(struct EditMesh *em, int index); void EM_automerge(struct Scene *scene, struct Object *obedit, int update); /* editface.c */ +void paintface_flush_flags(struct Object *ob); struct MTFace *EM_get_active_mtface(struct EditMesh *em, struct EditFace **act_efa, struct MCol **mcol, int sloppy); -int face_select(struct bContext *C, struct Object *ob, short mval[2], int extend); -void face_borderselect(struct bContext *C, struct Object *ob, struct rcti *rect, int select, int extend); -void selectall_tface(struct Object *ob, int action); -void select_linked_tfaces(struct bContext *C, struct Object *ob, short mval[2], int mode); -int minmax_tface(struct Object *ob, float *min, float *max); +int paintface_mouse_select(struct bContext *C, struct Object *ob, short mval[2], int extend); +int do_paintface_box_select(struct ViewContext *vc, struct rcti *rect, int select, int extend); +void paintface_deselect_all_visible(struct Object *ob, int action, short flush_flags); +void paintface_select_linked(struct bContext *C, struct Object *ob, short mval[2], int mode); +int paintface_minmax(struct Object *ob, float *min, float *max); /* object_vgroup.c */ diff --git a/source/blender/editors/include/ED_particle.h b/source/blender/editors/include/ED_particle.h index 87aa7ca9195..f3b65b343ef 100644 --- a/source/blender/editors/include/ED_particle.h +++ b/source/blender/editors/include/ED_particle.h @@ -59,7 +59,8 @@ void PE_update_object(struct Scene *scene, struct Object *ob, int useflag); int PE_mouse_particles(struct bContext *C, short *mval, int extend); int PE_border_select(struct bContext *C, struct rcti *rect, int select, int extend); int PE_circle_select(struct bContext *C, int selecting, short *mval, float rad); -int PE_lasso_select(struct bContext *C, short mcords[][2], short moves, short select); +int PE_lasso_select(struct bContext *C, short mcords[][2], short moves, short extend, short select); +void PE_deselect_all_visible(struct PTCacheEdit *edit); /* undo */ void PE_undo_push(struct Scene *scene, char *str); diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index 81e19e5db3f..b34f024e9fb 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -67,14 +67,9 @@ /* own include */ #include "mesh_intern.h" -/* ***************** XXX **************** */ -static int pupmenu(const char *UNUSED(dummy)) {return 0;} -/* ***************** XXX **************** */ - - /* copy the face flags, most importantly selection from the mesh to the final derived mesh, * use in object mode when selecting faces (while painting) */ -void object_facesel_flush_dm(Object *ob) +void paintface_flush_flags(Object *ob) { Mesh *me= get_mesh(ob); DerivedMesh *dm= ob->derivedFinal; @@ -162,7 +157,7 @@ MTFace *EM_get_active_mtface(EditMesh *em, EditFace **act_efa, MCol **mcol, int return NULL; } -void reveal_tface(Scene *scene) +void paintface_unhide(Scene *scene) { Mesh *me; MFace *mface; @@ -181,11 +176,10 @@ void reveal_tface(Scene *scene) mface++; } - object_facesel_flush_dm(OBACT); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + paintface_flush_flags(OBACT); } -void hide_tface(Scene *scene) +void paintface_hide(Scene *scene) { Mesh *me; MFace *mface; @@ -196,7 +190,7 @@ void hide_tface(Scene *scene) if(me==0 || me->totface==0) return; if(alt) { - reveal_tface(scene); + paintface_unhide(scene); return; } @@ -217,8 +211,7 @@ void hide_tface(Scene *scene) mface++; } - object_facesel_flush_dm(OBACT); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + paintface_flush_flags(OBACT); } /* Set tface seams based on edge data, uses hash table to find seam edges. */ @@ -236,7 +229,7 @@ static void hash_add_face(EdgeHash *ehash, MFace *mf) } -void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index) +static void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index) { MFace *mf; int a, doit=1, mark=0; @@ -338,12 +331,9 @@ void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index) } MEM_freeN(linkflag); - - // BIF_undo_push("Select linked UV face"); - // object_tface_flags_changed(OBACT, 0); } -void select_linked_tfaces(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]), int mode) +void paintface_select_linked(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]), int mode) { Mesh *me; unsigned int index=0; @@ -361,10 +351,11 @@ void select_linked_tfaces(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]) select_linked_tfaces_with_seams(mode, me, index); - object_facesel_flush_dm(ob); + paintface_flush_flags(ob); } -void selectall_tface(Object *ob, int action) +/* note: caller needs to run paintface_flush_flags(ob) after this */ +void paintface_deselect_all_visible(Object *ob, int action, short flush_flags) { Mesh *me; MFace *mface; @@ -406,11 +397,12 @@ void selectall_tface(Object *ob, int action) mface++; } - object_facesel_flush_dm(ob); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + if(flush_flags) { + paintface_flush_flags(ob); + } } -void selectswap_tface(Scene *scene) +void paintface_select_swap(Scene *scene) { Mesh *me; MFace *mface; @@ -430,11 +422,10 @@ void selectswap_tface(Scene *scene) mface++; } - object_facesel_flush_dm(OBACT); -// XXX notifier! object_tface_flags_changed(OBACT, 0); + paintface_flush_flags(OBACT); } -int minmax_tface(Object *ob, float *min, float *max) +int paintface_minmax(Object *ob, float *min, float *max) { Mesh *me= get_mesh(ob); MFace *mf; @@ -672,7 +663,7 @@ int edgetag_shortest_path(Scene *scene, EditMesh *em, EditEdge *source, EditEdge } /* *************************************** */ - +#if 0 static void seam_edgehash_insert_face(EdgeHash *ehash, MFace *mf) { BLI_edgehash_insert(ehash, mf->v1, mf->v2, NULL); @@ -739,11 +730,10 @@ void seam_mark_clear_tface(Scene *scene, short mode) // unwrap_lscm(1); me->drawflag |= ME_DRAWSEAMS; - -// XXX notifier! object_tface_flags_changed(OBACT, 1); } +#endif -int face_select(struct bContext *C, Object *ob, short mval[2], int extend) +int paintface_mouse_select(struct bContext *C, Object *ob, short mval[2], int extend) { Mesh *me; MFace *mface, *msel; @@ -780,48 +770,38 @@ int face_select(struct bContext *C, Object *ob, short mval[2], int extend) /* image window redraw */ - object_facesel_flush_dm(ob); -// XXX notifier! object_tface_flags_changed(OBACT, 1); + paintface_flush_flags(ob); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data); ED_region_tag_redraw(CTX_wm_region(C)); // XXX - should redraw all 3D views return 1; } -void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select, int extend) +int do_paintface_box_select(ViewContext *vc, rcti *rect, int select, int extend) { Mesh *me; MFace *mface; struct ImBuf *ibuf; unsigned int *rt; - int a, sx, sy, index; + int a, index; char *selar; - - ViewContext vc; - view3d_set_viewcontext(C, &vc); + int sx= rect->xmax-rect->xmin+1; + int sy= rect->ymax-rect->ymin+1; - me= get_mesh(ob); - if(me==0) return; - if(me->totface==0) return; + me= get_mesh(vc->obact); + + if(me==NULL || me->totface==0 || sx*sy <= 0) + return OPERATOR_CANCELLED; selar= MEM_callocN(me->totface+1, "selar"); - sx= (rect->xmax-rect->xmin+1); - sy= (rect->ymax-rect->ymin+1); - if(sx*sy<=0) return; + if (extend == 0 && select) + paintface_deselect_all_visible(vc->obact, SEL_DESELECT, FALSE); - if (extend == 0 && select) { - mface= me->mface; - for(a=1; a<=me->totface; a++, mface++) { - if((mface->flag & ME_HIDE) == 0) - mface->flag &= ~ME_FACE_SEL; - } - } - - view3d_validate_backbuf(&vc); + view3d_validate_backbuf(vc); ibuf = IMB_allocImBuf(sx,sy,32,IB_rect); rt = ibuf->rect; - glReadPixels(rect->xmin+vc.ar->winrct.xmin, rect->ymin+vc.ar->winrct.ymin, sx, sy, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + glReadPixels(rect->xmin+vc->ar->winrct.xmin, rect->ymin+vc->ar->winrct.ymin, sx, sy, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); if(ENDIAN_ORDER==B_ENDIAN) IMB_convert_rgba_to_abgr(ibuf); a= sx*sy; @@ -847,11 +827,11 @@ void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select, i IMB_freeImBuf(ibuf); MEM_freeN(selar); - -// XXX notifier! object_tface_flags_changed(OBACT, 0); #ifdef __APPLE__ glReadBuffer(GL_BACK); #endif - - object_facesel_flush_dm(ob); + + paintface_flush_flags(vc->obact); + + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 7fbdef7b391..eb450c7434b 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -57,6 +57,7 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise #include "BLI_ghash.h" #include "BLI_linklist.h" #include "BLI_heap.h" +#include "BLI_scanfill.h" #include "BKE_context.h" #include "BKE_depsgraph.h" diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c index fed4b8d9722..e654b868622 100644 --- a/source/blender/editors/physics/particle_edit.c +++ b/source/blender/editors/physics/particle_edit.c @@ -1513,6 +1513,17 @@ void PARTICLE_OT_select_linked(wmOperatorType *ot) } /************************ border select operator ************************/ +void PE_deselect_all_visible(PTCacheEdit *edit) +{ + POINT_P; KEY_K; + + LOOP_VISIBLE_POINTS { + LOOP_SELECTED_KEYS { + key->flag &= ~PEK_SELECT; + point->flag |= PEP_EDIT_RECALC; + } + } +} int PE_border_select(bContext *C, rcti *rect, int select, int extend) { @@ -1524,16 +1535,8 @@ int PE_border_select(bContext *C, rcti *rect, int select, int extend) if(!PE_start_edit(edit)) return OPERATOR_CANCELLED; - if (extend == 0 && select) { - POINT_P; KEY_K; - - LOOP_VISIBLE_POINTS { - LOOP_SELECTED_KEYS { - key->flag &= ~PEK_SELECT; - point->flag |= PEP_EDIT_RECALC; - } - } - } + if (extend == 0 && select) + PE_deselect_all_visible(edit); PE_set_view3d_data(C, &data); data.rect= rect; @@ -1574,7 +1577,7 @@ int PE_circle_select(bContext *C, int selecting, short *mval, float rad) /************************ lasso select operator ************************/ -int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select) +int PE_lasso_select(bContext *C, short mcords[][2], short moves, short extend, short select) { Scene *scene= CTX_data_scene(C); Object *ob= CTX_data_active_object(C); @@ -1590,6 +1593,9 @@ int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select) if(!PE_start_edit(edit)) return OPERATOR_CANCELLED; + if (extend == 0 && select) + PE_deselect_all_visible(edit); + unit_m4(mat); LOOP_VISIBLE_POINTS { diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 08cc8ebaa2f..08962883ec3 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -36,6 +36,7 @@ #include "BKE_context.h" #include "BKE_utildefines.h" #include "BKE_action.h" +#include "BKE_armature.h" #include "BKE_sequencer.h" #include "RNA_access.h" @@ -234,7 +235,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (obpose && obpose->pose && arm) { for (pchan= obpose->pose->chanbase.first; pchan; pchan= pchan->next) { /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ - if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pchan->bone)) { CTX_data_list_add(result, &obpose->id, &RNA_PoseBone, pchan); } } @@ -250,7 +251,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (obpose && obpose->pose && arm) { for (pchan= obpose->pose->chanbase.first; pchan; pchan= pchan->next) { /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */ - if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, pchan->bone)) { if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone) CTX_data_list_add(result, &obpose->id, &RNA_PoseBone, pchan); } diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index e3a486a0fee..6e158fe2e66 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -235,7 +235,7 @@ void BRUSH_OT_curve_preset(wmOperatorType *ot) /* face-select ops */ static int paint_select_linked_exec(bContext *C, wmOperator *UNUSED(op)) { - select_linked_tfaces(C, CTX_data_active_object(C), NULL, 2); + paintface_select_linked(C, CTX_data_active_object(C), NULL, 2); ED_region_tag_redraw(CTX_wm_region(C)); return OPERATOR_FINISHED; } @@ -255,7 +255,7 @@ void PAINT_OT_face_select_linked(wmOperatorType *ot) static int paint_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event) { int mode= RNA_boolean_get(op->ptr, "extend") ? 1:0; - select_linked_tfaces(C, CTX_data_active_object(C), event->mval, mode); + paintface_select_linked(C, CTX_data_active_object(C), event->mval, mode); ED_region_tag_redraw(CTX_wm_region(C)); return OPERATOR_FINISHED; } @@ -277,7 +277,8 @@ void PAINT_OT_face_select_linked_pick(wmOperatorType *ot) static int face_select_all_exec(bContext *C, wmOperator *op) { - selectall_tface(CTX_data_active_object(C), RNA_enum_get(op->ptr, "action")); + Object *ob= CTX_data_active_object(C); + paintface_deselect_all_visible(ob, RNA_enum_get(op->ptr, "action"), TRUE); ED_region_tag_redraw(CTX_wm_region(C)); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 1f0725c5458..f73da37e1ef 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -2211,8 +2211,8 @@ static int tree_element_active_ebone(bContext *C, Scene *scene, TreeElement *te, if(set) { if(!(ebone->flag & BONE_HIDDEN_A)) { bArmature *arm= scene->obedit->data; - if(set==2) ED_armature_deselectall(scene->obedit, 2); // only clear active tag - else ED_armature_deselectall(scene->obedit, 0); // deselect + if(set==2) ED_armature_deselect_all(scene->obedit, 2); // only clear active tag + else ED_armature_deselect_all(scene->obedit, 0); // deselect ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL; arm->act_edbone= ebone; diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 33776abf4a0..8cfb11478be 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1979,7 +1979,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* catch exception for bone with hidden parent */ flag= eBone->flag; - if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) + if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent)) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ @@ -2018,7 +2018,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* catch exception for bone with hidden parent */ flag= eBone->flag; - if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) + if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent)) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index a70774f27ce..d706dc27404 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1432,7 +1432,7 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) /* like a loca } } else if (paint_facesel_test(ob)) { - ok= minmax_tface(ob, min, max); + ok= paintface_minmax(ob, min, max); } else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) { ok= PE_minmax(scene, min, max); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index e3212e8a3d1..bfc24e80f4c 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "DNA_armature_types.h" #include "DNA_curve_types.h" @@ -48,6 +49,7 @@ #include "BKE_context.h" #include "BKE_paint.h" +#include "BKE_armature.h" #include "BIF_gl.h" @@ -345,18 +347,21 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], bPoseChannel *pchan; float vec[3]; short sco1[2], sco2[2]; + bArmature *arm= ob->data; if(ob->type!=OB_ARMATURE || ob->pose==NULL) return; - + for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - mul_v3_m4v3(vec, ob->obmat, pchan->pose_head); - project_short(vc->ar, vec, sco1); - mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail); - project_short(vc->ar, vec, sco2); - - if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { - if(select) pchan->bone->flag |= BONE_SELECTED; - else pchan->bone->flag &= ~BONE_SELECTED; + if (PBONE_VISIBLE(arm, pchan->bone) && (pchan->bone->flag & BONE_UNSELECTABLE)==0) { + mul_v3_m4v3(vec, ob->obmat, pchan->pose_head); + project_short(vc->ar, vec, sco1); + mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail); + project_short(vc->ar, vec, sco2); + + if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if(select) pchan->bone->flag |= BONE_SELECTED; + else pchan->bone->flag &= ~BONE_SELECTED; + } } } @@ -368,11 +373,24 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], } } +static void object_deselect_all_visible(Scene *scene, View3D *v3d) +{ + Base *base; -static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short select) + for(base= scene->base.first; base; base= base->next) { + if(BASE_SELECTABLE(v3d, base)) { + ED_base_object_select(base, BA_DESELECT); + } + } +} + +static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Base *base; + if (extend == 0 && select) + object_deselect_all_visible(vc->scene, vc->v3d); + for(base= vc->scene->base.first; base; base= base->next) { if(BASE_SELECTABLE(vc->v3d, base)) { /* use this to avoid un-needed lasso lookups */ project_short(vc->ar, base->object->obmat[3], &base->sx); @@ -389,7 +407,7 @@ static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short mo } } -void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves) +static void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves) { short a; @@ -440,7 +458,7 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, in } } -static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { ViewContext vc; rcti *rect; short (*mcords)[2], moves, select, pass, done; } data; ToolSettings *ts= vc->scene->toolsettings; @@ -460,8 +478,11 @@ static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves data.done = 0; data.pass = 0; + if (extend == 0 && select) + EM_deselect_all(vc->em); + /* workaround: init mats first, EM_mask_init_backbuf_border can change - view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ + view matrix to pixel space, breaking edge select with backbuf. fixes bug [#20936] */ /* [#21018] breaks zbuf select. run below. only if bbsel fails */ /* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */ @@ -589,7 +610,7 @@ static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BP } } -static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { ViewContext *vc; short (*mcords)[2]; short moves; short select; } data; @@ -599,6 +620,9 @@ static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short move data.moves = moves; data.select = select; + if (extend == 0 && select) + CU_deselect_all(vc->obedit); + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data); } @@ -611,7 +635,7 @@ static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { short (*mcords)[2]; short moves; short select; } data; @@ -620,45 +644,52 @@ static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short mo data.moves = moves; data.select = select; + if (extend == 0 && select) + ED_setflagsLatt(vc->obedit, 0); + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data); } -static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { bArmature *arm= vc->obedit->data; EditBone *ebone; float vec[3]; short sco1[2], sco2[2], didpoint; int change= FALSE; - + + if (extend==0 && select) + ED_armature_deselect_all_visible(vc->obedit); + /* set editdata in vc */ for (ebone= arm->edbo->first; ebone; ebone=ebone->next) { - - mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head); - project_short(vc->ar, vec, sco1); - mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail); - project_short(vc->ar, vec, sco2); - - didpoint= 0; - if(lasso_inside(mcords, moves, sco1[0], sco1[1])) { - if(select) ebone->flag |= BONE_ROOTSEL; - else ebone->flag &= ~BONE_ROOTSEL; - didpoint= 1; - change= TRUE; - } - if(lasso_inside(mcords, moves, sco2[0], sco2[1])) { - if(select) ebone->flag |= BONE_TIPSEL; - else ebone->flag &= ~BONE_TIPSEL; - didpoint= 1; - change= TRUE; - } - /* if one of points selected, we skip the bone itself */ - if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { - if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; - else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - change= TRUE; + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE)==0) { + mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head); + project_short(vc->ar, vec, sco1); + mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail); + project_short(vc->ar, vec, sco2); + + didpoint= 0; + if(lasso_inside(mcords, moves, sco1[0], sco1[1])) { + if(select) ebone->flag |= BONE_ROOTSEL; + else ebone->flag &= ~BONE_ROOTSEL; + didpoint= 1; + change= TRUE; + } + if(lasso_inside(mcords, moves, sco2[0], sco2[1])) { + if(select) ebone->flag |= BONE_TIPSEL; + else ebone->flag &= ~BONE_TIPSEL; + didpoint= 1; + change= TRUE; + } + /* if one of points selected, we skip the bone itself */ + if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; + else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + change= TRUE; + } } } @@ -669,25 +700,28 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m } } -static void do_lasso_select_facemode(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob= vc->obact; Mesh *me= ob?ob->data:NULL; rcti rect; - if(me==NULL || me->mtface==NULL) return; - if(me->totface==0) return; - + if(me==NULL || me->mtface==NULL || me->totface) + return; + + if(extend==0 && select) + paintface_deselect_all_visible(ob, SEL_DESELECT, FALSE); /* flush selection at the end */ + em_vertoffs= me->totface+1; /* max index array */ - + lasso_select_boundbox(&rect, mcords, moves); EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); EM_backbuf_checkAndSelectTFaces(me, select); - + EM_free_backbuf(); - -// XXX object_tface_flags_changed(ob, 0); + + paintface_flush_flags(ob); } #if 0 @@ -721,31 +755,31 @@ static void do_lasso_select_node(short mcords[][2], short moves, short select) } #endif -void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short select) +static void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob = CTX_data_active_object(C); if(vc->obedit==NULL) { /* Object Mode */ if(paint_facesel_test(ob)) - do_lasso_select_facemode(vc, mcords, moves, select); + do_lasso_select_paintface(vc, mcords, moves, extend, select); else if(ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)) ; else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) - PE_lasso_select(C, mcords, moves, select); + PE_lasso_select(C, mcords, moves, extend, select); else { - do_lasso_select_objects(vc, mcords, moves, select); + do_lasso_select_objects(vc, mcords, moves, extend, select); WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene); } } else { /* Edit Mode */ if(vc->obedit->type==OB_MESH) - do_lasso_select_mesh(vc, mcords, moves, select); + do_lasso_select_mesh(vc, mcords, moves, extend, select); else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF) - do_lasso_select_curve(vc, mcords, moves, select); + do_lasso_select_curve(vc, mcords, moves, extend, select); else if(vc->obedit->type==OB_LATTICE) - do_lasso_select_lattice(vc, mcords, moves, select); + do_lasso_select_lattice(vc, mcords, moves, extend, select); else if(vc->obedit->type==OB_ARMATURE) - do_lasso_select_armature(vc, mcords, moves, select); + do_lasso_select_armature(vc, mcords, moves, extend, select); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc->obedit->data); } @@ -757,7 +791,7 @@ void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short static int view3d_lasso_select_exec(bContext *C, wmOperator *op) { ViewContext vc; - int select, i= 0; + int i= 0; short mcords[1024][2]; RNA_BEGIN(op->ptr, itemptr, "path") { @@ -772,13 +806,15 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op) RNA_END; if(i>1) { + short extend, select; view3d_operator_needs_opengl(C); /* setup view context for argument to callbacks */ view3d_set_viewcontext(C, &vc); + extend= RNA_boolean_get(op->ptr, "extend"); select= !RNA_boolean_get(op->ptr, "deselect"); - view3d_lasso_select(C, &vc, mcords, i, select); + view3d_lasso_select(C, &vc, mcords, i, extend, select); return OPERATOR_FINISHED; } @@ -801,6 +837,7 @@ void VIEW3D_OT_select_lasso(wmOperatorType *ot) RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items."); + RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first."); } @@ -1319,7 +1356,7 @@ static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoi } } } -static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext *vc; rcti *rect; int select; } data; @@ -1327,12 +1364,13 @@ static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int ext data.rect = rect; data.select = select; - if (extend == 0 && select) { + if (extend == 0 && select) CU_deselect_all(vc->obedit); - } ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ nurbs_foreachScreenVert(vc, do_nurbs_box_select__doSelect, &data); + + return OPERATOR_FINISHED; } static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, int y) @@ -1343,7 +1381,7 @@ static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, i bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext vc; rcti *rect; int select, pass, done; } data; @@ -1351,12 +1389,13 @@ static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int e data.rect = rect; data.select = select; - if (extend == 0 && select) { + if (extend == 0 && select) ED_setflagsLatt(vc->obedit, 0); - } ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data); + + return OPERATOR_FINISHED; } static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) @@ -1392,7 +1431,7 @@ static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int EM_select_face_fgon(data->vc.em, efa, data->select); } } -static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext vc; rcti *rect; short select, pass, done; } data; ToolSettings *ts= vc->scene->toolsettings; @@ -1405,9 +1444,7 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte data.done = 0; if (extend == 0 && select) - { EM_deselect_all(vc->em); - } /* workaround: init mats first, EM_mask_init_backbuf_border can change view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ @@ -1451,261 +1488,280 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte EM_free_backbuf(); EM_selectmode_flush(vc->em); + + return OPERATOR_FINISHED; +} + +static int do_meta_box_select(ViewContext *vc, rcti *rect, int select, int extend) +{ + MetaBall *mb = (MetaBall*)vc->obedit->data; + MetaElem *ml; + int a; + + unsigned int buffer[4*MAXPICKBUF]; + short hits; + + hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect); + + if (extend == 0 && select) { + for(ml= mb->editelems->first; ml; ml= ml->next) { + ml->flag &= ~SELECT; + } + } + + for(ml= mb->editelems->first; ml; ml= ml->next) { + for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) { + ml->flag |= MB_SCALE_RAD; + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + break; + } + if(ml->selcol2==buffer[ (4 * a) + 3 ]) { + ml->flag &= ~MB_SCALE_RAD; + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + break; + } + } + } + + return OPERATOR_FINISHED; +} + +static int do_armature_box_select(ViewContext *vc, rcti *rect, short select, short extend) +{ + bArmature *arm= vc->obedit->data; + EditBone *ebone; + int a; + + unsigned int buffer[4*MAXPICKBUF]; + short hits; + + hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect); + + /* clear flag we use to detect point was affected */ + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) + ebone->flag &= ~BONE_DONE; + + if (extend==0 && select) + ED_armature_deselect_all_visible(vc->obedit); + + /* first we only check points inside the border */ + for (a=0; aedbo, index & ~(BONESEL_ANY)); + if ((ebone->flag & BONE_UNSELECTABLE)==0) { + if (index & BONESEL_TIP) { + ebone->flag |= BONE_DONE; + if (select) ebone->flag |= BONE_TIPSEL; + else ebone->flag &= ~BONE_TIPSEL; + } + + if (index & BONESEL_ROOT) { + ebone->flag |= BONE_DONE; + if (select) ebone->flag |= BONE_ROOTSEL; + else ebone->flag &= ~BONE_ROOTSEL; + } + } + } + } + + /* now we have to flush tag from parents... */ + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) { + if(ebone->parent && (ebone->flag & BONE_CONNECTED)) { + if(ebone->parent->flag & BONE_DONE) + ebone->flag |= BONE_DONE; + } + } + + /* only select/deselect entire bones when no points where in the rect */ + for (a=0; aedbo, index & ~(BONESEL_ANY)); + if (index & BONESEL_BONE) { + if ((ebone->flag & BONE_UNSELECTABLE)==0) { + if(!(ebone->flag & BONE_DONE)) { + if (select) + ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); + else + ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); + } + } + } + } + } + + ED_armature_sync_selection(arm->edbo); + + return OPERATOR_CANCELLED; +} + +static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, int select, int extend) +{ + Bone *bone; + Object *ob= vc->obact; + unsigned int *vbuffer=NULL; /* selection buffer */ + unsigned int *col; /* color in buffer */ + int bone_only; + int bone_selected=0; + int totobj= MAXPICKBUF; // XXX solve later + short hits; + + if((ob) && (ob->mode & OB_MODE_POSE)) + bone_only= 1; + else + bone_only= 0; + + if (extend == 0 && select) { + if (bone_only) { + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { + if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) { + pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + } + } + CTX_DATA_END; + } else { + object_deselect_all_visible(vc->scene, vc->v3d); + } + } + + /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ + vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer"); + hits= view3d_opengl_select(vc, vbuffer, 4*(totobj+MAXPICKBUF), rect); + /* + LOGIC NOTES (theeth): + The buffer and ListBase have the same relative order, which makes the selection + very simple. Loop through both data sets at the same time, if the color + is the same as the object, we have a hit and can move to the next color + and object pair, if not, just move to the next object, + keeping the same color until we have a hit. + + The buffer order is defined by OGL standard, hopefully no stupid GFX card + does it incorrectly. + */ + + if (hits>0) { /* no need to loop if there's no hit */ + Base *base; + col = vbuffer + 3; + + for(base= vc->scene->base.first; base && hits; base= base->next) { + if(BASE_SELECTABLE(vc->v3d, base)) { + while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ + + if(*col & 0xFFFF0000) { /* we got a bone */ + bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); + if(bone) { + if(select) { + bone->flag |= BONE_SELECTED; + bone_selected=1; +// XXX select_actionchannel_by_name(base->object->action, bone->name, 1); + } + else { + bArmature *arm= base->object->data; + bone->flag &= ~BONE_SELECTED; +// XXX select_actionchannel_by_name(base->object->action, bone->name, 0); + if(arm->act_bone==bone) + arm->act_bone= NULL; + + } + } + } + else if(!bone_only) { + if (select) + ED_base_object_select(base, BA_SELECT); + else + ED_base_object_select(base, BA_DESELECT); + } + + col+=4; /* next color */ + hits--; + if(hits==0) break; + } + } + + if (bone_selected) { + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object); + } + } + + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene); + + } + MEM_freeN(vbuffer); + + return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED; } static int view3d_borderselect_exec(bContext *C, wmOperator *op) { ViewContext vc; - Scene *scene= CTX_data_scene(C); - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= sa->spacedata.first; - Object *obedit= CTX_data_edit_object(C); - Object *obact= CTX_data_active_object(C); rcti rect; - Base *base; - MetaElem *ml; - unsigned int buffer[4*MAXPICKBUF]; - int a, index; - int extend; - short hits, selecting; + short extend; + short select; + + int ret= OPERATOR_CANCELLED; view3d_operator_needs_opengl(C); - + /* setup view context for argument to callbacks */ view3d_set_viewcontext(C, &vc); - selecting= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); + select= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); rect.xmin= RNA_int_get(op->ptr, "xmin"); rect.ymin= RNA_int_get(op->ptr, "ymin"); rect.xmax= RNA_int_get(op->ptr, "xmax"); rect.ymax= RNA_int_get(op->ptr, "ymax"); extend = RNA_boolean_get(op->ptr, "extend"); - if(obedit==NULL && (paint_facesel_test(OBACT))) { - face_borderselect(C, obact, &rect, selecting, extend); - return OPERATOR_FINISHED; - } - else if(obedit==NULL && (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { - return PE_border_select(C, &rect, selecting, extend); - } - else if(obedit==NULL && (obact && obact->mode & OB_MODE_SCULPT)) - return OPERATOR_CANCELLED; - - if(obedit) { - if(obedit->type==OB_MESH) { - Mesh *me= obedit->data; - vc.em= me->edit_mesh; - do_mesh_box_select(&vc, &rect, selecting, extend); + if(vc.obedit) { + switch(vc.obedit->type) { + case OB_MESH: + vc.em= ((Mesh *)vc.obedit->data)->edit_mesh; + ret= do_mesh_box_select(&vc, &rect, select, extend); // if (EM_texFaceCheck()) - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); - - } - else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) { - do_nurbs_box_select(&vc, &rect, selecting, extend); - } - else if(obedit->type==OB_MBALL) { - MetaBall *mb = (MetaBall*)obedit->data; - hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - - if (extend == 0 && selecting) { - ml= mb->editelems->first; - - while(ml) { - ml->flag &= ~SELECT; - ml= ml->next; - } + if(ret & OPERATOR_FINISHED) { + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc.obedit->data); } - - ml= mb->editelems->first; - - while(ml) { - for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) { - ml->flag |= MB_SCALE_RAD; - if(selecting) ml->flag |= SELECT; - else ml->flag &= ~SELECT; - break; - } - if(ml->selcol2==buffer[ (4 * a) + 3 ]) { - ml->flag &= ~MB_SCALE_RAD; - if(selecting) ml->flag |= SELECT; - else ml->flag &= ~SELECT; - break; - } - } - ml= ml->next; + break; + case OB_CURVE: + case OB_SURF: + ret= do_nurbs_box_select(&vc, &rect, select, extend); + break; + case OB_MBALL: + ret= do_meta_box_select(&vc, &rect, select, extend); + break; + case OB_ARMATURE: + ret= do_armature_box_select(&vc, &rect, select, extend); + if(ret & OPERATOR_FINISHED) { + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); } - } - else if(obedit->type==OB_ARMATURE) { - bArmature *arm= obedit->data; - EditBone *ebone; - - /* clear flag we use to detect point was affected */ - for(ebone= arm->edbo->first; ebone; ebone= ebone->next) - ebone->flag &= ~BONE_DONE; - - if (extend==0 && selecting) { - /* Set the flags */ - CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { - /* ignore bone if selection can't change */ - if ((ebone->flag & BONE_UNSELECTABLE) == 0) { - ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); - } - } - CTX_DATA_END; - } - - hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - - /* first we only check points inside the border */ - for (a=0; aedbo, index & ~(BONESEL_ANY)); - if (index & BONESEL_TIP) { - ebone->flag |= BONE_DONE; - if (selecting) ebone->flag |= BONE_TIPSEL; - else ebone->flag &= ~BONE_TIPSEL; - } - - if (index & BONESEL_ROOT) { - ebone->flag |= BONE_DONE; - if (selecting) ebone->flag |= BONE_ROOTSEL; - else ebone->flag &= ~BONE_ROOTSEL; - } - } - } - - /* now we have to flush tag from parents... */ - for(ebone= arm->edbo->first; ebone; ebone= ebone->next) { - if(ebone->parent && (ebone->flag & BONE_CONNECTED)) { - if(ebone->parent->flag & BONE_DONE) - ebone->flag |= BONE_DONE; - } - } - - /* only select/deselect entire bones when no points where in the rect */ - for (a=0; aedbo, index & ~(BONESEL_ANY)); - if (index & BONESEL_BONE) { - if(!(ebone->flag & BONE_DONE)) { - if (selecting) - ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); - else - ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); - } - } - } - } - - ED_armature_sync_selection(arm->edbo); - WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); - } - else if(obedit->type==OB_LATTICE) { - do_lattice_box_select(&vc, &rect, selecting, extend); + break; + case OB_LATTICE: + ret= do_lattice_box_select(&vc, &rect, select, extend); + break; + default: + assert(!"border select on incorrect object type"); } } else { /* no editmode, unified for bones and objects */ - Bone *bone; - Object *ob= OBACT; - unsigned int *vbuffer=NULL; /* selection buffer */ - unsigned int *col; /* color in buffer */ - int bone_only; - int bone_selected=0; - int totobj= MAXPICKBUF; // XXX solve later - - if((ob) && (ob->mode & OB_MODE_POSE)) - bone_only= 1; - else - bone_only= 0; - - if (extend == 0 && selecting) { - base= FIRSTBASE; - - if (bone_only) { - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { - pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - } - CTX_DATA_END; - } else { - while(base) { - Base *next = base->next; - if(BASE_SELECTABLE(v3d, base)) { - ED_base_object_select(base, BA_DESELECT); - } - base= next; - } - } + if(vc.obact && vc.obact->mode & OB_MODE_SCULPT) { + /* pass */ } - - /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ - vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer"); - hits= view3d_opengl_select(&vc, vbuffer, 4*(totobj+MAXPICKBUF), &rect); - /* - LOGIC NOTES (theeth): - The buffer and ListBase have the same relative order, which makes the selection - very simple. Loop through both data sets at the same time, if the color - is the same as the object, we have a hit and can move to the next color - and object pair, if not, just move to the next object, - keeping the same color until we have a hit. - - The buffer order is defined by OGL standard, hopefully no stupid GFX card - does it incorrectly. - */ - - if (hits>0) { /* no need to loop if there's no hit */ - base= FIRSTBASE; - col = vbuffer + 3; - - while(base && hits) { - Base *next = base->next; - if(BASE_SELECTABLE(v3d, base)) { - while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ - - if(*col & 0xFFFF0000) { /* we got a bone */ - bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); - if(bone) { - if(selecting) { - bone->flag |= BONE_SELECTED; - bone_selected=1; -// XXX select_actionchannel_by_name(base->object->action, bone->name, 1); - } - else { - bArmature *arm= base->object->data; - bone->flag &= ~BONE_SELECTED; -// XXX select_actionchannel_by_name(base->object->action, bone->name, 0); - if(arm->act_bone==bone) - arm->act_bone= NULL; - - } - } - } - else if(!bone_only) { - if (selecting) - ED_base_object_select(base, BA_SELECT); - else - ED_base_object_select(base, BA_DESELECT); - } - - col+=4; /* next color */ - hits--; - if(hits==0) break; - } - } - - if (bone_selected) WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object); - - base= next; - } - - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); - + else if(vc.obact && paint_facesel_test(vc.obact)) { + ret= do_paintface_box_select(&vc, &rect, select, extend); + } + else if(vc.obact && vc.obact->mode & OB_MODE_PARTICLE_EDIT) { + ret= PE_border_select(C, &rect, select, extend); + } + else { /* object mode with none active */ + ret= do_object_pose_box_select(C, &vc, &rect, select, extend); } - MEM_freeN(vbuffer); } - return OPERATOR_FINISHED; + + return ret; } @@ -1764,7 +1820,7 @@ static int view3d_select_invoke(bContext *C, wmOperator *op, wmEvent *event) else if(obact && obact->mode & OB_MODE_PARTICLE_EDIT) return PE_mouse_particles(C, event->mval, extend); else if(obact && paint_facesel_test(obact)) - retval = face_select(C, obact, event->mval, extend); + retval = paintface_mouse_select(C, obact, event->mval, extend); else retval = mouse_select(C, event->mval, extend, center, enumerate); @@ -1829,7 +1885,7 @@ static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y } } -static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void mesh_circle_select(ViewContext *vc, int select, short *mval, float rad) { ToolSettings *ts= vc->scene->toolsettings; int bbsel; @@ -1841,14 +1897,14 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa vc->em= ((Mesh *)vc->obedit->data)->edit_mesh; data.vc = vc; - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; if(ts->selectmode & SCE_SELECT_VERTEX) { if(bbsel) { - EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectVerts(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1); } @@ -1856,7 +1912,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa if(ts->selectmode & SCE_SELECT_EDGE) { if (bbsel) { - EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectEdges(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0); } @@ -1864,7 +1920,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa if(ts->selectmode & SCE_SELECT_FACE) { if(bbsel) { - EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectFaces(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data); } @@ -1874,7 +1930,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa EM_selectmode_flush(vc->em); } -static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void paint_facesel_circle_select(ViewContext *vc, int select, short *mval, float rad) { Object *ob= vc->obact; Mesh *me = ob?ob->data:NULL; @@ -1884,10 +1940,8 @@ static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *m em_vertoffs= me->totface+1; /* max index array */ bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0)); - EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectTFaces(me, select==LEFTMOUSE); EM_free_backbuf(); - -// XXX object_tface_flags_changed(OBACT, 0); } } @@ -1923,13 +1977,13 @@ static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint } } } -static void nurbscurve_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void nurbscurve_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; /* set vc-> edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -1950,13 +2004,13 @@ static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void lattice_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void lattice_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; /* set vc-> edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -1989,7 +2043,7 @@ static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int } return 0; } -static void armature_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void armature_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; bArmature *arm= vc->obedit->data; @@ -1997,7 +2051,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, int change= FALSE; /* set vc->edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -2029,7 +2083,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, /* only if the endpoints didn't get selected, deal with the middle of the bone too */ // XXX should we just do this always? if ( (didpoint==0) && edge_inside_circle(mval[0], mval[1], rad, sco1[0], sco1[1], sco2[0], sco2[1]) ) { - if (selecting) + if (select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); @@ -2045,21 +2099,21 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, /** Callbacks for circle selection in Editmode */ -static void obedit_circle_select(ViewContext *vc, short selecting, short *mval, float rad) +static void obedit_circle_select(ViewContext *vc, short select, short *mval, float rad) { switch(vc->obedit->type) { case OB_MESH: - mesh_circle_select(vc, selecting, mval, rad); + mesh_circle_select(vc, select, mval, rad); break; case OB_CURVE: case OB_SURF: - nurbscurve_circle_select(vc, selecting, mval, rad); + nurbscurve_circle_select(vc, select, mval, rad); break; case OB_LATTICE: - lattice_circle_select(vc, selecting, mval, rad); + lattice_circle_select(vc, select, mval, rad); break; case OB_ARMATURE: - armature_circle_select(vc, selecting, mval, rad); + armature_circle_select(vc, select, mval, rad); break; default: return; @@ -2078,9 +2132,9 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int y= RNA_int_get(op->ptr, "y"); int radius= RNA_int_get(op->ptr, "radius"); int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); - int selecting; + int select; - selecting= (gesture_mode==GESTURE_MODAL_SELECT); + select= (gesture_mode==GESTURE_MODAL_SELECT); if(CTX_data_edit_object(C) || paint_facesel_test(obact) || (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { @@ -2094,22 +2148,22 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) mval[1]= y; if(CTX_data_edit_object(C)) { - obedit_circle_select(&vc, selecting, mval, (float)radius); + obedit_circle_select(&vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } else if(paint_facesel_test(obact)) { - paint_facesel_circle_select(&vc, selecting, mval, (float)radius); + paint_facesel_circle_select(&vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } else - return PE_circle_select(C, selecting, mval, (float)radius); + return PE_circle_select(C, select, mval, (float)radius); } else if(obact && obact->mode & OB_MODE_SCULPT) { return OPERATOR_CANCELLED; } else { Base *base; - selecting= selecting?BA_SELECT:BA_DESELECT; + select= select?BA_SELECT:BA_DESELECT; for(base= FIRSTBASE; base; base= base->next) { if(BASE_SELECTABLE(v3d, base)) { project_short(ar, base->object->obmat[3], &base->sx); @@ -2117,7 +2171,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int dx= base->sx-x; int dy= base->sy-y; if( dx*dx + dy*dy < radius*radius) - ED_base_object_select(base, selecting); + ED_base_object_select(base, select); } } } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 123db2ce65a..29496d2aa75 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -678,7 +678,7 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob) for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { bone = pchan->bone; - if ((bone->layer & arm->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) { + if (PBONE_VISIBLE(arm, bone)) { if ((bone->flag & BONE_SELECTED) && !(ob->proxy && pchan->bone->layer & arm->layer_protected)) bone->flag |= BONE_TRANSFORM; else diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 73b58b51ffc..b3dbf3c853a 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -316,7 +316,7 @@ int calc_manipulator_stats(const bContext *C) bArmature *arm= obedit->data; EditBone *ebo; for (ebo= arm->edbo->first; ebo; ebo=ebo->next){ - if(ebo->layer & arm->layer && !(ebo->flag & BONE_HIDDEN_A)) { + if(EBONE_VISIBLE(arm, ebo)) { if (ebo->flag & BONE_TIPSEL) { calc_tw_center(scene, ebo->tail); totsel++; diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index c661f6b2812..e093eb8cb65 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -40,8 +40,6 @@ INCLUDE_DIRECTORIES( ../blender/makesdna ../blender/gpu ../blender/windowmanager - ../kernel/gen_messaging - ../kernel/gen_system ) IF(WIN32) @@ -78,6 +76,11 @@ IF(WITH_PYTHON) ENDIF(WITH_PYTHON) IF(WITH_GAMEENGINE) + INCLUDE_DIRECTORIES( + ../kernel/gen_messaging + ../kernel/gen_system + ) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) diff --git a/source/creator/creator.c b/source/creator/creator.c index 4a217a147fa..aad70ea9178 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -57,8 +57,7 @@ #include "BLI_args.h" #include "BLI_threads.h" - -#include "GEN_messaging.h" +#include "BLI_scanfill.h" // for BLI_setErrorCallBack, TODO, move elsewhere #include "DNA_ID.h" #include "DNA_scene_types.h" @@ -98,6 +97,7 @@ /* for passing information between creator and gameengine */ #ifdef WITH_GAMEENGINE +#include "GEN_messaging.h" #include "SYS_System.h" #else /* dummy */ #define SYS_SystemHandle int From bcd2d60557126b3e6c6f5593cfbd8c393273690f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 02:28:11 +0000 Subject: [PATCH 127/163] added metaball lasso select. --- .../editors/space_view3d/view3d_select.c | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index bfc24e80f4c..3071a1ffeea 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -700,6 +700,34 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m } } + + + +static void do_lasso_select_meta(ViewContext *vc, short mcords[][2], short moves, short extend, short select) +{ + MetaBall *mb = (MetaBall*)vc->obedit->data; + MetaElem *ml; + float vec[3]; + short sco[2]; + + if (extend == 0 && select) { + for(ml= mb->editelems->first; ml; ml= ml->next) { + ml->flag &= ~SELECT; + } + } + + for(ml= mb->editelems->first; ml; ml= ml->next) { + + mul_v3_m4v3(vec, vc->obedit->obmat, &ml->x); + project_short(vc->ar, vec, sco); + + if(lasso_inside(mcords, moves, sco[0], sco[1])) { + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + } + } +} + static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob= vc->obact; @@ -772,15 +800,27 @@ static void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], } } else { /* Edit Mode */ - if(vc->obedit->type==OB_MESH) + switch(vc->obedit->type) { + case OB_MESH: do_lasso_select_mesh(vc, mcords, moves, extend, select); - else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF) + break; + case OB_CURVE: + case OB_SURF: do_lasso_select_curve(vc, mcords, moves, extend, select); - else if(vc->obedit->type==OB_LATTICE) + break; + case OB_LATTICE: do_lasso_select_lattice(vc, mcords, moves, extend, select); - else if(vc->obedit->type==OB_ARMATURE) + break; + case OB_ARMATURE: do_lasso_select_armature(vc, mcords, moves, extend, select); - + break; + case OB_MBALL: + do_lasso_select_meta(vc, mcords, moves, extend, select); + break; + default: + assert(!"lasso select on incorrect object type"); + } + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc->obedit->data); } } @@ -1514,13 +1554,13 @@ static int do_meta_box_select(ViewContext *vc, rcti *rect, int select, int exten if(ml->selcol1==buffer[ (4 * a) + 3 ]) { ml->flag |= MB_SCALE_RAD; if(select) ml->flag |= SELECT; - else ml->flag &= ~SELECT; + else ml->flag &= ~SELECT; break; } if(ml->selcol2==buffer[ (4 * a) + 3 ]) { ml->flag &= ~MB_SCALE_RAD; if(select) ml->flag |= SELECT; - else ml->flag &= ~SELECT; + else ml->flag &= ~SELECT; break; } } From 44f3f03f0290eb6f089fd75cbfa8be9abe0f64dc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 02:50:05 +0000 Subject: [PATCH 128/163] paint/face mask lasso select was checking for uv coords, which isnt needed, also make a mistake on this check last commit. --- source/blender/editors/space_view3d/view3d_select.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 3071a1ffeea..2159aef0695 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -733,8 +733,8 @@ static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short Object *ob= vc->obact; Mesh *me= ob?ob->data:NULL; rcti rect; - - if(me==NULL || me->mtface==NULL || me->totface) + + if(me==NULL || me->totface==0) return; if(extend==0 && select) From 3db9233ae5a0a18a8d48edea1176c810303926e6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 03:45:09 +0000 Subject: [PATCH 129/163] bugfix [#24483] Link/Append File Browser Typo --- source/blender/makesdna/DNA_space_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 009c7d29102..0ca31983ac5 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -157,7 +157,7 @@ typedef struct SpaceSeq { } SpaceSeq; typedef struct FileSelectParams { - char title[24]; /* title, also used for the text of the execute button */ + char title[32]; /* title, also used for the text of the execute button */ char dir[240]; /* directory */ char file[80]; /* file */ char renamefile[80]; From de8e066a1ca29fe58295ee6b12b735d023528681 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 04:38:07 +0000 Subject: [PATCH 130/163] bugfix [#24505] Python command bpy.ops.transform.rotate(...) does not follow axis=(...) attribute the axis was being constantly re-initialized from the view. --- source/blender/editors/transform/transform.c | 8 +++++--- source/blender/editors/transform/transform.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 57298bdd0d3..e839a51561c 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1678,7 +1678,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int /* overwrite initial values if operator supplied a non-null vector */ if (RNA_property_is_set(op->ptr, "value")) { - float values[4]; + float values[4]= {0}; /* incase value isn't length 4, avoid uninitialized memory */ RNA_float_get_array(op->ptr, "value", values); QUATCOPY(t->values, values); QUATCOPY(t->auto_values, values); @@ -1690,6 +1690,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int { RNA_float_get_array(op->ptr, "axis", t->axis); normalize_v3(t->axis); + copy_v3_v3(t->axis_orig, t->axis); } /* Constraint init from operator */ @@ -2843,6 +2844,8 @@ void initRotation(TransInfo *t) negate_v3_v3(t->axis, t->viewinv[2]); normalize_v3(t->axis); + + copy_v3_v3(t->axis_orig, t->axis); } static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short around) { @@ -3109,8 +3112,7 @@ int Rotation(TransInfo *t, short UNUSED(mval[2])) t->con.applyRot(t, NULL, t->axis, NULL); } else { /* reset axis if constraint is not set */ - negate_v3_v3(t->axis, t->viewinv[2]); - normalize_v3(t->axis); + copy_v3_v3(t->axis, t->axis_orig); } applySnapping(t, &final); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 49ce4d2e0dd..ec18b2f81a0 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -314,6 +314,7 @@ typedef struct TransInfo { float values[4]; float auto_values[4]; float axis[3]; + float axis_orig[3]; /* TransCon can change 'axis', store the original value here */ void *view; struct ScrArea *sa; From fe8d5b81b09462d2344a50b32bfd2d8df5c6d886 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 06:31:53 +0000 Subject: [PATCH 131/163] use c90 compatible static initializers. --- source/blender/blenkernel/intern/depsgraph.c | 6 ++- source/blender/blenkernel/intern/effect.c | 6 ++- source/blender/blenkernel/intern/font.c | 8 +++- source/blender/blenkernel/intern/particle.c | 7 +++- source/blender/blenkernel/intern/pointcache.c | 8 +++- source/blender/blenkernel/intern/shrinkwrap.c | 4 +- source/blender/blenkernel/intern/unit.c | 3 +- source/blender/blenlib/intern/uvproject.c | 4 +- .../blender/editors/space_view3d/drawobject.c | 42 ++++++++++++++----- .../editors/space_view3d/view3d_draw.c | 24 ++++++++--- .../editors/space_view3d/view3d_edit.c | 4 +- .../editors/space_view3d/view3d_view.c | 6 ++- .../render/intern/source/convertblender.c | 9 +++- .../render/intern/source/pointdensity.c | 9 ++-- .../render/intern/source/volume_precache.c | 6 ++- .../blender/windowmanager/intern/wm_gesture.c | 8 +++- .../windowmanager/intern/wm_operators.c | 5 ++- 17 files changed, 120 insertions(+), 39 deletions(-) diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index d95b7010993..21ef1c03e3a 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -2350,8 +2350,10 @@ void DAG_id_flush_update(ID *id, short flag) /* set flags based on textures - can influence depgraph via modifiers */ if(idtype == ID_TE) { for(obt=bmain->object.first; obt; obt= obt->id.next) { - struct { ID *id; int is_dependent; } data = {id, 0}; - + struct { ID *id; int is_dependent; } data; + data.id= id; + data.is_dependent= 0; + modifiers_foreachIDLink(obt, dag_id_flush_update__isDependentTexture, &data); if (data.is_dependent) obt->recalc |= OB_RECALC_DATA; diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index 70e814ef956..24a95c58e36 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -628,7 +628,6 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin } } else if(eff->psys) { - ParticleSimulationData sim = {eff->scene, eff->ob, eff->psys, NULL, NULL}; ParticleData *pa = eff->psys->particles + *efd->index; ParticleKey state; @@ -636,6 +635,11 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin if(eff->psys == point->psys && *efd->index == point->index) ; else { + ParticleSimulationData sim= {0}; + sim.scene= eff->scene; + sim.ob= eff->ob; + sim.psys= eff->psys; + /* TODO: time from actual previous calculated frame (step might not be 1) */ state.time = cfra - 1.0; ret = psys_get_particle_state(&sim, *efd->index, &state, 0); diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 58917e75a43..0b27aaeb0ba 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -1193,8 +1193,12 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) ascii = mem[i]; info = &(custrinfo[i]); if (cu->sepchar == (i+1)) { - float vecyo[3]= {ct->xof, ct->yof, 0.0f}; - + float vecyo[3]; + + vecyo[0]= ct->xof; + vecyo[1]= ct->yof; + vecyo[2]= 0.0f; + mem[0] = ascii; mem[1] = 0; custrinfo[0]= *info; diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 624587338c9..65b898a2807 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -3221,7 +3221,12 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf edit->totcached = totpart; if(psys) { - ParticleSimulationData sim = {scene, ob, psys, psys_get_modifier(ob, psys), NULL}; + ParticleSimulationData sim= {0}; + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psys_get_modifier(ob, psys); + psys_cache_child_paths(&sim, cfra, 1); } diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index bd37abc266b..002e8c9de0f 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -199,13 +199,17 @@ static int ptcache_write_particle(int index, void *psys_v, void **data, int cfra ParticleSystem *psys= psys_v; ParticleData *pa = psys->particles + index; BoidParticle *boid = (psys->part->phystype == PART_PHYS_BOIDS) ? pa->boid : NULL; - float times[3] = {pa->time, pa->dietime, pa->lifetime}; + float times[3]; int step = psys->pointcache->step; /* No need to store unborn or died particles outside cache step bounds */ if(data[BPHYS_DATA_INDEX] && (cfra < pa->time - step || cfra > pa->dietime + step)) return 0; - + + times[0]= pa->time; + times[1]= pa->dietime; + times[2]= pa->lifetime; + PTCACHE_DATA_FROM(data, BPHYS_DATA_INDEX, &index); PTCACHE_DATA_FROM(data, BPHYS_DATA_LOCATION, pa->state.co); PTCACHE_DATA_FROM(data, BPHYS_DATA_VELOCITY, pa->state.vel); diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index 4746341876f..a6daaf36ff6 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -391,8 +391,8 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S //Project over negative direction of axis if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR) { - float inv_no[3] = { -tmp_no[0], -tmp_no[1], -tmp_no[2] }; - + float inv_no[3]; + negate_v3_v3(inv_no, tmp_no); if(auxData.tree) normal_projection_project_vertex(0, tmp_co, inv_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData); diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c index 83ace49eb67..1240b85393b 100644 --- a/source/blender/blenkernel/intern/unit.c +++ b/source/blender/blenkernel/intern/unit.c @@ -334,7 +334,8 @@ static int unit_as_string(char *str, int len_max, double value, int prec, bUnitC /* Convert to a string */ { - char conv_str[6] = {'%', '.', '0'+prec, 'l', 'f', '\0'}; /* "%.2lf" when prec is 2, must be under 10 */ + char conv_str[6] = {'%', '.', '0', 'l', 'f', '\0'}; /* "%.2lf" when prec is 2, must be under 10 */ + conv_str[2] += prec; len= snprintf(str, len_max, conv_str, (float)value_conv); if(len >= len_max) diff --git a/source/blender/blenlib/intern/uvproject.c b/source/blender/blenlib/intern/uvproject.c index cc115d52928..b08f05b4fc8 100644 --- a/source/blender/blenlib/intern/uvproject.c +++ b/source/blender/blenlib/intern/uvproject.c @@ -60,7 +60,9 @@ void project_from_camera(float target[2], float source[3], UvCameraInfo *uci) target[1]= pv4[1] / uci->camsize; } else { - float vec2d[2]= {pv4[0], pv4[2]}; /* 2D position from the camera */ + float vec2d[2]; /* 2D position from the camera */ + vec2d[0]= pv4[0]; + vec2d[1]= pv4[2]; target[0]= angle * (M_PI / uci->camangle); target[1]= pv4[1] / (len_v2(vec2d) * uci->camsize); } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 8b9e960cdb3..d59f4066680 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -320,8 +320,12 @@ static void draw_xyz_wire(float *c, float size, int axis) { float v1[3]= {0.f, 0.f, 0.f}, v2[3] = {0.f, 0.f, 0.f}; float dim = size * 0.1; - float dx[3]={dim, 0.0, 0.0}, dy[3]={0.0, dim, 0.0}, dz[3]={0.0, 0.0, dim}; - + float dx[3], dy[3], dz[3]; + + dx[0]=dim; dx[1]=0.f; dx[2]=0.f; + dy[0]=0.f; dy[1]=dim; dy[2]=0.f; + dz[0]=0.f; dz[1]=0.f; dz[2]=dim; + switch(axis) { case 0: /* x axis */ glBegin(GL_LINES); @@ -524,8 +528,13 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) /* circle for object centers, special_color is for library or ob users */ static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color) { - float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]}; float size= rv3d->pixsize*((float)U.obcenter_dia*0.5f); + float vec[3]; + + vec[0]= rv3d->persmat[0][3]; + vec[1]= rv3d->persmat[1][3]; + vec[2]= rv3d->persmat[2][3]; + size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; /* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */ @@ -3430,7 +3439,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv ParticleData *pars, *pa; ParticleKey state, *states=0; ParticleBillboardData bb; - ParticleSimulationData sim = {scene, ob, psys, NULL}; + ParticleSimulationData sim= {0}; ParticleDrawData *pdd = psys->pdd; Material *ma; float vel[3], imat[4][4]; @@ -3468,6 +3477,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv return; /* 2. */ + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; sim.psmd = psmd = psys_get_modifier(ob,psys); if(part->phystype==PART_PHYS_KEYED){ @@ -4757,9 +4769,17 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, while (nr-->0) { /* accounts for empty bevel lists */ float fac= bevp->radius * ts->normalsize; - float vec_a[3] = { fac,0, 0}; // Offset perpendicular to the curve - float vec_b[3] = {-fac,0, 0}; // Delta along the curve + float vec_a[3]; // Offset perpendicular to the curve + float vec_b[3]; // Delta along the curve + vec_a[0]= fac; + vec_a[1]= 0.0f; + vec_a[2]= 0.0f; + + vec_b[0]= -fac; + vec_b[1]= 0.0f; + vec_b[2]= 0.0f; + mul_qt_v3(bevp->quat, vec_a); mul_qt_v3(bevp->quat, vec_b); add_v3_v3(vec_a, bevp->vec); @@ -5510,22 +5530,22 @@ static void draw_hooks(Object *ob) void drawRBpivot(bRigidBodyJointConstraint *data) { int axis; - float v1[3]= {data->pivX, data->pivY, data->pivZ}; - float eu[3]= {data->axX, data->axY, data->axZ}; float mat[4][4]; - eul_to_mat4(mat,eu); + eul_to_mat4(mat,&data->axX); glLineWidth (4.0f); setlinestyle(2); for (axis=0; axis<3; axis++) { float dir[3] = {0,0,0}; - float v[3]= {data->pivX, data->pivY, data->pivZ}; + float v[3]; + + copy_v3_v3(v, &data->pivX); dir[axis] = 1.f; glBegin(GL_LINES); mul_m4_v3(mat,dir); add_v3_v3(v, dir); - glVertex3fv(v1); + glVertex3fv(&data->pivX); glVertex3fv(v); glEnd(); if (axis==0) diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index b8fff234347..27afe07c4b2 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1583,9 +1583,14 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) { int x, y, w, h; - rcti r= {0, ar->winx-1, 0, ar->winy-1}; + rcti r; /* clamp rect by area */ + r.xmin= 0; + r.xmax= ar->winx-1; + r.ymin= 0; + r.ymax= ar->winy-1; + /* Constrain rect to depth bounds */ BLI_isect_rcti(&r, rect, rect); @@ -1997,10 +2002,19 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, { /* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])' * because of float point precission problems at large values [#23908] */ - float v1[3]= {rv3d->persmat[0][0], rv3d->persmat[1][0], rv3d->persmat[2][0]}; - float v2[3]= {rv3d->persmat[0][1], rv3d->persmat[1][1], rv3d->persmat[2][1]}; - float len1= 1.0f / len_v3(v1); - float len2= 1.0f / len_v3(v2); + float v1[3], v2[3]; + float len1, len2; + + v1[0]= rv3d->persmat[0][0]; + v1[1]= rv3d->persmat[1][0]; + v1[2]= rv3d->persmat[2][0]; + + v2[0]= rv3d->persmat[0][1]; + v2[1]= rv3d->persmat[1][1]; + v2[2]= rv3d->persmat[2][1]; + + len1= 1.0f / len_v3(v1); + len2= 1.0f / len_v3(v2); rv3d->pixsize = (2.0f * MAX2(len1, len2)) / (float)MAX2(ar->winx, ar->winy); } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index d706dc27404..18091942973 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2423,7 +2423,9 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *eve short depth_used = 0; if (U.uiflag & USER_ORBIT_ZBUF) { /* maybe this should be accessed some other way */ - short mval_depth[2] = {mx, my}; + short mval_depth[2]; + mval_depth[0]= mx; + mval_depth[1]= my; view3d_operator_needs_opengl(C); if (view_autodist(scene, ar, v3d, mval_depth, fp)) depth_used= 1; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 8d6eec3285c..2e75b5163f9 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -139,8 +139,12 @@ void view3d_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, f } if (dist) { - float vec[3] = {0.0f, 0.0f, -(*dist)}; float tquat[4]; + float vec[3]; + + vec[0]= 0.0f; + vec[1]= 0.0f; + vec[2]= -(*dist); mat4_to_quat(tquat, ob->obmat); diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 50e52bfe2f7..89176944652 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -1485,7 +1485,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem ParticleKey state; ParticleCacheKey *cache=0; ParticleBillboardData bb; - ParticleSimulationData sim = {re->scene, ob, psys, NULL}; + ParticleSimulationData sim = {0}; ParticleStrandData sd; StrandBuffer *strandbuf=0; StrandVert *svert=0; @@ -1519,10 +1519,15 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem /* 2. start initialising things */ /* last possibility to bail out! */ - sim.psmd = psmd = psys_get_modifier(ob,psys); + psmd = psys_get_modifier(ob,psys); if(!(psmd->modifier.mode & eModifierMode_Render)) return 0; + sim.scene= re->scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psmd; + if(part->phystype==PART_PHYS_KEYED) psys_count_keyed_targets(&sim); diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c index d8156594085..a5609390ef4 100644 --- a/source/blender/render/intern/source/pointdensity.c +++ b/source/blender/render/intern/source/pointdensity.c @@ -94,7 +94,7 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa { DerivedMesh* dm; ParticleKey state; - ParticleSimulationData sim = {re->scene, ob, psys, NULL}; + ParticleSimulationData sim= {0}; ParticleData *pa=NULL; float cfra = BKE_curframe(re->scene); int i, childexists; @@ -103,10 +103,9 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa float partco[3]; float obview[4][4]; - /* init everything */ if (!psys || !ob || !pd) return; - + mul_m4_m4m4(obview, re->viewinv, ob->obmat); /* Just to create a valid rendering context for particles */ @@ -119,6 +118,10 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa return; } + sim.scene= re->scene; + sim.ob= ob; + sim.psys= psys; + /* in case ob->imat isn't up-to-date */ invert_m4_m4(ob->imat, ob->obmat); diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c index a76a3e978f5..ccdef6006d4 100644 --- a/source/blender/render/intern/source/volume_precache.c +++ b/source/blender/render/intern/source/volume_precache.c @@ -485,7 +485,11 @@ static void *vol_precache_part(void *data) float scatter_col[3] = {0.f, 0.f, 0.f}; float co[3], cco[3]; int x, y, z, i; - const int res[3]= {pa->res[0], pa->res[1], pa->res[2]}; + int res[3]; + + res[0]= pa->res[0]; + res[1]= pa->res[1]; + res[2]= pa->res[2]; for (z= pa->minz; z < pa->maxz; z++) { co[2] = pa->bbmin[2] + (pa->voxel[2] * (z + 0.5f)); diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index 8dcf65886e4..c1e28654f73 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -232,8 +232,12 @@ static void draw_filled_lasso(wmGesture *gt) int i; for (i=0; ipoints; i++, lasso+=2) { - float co[3] = {(float)lasso[0], (float)lasso[1], 0.f}; - + float co[3]; + + co[0]= (float)lasso[0]; + co[1]= (float)lasso[1]; + co[2]= 0.0f; + v = BLI_addfillvert(co); if (lastv) e = BLI_addfilledge(lastv, v); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 2a9ef1e752e..c6baf0e53be 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -2866,7 +2866,10 @@ int WM_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *event) int mode = RNA_int_get(op->ptr, "mode"); float initial_value = RNA_float_get(op->ptr, "initial_value"); //float initial_size = RNA_float_get(op->ptr, "initial_size"); - int mouse[2] = {event->x, event->y}; + int mouse[2]; + + mouse[0]= event->x; + mouse[1]= event->y; //if (initial_size == 0) // initial_size = WM_RADIAL_CONTROL_DISPLAY_SIZE; From c31536fc534156559fb19d008323b28a3dc4ef5f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 08:46:14 +0000 Subject: [PATCH 132/163] bugfix [#24445] NLA reverse option flickers UnMapping the reversed NLA strips timing was incorrect. --- source/blender/blenkernel/intern/nla.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 6c8eb69703f..423ccb00e8e 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -362,7 +362,7 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short return strip->end - scale*(cframe - strip->actstart); } else if (mode == NLATIME_CONVERT_UNMAP) { - return strip->actend - (strip->end - cframe) / scale; + return (strip->end + (strip->actstart * scale - cframe)) / scale; } else /* if (mode == NLATIME_CONVERT_EVAL) */{ if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) { From 1f2469d9925ee5701375ffec75d50f8c5601b552 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 11:14:02 +0000 Subject: [PATCH 133/163] bugfix [#24508] Render and changing scenes crashes. The scenes 'Render' is kept by blender while blender runs but the callbacks were not cleared when the render was done. In this case the callback would reference a freed render job. This isn't normally a problem because on re-rendering new callbacks are set, however the sequencer can render a previously rendered scene without setting up callbacks. Simple fix is to to dummy callbacks applied onto the scenes 'Render' struct once its finished. --- source/blender/editors/render/render_internal.c | 6 +++++- .../blender/render/extern/include/RE_pipeline.h | 3 +++ source/blender/render/intern/source/pipeline.c | 17 ++++++++++++----- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index b875de8f8bc..40aba913efe 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -573,7 +573,11 @@ static void render_startjob(void *rjv, short *stop, short *do_update, float *pro static void render_endjob(void *rjv) { - RenderJob *rj= rjv; + RenderJob *rj= rjv; + + /* this render may be used again by the sequencer without the active 'Render' where the callbacks + * would be re-assigned. assign dummy callbacks to avoid referencing freed renderjobs bug [#24508] */ + RE_InitRenderCB(rj->re); if(rj->main != G.main) free_main(rj->main); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index faa14231584..3b26b673c5d 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -159,6 +159,9 @@ struct Render *RE_GetRender(const char *name); /* returns 1 while render is working (or renders called from within render) */ int RE_RenderInProgress(struct Render *re); +/* assign default dummy callbacks */ +void RE_InitRenderCB(struct Render *re); + /* use free render as signal to do everything over (previews) */ void RE_FreeRender (struct Render *re); /* only called on exit */ diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 1b08f9adfab..9f4f146e15f 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -1158,6 +1158,18 @@ Render *RE_NewRender(const char *name) BLI_rw_mutex_init(&re->resultmutex); } + RE_InitRenderCB(re); + + /* init some variables */ + re->ycor= 1.0f; + + return re; +} + +/* called for new renders and when finishing rendering so + * we calways have valid callbacks on a render */ +void RE_InitRenderCB(Render *re) +{ /* set default empty callbacks */ re->display_init= result_nothing; re->display_clear= result_nothing; @@ -1171,11 +1183,6 @@ Render *RE_NewRender(const char *name) re->stats_draw= stats_nothing; /* clear callback handles */ re->dih= re->dch= re->ddh= re->sdh= re->prh= re->tbh= re->erh= NULL; - - /* init some variables */ - re->ycor= 1.0f; - - return re; } /* only call this while you know it will remove the link too */ From b350954501bf59d4d87ab0cd90b13456b0285e62 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 3 Nov 2010 13:10:09 +0000 Subject: [PATCH 134/163] [#23095] If no camera is present, a render starts but does nothing, and we have no "No camera" warning Improve camera checking and move it before starting render jobs --- .../blender/editors/render/render_internal.c | 4 + .../render/extern/include/RE_pipeline.h | 2 + .../blender/render/intern/source/pipeline.c | 152 ++++++++++++------ 3 files changed, 112 insertions(+), 46 deletions(-) diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 40aba913efe..bf017856389 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -637,6 +637,10 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event) if(WM_jobs_test(CTX_wm_manager(C), scene)) return OPERATOR_CANCELLED; + if(!RE_is_rendering_allowed(scene, op->reports, render_error_reports)) { + return OPERATOR_CANCELLED; + } + /* stop all running jobs, currently previews frustrate Render */ WM_jobs_stop_all(CTX_wm_manager(C)); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 3b26b673c5d..696e52700cb 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -300,5 +300,7 @@ void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info); void RE_engines_init(void); void RE_engines_exit(void); +int RE_is_rendering_allowed(struct Scene *scene, void *erh, void (*error)(void *handle, char *str)); + #endif /* RE_PIPELINE_H */ diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 9f4f146e15f..0eecd9b9585 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -448,7 +448,7 @@ static int passtype_from_name(char *str) return 0; } -static void render_unique_exr_name(Render *re, char *str, int sample) +static void scene_unique_exr_name(Scene *scene, char *str, int sample) { char di[FILE_MAX], name[FILE_MAXFILE+MAX_ID_NAME+100], fi[FILE_MAXFILE]; @@ -456,13 +456,18 @@ static void render_unique_exr_name(Render *re, char *str, int sample) BLI_splitdirstring(di, fi); if(sample==0) - sprintf(name, "%s_%s.exr", fi, re->scene->id.name+2); + sprintf(name, "%s_%s.exr", fi, scene->id.name+2); else - sprintf(name, "%s_%s%d.exr", fi, re->scene->id.name+2, sample); + sprintf(name, "%s_%s%d.exr", fi, scene->id.name+2, sample); BLI_make_file_string("/", str, btempdir, name); } +static void render_unique_exr_name(Render *re, char *str, int sample) +{ + scene_unique_exr_name(re->scene, str, sample); +} + static void render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, int passtype) { char *typestr= get_pass_name(passtype, 0); @@ -2588,61 +2593,112 @@ static void do_render_all_options(Render *re) } } -static int is_rendering_allowed(Render *re) +static int check_valid_camera(Scene *scene) +{ + int check_comp= 1; + + if (scene->camera == NULL) + scene->camera= scene_find_camera(scene); + + if(scene->r.scemode&R_DOSEQ) { + if(scene->ed) { + Sequence *seq= scene->ed->seqbase.first; + + check_comp= 0; + + while(seq) { + if(seq->type == SEQ_SCENE) { + if(!seq->scene_camera) { + if(!seq->scene->camera && !scene_find_camera(seq->scene)) { + if(seq->scene == scene) { + /* for current scene camera could be unneeded due to compisite nodes */ + check_comp= 1; + } else { + /* for other scenes camera is necessary */ + return 0; + } + } + } + } + + seq= seq->next; + } + } + } + + if(check_comp) { /* no sequencer or sequencer depends on compositor */ + if(scene->r.scemode&R_DOCOMP && scene->use_nodes) { + bNode *node= scene->nodetree->nodes.first; + + while(node) { + if(node->type == CMP_NODE_R_LAYERS) { + Scene *sce= node->id ? (Scene*)node->id : scene; + + if(!sce->camera && !scene_find_camera(sce)) { + /* all render layers nodes need camera */ + return 0; + } + } + + node= node->next; + } + } else return scene->camera != NULL; + } + + return 1; +} + +int RE_is_rendering_allowed(Scene *scene, void *erh, void (*error)(void *handle, char *str)) { SceneRenderLayer *srl; /* forbidden combinations */ - if(re->r.mode & R_PANORAMA) { - if(re->r.mode & R_BORDER) { - re->error(re->erh, "No border supported for Panorama"); + if(scene->r.mode & R_PANORAMA) { + if(scene->r.mode & R_BORDER) { + error(erh, "No border supported for Panorama"); return 0; } - if(re->r.mode & R_ORTHO) { - re->error(re->erh, "No Ortho render possible for Panorama"); + if(scene->r.mode & R_ORTHO) { + error(erh, "No Ortho render possible for Panorama"); return 0; } } - if(re->r.mode & R_BORDER) { - if(re->r.border.xmax <= re->r.border.xmin || - re->r.border.ymax <= re->r.border.ymin) { - re->error(re->erh, "No border area selected."); + if(scene->r.mode & R_BORDER) { + if(scene->r.border.xmax <= scene->r.border.xmin || + scene->r.border.ymax <= scene->r.border.ymin) { + error(erh, "No border area selected."); return 0; } } - if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { + if(scene->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { char str[FILE_MAX]; - render_unique_exr_name(re, str, 0); + scene_unique_exr_name(scene, str, 0); if (BLI_is_writable(str)==0) { - re->error(re->erh, "Can not save render buffers, check the temp default path"); + error(erh, "Can not save render buffers, check the temp default path"); return 0; } - /* no osa + fullsample won't work... */ - if(re->osa==0) - re->r.scemode &= ~R_FULL_SAMPLE; - /* no fullsample and edge */ - if((re->r.scemode & R_FULL_SAMPLE) && (re->r.mode & R_EDGE)) { - re->error(re->erh, "Full Sample doesn't support Edge Enhance"); + if((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.mode & R_EDGE)) { + error(erh, "Full Sample doesn't support Edge Enhance"); return 0; } } else - re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ + scene->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ - if(re->r.scemode & R_DOCOMP) { - if(re->scene->use_nodes) { - bNodeTree *ntree= re->scene->nodetree; + if(scene->r.scemode & R_DOCOMP) { + if(scene->use_nodes) { + bNodeTree *ntree= scene->nodetree; bNode *node; if(ntree==NULL) { - re->error(re->erh, "No Nodetree in Scene"); + error(erh, "No Nodetree in Scene"); return 0; } @@ -2652,46 +2708,51 @@ static int is_rendering_allowed(Render *re) if(node==NULL) { - re->error(re->erh, "No Render Output Node in Scene"); + error(erh, "No Render Output Node in Scene"); return 0; } } } /* check valid camera, without camera render is OK (compo, seq) */ - if(re->scene->camera==NULL) - re->scene->camera= scene_find_camera(re->scene); - - if(!(re->r.scemode & (R_DOSEQ|R_DOCOMP))) { - if(re->scene->camera==NULL) { - re->error(re->erh, "No camera"); - return 0; - } + if(!check_valid_camera(scene)) { + error(erh, "No camera"); + return 0; } /* layer flag tests */ - if(re->r.scemode & R_SINGLE_LAYER) { - srl= BLI_findlink(&re->scene->r.layers, re->r.actlay); + if(scene->r.scemode & R_SINGLE_LAYER) { + srl= BLI_findlink(&scene->r.layers, scene->r.actlay); /* force layer to be enabled */ srl->layflag &= ~SCE_LAY_DISABLE; } - for(srl= re->scene->r.layers.first; srl; srl= srl->next) + for(srl= scene->r.layers.first; srl; srl= srl->next) if(!(srl->layflag & SCE_LAY_DISABLE)) break; if(srl==NULL) { - re->error(re->erh, "All RenderLayers are disabled"); + error(erh, "All RenderLayers are disabled"); return 0; } /* renderer */ - if(!ELEM(re->r.renderer, R_INTERN, R_YAFRAY)) { - re->error(re->erh, "Unknown render engine set"); + if(!ELEM(scene->r.renderer, R_INTERN, R_YAFRAY)) { + error(erh, "Unknown render engine set"); return 0; } + return 1; } +static void validate_render_settings(Render *re) +{ + if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) { + /* no osa + fullsample won't work... */ + if(re->r.osa==0) + re->r.scemode &= ~R_FULL_SAMPLE; + } else re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ +} + static void update_physics_cache(Render *re, Scene *scene, int UNUSED(anim_init)) { PTCacheBaker baker; @@ -2768,10 +2829,9 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc /* initstate makes new result, have to send changed tags around */ ntreeCompositTagRender(re->scene); - - if(!is_rendering_allowed(re)) - return 0; - + + validate_render_settings(re); + re->display_init(re->dih, re->result); re->display_clear(re->dch, re->result); From 57fd35ae262e2a901a40e576816fb4567fc98f87 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Wed, 3 Nov 2010 15:30:24 +0000 Subject: [PATCH 135/163] A few texture node properties still had old rna names in draw code. --- source/blender/editors/space_node/drawnode.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 78ae82c57b0..aef1c7bbeaa 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -1177,7 +1177,7 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe case TEX_MARBLE: row= uiLayoutRow(col, 0); - uiItemR(row, &tex_ptr, "stype", UI_ITEM_R_EXPAND, NULL, 0); + uiItemR(row, &tex_ptr, "marble_type", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); @@ -1186,18 +1186,18 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe case TEX_WOOD: uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0); - uiItemR(col, &tex_ptr, "stype", 0, "", 0); + uiItemR(col, &tex_ptr, "wood_type", 0, "", 0); row= uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noisebasis_2", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); - uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "stype")==TEX_BAND || RNA_enum_get(&tex_ptr, "stype")==TEX_RING)); + uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "wood_type")==TEX_BAND || RNA_enum_get(&tex_ptr, "wood_type")==TEX_RING)); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0); break; case TEX_CLOUDS: uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0); row= uiLayoutRow(col, 0); - uiItemR(row, &tex_ptr, "stype", UI_ITEM_R_EXPAND, NULL, 0); + uiItemR(row, &tex_ptr, "cloud_type", UI_ITEM_R_EXPAND, NULL, 0); row= uiLayoutRow(col, 0); uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0); uiItemR(col, &tex_ptr, "noise_depth", UI_ITEM_R_EXPAND, "Depth", 0); From ee4b32c41a4a20cd82d10af7fefd9b20e29a77f3 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Wed, 3 Nov 2010 16:51:25 +0000 Subject: [PATCH 136/163] Fix for [#21958] Dupli group doesn't show up if linked on a layer that is different from the group layer * Object layer flag was set too soon for group duplication. --- source/blender/blenkernel/intern/anim.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index 500161fee2e..547d3f7a738 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -796,6 +796,7 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n DupliObject *dob; vertexDupliData *vdd= userData; float vec[3], q2[4], mat[3][3], tmat[4][4], obmat[4][4]; + int origlay; mul_v3_m4v3(vec, vdd->pmat, co); sub_v3_v3(vec, vdd->pmat[3]); @@ -818,7 +819,14 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n copy_m4_m4(tmat, obmat); mul_m4_m4m3(obmat, tmat, mat); } + + origlay = vdd->ob->lay; + dob= new_dupli_object(vdd->lb, vdd->ob, obmat, vdd->par->lay, index, OB_DUPLIVERTS, vdd->animated); + + /* restore the original layer so that each dupli will have proper dob->origlay */ + vdd->ob->lay = origlay; + if(vdd->orco) VECCOPY(dob->orco, vdd->orco[index]); @@ -928,6 +936,14 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl vertex_dupli__mapFunc(&vdd, a, vec, no, NULL); } } + if(sce) { + /* Set proper layer in case of scene looping, + * in case of groups the object layer will be + * changed when it's duplicated due to the + * group duplication. + */ + ob->lay = vdd.par->lay; + } break; } From 81fe9d2d04f463c2bbaea599d067beeca6ae2dac Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 21:23:02 +0000 Subject: [PATCH 137/163] workaround [#24392] 2d Image paint editor: no clone/smear/soften tools etc the brush system matches the brush mode with the object mode, but this doesn't work for 2D image view paint. since the poll() function doesnt have access to the context, for now just check if no paint modes are active, default to texture paint. --- source/blender/blenkernel/intern/brush.c | 2 +- source/blender/blenloader/intern/readfile.c | 2 +- source/blender/editors/space_info/info_stats.c | 2 +- .../editors/transform/transform_manipulator.c | 2 +- .../editors/transform/transform_orientations.c | 2 +- source/blender/makesdna/DNA_object_types.h | 3 +++ source/blender/makesrna/intern/rna_sculpt_paint.c | 13 ++++++++++++- 7 files changed, 20 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 7a10f9082e5..649b3e3ad9b 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -67,7 +67,7 @@ static void brush_set_defaults(Brush *brush) brush->blend = 0; brush->flag = 0; - brush->ob_mode = (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT); + brush->ob_mode = OB_MODE_ALL_PAINT; /* BRUSH SCULPT TOOL SETTINGS */ brush->size= 35; /* radius of the brush in pixels */ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 595781ac9bd..a9fd383114f 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -11124,7 +11124,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) Brush *br; for(br= main->brush.first; br; br= br->id.next) { if(br->ob_mode==0) - br->ob_mode= (OB_MODE_SCULPT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_VERTEX_PAINT); + br->ob_mode= OB_MODE_ALL_PAINT; } } diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index 846812cc1f0..7a6e5dad017 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -339,7 +339,7 @@ static void stats_update(Scene *scene) /* Pose Mode */ stats_object_pose(ob, &stats); } - else if(ob && (ob->flag & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) { + else if(ob && (ob->flag & OB_MODE_ALL_PAINT)) { /* Sculpt and Paint Mode */ stats_object_paint(ob, &stats); } diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index b3dbf3c853a..23b4cf5fd99 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -443,7 +443,7 @@ int calc_manipulator_stats(const bContext *C) mul_m4_v3(ob->obmat, scene->twmax); } } - else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) { + else if(ob && (ob->mode & OB_MODE_ALL_PAINT)) { ; } else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) { diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 2d936460c53..085b784b6f0 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -884,7 +884,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3], result = ORIENTATION_EDGE; } } - else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_PARTICLE_EDIT))) + else if(ob && (ob->mode & (OB_MODE_ALL_PAINT|OB_MODE_PARTICLE_EDIT))) { } else { diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 60b4f6a51b6..a5e8e1545b0 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -557,6 +557,9 @@ typedef enum ObjectMode { OB_MODE_POSE = 64 } ObjectMode; +/* any mode where the brush system is used */ +#define OB_MODE_ALL_PAINT (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT) + #define MAX_DUPLI_RECUR 8 #ifdef __cplusplus diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 3b83ec2d3ad..0fe3972104e 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -162,8 +162,19 @@ static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value) Scene *scene= (Scene *)ptr->id.data; Object *ob = OBACT; Brush *brush= value.id.data; - return ob->mode & brush->ob_mode; + + /* weak, for object painting we need to check against the object mode + * but for 2D view image painting we always want texture brushes + * this is not quite correct since you could be in object weightpaint + * mode at the same time as the 2D image view, but for now its *good enough* */ + if(ob->mode & OB_MODE_ALL_PAINT) { + return ob->mode & brush->ob_mode; + } + else { + return OB_MODE_TEXTURE_PAINT & brush->ob_mode; + } } + #else static void rna_def_paint(BlenderRNA *brna) From ce3b49742decf64b3cb600dd2091feac07330b7b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 22:11:17 +0000 Subject: [PATCH 138/163] fix for #24428, commit r32757 broke menu bar display for some users [#24454] (but not me for some reason). For now revert most of r32757. --- source/blender/editors/screen/screen_edit.c | 22 +++++++-------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index cd92c48f12a..a275de08356 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -608,10 +608,6 @@ void select_connected_scredge(bScreen *sc, ScrEdge *edge) } /* test if screen vertices should be scaled */ - -/* needed to alternate AREAGRID snapping else it shifts one way - * to avoid this we should use floats at least during runtime [#24428]. */ -static char scale_alt_bool= 0; static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) { ScrVert *sv=NULL; @@ -647,26 +643,22 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) /* make sure it fits! */ for(sv= sc->vertbase.first; sv; sv= sv->next) { - /* 0.1519 was 0.5f, but tweaked so resizing the window doesnt favor one direction - * also note scale_alt_bool */ + /* FIXME, this resizing logic is no good when resizing the window + redrawing [#24428] + * need some way to store these as floats internally and re-apply from there. */ tempf= ((float)sv->vec.x)*facx; - sv->vec.x= (short)(tempf+0.1519); + sv->vec.x= (short)(tempf+0.5); sv->vec.x+= AREAGRID-2; - sv->vec.x-= scale_alt_bool; sv->vec.x-= (sv->vec.x % AREAGRID); - + CLAMP(sv->vec.x, 0, winsizex); - tempf= ((float)sv->vec.y )*facy; - sv->vec.y= (short)(tempf+0.1519); + tempf= ((float)sv->vec.y)*facy; + sv->vec.y= (short)(tempf+0.5); sv->vec.y+= AREAGRID-2; - sv->vec.y-= scale_alt_bool; sv->vec.y-= (sv->vec.y % AREAGRID); - + CLAMP(sv->vec.y, 0, winsizey); } - - scale_alt_bool= scale_alt_bool ? 0:1; } /* test for collapsed areas. This could happen in some blender version... */ From dba1904f657ab9b90aaea3ceed6dad97ec4ad951 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 22:44:39 +0000 Subject: [PATCH 139/163] bugfix [#24518] Blender wont compile with -Wall -Werror and COLLADA support fix included in report from Martijn Berger (mberger) made some small changes. - use ints rather then unsigned long for printing, values are not likely to be very large. - CMake remove strict flags from collada build dir since I had warnings in the collada headers. - added xml2 to collada libraries else I couldnt get collada building. --- CMakeLists.txt | 2 +- source/blender/blenloader/intern/readfile.c | 2 +- source/blender/collada/AnimationImporter.cpp | 14 +++++++------- source/blender/collada/CMakeLists.txt | 2 ++ source/blender/collada/DocumentExporter.cpp | 2 +- source/blender/collada/DocumentImporter.cpp | 2 +- source/blender/collada/MeshImporter.h | 4 ++-- source/blender/windowmanager/intern/wm_operators.c | 2 +- 8 files changed, 16 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8673c926f1..e91d93b92eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -287,7 +287,7 @@ IF(UNIX AND NOT APPLE) IF (WITH_OPENCOLLADA) SET(OPENCOLLADA /usr/local/opencollada CACHE FILEPATH "OpenCollada Directory") SET(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib) - SET(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer) + SET(OPENCOLLADA_LIB OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver pcre ftoa buffer xml2) SET(OPENCOLLADA_INC ${OPENCOLLADA}) SET(PCRE /usr CACHE FILEPATH "PCRE Directory") SET(PCRE_LIBPATH ${PCRE}/lib) diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index a9fd383114f..4f9954b4156 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -8196,7 +8196,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } if(sce->r.mode & R_PANORAMA) { - /* all these checks to ensure saved files with cvs version keep working... */ + /* all these checks to ensure saved files with svn version keep working... */ if(sce->r.xsch < sce->r.ysch) { Object *obc= newlibadr(fd, lib, sce->camera); if(obc && obc->type==OB_CAMERA) { diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp index a79bf3ebaa7..c7267bd46f8 100644 --- a/source/blender/collada/AnimationImporter.cpp +++ b/source/blender/collada/AnimationImporter.cpp @@ -131,7 +131,7 @@ void AnimationImporter::animation_to_fcurves(COLLADAFW::AnimationCurve *curve) } break; default: - fprintf(stderr, "Output dimension of %d is not yet supported (animation id = %s)\n", dim, curve->getOriginalId().c_str()); + fprintf(stderr, "Output dimension of %d is not yet supported (animation id = %s)\n", (int)dim, curve->getOriginalId().c_str()); } for (std::vector::iterator it = fcurves.begin(); it != fcurves.end(); it++) @@ -221,7 +221,7 @@ AnimationImporter::~AnimationImporter() free_fcurve(*it); if (unused_curves.size()) - fprintf(stderr, "removed %u unused curves\n", unused_curves.size()); + fprintf(stderr, "removed %d unused curves\n", (int)unused_curves.size()); } bool AnimationImporter::write_animation(const COLLADAFW::Animation* anim) @@ -564,7 +564,7 @@ Object *AnimationImporter::translate_animation(COLLADAFW::Node *node, } } else { - fprintf(stderr, "expected %d curves, got %u\n", xyz ? 3 : 1, curves.size()); + fprintf(stderr, "expected %d curves, got %d\n", xyz ? 3 : 1, (int)curves.size()); } } } @@ -902,7 +902,7 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float if (type == COLLADAFW::Transformation::ROTATE) { if (curves.size() != 1) { - fprintf(stderr, "expected 1 curve, got %u\n", curves.size()); + fprintf(stderr, "expected 1 curve, got %d\n", (int)curves.size()); return false; } @@ -924,9 +924,9 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float if ((!is_xyz && curves.size() != 1) || (is_xyz && curves.size() != 3)) { if (is_xyz) - fprintf(stderr, "%s: expected 3 curves, got %u\n", path, curves.size()); + fprintf(stderr, "%s: expected 3 curves, got %d\n", path, (int)curves.size()); else - fprintf(stderr, "%s: expected 1 curve, got %u\n", path, curves.size()); + fprintf(stderr, "%s: expected 1 curve, got %d\n", path, (int)curves.size()); return false; } @@ -953,7 +953,7 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float else if (type == COLLADAFW::Transformation::MATRIX) { // for now, of matrix animation, support only the case when all values are packed into one animation if (curves.size() != 16) { - fprintf(stderr, "%s: expected 16 curves, got %u\n", path, curves.size()); + fprintf(stderr, "%s: expected 16 curves, got %d\n", path, (int)curves.size()); return false; } diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt index bcc407b6b68..98d9780a92e 100644 --- a/source/blender/collada/CMakeLists.txt +++ b/source/blender/collada/CMakeLists.txt @@ -24,6 +24,8 @@ # # ***** END GPL LICENSE BLOCK ***** +REMOVE_STRICT_FLAGS() + SET(INC . ../blenlib diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp index 9062bd4ba9f..66a0b0cbdd4 100644 --- a/source/blender/collada/DocumentExporter.cpp +++ b/source/blender/collada/DocumentExporter.cpp @@ -904,7 +904,7 @@ protected: void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename) { PointerRNA sceneptr, unit_settings; - PropertyRNA *system, *scale; + PropertyRNA *system; /* unused , *scale; */ clear_global_id_map(); diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index bc5653c8c45..86609d11c02 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -219,7 +219,7 @@ public: if (libnode_ob.size()) { Scene *sce = CTX_data_scene(mContext); - fprintf(stderr, "got %u library nodes to free\n", libnode_ob.size()); + fprintf(stderr, "got %d library nodes to free\n", (int)libnode_ob.size()); // free all library_nodes std::vector::iterator it; for (it = libnode_ob.begin(); it != libnode_ob.end(); it++) { diff --git a/source/blender/collada/MeshImporter.h b/source/blender/collada/MeshImporter.h index 055c4798855..c5ab6e94561 100644 --- a/source/blender/collada/MeshImporter.h +++ b/source/blender/collada/MeshImporter.h @@ -72,6 +72,8 @@ class MeshImporter : public MeshImporterBase { private: + UnitConverter *unitconverter; + Scene *scene; ArmatureImporter *armature_importer; @@ -120,8 +122,6 @@ private: bool flat_face(unsigned int *nind, COLLADAFW::MeshVertexData& nor, int count); - UnitConverter *unitconverter; - public: MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index c6baf0e53be..fa300d51724 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -1920,7 +1920,7 @@ static void WM_OT_save_mainfile(wmOperatorType *ot) #include "../../collada/collada.h" -static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { if(!RNA_property_is_set(op->ptr, "filepath")) { char filepath[FILE_MAX]; From e32a81cba293db363e9106e8a6960053edd309ed Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 23:49:56 +0000 Subject: [PATCH 140/163] workaround/fix [#24451] Motion path not automatic recalculating + locking obj moving Comment from source... /* re-calculating the frame positions means we loose our original transform if its not auto-keyed [#24451] * this hack re-applies it, which is annoying, only alternatives are... * - dont recalc paths. * - have an object_handle_update() which gives is the new transform without touching the objects. * - only recalc paths on auto-keying. * - ED_objects_recalculate_paths could backup/restore transforms. * - re-apply the transform which is simplest in this case. (2 lines below) */ Martin, if you think this workaround is unacceptable, then automatic recalculating of paths after transform should probably be disabled since it looses data on non transform un-keyed values. --- .../blender/editors/transform/transform_conversions.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 29496d2aa75..edae59fc00c 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5085,6 +5085,17 @@ void special_aftertrans_update(bContext *C, TransInfo *t) if (C && recalcObPaths) { //ED_objects_clear_paths(C); // XXX for now, don't need to clear ED_objects_recalculate_paths(C, t->scene); + + /* recalculating the frame positions means we loose our original transform if its not auto-keyed [#24451] + * this hack re-applies it, which is annoying, only alternatives are... + * - dont recalc paths. + * - have an object_handle_update() which gives is the new transform without touching the objects. + * - only recalc paths on auto-keying. + * - ED_objects_recalculate_paths could backup/restore transforms. + * - re-apply the transform which is simplest in this case. (2 lines below) + */ + t->redraw |= TREDRAW_HARD; + transformApply(C, t); } } From e8f08c612b307f6b1d4acf3d3d9f548c0f39445f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 4 Nov 2010 11:41:05 +0000 Subject: [PATCH 141/163] Fix #24523: deep shadows are rendered although object's shadow casting is disabled. --- source/blender/render/intern/source/strand.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c index 88d042e7b97..be17d640b66 100644 --- a/source/blender/render/intern/source/strand.c +++ b/source/blender/render/intern/source/strand.c @@ -825,6 +825,8 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa /* for all object instances */ for(obi=re->instancetable.first, i=0; obi; obi=obi->next, i++) { + Material *ma; + obr= obi->obr; if(!obr->strandbuf || !(obr->strandbuf->lay & lay)) @@ -836,6 +838,14 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa else copy_m4_m4(obwinmat, winmat); + /* test if we should skip it */ + ma = obr->strandbuf->ma; + + if(shadow && !(ma->mode & MA_SHADBUF)) + continue; + else if(!shadow && (ma->mode & MA_ONLYCAST)) + continue; + if(clip_render_object(obi->obr->boundbox, bounds, winmat)) continue; From 0e8172368356943e0bae95ec4a8d4ecdc9dba793 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 4 Nov 2010 11:45:30 +0000 Subject: [PATCH 142/163] Fix #24531: UV editor: setting rotating/scaling pivot with [ , ] [ . ] not working. Patch by M.G. Kishalmi, thanks! --- source/blender/editors/uvedit/uvedit_ops.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index d311733e945..d8c618d4d07 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -3182,6 +3182,7 @@ void ED_operatortypes_uvedit(void) void ED_keymap_uvedit(wmKeyConfig *keyconf) { wmKeyMap *keymap; + wmKeyMapItem *kmi; keymap= WM_keymap_find(keyconf, "UV Editor", 0, 0); keymap->poll= ED_operator_uvedit; @@ -3234,6 +3235,19 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf) WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_snap", SKEY, KM_PRESS, KM_SHIFT, 0); WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_select_mode", TABKEY, KM_PRESS, KM_CTRL, 0); + /* pivot */ + kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, 0, 0); + RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point"); + RNA_string_set(kmi->ptr, "value", "CENTER"); + + kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, KM_CTRL, 0); + RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point"); + RNA_string_set(kmi->ptr, "value", "MEDIAN"); + + kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, 0, 0); + RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point"); + RNA_string_set(kmi->ptr, "value", "CURSOR"); + ED_object_generic_keymap(keyconf, keymap, 2); transform_keymap_for_space(keyconf, keymap, SPACE_IMAGE); From 64ff9d6de40740866c290f1e1e88e6e22a1ca5e7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Nov 2010 12:59:03 +0000 Subject: [PATCH 143/163] fix to allow [#24009] to be fixed. WM_operator_poll() could fail in cases WM_operator_name_call() would succeed because calling the operator would setup the context before calling poll. this would result in python raising an invalid error or menu items being greyed out. now python can also check with an operator context: bpy.ops.object.editmode_toggle.poll('INVOKE_SCREEN') --- release/scripts/modules/bpy/ops.py | 48 +++++++++---------- source/blender/editors/interface/interface.c | 2 +- .../editors/interface/interface_regions.c | 2 +- source/blender/python/intern/bpy_operator.c | 18 +++++-- source/blender/windowmanager/WM_api.h | 1 + .../windowmanager/intern/wm_event_system.c | 32 +++++++++---- 6 files changed, 64 insertions(+), 39 deletions(-) diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py index ba56fa12fe1..c6bdc21afa6 100644 --- a/release/scripts/modules/bpy/ops.py +++ b/release/scripts/modules/bpy/ops.py @@ -115,14 +115,34 @@ class bpy_ops_submodule_op(object): def _get_doc(self): return op_as_string(self.idname()) + @staticmethod + def _parse_args(args): + C_dict = None + C_exec = 'EXEC_DEFAULT' + + if len(args) == 0: + pass + elif len(args) == 1: + if type(args[0]) != str: + C_dict = args[0] + else: + C_exec = args[0] + elif len(args) == 2: + C_exec, C_dict = args + else: + raise ValueError("1 or 2 args execution context is supported") + + return C_dict, C_exec + __doc__ = property(_get_doc) def __init__(self, module, func): self.module = module self.func = func - def poll(self, context=None): - return op_poll(self.idname_py(), context) + def poll(self, *args): + C_dict, C_exec = __class__._parse_args(args) + return op_poll(self.idname_py(), C_dict, C_exec) def idname(self): # submod.foo -> SUBMOD_OT_foo @@ -135,31 +155,11 @@ class bpy_ops_submodule_op(object): def __call__(self, *args, **kw): # Get the operator from blender - if len(args) > 2: - raise ValueError("1 or 2 args execution context is supported") - - C_dict = None - if args: - - C_exec = 'EXEC_DEFAULT' - - if len(args) == 2: - C_exec = args[0] - C_dict = args[1] - else: - if type(args[0]) != str: - C_dict = args[0] - else: - C_exec = args[0] - - if len(args) == 2: - C_dict = args[1] - + C_dict, C_exec = __class__._parse_args(args) ret = op_call(self.idname_py(), C_dict, kw, C_exec) - else: - ret = op_call(self.idname_py(), C_dict, kw) + ret = op_call(self.idname_py(), None, kw) if 'FINISHED' in ret: import bpy diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index eee4f133043..099629b0422 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -629,7 +629,7 @@ void uiEndBlock(const bContext *C, uiBlock *block) if(but->context) CTX_store_set((bContext*)C, but->context); - if(ot == NULL || WM_operator_poll((bContext*)C, ot)==0) { + if(ot == NULL || WM_operator_poll_context((bContext*)C, ot, but->opcontext)==0) { but->flag |= UI_BUT_DISABLED; but->lock = 1; } diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 5f8d604817a..e244565a6a6 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -434,7 +434,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) if(but->flag & UI_BUT_DISABLED) { const char *poll_msg; CTX_wm_operator_poll_msg_set(C, NULL); - WM_operator_poll(C, but->optype); + WM_operator_poll_context(C, but->optype, but->opcontext); poll_msg= CTX_wm_operator_poll_msg_get(C); if(poll_msg) { BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Disabled: %s", poll_msg); diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index 1cf99218bf6..f3e960f87b2 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -46,12 +46,15 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args) char *opname; PyObject *context_dict= NULL; /* optional args */ PyObject *context_dict_back; + char *context_str= NULL; PyObject *ret; + int context= WM_OP_EXEC_DEFAULT; + // XXX Todo, work out a better solution for passing on context, could make a tuple from self and pack the name and Context into it... bContext *C = BPy_GetContext(); - if (!PyArg_ParseTuple(args, "s|O:_bpy.ops.poll", &opname, &context_dict)) + if (!PyArg_ParseTuple(args, "s|Os:_bpy.ops.poll", &opname, &context_dict, &context_str)) return NULL; ot= WM_operatortype_find(opname, TRUE); @@ -61,6 +64,15 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args) return NULL; } + if(context_str) { + if(RNA_enum_value_from_id(operator_context_items, context_str, &context)==0) { + char *enum_str= BPy_enum_as_string(operator_context_items); + PyErr_Format(PyExc_TypeError, "Calling operator \"bpy.ops.%s.poll\" error, expected a string enum in (%.200s)", opname, enum_str); + MEM_freeN(enum_str); + return NULL; + } + } + if(!PyDict_Check(context_dict)) context_dict= NULL; @@ -70,7 +82,7 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args) Py_XINCREF(context_dict); /* so we done loose it */ /* main purpose of thsi function */ - ret= WM_operator_poll((bContext*)C, ot) ? Py_True : Py_False; + ret= WM_operator_poll_context((bContext*)C, ot, context) ? Py_True : Py_False; /* restore with original context dict, probably NULL but need this for nested operator calls */ Py_XDECREF(context_dict); @@ -126,7 +138,7 @@ static PyObject *pyop_call(PyObject *UNUSED(self), PyObject *args) CTX_py_dict_set(C, (void *)context_dict); Py_XINCREF(context_dict); /* so we done loose it */ - if(WM_operator_poll((bContext*)C, ot) == FALSE) { + if(WM_operator_poll_context((bContext*)C, ot, context) == FALSE) { const char *msg= CTX_wm_operator_poll_msg_get(C); PyErr_Format( PyExc_SystemError, "Operator bpy.ops.%.200s.poll() %s", opname, msg ? msg : "failed, context is incorrect"); CTX_wm_operator_poll_msg_set(C, NULL); /* better set to NULL else it could be used again */ diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 2a36e91ac66..7d4690ac7e1 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -218,6 +218,7 @@ struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType * int WM_operator_poll (struct bContext *C, struct wmOperatorType *ot); +int WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, int context); int WM_operator_call (struct bContext *C, struct wmOperator *op); int WM_operator_repeat (struct bContext *C, struct wmOperator *op); int WM_operator_name_call (struct bContext *C, const char *opstring, int context, struct PointerRNA *properties); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index ed1caa5fafe..910a528d419 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -72,6 +72,8 @@ #include "wm_event_types.h" #include "wm_draw.h" +static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA *properties, ReportList *reports, short context, short poll_only); + /* ************ event management ************** */ void wm_event_add(wmWindow *win, wmEvent *event_to_add) @@ -379,6 +381,12 @@ int WM_operator_poll(bContext *C, wmOperatorType *ot) return 1; } +/* sets up the new context and calls 'wm_operator_invoke()' with poll_only */ +int WM_operator_poll_context(bContext *C, wmOperatorType *ot, int context) +{ + return wm_operator_call_internal(C, ot, NULL, NULL, context, TRUE); +} + static void wm_operator_print(wmOperator *op) { char *buf = WM_operator_pystring(NULL, op->type, op->ptr, 1); @@ -603,11 +611,15 @@ static void wm_region_mouse_co(bContext *C, wmEvent *event) } } -int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports) +int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports, short poll_only) { wmWindowManager *wm= CTX_wm_manager(C); int retval= OPERATOR_PASS_THROUGH; + /* this is done because complicated setup is done to call this function that is better not duplicated */ + if(poll_only) + return WM_operator_poll(C, ot); + if(WM_operator_poll(C, ot)) { wmOperator *op= wm_operator_create(wm, ot, properties, reports); /* if reports==NULL, theyll be initialized */ @@ -693,7 +705,7 @@ int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerR * this is for python to access since its done the operator lookup * * invokes operator in context */ -static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports) +static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA *properties, ReportList *reports, short context, short poll_only) { wmWindow *window= CTX_wm_window(C); wmEvent *event; @@ -758,7 +770,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex CTX_wm_region_set(C, ar1); } - retval= wm_operator_invoke(C, ot, event, properties, reports); + retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only); /* set region back */ CTX_wm_region_set(C, ar); @@ -772,7 +784,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex ARegion *ar= CTX_wm_region(C); CTX_wm_region_set(C, NULL); - retval= wm_operator_invoke(C, ot, event, properties, reports); + retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only); CTX_wm_region_set(C, ar); return retval; @@ -786,7 +798,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex CTX_wm_region_set(C, NULL); CTX_wm_area_set(C, NULL); - retval= wm_operator_invoke(C, ot, event, properties, reports); + retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only); CTX_wm_region_set(C, ar); CTX_wm_area_set(C, area); @@ -794,7 +806,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex } case WM_OP_EXEC_DEFAULT: case WM_OP_INVOKE_DEFAULT: - return wm_operator_invoke(C, ot, event, properties, reports); + return wm_operator_invoke(C, ot, event, properties, reports, poll_only); } } @@ -807,7 +819,7 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe { wmOperatorType *ot= WM_operatortype_find(opstring, 0); if(ot) - return wm_operator_call_internal(C, ot, context, properties, NULL); + return wm_operator_call_internal(C, ot, properties, NULL, context, FALSE); return 0; } @@ -839,7 +851,7 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA printf("error \"%s\" operator has no exec function, python cannot call it\n", op->type->name); #endif - retval= wm_operator_call_internal(C, ot, context, properties, reports); + retval= wm_operator_call_internal(C, ot, properties, reports, context, FALSE); /* keep the reports around if needed later */ if ( (retval & OPERATOR_RUNNING_MODAL) || @@ -1168,7 +1180,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand wmOperatorType *ot= WM_operatortype_find(event->keymap_idname, 0); if(ot) - retval= wm_operator_invoke(C, ot, event, properties, NULL); + retval= wm_operator_invoke(C, ot, event, properties, NULL, FALSE); } /* Finished and pass through flag as handled */ @@ -1421,7 +1433,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers) if(drop->poll(C, drag, event)) { drop->copy(drag, drop); - wm_operator_invoke(C, drop->ot, event, drop->ptr, NULL); + wm_operator_invoke(C, drop->ot, event, drop->ptr, NULL, FALSE); action |= WM_HANDLER_BREAK; } } From 5fafa570d06a920fcbd73b0e5b1944846cce43ed Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Nov 2010 13:13:31 +0000 Subject: [PATCH 144/163] warn if blender is compiled without python --- source/creator/creator.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/source/creator/creator.c b/source/creator/creator.c index aad70ea9178..ec0470f0710 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -1134,13 +1134,6 @@ int main(int argc, char **argv) #ifndef DISABLE_SDL BLI_setenv("SDL_VIDEODRIVER", "dummy"); -/* I think this is not necessary anymore (04-24-2010 neXyon) -#ifdef __linux__ - // On linux the default SDL driver dma often would not play - // use alsa if none is set - setenv("SDL_AUDIODRIVER", "alsa", 0); -#endif -*/ #endif } else { @@ -1161,7 +1154,8 @@ int main(int argc, char **argv) */ // TODO - U.pythondir - +#else + printf("\n* WARNING * - Blender compiled without Python!\nthis is not intended for typical usage\n\n"); #endif CTX_py_init_set(C, 1); From 6753882e42282ccf9dea49bdef2fc5455d852710 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Nov 2010 15:59:09 +0000 Subject: [PATCH 145/163] bugfix [#24009] Crash when switching area types and performing ops --- .../blender/editors/animation/anim_markers.c | 18 +++---- source/blender/editors/animation/anim_ops.c | 6 +-- .../blender/editors/gpencil/gpencil_paint.c | 16 +++++- source/blender/editors/include/ED_screen.h | 2 + source/blender/editors/interface/view2d_ops.c | 4 +- source/blender/editors/object/object_add.c | 5 +- .../editors/object/object_constraint.c | 5 ++ .../blender/editors/object/object_modifier.c | 11 ++-- .../blender/editors/render/render_shading.c | 54 ++++++++++--------- source/blender/editors/screen/screen_ops.c | 27 +++++++--- .../editors/sculpt_paint/paint_image.c | 1 + source/blender/editors/sculpt_paint/sculpt.c | 2 +- source/blender/editors/space_text/text_ops.c | 2 +- .../editors/space_view3d/view3d_edit.c | 2 +- .../windowmanager/intern/wm_operators.c | 3 +- 15 files changed, 97 insertions(+), 61 deletions(-) diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 055ee1c3392..2f5ad28c8f2 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -376,7 +376,7 @@ static void MARKER_OT_add(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_add; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -667,7 +667,7 @@ static void MARKER_OT_move(wmOperatorType *ot) ot->exec= ed_marker_move_exec; ot->invoke= ed_marker_move_invoke; ot->modal= ed_marker_move_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER; @@ -755,7 +755,7 @@ static void MARKER_OT_duplicate(wmOperatorType *ot) ot->exec= ed_marker_duplicate_exec; ot->invoke= ed_marker_duplicate_invoke; ot->modal= ed_marker_move_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -870,7 +870,7 @@ static void MARKER_OT_select(wmOperatorType *ot) /* api callbacks */ ot->invoke= ed_marker_select_invoke; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -958,7 +958,7 @@ static void MARKER_OT_select_border(wmOperatorType *ot) ot->invoke= WM_border_select_invoke; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1021,7 +1021,7 @@ static void MARKER_OT_select_all(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_select_all_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1069,7 +1069,7 @@ static void MARKER_OT_delete(wmOperatorType *ot) /* api callbacks */ ot->invoke= WM_operator_confirm; ot->exec= ed_marker_delete_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1114,7 +1114,7 @@ static void MARKER_OT_make_links_scene(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_make_links_scene_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -1163,7 +1163,7 @@ static void MARKER_OT_camera_bind(wmOperatorType *ot) /* api callbacks */ ot->exec= ed_marker_camera_bind_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index a80ea3e12bf..9b367481ef2 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -217,7 +217,7 @@ void ANIM_OT_previewrange_set(wmOperatorType *ot) ot->exec= previewrange_define_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -261,7 +261,7 @@ void ANIM_OT_previewrange_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= previewrange_clear_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -328,7 +328,7 @@ void ANIM_OT_time_toggle(wmOperatorType *ot) /* api callbacks */ ot->exec= toggle_time_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_animview_active; } /* ************************** registration **********************************/ diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 23e2755613c..d42e63bf354 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -141,8 +141,20 @@ static void gp_session_validatebuffer(tGPsdata *p); /* check if context is suitable for drawing */ static int gpencil_draw_poll (bContext *C) { - /* check if current context can support GPencil data */ - return (gpencil_data_get_pointers(C, NULL) != NULL); + if(ED_operator_regionactive(C)) { + /* check if current context can support GPencil data */ + if(gpencil_data_get_pointers(C, NULL) != NULL) { + return 1; + } + else { + CTX_wm_operator_poll_msg_set(C, "failed to find grease pencil data to draw into"); + } + } + else { + CTX_wm_operator_poll_msg_set(C, "active region not set"); + } + + return 0; } /* check if projecting strokes into 3d-geometry in the 3D-View */ diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index 6904daa9868..b679ca64a28 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -128,6 +128,7 @@ int ED_operator_scene_editable(struct bContext *C); int ED_operator_view3d_active(struct bContext *C); int ED_operator_region_view3d_active(struct bContext *C); +int ED_operator_animview_active(struct bContext *C); int ED_operator_timeline_active(struct bContext *C); int ED_operator_outliner_active(struct bContext *C); int ED_operator_outliner_active_no_editobject(struct bContext *C); @@ -143,6 +144,7 @@ int ED_operator_logic_active(struct bContext *C); int ED_operator_object_active(struct bContext *C); int ED_operator_object_active_editable(struct bContext *C); +int ED_operator_object_active_editable_mesh(struct bContext *C); int ED_operator_editmesh(struct bContext *C); int ED_operator_editmesh_view3d(struct bContext *C); int ED_operator_editmesh_region_view3d(struct bContext *C); diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 48523ec1a5a..a755cfaa9e3 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -689,7 +689,7 @@ void VIEW2D_OT_zoom_in(wmOperatorType *ot) /* api callbacks */ ot->invoke= view_zoomin_invoke; - ot->exec= view_zoomin_exec; +// ot->exec= view_zoomin_exec; // XXX, needs view_zoomdrag_init called first. ot->poll= view_zoom_poll; /* rna - must keep these in sync with the other operators */ @@ -746,7 +746,7 @@ void VIEW2D_OT_zoom_out(wmOperatorType *ot) /* api callbacks */ ot->invoke= view_zoomout_invoke; - ot->exec= view_zoomout_exec; +// ot->exec= view_zoomout_exec; // XXX, needs view_zoomdrag_init called first. ot->poll= view_zoom_poll; /* rna - must keep these in sync with the other operators */ diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 9c234266673..196440f29cf 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -607,7 +607,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) { Object *obedit= CTX_data_edit_object(C); View3D *v3d= CTX_wm_view3d(C); - RegionView3D *rv3d= NULL; + RegionView3D *rv3d= CTX_wm_region_view3d(C); int newob= 0; int enter_editmode; unsigned int layer; @@ -629,9 +629,6 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - if(v3d) - rv3d= CTX_wm_region(C)->regiondata; - /* v3d and rv3d are allowed to be NULL */ add_primitive_bone(CTX_data_scene(C), v3d, rv3d); diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c index d3b26100727..e222913e703 100644 --- a/source/blender/editors/object/object_constraint.c +++ b/source/blender/editors/object/object_constraint.c @@ -726,6 +726,11 @@ static int childof_clear_inverse_exec (bContext *C, wmOperator *op) bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_CHILDOF); bChildOfConstraint *data= (con) ? (bChildOfConstraint *)con->data : NULL; + if(data==NULL) { + BKE_report(op->reports, RPT_ERROR, "Childof constraint not found."); + return OPERATOR_CANCELLED; + } + /* simply clear the matrix */ unit_m4(data->invmat); diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c index 3d36ed9f45e..a9759c8c838 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -603,12 +603,13 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot) /************************ generic functions for operators using mod names and data context *********************/ -static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type) +static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type, int obtype_flag) { PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", rna_type); Object *ob= (ptr.id.data)?ptr.id.data:ED_object_active_context(C); if (!ob || ob->id.lib) return 0; + if (obtype_flag && ((1<type) & obtype_flag)==0) return 0; if (ptr.data && ((ID*)ptr.id.data)->lib) return 0; return 1; @@ -616,7 +617,7 @@ static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type) static int edit_modifier_poll(bContext *C) { - return edit_modifier_poll_generic(C, &RNA_Modifier); + return edit_modifier_poll_generic(C, &RNA_Modifier, 0); } static void edit_modifier_properties(wmOperatorType *ot) @@ -913,7 +914,7 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot) static int multires_poll(bContext *C) { - return edit_modifier_poll_generic(C, &RNA_MultiresModifier); + return edit_modifier_poll_generic(C, &RNA_MultiresModifier, (1<first; nu; nu=nu->next) { - if(nu->mat_nr==ob->actcol-1) { - if(nu->bezt) { - a= nu->pntsu; - bezt= nu->bezt; - while(a--) { - if(bezt->hide==0) { - if(select) { - bezt->f1 |= SELECT; - bezt->f2 |= SELECT; - bezt->f3 |= SELECT; - } - else { - bezt->f1 &= ~SELECT; - bezt->f2 &= ~SELECT; - bezt->f3 &= ~SELECT; + if(nurbs) { + for(nu= nurbs->first; nu; nu=nu->next) { + if(nu->mat_nr==ob->actcol-1) { + if(nu->bezt) { + a= nu->pntsu; + bezt= nu->bezt; + while(a--) { + if(bezt->hide==0) { + if(select) { + bezt->f1 |= SELECT; + bezt->f2 |= SELECT; + bezt->f3 |= SELECT; + } + else { + bezt->f1 &= ~SELECT; + bezt->f2 &= ~SELECT; + bezt->f3 &= ~SELECT; + } } + bezt++; } - bezt++; } - } - else if(nu->bp) { - a= nu->pntsu*nu->pntsv; - bp= nu->bp; - while(a--) { - if(bp->hide==0) { - if(select) bp->f1 |= SELECT; - else bp->f1 &= ~SELECT; + else if(nu->bp) { + a= nu->pntsu*nu->pntsv; + bp= nu->bp; + while(a--) { + if(bp->hide==0) { + if(select) bp->f1 |= SELECT; + else bp->f1 &= ~SELECT; + } + bp++; } - bp++; } } } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 845ef2bae4d..7cdd19e435b 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -132,17 +132,26 @@ int ED_operator_view3d_active(bContext *C) int ED_operator_region_view3d_active(bContext *C) { -#if 0 // correct but messes up poll() for menu items. if(CTX_wm_region_view3d(C)) return TRUE; -#else - if(ed_spacetype_test(C, SPACE_VIEW3D)) - return TRUE; -#endif + CTX_wm_operator_poll_msg_set(C, "expected a view3d region"); return FALSE; } +/* generic for any view2d which uses anim_ops */ +int ED_operator_animview_active(bContext *C) +{ + if(ED_operator_areaactive(C)) { + SpaceLink *sl= (SpaceLink *)CTX_wm_space_data(C); + if (sl && (ELEM5(sl->spacetype, SPACE_SEQ, SPACE_SOUND, SPACE_ACTION, SPACE_NLA, SPACE_TIME))) + return TRUE; + } + + CTX_wm_operator_poll_msg_set(C, "expected an timeline/animation area to be active"); + return 0; +} + int ED_operator_timeline_active(bContext *C) { return ed_spacetype_test(C, SPACE_TIME); @@ -229,6 +238,12 @@ int ED_operator_object_active_editable(bContext *C) return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW)); } +int ED_operator_object_active_editable_mesh(bContext *C) +{ + Object *ob = ED_object_active_context(C); + return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW) && ob->type == OB_MESH); +} + int ED_operator_editmesh(bContext *C) { Object *obedit= CTX_data_edit_object(C); @@ -2248,7 +2263,7 @@ static void SCREEN_OT_region_quadview(wmOperatorType *ot) /* api callbacks */ // ot->invoke= WM_operator_confirm; ot->exec= region_quadview_exec; - ot->poll= ED_operator_areaactive; + ot->poll= ED_operator_region_view3d_active; ot->flag= 0; } diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c index b6e7c823c9d..c5402a00942 100644 --- a/source/blender/editors/sculpt_paint/paint_image.c +++ b/source/blender/editors/sculpt_paint/paint_image.c @@ -5587,6 +5587,7 @@ void PAINT_OT_image_from_view(wmOperatorType *ot) /* api callbacks */ ot->exec= texture_paint_image_from_view_exec; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER; diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index fccee048525..efc39e6ae0a 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -3658,7 +3658,7 @@ static void SCULPT_OT_sculptmode_toggle(wmOperatorType *ot) /* api callbacks */ ot->exec= sculpt_toggle_mode; - ot->poll= ED_operator_object_active; + ot->poll= ED_operator_object_active_editable_mesh; ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index 1a0514c9735..32b71dbefb7 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -171,9 +171,9 @@ static int new_exec(bContext *C, wmOperator *UNUSED(op)) else if(st) { st->text= text; st->top= 0; + text_drawcache_tag_update(st, 1); } - text_drawcache_tag_update(st, 1); WM_event_add_notifier(C, NC_TEXT|NA_ADDED, text); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 18091942973..9fbfd12f902 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1366,7 +1366,7 @@ void VIEW3D_OT_view_all(wmOperatorType *ot) /* api callbacks */ ot->exec= view3d_all_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index fa300d51724..7fa58db54bb 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -3005,7 +3005,8 @@ static int redraw_timer_exec(bContext *C, wmOperator *op) for(a=0; a Date: Thu, 4 Nov 2010 16:00:28 +0000 Subject: [PATCH 146/163] Fix #24388: multires base mesh - MDisp should be re-allocated if face changed amount of vertices - Allocate disps array in layerSwap_mdisps to prevent loosing all highres data --- source/blender/blenkernel/BKE_multires.h | 7 ++ source/blender/blenkernel/intern/customdata.c | 20 +---- source/blender/blenkernel/intern/multires.c | 87 +++++++++++++++---- source/blender/editors/mesh/editmesh.c | 4 + 4 files changed, 83 insertions(+), 35 deletions(-) diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index 4a9b2ec5c0d..a05dce81fbc 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -37,6 +37,8 @@ struct Multires; struct MultiresModifierData; struct ModifierData; struct Object; +struct Scene; +struct MDisps; void multires_mark_as_modified(struct Object *ob); @@ -74,5 +76,10 @@ void multires_load_old_250(struct Mesh *); void multiresModifier_scale_disp(struct Scene *scene, struct Object *ob); void multiresModifier_prepare_join(struct Scene *scene, struct Object *ob, struct Object *to_ob); +int multires_mdisp_corners(struct MDisps *s); + +/* update multires data after topology changing */ +void multires_topology_changed(struct Object *ob); + #endif diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index c1aaa869876..cd476d8491b 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -50,6 +50,7 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_utildefines.h" +#include "BKE_multires.h" /* number of layers to add when growing a CustomData object */ #define CUSTOMDATA_GROW 5 @@ -441,19 +442,6 @@ static void mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, fl } #endif -static int mdisp_corners(MDisps *s) -{ - int lvl= 13; - - while(lvl > 0) { - int side = (1 << (lvl-1)) + 1; - if ((s->totdisp % (side*side)) == 0) return s->totdisp / (side*side); - lvl--; - } - - return 0; -} - static void layerSwap_mdisps(void *data, const int *ci) { MDisps *s = data; @@ -462,7 +450,7 @@ static void layerSwap_mdisps(void *data, const int *ci) if(s->disps) { int nverts= (ci[1] == 3) ? 4 : 3; /* silly way to know vertex count of face */ - corners= mdisp_corners(s); + corners= multires_mdisp_corners(s); cornersize= s->totdisp/corners; if(corners!=nverts) { @@ -470,8 +458,8 @@ static void layerSwap_mdisps(void *data, const int *ci) if it happened, just forgot displacement */ MEM_freeN(s->disps); - s->disps= NULL; - s->totdisp= 0; /* flag to update totdisp */ + s->totdisp= (s->totdisp/corners)*nverts; + s->disps= MEM_callocN(s->totdisp*sizeof(float)*3, "mdisp swap"); return; } diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index bf1cd9b9994..23a81e53728 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -304,34 +304,46 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm return result; } +/* reset the multires levels to match the number of mdisps */ +static int get_levels_from_disps(Object *ob) +{ + Mesh *me = ob->data; + MDisps *mdisp; + int i, totlvl= 0; + + mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS); + + for(i = 0; i < me->totface; ++i, ++mdisp) { + int S = me->mface[i].v4 ? 4 : 3; + + if(mdisp->totdisp == 0) continue; + + while(1) { + int side = (1 << (totlvl-1)) + 1; + int lvl_totdisp = side*side*S; + if(mdisp->totdisp == lvl_totdisp) + break; + else if(mdisp->totdisp < lvl_totdisp) + --totlvl; + else + ++totlvl; + + } + } + + return totlvl; +} + /* reset the multires levels to match the number of mdisps */ void multiresModifier_set_levels_from_disps(MultiresModifierData *mmd, Object *ob) { Mesh *me = ob->data; MDisps *mdisp; - int i; mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS); if(mdisp) { - for(i = 0; i < me->totface; ++i, ++mdisp) { - int S = me->mface[i].v4 ? 4 : 3; - - if(mdisp->totdisp == 0) continue; - - while(1) { - int side = (1 << (mmd->totlvl-1)) + 1; - int lvl_totdisp = side*side*S; - if(mdisp->totdisp == lvl_totdisp) - break; - else if(mdisp->totdisp < lvl_totdisp) - --mmd->totlvl; - else - ++mmd->totlvl; - - } - } - + mmd->totlvl = get_levels_from_disps(ob); mmd->lvl = MIN2(mmd->sculptlvl, mmd->totlvl); mmd->sculptlvl = MIN2(mmd->sculptlvl, mmd->totlvl); mmd->renderlvl = MIN2(mmd->renderlvl, mmd->totlvl); @@ -1555,6 +1567,19 @@ void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3]) subdm->release(subdm); } +int multires_mdisp_corners(MDisps *s) +{ + int lvl= 13; + + while(lvl > 0) { + int side = (1 << (lvl-1)) + 1; + if ((s->totdisp % (side*side)) == 0) return s->totdisp / (side*side); + lvl--; + } + + return 0; +} + void multiresModifier_scale_disp(Scene *scene, Object *ob) { float smat[3][3]; @@ -1578,3 +1603,27 @@ void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob) multires_apply_smat(scene, ob, mat); } + +/* update multires data after topology changing */ +void multires_topology_changed(Object *ob) +{ + Mesh *me= (Mesh*)ob->data; + MDisps *mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS); + int i; + + if(!mdisp) return; + + for(i = 0; i < me->totface; i++, mdisp++) { + int corners= multires_mdisp_corners(mdisp); + int nvert= me->mface[i].v4 ? 4 : 3; + + if(corners!=nvert) { + mdisp->totdisp= (mdisp->totdisp/corners)*nvert; + + if(mdisp->disps) + MEM_freeN(mdisp->disps); + + mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology"); + } + } +} diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c index 6665e82af19..d95a2570e80 100644 --- a/source/blender/editors/mesh/editmesh.c +++ b/source/blender/editors/mesh/editmesh.c @@ -54,6 +54,7 @@ #include "BKE_mesh.h" #include "BKE_paint.h" #include "BKE_report.h" +#include "BKE_multires.h" #include "ED_mesh.h" #include "ED_object.h" @@ -1306,6 +1307,9 @@ void load_editMesh(Scene *scene, Object *ob) } mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL); + + /* topology could be changed, ensure mdisps are ok */ + multires_topology_changed(ob); } void remake_editMesh(Scene *scene, Object *ob) From b2d3843992850560f03051d49528c287065cb8f1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Nov 2010 16:17:37 +0000 Subject: [PATCH 147/163] for some reason even though this resizes areas more evenly on my system (and works ok on Brecht's) theres a report that resizing views fail. [#24529] Views Resizing Problems now this is exactly like what it was before, hope its fixed. --- source/blender/editors/screen/screen_edit.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index a275de08356..e3da9af4e2d 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -647,14 +647,14 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey) * need some way to store these as floats internally and re-apply from there. */ tempf= ((float)sv->vec.x)*facx; sv->vec.x= (short)(tempf+0.5); - sv->vec.x+= AREAGRID-2; + sv->vec.x+= AREAGRID-1; sv->vec.x-= (sv->vec.x % AREAGRID); CLAMP(sv->vec.x, 0, winsizex); tempf= ((float)sv->vec.y)*facy; sv->vec.y= (short)(tempf+0.5); - sv->vec.y+= AREAGRID-2; + sv->vec.y+= AREAGRID-1; sv->vec.y-= (sv->vec.y % AREAGRID); CLAMP(sv->vec.y, 0, winsizey); From 228ed6f08653a4d91883b3734b2e7606463ce5b5 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 4 Nov 2010 17:02:25 +0000 Subject: [PATCH 148/163] Global definition of _LARGEFILE_SOURCE, _FILE_OFFSET_BITS and _LARGEFILE64_SOURCE at linux and win32/mingw platforms Needed to work properly with large files at 32bit system (display correct size in file browser, i.e.) This will also fix compilation with zlib 1.2.5 --- CMakeLists.txt | 6 ++++++ build_files/make/nan_compile.mk | 4 ++-- build_files/scons/config/freebsd7-config.py | 4 ++-- build_files/scons/config/freebsd8-config.py | 4 ++-- build_files/scons/config/freebsd9-config.py | 4 ++-- build_files/scons/config/linux2-config.py | 4 ++-- build_files/scons/config/linuxcross-config.py | 2 +- build_files/scons/config/win32-mingw-config.py | 2 +- source/blender/blenlib/BLI_storage.h | 11 ----------- 9 files changed, 18 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e91d93b92eb..bd99fe00539 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -317,6 +317,9 @@ IF(UNIX AND NOT APPLE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") ENDIF(WITH_OPENMP) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") + SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") SET(PLATFORM_LINKFLAGS "-pthread") @@ -558,6 +561,9 @@ IF(WIN32) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") ENDIF(WITH_OPENMP) + + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") ENDIF(CMAKE_COMPILER_IS_GNUCC) ADD_DEFINITIONS(-DFREE_WINDOWS) diff --git a/build_files/make/nan_compile.mk b/build_files/make/nan_compile.mk index 2931adb444c..c512c030476 100644 --- a/build_files/make/nan_compile.mk +++ b/build_files/make/nan_compile.mk @@ -173,8 +173,8 @@ ifeq ($(OS),linux) CCC ?= g++ # CFLAGS += -pipe # CCFLAGS += -pipe - CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 - CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 + CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE + CCFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE REL_CFLAGS += -O2 REL_CCFLAGS += -O2 NAN_DEPEND = true diff --git a/build_files/scons/config/freebsd7-config.py b/build_files/scons/config/freebsd7-config.py index afc71d01c94..46b27a99597 100644 --- a/build_files/scons/config/freebsd7-config.py +++ b/build_files/scons/config/freebsd7-config.py @@ -173,10 +173,10 @@ WITH_BF_OPENMP = True WITH_BF_RAYOPTIMIZATION = True BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread'] -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/freebsd8-config.py b/build_files/scons/config/freebsd8-config.py index d11618b6293..901d22daefc 100644 --- a/build_files/scons/config/freebsd8-config.py +++ b/build_files/scons/config/freebsd8-config.py @@ -173,10 +173,10 @@ WITH_BF_OPENMP = True WITH_BF_RAYOPTIMIZATION = True BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread'] -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/freebsd9-config.py b/build_files/scons/config/freebsd9-config.py index 2aadbf0f960..88b44e8c1ed 100644 --- a/build_files/scons/config/freebsd9-config.py +++ b/build_files/scons/config/freebsd9-config.py @@ -173,10 +173,10 @@ WITH_BF_OPENMP = True WITH_BF_RAYOPTIMIZATION = True BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse','-pthread'] -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE','-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/linux2-config.py b/build_files/scons/config/linux2-config.py index fd0364f9ce9..268cb36d9c7 100644 --- a/build_files/scons/config/linux2-config.py +++ b/build_files/scons/config/linux2-config.py @@ -189,10 +189,10 @@ CXX = 'g++' ##ifeq ($CPU),alpha) ## CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -mieee -CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] CPPFLAGS = [] -CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64'] +CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64','-D_LARGEFILE64_SOURCE'] if WITH_BF_FFMPEG: # libavutil needs UINT64_C() CXXFLAGS += ['-D__STDC_CONSTANT_MACROS', ] diff --git a/build_files/scons/config/linuxcross-config.py b/build_files/scons/config/linuxcross-config.py index 263cfd89a8b..9ea5db29aaf 100644 --- a/build_files/scons/config/linuxcross-config.py +++ b/build_files/scons/config/linuxcross-config.py @@ -174,7 +174,7 @@ BF_RAYOPTIMIZATION_SSE_FLAGS = ['-msse'] CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ] -CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS'] +CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE64_SOURCE'] CXXFLAGS = ['-pipe', '-funsigned-char', '-fno-strict-aliasing' ] REL_CFLAGS = [ '-O2' ] REL_CCFLAGS = [ '-O2' ] diff --git a/build_files/scons/config/win32-mingw-config.py b/build_files/scons/config/win32-mingw-config.py index 7189522809e..2913d888eaf 100644 --- a/build_files/scons/config/win32-mingw-config.py +++ b/build_files/scons/config/win32-mingw-config.py @@ -164,7 +164,7 @@ CXX = 'g++' CCFLAGS = [ '-pipe', '-funsigned-char', '-fno-strict-aliasing' ] -CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS'] +CPPFLAGS = ['-DWIN32', '-DFREE_WINDOWS', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE64_SOURCE'] CXXFLAGS = ['-pipe', '-mwindows', '-funsigned-char', '-fno-strict-aliasing' ] REL_CFLAGS = [ '-O2' ] REL_CCFLAGS = [ '-O2' ] diff --git a/source/blender/blenlib/BLI_storage.h b/source/blender/blenlib/BLI_storage.h index e443a853324..e52ea1600eb 100644 --- a/source/blender/blenlib/BLI_storage.h +++ b/source/blender/blenlib/BLI_storage.h @@ -29,17 +29,6 @@ #ifndef BLI_STORAGE_H #define BLI_STORAGE_H -/* NOTE: these have to be defined before including unistd.h! */ -#ifndef __APPLE__ -#ifndef WIN32 -#ifndef _LARGEFILE_SOURCE -#define _LARGEFILE_SOURCE -#define _LARGEFILE64_SOURCE -#define _FILE_OFFSET_BITS 64 -#endif -#endif -#endif - #ifdef WIN32 /* for size_t, only needed on win32 for some reason */ #include From 27de85af37f936030c73622b52d2f8ef084cb287 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Thu, 4 Nov 2010 17:02:32 +0000 Subject: [PATCH 149/163] Fix for [#24513] VSE curves displaced from effect when source is moved numerically --- source/blender/blenkernel/BKE_sequencer.h | 1 + source/blender/blenkernel/intern/sequencer.c | 2 +- source/blender/makesrna/intern/rna_sequencer.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index 568a36cdb2f..eef56e5503b 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -218,6 +218,7 @@ int seq_tx_test(struct Sequence * seq); int seq_single_check(struct Sequence *seq); void seq_single_fix(struct Sequence *seq); int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test); +void seq_translate(struct Scene *scene, struct Sequence *seq, int delta); struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq); void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs); void seq_dupe_animdata(struct Scene *scene, char *name_from, char *name_to); diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index ef470821d22..4a8c47f1f71 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -2848,7 +2848,7 @@ int seq_test_overlap(ListBase * seqbasep, Sequence *test) } -static void seq_translate(Scene *evil_scene, Sequence *seq, int delta) +void seq_translate(Scene *evil_scene, Sequence *seq, int delta) { seq_offset_animdata(evil_scene, seq, delta); seq->start += delta; diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 4f3af7e9cc1..681de0dc792 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -119,7 +119,7 @@ static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value) Sequence *seq= (Sequence*)ptr->data; Scene *scene= (Scene*)ptr->id.data; - seq->start= value; + seq_translate(scene, seq, value - seq->start); rna_Sequence_frame_change_update(scene, seq); } From 951882e289e43ae83ab892b2151b47c07fcfe218 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Thu, 4 Nov 2010 18:16:34 +0000 Subject: [PATCH 150/163] Fix for [#24510] VSE SceneStrip problem when rendering animation --- source/blender/render/intern/source/pipeline.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 0eecd9b9585..c90d581ca01 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2524,6 +2524,12 @@ static void do_render_seq(Render * re) /* if (R.rectz) freeN(R.rectz); */ /* R.rectz = BLI_dupallocN(ibuf->zbuf); */ /* } */ + + /* Same things as above, old rectf can hang around from previous render. */ + if(rr->rectf) { + MEM_freeN(rr->rectf); + rr->rectf= NULL; + } } if (recurs_depth == 0) { /* with nested scenes, only free on toplevel... */ From 8bbf27dfbd8c3831541653f14de4e8b0bdf83259 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Thu, 4 Nov 2010 20:17:38 +0000 Subject: [PATCH 151/163] Temporary fix for "freezing when pointcache is baked": * WM_timecursor is broken somehow, so pointcache baking makes the cursor disappear. * For user this seems like blender has frozen although it's just a matter of no progress indication. * This fix just sets the default "busy" cursor for the whole duration of baking and reports progress in the console. * If there's and easy fix for this then it should probably be done straight away, but I want to re-implement baking using the job system soon anyways, so a proper fix for this is not strictly necessary. --- source/blender/blenkernel/intern/pointcache.c | 4 ++++ source/blender/editors/physics/physics_pointcache.c | 12 +++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 002e8c9de0f..35e0441739e 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -2607,6 +2607,8 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker) thread_data.break_operation = FALSE; thread_data.thread_ended = FALSE; old_progress = -1; + + WM_cursor_wait(1); if(G.background) { ptcache_make_cache_thread((void*)&thread_data); @@ -2690,6 +2692,8 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker) else if (baker->progressend) baker->progressend(baker->progresscontext); + WM_cursor_wait(0); + /* TODO: call redraw all windows somehow */ } /* Helpers */ diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c index 9e39862cf5d..519a85fe39a 100644 --- a/source/blender/editors/physics/physics_pointcache.c +++ b/source/blender/editors/physics/physics_pointcache.c @@ -83,7 +83,7 @@ void bake_console_progress(void *UNUSED(arg), int nr) void bake_console_progress_end(void *UNUSED(arg)) { - printf("\n"); + printf("\rbake: done!\n"); } static int ptcache_bake_all_exec(bContext *C, wmOperator *op) @@ -103,7 +103,10 @@ static int ptcache_bake_all_exec(bContext *C, wmOperator *op) baker.break_test = cache_break_test; baker.break_data = NULL; - if (win) { + /* Disabled for now as this doesn't work properly, + * and pointcache baking will be reimplemented with + * the job system soon anyways. */ + if (win && 0) { baker.progressbar = (void (*)(void *, int))WM_timecursor; baker.progressend = (void (*)(void *))WM_cursor_restore; baker.progresscontext = win; @@ -201,7 +204,10 @@ static int ptcache_bake_exec(bContext *C, wmOperator *op) baker.break_test = cache_break_test; baker.break_data = NULL; - if (win) { + /* Disabled for now as this doesn't work properly, + * and pointcache baking will be reimplemented with + * the job system soon anyways. */ + if (win && 0) { baker.progressbar = (void (*)(void *, int))WM_timecursor; baker.progressend = (void (*)(void *))WM_cursor_restore; baker.progresscontext = win; From 52865a51408fba9c871caff82ca0acb71a37d2d7 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 5 Nov 2010 00:09:45 +0000 Subject: [PATCH 152/163] Bugfix #24535: File saved with NLA Strip in Tweakmode crashes on reload Now the active strip doesn't just get cleared on fileload, but is relinked properly. I had originally intended that files shouldn't be able to be saved with NLA data still in Tweakmode, but this turns out to be a bit more troublesome to get working as that would make undo keep popping out of this mode too. Also reverting 32743 (bugfix for 24418), which was a hack around this. --- source/blender/blenkernel/intern/anim_sys.c | 5 ----- source/blender/blenloader/intern/readfile.c | 10 +++++++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 52c5edc53a0..e03799ff938 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -1641,11 +1641,6 @@ static void animsys_evaluate_nla (PointerRNA *ptr, AnimData *adt, float ctime) if ((nlt) && !(adt->flag & ADT_NLA_EDIT_NOMAP)) { /* edit active action in-place according to its active strip, so copy the data */ - - /* this is cleared on undo */ - if(adt->actstrip == NULL) { - adt->actstrip= BKE_nlastrip_find_active(nlt); - } memcpy(&dummy_strip, adt->actstrip, sizeof(NlaStrip)); dummy_strip.next = dummy_strip.prev = NULL; } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 4f9954b4156..7861eb08ea4 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1976,9 +1976,13 @@ static void direct_link_animdata(FileData *fd, AnimData *adt) link_list(fd, &adt->nla_tracks); direct_link_nladata(fd, &adt->nla_tracks); - /* clear temp pointers that may have been set... */ - // TODO: it's probably only a small cost to reload this anyway... - adt->actstrip= NULL; + /* relink active strip - even though strictly speaking this should only be used + * if we're in 'tweaking mode', we need to be able to have this loaded back for + * undo, but also since users may not exit tweakmode before saving (#24535) + */ + // TODO: it's not really nice that anyone should be able to save the file in this + // state, but it's going to be too hard to enforce this single case... + adt->actstrip= newdataadr(fd, adt->actstrip); } /* ************ READ MOTION PATHS *************** */ From da402c937ea3e86159ab22c3efd4f235c5533c08 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 01:47:55 +0000 Subject: [PATCH 153/163] fix for linking the player, also fixes building without python and bullet. --- source/blenderplayer/CMakeLists.txt | 2 +- source/blenderplayer/bad_level_call_stubs/stubs.c | 1 + .../gameengine/GamePlayer/ghost/GPG_Application.cpp | 11 +++++++++-- source/gameengine/GamePlayer/ghost/GPG_ghost.cpp | 3 ++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/source/blenderplayer/CMakeLists.txt b/source/blenderplayer/CMakeLists.txt index b1dbde8d4b1..6c97c2a4465 100644 --- a/source/blenderplayer/CMakeLists.txt +++ b/source/blenderplayer/CMakeLists.txt @@ -74,8 +74,8 @@ IF(UNIX) bf_converter bf_ketsji bf_bullet + bf_dummy bf_common - bf_dummy bf_logic bf_rasterizer bf_oglrasterizer diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c index 7bef93cc4d8..7f0a57be371 100644 --- a/source/blenderplayer/bad_level_call_stubs/stubs.c +++ b/source/blenderplayer/bad_level_call_stubs/stubs.c @@ -358,6 +358,7 @@ struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType * int WM_operator_call_py(struct bContext *C, struct wmOperatorType *ot, int context, struct PointerRNA *properties, struct ReportList *reports){return 0;} int WM_operatortype_remove(const char *idname){return 0;} int WM_operator_poll(struct bContext *C, struct wmOperatorType *ot){return 0;} +int WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, int context){return 0;} int WM_operator_props_popup(struct bContext *C, struct wmOperator *op, struct wmEvent *event){return 0;} void WM_operator_properties_free(struct PointerRNA *ptr){} void WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring){} diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index 506601f478b..197e31af188 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -603,8 +603,11 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode) m_ketsjiengine->SetNetworkDevice(m_networkdevice); m_ketsjiengine->SetTimingDisplay(frameRate, false, false); - +#ifdef WITH_PYTHON CValue::SetDeprecationWarnings(nodepwarnings); +#else + (void)nodepwarnings; +#endif m_ketsjiengine->SetUseFixedTime(fixed_framerate); m_ketsjiengine->SetTimingDisplay(frameRate, profile, properties); @@ -687,10 +690,11 @@ bool GPG_Application::startEngine(void) if(m_startScene->gm.stereoflag == STEREO_DOME) m_ketsjiengine->InitDome(m_startScene->gm.dome.res, m_startScene->gm.dome.mode, m_startScene->gm.dome.angle, m_startScene->gm.dome.resbuf, m_startScene->gm.dome.tilt, m_startScene->gm.dome.warptext); +#ifdef WITH_PYTHON // Set the GameLogic.globalDict from marshal'd data, so we can // load new blend files and keep data in GameLogic.globalDict loadGamePythonConfig(m_pyGlobalDictString, m_pyGlobalDictString_Length); - +#endif m_sceneconverter->ConvertScene( startscene, m_rendertools, @@ -723,6 +727,7 @@ bool GPG_Application::startEngine(void) void GPG_Application::stopEngine() { +#ifdef WITH_PYTHON // GameLogic.globalDict gets converted into a buffer, and sorted in // m_pyGlobalDictString so we can restore after python has stopped // and started between .blend file loads. @@ -735,6 +740,8 @@ void GPG_Application::stopEngine() // when exiting the mainloop exitGamePythonScripting(); +#endif + m_ketsjiengine->StopEngine(); m_networkdevice->Disconnect(); diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp index 94142e7a604..45eea75eb2f 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp @@ -822,8 +822,9 @@ int main(int argc, char** argv) BLI_strncpy(pathname, maggie->name, sizeof(pathname)); BLI_strncpy(G.main->name, maggie->name, sizeof(G.main->name)); +#ifdef WITH_PYTHON setGamePythonPath(G.main->name); - +#endif if (firstTimeRunning) { firstTimeRunning = false; From c7ed7fcbe1b09fc06a0b27588ffb298e09f2b162 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 02:42:33 +0000 Subject: [PATCH 154/163] fix for missing NULL check with brush poll, reported by Mike S. --- source/blender/makesrna/intern/rna_sculpt_paint.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 0fe3972104e..8f83e0b39a4 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -167,7 +167,7 @@ static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value) * but for 2D view image painting we always want texture brushes * this is not quite correct since you could be in object weightpaint * mode at the same time as the 2D image view, but for now its *good enough* */ - if(ob->mode & OB_MODE_ALL_PAINT) { + if(ob && ob->mode & OB_MODE_ALL_PAINT) { return ob->mode & brush->ob_mode; } else { From 96a980ea1c6942913f3e90feb993333dc0824f75 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 02:49:01 +0000 Subject: [PATCH 155/163] incorrect poll function for clearing/applying loc/rot/scale. Without an active object it wasn't possible to clear location on the selected objects for eg. --- source/blender/editors/object/object_transform.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 9d6b5e5002b..bd8a7f99978 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -120,7 +120,7 @@ void OBJECT_OT_location_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_location_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -265,7 +265,7 @@ void OBJECT_OT_rotation_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_rotation_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -331,7 +331,7 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_scale_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -373,7 +373,7 @@ void OBJECT_OT_origin_clear(wmOperatorType *ot) /* api callbacks */ ot->exec= object_origin_clear_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -600,7 +600,7 @@ void OBJECT_OT_visual_transform_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= visual_transform_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -620,7 +620,7 @@ void OBJECT_OT_location_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= location_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -640,7 +640,7 @@ void OBJECT_OT_scale_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= scale_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -660,7 +660,7 @@ void OBJECT_OT_rotation_apply(wmOperatorType *ot) /* api callbacks */ ot->exec= rotation_apply_exec; - ot->poll= ED_operator_object_active_editable; + ot->poll= ED_operator_scene_editable; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; From f0b01220e5f50da7eaab5a9f3a35e03ebfdbdaff Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 03:54:54 +0000 Subject: [PATCH 156/163] 'Continue' zoom method for 2d views wasn't continuously updating. added a timer so it works like the 3D view. --- source/blender/editors/interface/view2d_ops.c | 186 ++++++++++-------- 1 file changed, 108 insertions(+), 78 deletions(-) diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index a755cfaa9e3..5500d9aae8d 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -46,6 +46,8 @@ #include "UI_view2d.h" +#include "PIL_time.h" /* USER_ZOOM_CONT */ + static int view2d_poll(bContext *C) { ARegion *ar= CTX_wm_region(C); @@ -493,7 +495,11 @@ void VIEW2D_OT_scroll_up(wmOperatorType *ot) typedef struct v2dViewZoomData { View2D *v2d; /* view2d we're operating in */ ARegion *ar; - + + /* needed for continuous zoom */ + wmTimer *timer; + double timer_lastdraw; + int lastx, lasty; /* previous x/y values of mouse in window */ float dx, dy; /* running tally of previous delta values (for obtaining final zoom) */ float mx_2d, my_2d; /* initial mouse location in v2d coords */ @@ -773,7 +779,18 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) /* get amount to move view by */ dx= RNA_float_get(op->ptr, "deltax"); dy= RNA_float_get(op->ptr, "deltay"); - + + /* continous zoom shouldn't move that fast... */ + if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? + double time= PIL_check_seconds_timer(); + float time_step= (float)(time - vzd->timer_lastdraw); + + dx *= time_step * 0.5f; + dy *= time_step * 0.5f; + + vzd->timer_lastdraw= time; + } + /* only move view on an axis if change is allowed */ if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) { if (v2d->keepofs & V2D_LOCKOFS_X) { @@ -823,9 +840,14 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op) } /* cleanup temp customdata */ -static void view_zoomdrag_exit(wmOperator *op) +static void view_zoomdrag_exit(bContext *C, wmOperator *op) { if (op->customdata) { + v2dViewZoomData *vzd= op->customdata; + + if(vzd->timer) + WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vzd->timer); + MEM_freeN(op->customdata); op->customdata= NULL; } @@ -838,7 +860,7 @@ static int view_zoomdrag_exec(bContext *C, wmOperator *op) return OPERATOR_PASS_THROUGH; view_zoomdrag_apply(C, op); - view_zoomdrag_exit(op); + view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; } @@ -873,7 +895,7 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_float_set(op->ptr, "deltay", dy); view_zoomdrag_apply(C, op); - view_zoomdrag_exit(op); + view_zoomdrag_exit(C, op); return OPERATOR_FINISHED; } @@ -902,6 +924,12 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event) /* add temp handler */ WM_event_add_modal_handler(C, op); + if (U.viewzoom == USER_ZOOM_CONT) { + /* needs a timer to continue redrawing */ + vzd->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); + vzd->timer_lastdraw= PIL_check_seconds_timer(); + } + return OPERATOR_RUNNING_MODAL; } @@ -912,85 +940,87 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, wmEvent *event) View2D *v2d= vzd->v2d; /* execute the events */ - switch (event->type) { - case MOUSEMOVE: - { - float dx, dy; + if (event->type == TIMER && event->customdata == vzd->timer) { + view_zoomdrag_apply(C, op); + } + else if(event->type == MOUSEMOVE) { + float dx, dy; + + /* calculate new delta transform, based on zooming mode */ + if (U.viewzoom == USER_ZOOM_SCALE) { + /* 'scale' zooming */ + float dist; - /* calculate new delta transform, based on zooming mode */ - if (U.viewzoom == USER_ZOOM_SCALE) { - /* 'scale' zooming */ - float dist; - - /* x-axis transform */ - dist = (v2d->mask.xmax - v2d->mask.xmin) / 2.0f; - dx= 1.0f - ((float)fabs(vzd->lastx - dist) + 2.0f) / ((float)fabs(event->x - dist) + 2.0f); - dx*= 0.5f * (v2d->cur.xmax - v2d->cur.xmin); - - /* y-axis transform */ - dist = (v2d->mask.ymax - v2d->mask.ymin) / 2.0f; - dy= 1.0f - ((float)fabs(vzd->lasty - dist) + 2.0f) / ((float)fabs(event->y - dist) + 2.0f); - dy*= 0.5f * (v2d->cur.ymax - v2d->cur.ymin); - } - else { - /* 'continuous' or 'dolly' */ - float fac; - - /* x-axis transform */ - fac= 0.01f * (event->x - vzd->lastx); - dx= fac * (v2d->cur.xmax - v2d->cur.xmin); - - /* y-axis transform */ - fac= 0.01f * (event->y - vzd->lasty); - dy= fac * (v2d->cur.ymax - v2d->cur.ymin); - - /* continous zoom shouldn't move that fast... */ - if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? - dx /= 20.0f; - dy /= 20.0f; - } - } + /* x-axis transform */ + dist = (v2d->mask.xmax - v2d->mask.xmin) / 2.0f; + dx= 1.0f - ((float)fabs(vzd->lastx - dist) + 2.0f) / ((float)fabs(event->x - dist) + 2.0f); + dx*= 0.5f * (v2d->cur.xmax - v2d->cur.xmin); - /* set transform amount, and add current deltas to stored total delta (for redo) */ - RNA_float_set(op->ptr, "deltax", dx); - RNA_float_set(op->ptr, "deltay", dy); - vzd->dx += dx; - vzd->dy += dy; - - /* store mouse coordinates for next time, if not doing continuous zoom - * - continuous zoom only depends on distance of mouse to starting point to determine rate of change - */ - if (U.viewzoom != USER_ZOOM_CONT) { // XXX store this setting as RNA prop? - vzd->lastx= event->x; - vzd->lasty= event->y; - } - - /* apply zooming */ - view_zoomdrag_apply(C, op); + /* y-axis transform */ + dist = (v2d->mask.ymax - v2d->mask.ymin) / 2.0f; + dy= 1.0f - ((float)fabs(vzd->lasty - dist) + 2.0f) / ((float)fabs(event->y - dist) + 2.0f); + dy*= 0.5f * (v2d->cur.ymax - v2d->cur.ymin); } - break; + else { + /* 'continuous' or 'dolly' */ + float fac; - case LEFTMOUSE: - case MIDDLEMOUSE: - if (event->val==KM_RELEASE) { - /* for redo, store the overall deltas - need to respect zoom-locks here... */ - if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) - RNA_float_set(op->ptr, "deltax", vzd->dx); - else - RNA_float_set(op->ptr, "deltax", 0); - - if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) - RNA_float_set(op->ptr, "deltay", vzd->dy); - else - RNA_float_set(op->ptr, "deltay", 0); + /* x-axis transform */ + fac= 0.01f * (event->x - vzd->lastx); + dx= fac * (v2d->cur.xmax - v2d->cur.xmin); + + /* y-axis transform */ + fac= 0.01f * (event->y - vzd->lasty); + dy= fac * (v2d->cur.ymax - v2d->cur.ymin); +#if 0 + /* continous zoom shouldn't move that fast... */ + if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop? + double time= PIL_check_seconds_timer(); + float time_step= (float)(time - vzd->timer_lastdraw); + + dx /= (0.1f / time_step); + dy /= (0.1f / time_step); - /* free customdata */ - view_zoomdrag_exit(op); - WM_cursor_restore(CTX_wm_window(C)); - - return OPERATOR_FINISHED; + vzd->timer_lastdraw= time; } - break; +#endif + } + + /* set transform amount, and add current deltas to stored total delta (for redo) */ + RNA_float_set(op->ptr, "deltax", dx); + RNA_float_set(op->ptr, "deltay", dy); + vzd->dx += dx; + vzd->dy += dy; + + /* store mouse coordinates for next time, if not doing continuous zoom + * - continuous zoom only depends on distance of mouse to starting point to determine rate of change + */ + if (U.viewzoom != USER_ZOOM_CONT) { // XXX store this setting as RNA prop? + vzd->lastx= event->x; + vzd->lasty= event->y; + } + + /* apply zooming */ + view_zoomdrag_apply(C, op); + } else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE)) { + if (event->val==KM_RELEASE) { + /* for redo, store the overall deltas - need to respect zoom-locks here... */ + if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) + RNA_float_set(op->ptr, "deltax", vzd->dx); + else + RNA_float_set(op->ptr, "deltax", 0); + + if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) + RNA_float_set(op->ptr, "deltay", vzd->dy); + else + RNA_float_set(op->ptr, "deltay", 0); + + /* free customdata */ + view_zoomdrag_exit(C, op); + WM_cursor_restore(CTX_wm_window(C)); + + return OPERATOR_FINISHED; + } } return OPERATOR_RUNNING_MODAL; From 36b8ebceb5020c0b697f4b3d23a3ac319ea5ab53 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 04:18:53 +0000 Subject: [PATCH 157/163] added back include file globbing for cmake, thought this was needed for MSVC only but turns out QtCreator also needs this else it wont index headers. --- build_files/cmake/macros.cmake | 71 +++++++++++++++++----------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index afd5f302314..42aa9d1f8b5 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -1,45 +1,44 @@ -IF(MSVC) - # only MSVC uses SOURCE_GROUP - MACRO(BLENDERLIB_NOLIST - name - sources - includes) +# only MSVC uses SOURCE_GROUP +MACRO(BLENDERLIB_NOLIST + name + sources + includes) - MESSAGE(STATUS "Configuring library ${name}") + MESSAGE(STATUS "Configuring library ${name}") - # Gather all headers - FILE(GLOB_RECURSE INC_ALL *.h) - - INCLUDE_DIRECTORIES(${includes}) - ADD_LIBRARY(${name} ${INC_ALL} ${sources}) + # Gather all headers + FILE(GLOB_RECURSE INC_ALL *.h) + + INCLUDE_DIRECTORIES(${includes}) + ADD_LIBRARY(${name} ${INC_ALL} ${sources}) - # Group by location on disk - SOURCE_GROUP(Files FILES CMakeLists.txt) - SET(ALL_FILES ${sources} ${INC_ALL}) - FOREACH(SRC ${ALL_FILES}) - STRING(REGEX REPLACE ${CMAKE_CURRENT_SOURCE_DIR} "Files" REL_DIR "${SRC}") - STRING(REGEX REPLACE "[\\\\/][^\\\\/]*$" "" REL_DIR "${REL_DIR}") - STRING(REGEX REPLACE "^[\\\\/]" "" REL_DIR "${REL_DIR}") - IF(REL_DIR) - SOURCE_GROUP(${REL_DIR} FILES ${SRC}) - ELSE(REL_DIR) - SOURCE_GROUP(Files FILES ${SRC}) - ENDIF(REL_DIR) - ENDFOREACH(SRC) - ENDMACRO(BLENDERLIB_NOLIST) -ELSE(MSVC) + # Group by location on disk + SOURCE_GROUP(Files FILES CMakeLists.txt) + SET(ALL_FILES ${sources} ${INC_ALL}) + FOREACH(SRC ${ALL_FILES}) + STRING(REGEX REPLACE ${CMAKE_CURRENT_SOURCE_DIR} "Files" REL_DIR "${SRC}") + STRING(REGEX REPLACE "[\\\\/][^\\\\/]*$" "" REL_DIR "${REL_DIR}") + STRING(REGEX REPLACE "^[\\\\/]" "" REL_DIR "${REL_DIR}") + IF(REL_DIR) + SOURCE_GROUP(${REL_DIR} FILES ${SRC}) + ELSE(REL_DIR) + SOURCE_GROUP(Files FILES ${SRC}) + ENDIF(REL_DIR) + ENDFOREACH(SRC) +ENDMACRO(BLENDERLIB_NOLIST) - MACRO(BLENDERLIB_NOLIST - name - sources - includes) +# # works fine but having the includes listed is helpful for IDE's (QtCreator/MSVC) +# MACRO(BLENDERLIB_NOLIST +# name +# sources +# includes) +# +# MESSAGE(STATUS "Configuring library ${name}") +# INCLUDE_DIRECTORIES(${includes}) +# ADD_LIBRARY(${name} ${sources}) +# ENDMACRO(BLENDERLIB_NOLIST) - MESSAGE(STATUS "Configuring library ${name}") - INCLUDE_DIRECTORIES(${includes}) - ADD_LIBRARY(${name} ${sources}) - ENDMACRO(BLENDERLIB_NOLIST) -ENDIF(MSVC) MACRO(BLENDERLIB name From 7569a25a4f00575c690968eeb0ff53b6b4ab890b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 05:26:34 +0000 Subject: [PATCH 158/163] centralize function for calculating pixel size. (no functional changes) --- source/blender/editors/include/ED_view3d.h | 2 +- .../blender/editors/space_view3d/drawobject.c | 21 ++++--------------- .../editors/space_view3d/view3d_view.c | 9 ++++++++ source/blender/editors/transform/transform.h | 1 - .../editors/transform/transform_generics.c | 14 ------------- .../editors/transform/transform_manipulator.c | 13 +----------- .../editors/transform/transform_snap.c | 6 +++--- 7 files changed, 18 insertions(+), 48 deletions(-) diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index d2c13b7bf85..afc6787010a 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -118,6 +118,7 @@ void lattice_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userDa void ED_view3d_local_clipping(struct RegionView3D *rv3d, float mat[][4]); int view3d_test_clipping(struct RegionView3D *rv3d, float *vec, int local); void view3d_align_axis_to_vector(struct View3D *v3d, struct RegionView3D *rv3d, int axisidx, float vec[3]); +float view3d_pixel_size(struct RegionView3D *rv3d, const float co[3]); void drawcircball(int mode, float *cent, float rad, float tmat[][4]); @@ -164,7 +165,6 @@ void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct AR struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey, unsigned int flag); struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype); -void view3d_clipping_local(struct RegionView3D *rv3d, float mat[][4]); Base *ED_view3d_give_base_under_cursor(struct bContext *C, short *mval); void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d59f4066680..7d30c404bf0 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -528,14 +528,7 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) /* circle for object centers, special_color is for library or ob users */ static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color) { - float size= rv3d->pixsize*((float)U.obcenter_dia*0.5f); - float vec[3]; - - vec[0]= rv3d->persmat[0][3]; - vec[1]= rv3d->persmat[1][3]; - vec[2]= rv3d->persmat[2][3]; - - size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; + const float size= view3d_pixel_size(rv3d, co) * (float)U.obcenter_dia * 0.5f; /* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */ if(v3d->zbuf) glDepthFunc(GL_ALWAYS); @@ -906,9 +899,10 @@ static void draw_transp_spot_volume(Lamp *la, float x, float z) static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) { Object *ob= base->object; + const float pixsize= view3d_pixel_size(rv3d, ob->obmat[3]); Lamp *la= ob->data; float vec[3], lvec[3], vvec[3], circrad, x,y,z; - float pixsize, lampsize; + float lampsize; float imat[4][4], curcol[4]; char col[4]; int drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && la->type == LA_SPOT && (la->mode & LA_SHOW_CONE)); @@ -924,8 +918,6 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, glLoadMatrixf(rv3d->viewmat); /* lets calculate the scale: */ - pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3]; - pixsize*= rv3d->pixsize; lampsize= pixsize*((float)U.obcenter_dia*0.5f); /* and view aligned matrix: */ @@ -3552,12 +3544,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv case PART_DRAW_CROSS: case PART_DRAW_AXIS: /* lets calculate the scale: */ - pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3]; - pixsize*= rv3d->pixsize; - if(part->draw_size==0.0) - pixsize*=2.0; - else - pixsize*=part->draw_size; + pixsize= view3d_pixel_size(rv3d, ob->obmat[3]); if(draw_as==PART_DRAW_AXIS) create_cdata = 1; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 2e75b5163f9..1be7816f5ea 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1873,3 +1873,12 @@ int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d) { return (rv3d->persp == RV3D_ORTHO || (v3d->camera && ((Camera *)v3d->camera->data)->type == CAM_ORTHO)); } + +float view3d_pixel_size(struct RegionView3D *rv3d, const float co[3]) +{ + return (rv3d->persmat[3][3] + ( + rv3d->persmat[0][3]*co[0] + + rv3d->persmat[1][3]*co[1] + + rv3d->persmat[2][3]*co[2]) + ) * rv3d->pixsize; +} diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index ec18b2f81a0..b9f3382e9d3 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -557,7 +557,6 @@ void flushTransSeq(TransInfo *t); /*********************** exported from transform_manipulator.c ********** */ int gimbal_axis(struct Object *ob, float gmat[][3]); /* return 0 when no gimbal for selection */ int calc_manipulator_stats(const struct bContext *C); -float get_drawsize(struct ARegion *ar, float *co); /*********************** TransData Creation and General Handling *********** */ void createTransData(struct bContext *C, TransInfo *t); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 7ff93be87ee..22888a6b007 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1568,17 +1568,3 @@ void calculatePropRatio(TransInfo *t) strcpy(t->proptext, ""); } } - -float get_drawsize(ARegion *ar, float *co) -{ - RegionView3D *rv3d= ar->regiondata; - float size= rv3d->pixsize * 5; - float vec[3]; - - vec[0]= rv3d->persmat[0][3]; - vec[1]= rv3d->persmat[1][3]; - vec[2]= rv3d->persmat[2][3]; - - size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; - return size; -} diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 23b4cf5fd99..7ed569dab93 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -1401,17 +1401,6 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov /* ********************************************* */ -static float get_manipulator_drawsize(ARegion *ar) -{ - RegionView3D *rv3d= ar->regiondata; - float size = get_drawsize(ar, rv3d->twmat[3]); - - size*= (float)U.tw_size; - - return size; -} - - /* main call, does calc centers & orientation too */ /* uses global G.moving */ static int drawflags= 0xFFFF; // only for the calls below, belongs in scene...? @@ -1459,7 +1448,7 @@ void BIF_draw_manipulator(const bContext *C) break; } - mul_mat3_m4_fl(rv3d->twmat, get_manipulator_drawsize(ar)); + mul_mat3_m4_fl(rv3d->twmat, view3d_pixel_size(rv3d, rv3d->twmat[3]) * U.tw_size * 5.0f); } test_manipulator_axis(C); diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index adaaf7c9de6..06a2db527fd 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -146,16 +146,16 @@ void drawSnapping(const struct bContext *C, TransInfo *t) glDisable(GL_DEPTH_TEST); - size = 0.5f * UI_GetThemeValuef(TH_VERTEX_SIZE); + size = 2.5f * UI_GetThemeValuef(TH_VERTEX_SIZE); invert_m4_m4(imat, rv3d->viewmat); for (p = t->tsnap.points.first; p; p = p->next) { - drawcircball(GL_LINE_LOOP, p->co, size * get_drawsize(t->ar, p->co), imat); + drawcircball(GL_LINE_LOOP, p->co, view3d_pixel_size(rv3d, p->co) * size, imat); } if (t->tsnap.status & POINT_INIT) { - drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, size * get_drawsize(t->ar, t->tsnap.snapPoint), imat); + drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, view3d_pixel_size(rv3d, t->tsnap.snapPoint) * size, imat); } /* draw normal if needed */ From 0ebdbdac00fda4ceb7f8a53e3b944575a8d76133 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 06:33:33 +0000 Subject: [PATCH 159/163] workaround/fix for [#24540] Adding the path to an image Editor in the file preferences window messes up the path when selecting paths from the user preferences always default relative option to off. otherwise you get paths like '//..\..\..\..\Program Files\GIMP-2.0\bin\gimp-2.6.exe' --- source/blender/editors/space_buttons/buttons_ops.c | 10 ++++++---- source/blender/makesrna/intern/rna_userdef.c | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c index e72446366fe..a461fdcd9c6 100644 --- a/source/blender/editors/space_buttons/buttons_ops.c +++ b/source/blender/editors/space_buttons/buttons_ops.c @@ -175,10 +175,12 @@ static int file_browse_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_string_set(op->ptr, "filepath", str); MEM_freeN(str); - if(RNA_struct_find_property(op->ptr, "relative_path")) - if(!RNA_property_is_set(op->ptr, "relative_path")) - RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS); - + if(RNA_struct_find_property(op->ptr, "relative_path")) { + if(!RNA_property_is_set(op->ptr, "relative_path")) { + /* annoying exception!, if were dealign with the user prefs, default relative to be off */ + RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS && (ptr.data != &U)); + } + } WM_event_add_fileselect(C, op); return OPERATOR_RUNNING_MODAL; diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 161ce2e198c..97bf19f019a 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -2763,11 +2763,11 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Temporary Directory", "The directory for storing temporary save files"); RNA_def_property_update(prop, 0, "rna_userdef_temp_update"); - prop= RNA_def_property(srna, "image_editor", PROP_STRING, PROP_DIRPATH); + prop= RNA_def_property(srna, "image_editor", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "image_editor"); RNA_def_property_ui_text(prop, "Image Editor", "Path to an image editor"); - prop= RNA_def_property(srna, "animation_player", PROP_STRING, PROP_DIRPATH); + prop= RNA_def_property(srna, "animation_player", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "anim_player"); RNA_def_property_ui_text(prop, "Animation Player", "Path to a custom animation/frame sequence player"); From e179c92a278160ad3a1523a17ef272f6f3547f46 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 07:35:21 +0000 Subject: [PATCH 160/163] tedious string copying changes - use sizeof() in more places. - fixed some off by 1 bugs copying strings. setting curve font family for instance was 1 char too short. - replace strncpy and strcpy with BLI_strncpy --- source/blender/blenkernel/intern/action.c | 8 ++++---- source/blender/blenkernel/intern/anim_sys.c | 11 ++++------- source/blender/blenkernel/intern/armature.c | 2 +- source/blender/blenkernel/intern/blender.c | 4 ++-- source/blender/blenkernel/intern/constraint.c | 2 +- source/blender/blenkernel/intern/curve.c | 2 +- source/blender/blenkernel/intern/font.c | 2 +- source/blender/blenkernel/intern/ipo.c | 6 +++--- source/blender/blenkernel/intern/library.c | 2 +- source/blender/blenloader/intern/writefile.c | 2 +- source/blender/editors/armature/editarmature.c | 18 +++++++++--------- .../editors/armature/editarmature_retarget.c | 2 +- source/blender/editors/object/object_edit.c | 2 +- source/blender/editors/object/object_hook.c | 2 +- source/blender/editors/space_file/filelist.c | 2 +- source/blender/editors/space_image/image_ops.c | 2 +- source/blender/editors/space_node/drawnode.c | 4 ++-- .../blender/editors/space_outliner/outliner.c | 18 +++++++++--------- .../editors/space_view3d/view3d_buttons.c | 12 ++++++------ .../blender/makesrna/intern/rna_controller.c | 1 - source/blender/makesrna/intern/rna_curve.c | 2 +- source/blender/windowmanager/intern/wm.c | 2 +- source/blender/windowmanager/intern/wm_files.c | 2 +- .../blender/windowmanager/intern/wm_window.c | 2 +- 24 files changed, 54 insertions(+), 58 deletions(-) diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 902807126c9..227f2eadf4c 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -408,7 +408,7 @@ bPoseChannel *verify_pose_channel(bPose *pose, const char *name) /* If not, create it and add it */ chan = MEM_callocN(sizeof(bPoseChannel), "verifyPoseChannel"); - strncpy(chan->name, name, 31); + BLI_strncpy(chan->name, name, sizeof(chan->name)); /* init vars to prevent math errors */ chan->quat[0] = chan->rotAxis[1]= 1.0f; chan->size[0] = chan->size[1] = chan->size[2] = 1.0f; @@ -774,7 +774,7 @@ void pose_add_group (Object *ob) return; grp= MEM_callocN(sizeof(bActionGroup), "PoseGroup"); - strcpy(grp->name, "Group"); + BLI_strncpy(grp->name, "Group", sizeof(grp->name)); BLI_addtail(&pose->agroups, grp); BLI_uniquename(&pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), sizeof(grp->name)); @@ -1119,8 +1119,8 @@ void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose workob->pose= pose; /* need to set pose too, since this is used for both types of Action Constraint */ - strcpy(workob->parsubstr, ob->parsubstr); - strcpy(workob->id.name, "OB"); /* we don't use real object name, otherwise RNA screws with the real thing */ + BLI_strncpy(workob->parsubstr, ob->parsubstr, sizeof(workob->parsubstr)); + BLI_strncpy(workob->id.name, "OB", sizeof(workob->id.name)); /* we don't use real object name, otherwise RNA screws with the real thing */ /* if we're given a group to use, it's likely to be more efficient (though a bit more dangerous) */ if (agrp) { diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index e03799ff938..febe8005317 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -614,12 +614,9 @@ KeyingSet *BKE_keyingset_add (ListBase *list, const char name[], short flag, sho /* allocate new KeyingSet */ ks= MEM_callocN(sizeof(KeyingSet), "KeyingSet"); - - if (name) - strncpy(ks->name, name, sizeof(ks->name)); - else - strcpy(ks->name, "KeyingSet"); - + + BLI_strncpy(ks->name, name ? name : "KeyingSet", sizeof(ks->name)); + ks->flag= flag; ks->keyingflag= keyingflag; @@ -667,7 +664,7 @@ KS_Path *BKE_keyingset_add_path (KeyingSet *ks, ID *id, const char group_name[], if (group_name) BLI_snprintf(ksp->group, 64, group_name); else - strcpy(ksp->group, ""); + ksp->group[0]= '\0'; /* store additional info for relative paths (just in case user makes the set relative) */ if (id) diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 3bec79eb352..ea01421a0ea 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -260,7 +260,7 @@ int bone_autoside_name (char *name, int UNUSED(strip_number), short axis, float len= strlen(name); if (len == 0) return 0; - strcpy(basename, name); + BLI_strncpy(basename, name, sizeof(basename)); /* Figure out extension to append: * - The extension to append is based upon the axis that we are working on. diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 72d194e4d79..9b2c1805069 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -460,13 +460,13 @@ static UndoElem *curundo= NULL; static int read_undosave(bContext *C, UndoElem *uel) { - char mainstr[FILE_MAXDIR+FILE_MAXFILE]; + char mainstr[sizeof(G.main->name)]; int success=0, fileflags; /* This is needed so undoing/redoing doesnt crash with threaded previews going */ WM_jobs_stop_all(CTX_wm_manager(C)); - strcpy(mainstr, G.main->name); /* temporal store */ + BLI_strncpy(mainstr, G.main->name, sizeof(mainstr)); /* temporal store */ fileflags= G.fileflags; G.fileflags |= G_FILE_NO_UI; diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index bf694732b46..a561df49e94 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -674,7 +674,7 @@ static void default_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstrain ct= MEM_callocN(sizeof(bConstraintTarget), "tempConstraintTarget"); \ \ ct->tar= datatar; \ - strcpy(ct->subtarget, datasubtarget); \ + BLI_strncpy(ct->subtarget, datasubtarget, sizeof(ct->subtarget)); \ ct->space= con->tarspace; \ ct->flag= CONSTRAINT_TAR_TEMP; \ \ diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index a7dd80bff4d..b6b6dde3cdc 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -155,7 +155,7 @@ Curve *add_curve(char *name, int type) cu->vfont= cu->vfontb= cu->vfonti= cu->vfontbi= get_builtin_font(); cu->vfont->id.us+=4; cu->str= MEM_mallocN(12, "str"); - strcpy(cu->str, "Text"); + BLI_strncpy(cu->str, "Text", 12); cu->len= cu->pos= 4; cu->strinfo= MEM_callocN(12*sizeof(CharInfo), "strinfo new"); cu->totbox= cu->actbox= 1; diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 0b27aaeb0ba..5fdb9549179 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -394,7 +394,7 @@ VFont *load_vfont(char *name) /* if there's a font name, use it for the ID name */ if (strcmp(vfd->name, "")!=0) { - BLI_strncpy(vfont->id.name+2, vfd->name, 21); + BLI_strncpy(vfont->id.name+2, vfd->name, sizeof(vfont->id.name)-2); } BLI_strncpy(vfont->name, name, sizeof(vfont->name)); diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 5ed6beaf376..7914bc2b640 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -1017,13 +1017,13 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver) dtar= &dvar->targets[0]; dtar->id= (ID *)idriver->ob; if (idriver->name[0]) - BLI_strncpy(dtar->pchan_name, idriver->name, 32); + BLI_strncpy(dtar->pchan_name, idriver->name, sizeof(dtar->pchan_name)); /* second bone target (name was stored in same var as the first one) */ dtar= &dvar->targets[1]; dtar->id= (ID *)idriver->ob; if (idriver->name[0]) // xxx... for safety - BLI_strncpy(dtar->pchan_name, idriver->name+DRIVER_NAME_OFFS, 32); + BLI_strncpy(dtar->pchan_name, idriver->name+DRIVER_NAME_OFFS, sizeof(dtar->pchan_name)); } else { /* only a single variable, of type 'transform channel' */ @@ -1034,7 +1034,7 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver) dtar= &dvar->targets[0]; dtar->id= (ID *)idriver->ob; if (idriver->name[0]) - BLI_strncpy(dtar->pchan_name, idriver->name, 32); + BLI_strncpy(dtar->pchan_name, idriver->name, sizeof(dtar->pchan_name)); dtar->transChan= adrcode_to_dtar_transchan(idriver->adrcode); dtar->flag |= DTAR_FLAG_LOCALSPACE; /* old drivers took local space */ } diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 4227c633c0b..ed9907b6869 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -1365,7 +1365,7 @@ void rename_id(ID *id, char *name) { ListBase *lb; - strncpy(id->name+2, name, 21); + BLI_strncpy(id->name+2, name, sizeof(id->name)-2); lb= which_libbase(G.main, GS(id->name) ); new_id(lb, id, name); diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index b5715353c6c..14c74dfbb6f 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -506,7 +506,7 @@ static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon data[1]= sce->r.efra; memset(data+2, 0, sizeof(int)*6); - strncpy((char *)(data+2), sce->id.name+2, 21); + BLI_strncpy((char *)(data+2), sce->id.name+2, sizeof(sce->id.name)-2); writedata(wd, REND, 32, data); } diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index cab2fdc547f..dcfc2762735 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -170,7 +170,7 @@ EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone /* Copy relevant data from bone to eBone */ eBone->parent= parent; - BLI_strncpy(eBone->name, curBone->name, 32); + BLI_strncpy(eBone->name, curBone->name, sizeof(eBone->name)); eBone->flag = curBone->flag; /* fix selection flags */ @@ -332,9 +332,9 @@ void ED_armature_from_edit(Object *obedit) newBone= MEM_callocN(sizeof(Bone), "bone"); eBone->temp= newBone; /* Associate the real Bones with the EditBones */ - BLI_strncpy(newBone->name, eBone->name, 32); - memcpy(newBone->head, eBone->head, sizeof(float)*3); - memcpy(newBone->tail, eBone->tail, sizeof(float)*3); + BLI_strncpy(newBone->name, eBone->name, sizeof(newBone->name)); + memcpy(newBone->head, eBone->head, sizeof(newBone->head)); + memcpy(newBone->tail, eBone->tail, sizeof(newBone->tail)); newBone->flag= eBone->flag; if (eBone == arm->act_edbone) { @@ -758,7 +758,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann for (achan= act->chanbase.first; achan; achan= achan->next) { if (strcmp(achan->name, pchan->name)==0) - BLI_strncpy(achan->name, curbone->name, 32); + BLI_strncpy(achan->name, curbone->name, sizeof(achan->name)); } } } @@ -802,7 +802,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann if (ob->partype==PARBONE) { /* bone name in object */ if (!strcmp(ob->parsubstr, pchan->name)) - BLI_strncpy(ob->parsubstr, curbone->name, 32); + BLI_strncpy(ob->parsubstr, curbone->name, sizeof(ob->parsubstr)); } /* make tar armature be new parent */ @@ -2331,7 +2331,7 @@ EditBone *ED_armature_edit_bone_add(bArmature *arm, char *name) { EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone"); - BLI_strncpy(bone->name, name, 32); + BLI_strncpy(bone->name, name, sizeof(bone->name)); unique_editbone_name(arm->edbo, bone->name, NULL); BLI_addtail(arm->edbo, bone); @@ -2663,7 +2663,7 @@ EditBone *duplicateEditBoneObjects(EditBone *curBone, char *name, ListBase *edit if (name != NULL) { - BLI_strncpy(eBone->name, name, 32); + BLI_strncpy(eBone->name, name, sizeof(eBone->name)); } unique_editbone_name(editbones, eBone->name, NULL); @@ -3507,7 +3507,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op) newbone->segments= 1; newbone->layer= ebone->layer; - BLI_strncpy (newbone->name, ebone->name, 32); + BLI_strncpy (newbone->name, ebone->name, sizeof(newbone->name)); if (flipbone && forked) { // only set if mirror edit if (strlen(newbone->name)<30) { diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c index e80f1494d8c..749443b276c 100644 --- a/source/blender/editors/armature/editarmature_retarget.c +++ b/source/blender/editors/armature/editarmature_retarget.c @@ -1637,7 +1637,7 @@ static EditBone *add_editbonetolist(char *name, ListBase *list) { EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone"); - BLI_strncpy(bone->name, name, 32); + BLI_strncpy(bone->name, name, sizeof(bone->name)); unique_editbone_name(list, bone->name, NULL); BLI_addtail(list, bone); diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 32e49ce3f71..118c649adde 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -1323,7 +1323,7 @@ void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event) BKE_text_to_curve(scene, base->object, 0); /* needed? */ - strcpy(cu1->family, cu->family); + BLI_strncpy(cu1->family, cu->family, sizeof(cu1->family)); base->object->recalc |= OB_RECALC_DATA; } diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c index 3c3e7f1df76..ee7164046ce 100644 --- a/source/blender/editors/object/object_hook.c +++ b/source/blender/editors/object/object_hook.c @@ -447,7 +447,7 @@ static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *o hmd->indexar= indexar; copy_v3_v3(hmd->cent, cent); hmd->totindex= tot; - BLI_strncpy(hmd->name, name, 32); + BLI_strncpy(hmd->name, name, sizeof(hmd->name)); /* matrix calculus */ /* vert x (obmat x hook->imat) x hook->obmat x ob->imat */ diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 43d5d54805d..41ad7ad3503 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -887,7 +887,7 @@ static int groupname_to_code(char *group) char buf[32]; char *lslash; - BLI_strncpy(buf, group, 31); + BLI_strncpy(buf, group, sizeof(buf)); lslash= BLI_last_slash(buf); if (lslash) lslash[0]= '\0'; diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index 19af0b3f79e..50730e3b35e 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -798,7 +798,7 @@ static int replace_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; RNA_string_get(op->ptr, "filepath", str); - BLI_strncpy(sima->image->name, str, sizeof(sima->image->name)-1); /* we cant do much if the str is longer then 240 :/ */ + BLI_strncpy(sima->image->name, str, sizeof(sima->image->name)); /* we cant do much if the str is longer then 240 :/ */ BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_RELOAD); WM_event_add_notifier(C, NC_IMAGE|NA_EDITED, sima->image); diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index aef1c7bbeaa..c34ade4f5e2 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -198,7 +198,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v) node->id= &tex->id; id_us_plus(node->id); - BLI_strncpy(node->name, node->id->name+2, 21); + BLI_strncpy(node->name, node->id->name+2, sizeof(node->name)); nodeSetActive(ntree, node); @@ -285,7 +285,7 @@ static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v) oldid= node->id; node->id= BLI_findlink(&bmain->text, node->menunr-1); id_us_plus(node->id); - BLI_strncpy(node->name, node->id->name+2, 21); /* huh? why 21? */ + BLI_strncpy(node->name, node->id->name+2, sizeof(node->name)); node->custom1= BSET(node->custom1, NODE_DYNAMIC_NEW); diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index f73da37e1ef..a9b0dc8bfd2 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -5054,11 +5054,11 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) bArmature *arm= (bArmature *)tselem->id; if(arm->edbo) { EditBone *ebone= te->directdata; - char newname[32]; + char newname[sizeof(ebone->name)]; /* restore bone name */ - BLI_strncpy(newname, ebone->name, 32); - BLI_strncpy(ebone->name, oldname, 32); + BLI_strncpy(newname, ebone->name, sizeof(ebone->name)); + BLI_strncpy(ebone->name, oldname, sizeof(ebone->name)); ED_armature_bone_rename(obedit->data, oldname, newname); WM_event_add_notifier(C, NC_OBJECT|ND_POSE, OBACT); } @@ -5069,15 +5069,15 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) { Bone *bone= te->directdata; Object *ob; - char newname[32]; + char newname[sizeof(bone->name)]; // always make current object active tree_element_set_active_object(C, scene, soops, te, 1); ob= OBACT; /* restore bone name */ - BLI_strncpy(newname, bone->name, 32); - BLI_strncpy(bone->name, oldname, 32); + BLI_strncpy(newname, bone->name, sizeof(bone->name)); + BLI_strncpy(bone->name, oldname, sizeof(bone->name)); ED_armature_bone_rename(ob->data, oldname, newname); WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); } @@ -5086,15 +5086,15 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) { bPoseChannel *pchan= te->directdata; Object *ob; - char newname[32]; + char newname[sizeof(pchan->name)]; // always make current object active tree_element_set_active_object(C, scene, soops, te, 1); ob= OBACT; /* restore bone name */ - BLI_strncpy(newname, pchan->name, 32); - BLI_strncpy(pchan->name, oldname, 32); + BLI_strncpy(newname, pchan->name, sizeof(pchan->name)); + BLI_strncpy(pchan->name, oldname, sizeof(pchan->name)); ED_armature_bone_rename(ob->data, oldname, newname); WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob); } diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 450b3725bdb..9d17bbfe7da 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -884,14 +884,14 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) { EditBone *eBone= bonev; - char oldname[32], newname[32]; - + char oldname[sizeof(eBone->name)], newname[sizeof(eBone->name)]; + /* need to be on the stack */ - BLI_strncpy(newname, eBone->name, 32); - BLI_strncpy(oldname, (char *)namev, 32); + BLI_strncpy(newname, eBone->name, sizeof(eBone->name)); + BLI_strncpy(oldname, (char *)namev, sizeof(eBone->name)); /* restore */ - BLI_strncpy(eBone->name, oldname, 32); - + BLI_strncpy(eBone->name, oldname, sizeof(eBone->name)); + ED_armature_bone_rename(CTX_data_edit_object(C)->data, oldname, newname); // editarmature.c WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix } diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c index ee0707ad0ae..73ac46e8e78 100644 --- a/source/blender/makesrna/intern/rna_controller.c +++ b/source/blender/makesrna/intern/rna_controller.c @@ -207,7 +207,6 @@ void RNA_def_controller(BlenderRNA *brna) prop= RNA_def_property(srna, "expression", PROP_STRING, PROP_NONE); RNA_def_property_string_sdna(prop, NULL, "str"); - RNA_def_property_string_maxlength(prop, 127); RNA_def_property_ui_text(prop, "Expression", ""); RNA_def_property_update(prop, NC_LOGIC, NULL); diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index 7983b8f8a7f..c7802de9ebb 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -844,7 +844,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna) /* strings */ prop= RNA_def_property(srna, "family", PROP_STRING, PROP_NONE); - RNA_def_property_string_maxlength(prop, 21); + RNA_def_property_string_maxlength(prop, (sizeof((ID *)NULL)->name)-2); RNA_def_property_ui_text(prop, "Object Font", "Use Blender Objects as font characters. Give font objects a common name followed by the character it represents, eg. familya, familyb etc, and turn on Verts Duplication"); RNA_def_property_update(prop, 0, "rna_Curve_update_data"); diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c index 426069245c3..76b5762fa4e 100644 --- a/source/blender/windowmanager/intern/wm.c +++ b/source/blender/windowmanager/intern/wm.c @@ -275,7 +275,7 @@ void wm_add_default(bContext *C) win= wm_window_new(C); win->screen= screen; screen->winid= win->winid; - BLI_strncpy(win->screenname, screen->id.name+2, 21); + BLI_strncpy(win->screenname, screen->id.name+2, sizeof(win->screenname)); wm->winactive= win; wm->file_saved= 1; diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index aa99e8fcb1c..ca37f0db61b 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -195,7 +195,7 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist) else win->screen= ED_screen_duplicate(win, screen); - BLI_strncpy(win->screenname, win->screen->id.name+2, 21); + BLI_strncpy(win->screenname, win->screen->id.name+2, sizeof(win->screenname)); win->screen->winid= win->winid; } } diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index bbbe49ce3dd..35a3fbcf9fb 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -216,7 +216,7 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *winorig) /* duplicate assigns to window */ win->screen= ED_screen_duplicate(win, winorig->screen); - BLI_strncpy(win->screenname, win->screen->id.name+2, 21); + BLI_strncpy(win->screenname, win->screen->id.name+2, sizeof(win->screenname)); win->screen->winid= win->winid; win->screen->do_refresh= 1; From e202aa6e6609d957db48c0ae8bbce54c0aa454f0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 09:01:00 +0000 Subject: [PATCH 161/163] dont change the file paths of sequence images, this is weak design because you can easily have 2 image users with different frame numbers so this ends up being which ever was last loaded. Modified to image user template to show the current filename of the image. --- source/blender/blenkernel/intern/image.c | 25 ++++--------------- .../editors/space_image/image_buttons.c | 19 +++++++++----- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 1345c6c9b61..2719563f829 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -1571,15 +1571,10 @@ static void image_create_multilayer(Image *ima, ImBuf *ibuf, int framenr) /* common stuff to do with images after loading */ static void image_initialize_after_load(Image *ima, ImBuf *ibuf) { - - /* preview is NULL when it has never been used as an icon before */ if(G.background==0 && ima->preview==NULL) BKE_icon_changed(BKE_icon_getid(&ima->id)); - - /* stringcodes also in ibuf, ibuf->name is used to retrieve original (buttons) */ - BLI_strncpy(ibuf->name, ima->name, FILE_MAX); - + /* fields */ if (ima->flag & IMA_FIELDS) { if(ima->flag & IMA_STD_FIELD) de_interlace_st(ibuf); @@ -1604,11 +1599,10 @@ static ImBuf *image_load_sequence_file(Image *ima, ImageUser *iuser, int frame) ima->tpageflag |= IMA_TPAGE_REFRESH; ima->lastframe= frame; - - BLI_stringdec(ima->name, head, tail, &numlen); - BLI_stringenc(ima->name, head, tail, numlen, frame); BLI_strncpy(name, ima->name, sizeof(name)); - + BLI_stringdec(name, head, tail, &numlen); + BLI_stringenc(name, head, tail, numlen, frame); + if(ima->id.lib) BLI_path_abs(name, ima->id.lib->filepath); else @@ -1753,8 +1747,7 @@ static ImBuf *image_load_movie_file(Image *ima, ImageUser *iuser, int frame) return ibuf; } -/* cfra used for # code, Image can only have this # for all its users - * warning, 'iuser' can be NULL */ +/* warning, 'iuser' can be NULL */ static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra) { struct ImBuf *ibuf; @@ -2002,11 +1995,6 @@ static ImBuf *image_get_ibuf_threadsafe(Image *ima, ImageUser *iuser, int *frame /* XXX temp stuff? */ if(ima->lastframe != frame) { ima->tpageflag |= IMA_TPAGE_REFRESH; - if(ibuf) { - /* without this the image name only updates - * on first load which is quite confusing */ - BLI_strncpy(ima->name, ibuf->name, sizeof(ima->name)); - } } ima->lastframe = frame; } @@ -2109,9 +2097,6 @@ ImBuf *BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r) /* only 1 layer/pass stored in imbufs, no exrhandle anim storage, no saving */ ibuf= image_load_sequence_multilayer(ima, iuser, frame); } - - if(ibuf) - BLI_strncpy(ima->name, ibuf->name, sizeof(ima->name)); } else if(ima->source==IMA_SRC_FILE) { diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index bbc8925a152..e245dfba275 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -137,21 +137,28 @@ static void image_info(Image *ima, ImBuf *ibuf, char *str) if(ibuf->rect_float) { if(ibuf->channels!=4) { - sprintf(str+ofs, "%d float channel(s)", ibuf->channels); + ofs+= sprintf(str+ofs, "%d float channel(s)", ibuf->channels); } else if(ibuf->depth==32) - strcat(str, " RGBA float"); + ofs+= sprintf(str+ofs, " RGBA float"); else - strcat(str, " RGB float"); + ofs+= sprintf(str+ofs, " RGB float"); } else { if(ibuf->depth==32) - strcat(str, " RGBA byte"); + ofs+= sprintf(str+ofs, " RGBA byte"); else - strcat(str, " RGB byte"); + ofs+= sprintf(str+ofs, " RGB byte"); } if(ibuf->zbuf || ibuf->zbuf_float) - strcat(str, " + Z"); + ofs+= sprintf(str+ofs, " + Z"); + + if(ima->source==IMA_SRC_SEQUENCE) { + char *file= BLI_last_slash(ibuf->name); + if(file==NULL) file= ibuf->name; + else file++; + sprintf(str+ofs, ", %s", file); + } } From 66b274766a0584a74a63bb2b039f2a71e5b48534 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 13:37:18 +0000 Subject: [PATCH 162/163] minor c90 compat edits. (no functional changes). --- CMakeLists.txt | 20 +++++++++---------- source/blender/blenkernel/intern/blender.c | 1 - source/blender/blenkernel/intern/implicit.c | 4 +++- source/blender/blenkernel/intern/multires.c | 7 ++++++- source/blender/blenkernel/intern/particle.c | 6 +++++- .../blenkernel/intern/particle_system.c | 15 ++++++++++---- source/blender/blenkernel/intern/shrinkwrap.c | 7 +------ source/blender/blenloader/intern/readfile.c | 1 - 8 files changed, 36 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bd99fe00539..27250d38f94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -317,19 +317,19 @@ IF(UNIX AND NOT APPLE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") ENDIF(WITH_OPENMP) + SET(PLATFORM_LINKFLAGS "-pthread") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE") - SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") - - SET(PLATFORM_LINKFLAGS "-pthread") - - # Better warnings - # note: -Wunused-parameter is added below for all GCC compilers - SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") - SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") - - INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} ) + IF(CMAKE_COMPILER_IS_GNUCC) + SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") + + # Better warnings + # note: -Wunused-parameter is added below for all GCC compilers + SET(C_WARNINGS "-Wall -Wno-char-subscripts -Wpointer-arith -Wcast-align -Wdeclaration-after-statement -Wno-unknown-pragmas") + SET(CXX_WARNINGS "-Wall -Wno-invalid-offsetof -Wno-sign-compare") + ENDIF(CMAKE_COMPILER_IS_GNUCC) ENDIF(UNIX AND NOT APPLE) diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 9b2c1805069..d2b437d9833 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -32,7 +32,6 @@ #ifndef _WIN32 #include // for read close - #include // for MAXPATHLEN #else #include // for open close read #define open _open diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c index 6ca95752887..bdf71a8c6f0 100644 --- a/source/blender/blenkernel/intern/implicit.c +++ b/source/blender/blenkernel/intern/implicit.c @@ -1562,13 +1562,15 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec unsigned int i = 0; float spring_air = clmd->sim_parms->Cvi * 0.01f; /* viscosity of air scaled in percent */ float gravity[3] = {0.0f, 0.0f, 0.0f}; - float tm2[3][3] = {{-spring_air,0,0}, {0,-spring_air,0},{0,0,-spring_air}}; + float tm2[3][3] = {{0}}; MFace *mfaces = cloth->mfaces; unsigned int numverts = cloth->numverts; LinkNode *search = cloth->springs; lfVector *winvec; EffectedPoint epoint; + tm2[0][0]= tm2[1][1]= tm2[2][2]= -spring_air; + /* global acceleration (gravitation) */ if(clmd->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) { VECCOPY(gravity, clmd->scene->physics_settings.gravity); diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 23a81e53728..329ef377c52 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1073,7 +1073,12 @@ static void create_old_vert_edge_map(ListBase **map, IndexNode **mem, const Mult static MultiresFace *find_old_face(ListBase *map, MultiresFace *faces, int v1, int v2, int v3, int v4) { IndexNode *n1; - int v[4] = {v1, v2, v3, v4}, i, j; + int v[4], i, j; + + v[0]= v1; + v[1]= v2; + v[2]= v3; + v[3]= v4; for(n1 = map[v1].first; n1; n1 = n1->next) { int fnd[4] = {0, 0, 0, 0}; diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 65b898a2807..0dc0b67b377 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -4454,7 +4454,11 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3] void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys) { - ParticleSimulationData sim = {scene, ob, psys, psys_get_modifier(ob, psys)}; + ParticleSimulationData sim= {0}; + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; + sim.psmd= psys_get_modifier(ob, psys); psys->lattice = psys_get_lattice(&sim); diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index 504105d5950..2b045647661 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -1705,9 +1705,10 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime, r_phase = PSYS_FRAND(p + 20); if(part->from==PART_FROM_PARTICLE){ - ParticleSimulationData tsim = {sim->scene, psys->target_ob ? psys->target_ob : ob, NULL, NULL}; float speed; - + ParticleSimulationData tsim= {0}; + tsim.scene= sim->scene; + tsim.ob= psys->target_ob ? psys->target_ob : ob; tsim.psys = BLI_findlink(&tsim.ob->particlesystem, sim->psys->target_psys-1); state.time = pa->time; @@ -2057,12 +2058,14 @@ void psys_count_keyed_targets(ParticleSimulationData *sim) static void set_keyed_keys(ParticleSimulationData *sim) { ParticleSystem *psys = sim->psys; - ParticleSimulationData ksim = {sim->scene, NULL, NULL, NULL}; + ParticleSimulationData ksim= {0}; ParticleTarget *pt; PARTICLE_P; ParticleKey *key; int totpart = psys->totpart, k, totkeys = psys->totkeyed; + ksim.scene= sim->scene; + /* no proper targets so let's clear and bail out */ if(psys->totkeyed==0) { free_keyed_keys(psys); @@ -3989,7 +3992,7 @@ static int hair_needs_recalc(ParticleSystem *psys) * then advances in to actual particle calculations depending on particle type */ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) { - ParticleSimulationData sim = {scene, ob, psys, NULL, NULL}; + ParticleSimulationData sim= {0}; ParticleSettings *part = psys->part; float cfra; @@ -4000,6 +4003,10 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys) return; cfra= BKE_curframe(scene); + + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; sim.psmd= psys_get_modifier(ob, psys); /* system was already updated from modifier stack */ diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c index a6daaf36ff6..936fb1bfeab 100644 --- a/source/blender/blenkernel/intern/shrinkwrap.c +++ b/source/blender/blenkernel/intern/shrinkwrap.c @@ -49,14 +49,9 @@ #include "BKE_subsurf.h" #include "BLI_math.h" -#include "BLI_editVert.h" - /* Util macros */ -#define TO_STR(a) #a -#define JOIN(a,b) a##b - #define OUT_OF_MEMORY() ((void)printf("Shrinkwrap: Out of memory\n")) /* Benchmark macros */ @@ -90,7 +85,7 @@ typedef void ( *Shrinkwrap_ForeachVertexCallback) (DerivedMesh *target, float *c DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDataMask dataMask) { Mesh *me= ob->data; - EditMesh *em = BKE_mesh_get_editmesh(me); + struct EditMesh *em = BKE_mesh_get_editmesh(me); if (em) { diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 7861eb08ea4..e05f6f57727 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -39,7 +39,6 @@ #ifndef WIN32 #include // for read close - #include // for MAXPATHLEN #else #include // for open close read #include "winsock2.h" From e8501edae25905b76b6ac602f70ac06a9082b1de Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 5 Nov 2010 14:00:31 +0000 Subject: [PATCH 163/163] Read external mdisp when hamdling topology changes --- source/blender/blenkernel/intern/multires.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 329ef377c52..f4e9dcf742b 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1613,9 +1613,12 @@ void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob) void multires_topology_changed(Object *ob) { Mesh *me= (Mesh*)ob->data; - MDisps *mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS); + MDisps *mdisp= NULL; int i; + CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS); + if(!mdisp) return; for(i = 0; i < me->totface; i++, mdisp++) {