BLENDER_v245REND 1GLOB  0oPH  SRxPSR4 vuesBHFFKPP$H 1RDATAB0CDATA0CxCBRDATAxCC0CRDATACDxCDATADPDCDATAPDDDDATADDPD4DATAD(ED4DATA(EpEDDATApEE(E4DATAEFpE<DATAFHFE<DATAHFF<DATAFF0CxCDATAF GFBCDATA GhGFBDDATAhGG GCPDDATAGGhGDPDDATAG@HG0CDDATA@HHGxCDDATAHH@HDDDATAHIHDpEDATAI`IHPD(EDATA`IIIDpEDATAII`ID(EDATAI8JIDEDATA8JJIDEDATAJJ8JpEFDATAJKJ(EFDATAKXKJEFDATAXKKKDHFDATAKKXKPDHFDATAKKFHFDATAPPBDPDCP59 ;-+DATA-.OutputRender>DATA.xo-RenderRender@>DATAxop.AnimRender>DATApqxoFormatRender>DATAqrpLink and MaterialsEditing>DATArsqMeshEditing@>DATAstrMesh ToolsEditing>DATAtvsMesh Tools 1Editing>DATAv wtArmatureEditing@>DATA w8xvArmature BonesEditing>DATA8xPy wAnim settingsObject>DATAPyhz8xDrawObject@>DATAhz{PyConstraintsObject>DATA{|hzEffectsObjecthzDATA|}{PaintEditing>DATA}~|Texture faceEditing>DATA~}PreviewMaterial>DATA~MaterialMaterialD>DATARampsMaterialD>DATA(ShadersMaterial>DATA(@Mirror TranspMaterial>DATA@X(TextureMaterial>DATAXp@CameraEditing@>DATApXPreviewWorld>DATApWorldWorld@>DATAMist / Stars / PhysicsWorld>DATAЊAmb OccWorld>DATAЊTexture and InputWorld>DATAЊMap ToWorld>ЊDATAMap InputMaterial>@DATAxMap ToMaterial>@DATAxPreviewTexture>DATAxTextureTexture@>DATAColorsTexture@>DATAؓImageTexture>DATAؓAnim and MovieTexture>DATAؓPreviewLamp>DATA LampLamp@>DATA 8Shadow and SpotLamp>DATA8P Texture and InputLamp>DATAPh8Map ToLamp>8DATAhPScriptlinksScript>DATAhHooksObject@>PyDATAParticle InteractionObject>hzDATAȞWoodTexture>DATAȞStucciTexture>DATAȞMagicTexture>DATABlendTexture>DATA(MusgraveTexture>DATA(@Distorted NoiseTexture>DATA@X(YafRayRender@>.DATAXp@YafRay GIRender@>.DATApXSoftbodyObject>hzDATApCloudsTexture>DATAVoronoiTexture>DATAЪModifiersEditing>DATAЪShapesEditing>DATAЪFields and DeflectionPhysics>DATAParticles Physics@>DATAxSoft BodyPhysics>DATAxFluid SimulationPhysics>DATAxLinks and PipelineMaterialD>DATARender LayersRender>-DATA,Object and LinksObject>DATA,+BakeRender>xoDATA+,SSSMaterial>DATAPw5PD@pCx8D,َkCC(BEC?H?H DATAh5yP333?P Save Astime/Documents and Settings\Yann\Mes documents\Jeu Blender\verapied.blendVDATAPPPD0CxCD5R5OPRCDDATAPP!PDEF(EG?q?o?;;  37`F`FسDATAسTransform PropertiesView3dU>"9ODATAسView PropertiesView3dT>"DATABackground ImageView3dT>"DATA3r`333?P5?ԯs45?5?nvݵ5i.?J3=!66?5?5?55?5?5"a!@?Z( ?4B]9( ?bFN,]9;q?1}E=4ޖ'(?#h?,#h?25I5'l ?0è0C9c!@?G?q?o?5?ԯs45?5?nvݵ5i.?J3=!66?{='?|='苊㋊V%?? B??YOt;=C=b=!8|=`s = ???? DATA`z3333?P@̌A\;\;BA( A@CC #<@(DATA$~`333?PDATA(vP 333?PzC AzC A #< #<`jFzD OBDATAP w7333?PDdCDv@CC(BDC??DATAh7yP 333?PGLOAD UI FONT PICTURES/WINDOWS\Fonts\ Settings\Yann\Mes documents\Mes images\Blender\s//lend/Armature/timb____.ttftfta13.blendip verts.blend  DATAP!P"P(EFHFPD=i>o?;;  9G0I 8DATA 8Transform PropertiesView3d4>" DATA8 View PropertiesView3d>"DATAr333?P!???? ?%% ??% ?o=ii>o!?H7 H7AH7'+&+ +@yyy?=i>o??????H7A B??g1<=C8|=`s =???? xoDATA{9333?P!CC?`=r??DATAh9y333?P!SELECT IMAGE/Documents and Settings\Yann\Mes documents\Mes images\Gimp\Azde.jpgjpg jDATAP"P$P!EDpEFsW?L(@o?=3=WX3 8@:JJPPDATAPTransform PropertiesView3dCR>"9ODATA@r333?P"???gf????gf@?sW?L(@oǺ<??>yff@?sW?L(@o????gf???? B?=}a;=Cgf8|=`s = ???? DATAz0@333?P"@̌A\;\;BA( A@CC #<@(DATA$0~0333?P"DATA(0vP#0333?P"zC AzC A #< #<`jFzD OBDATAP#w:0333?P"DdCDv@CC(BDC??DATAh:yP#333?P"Save FileRY PATHC:\Program Files\Blender Foundation\ake Human 1.8b\..\\t\ions//lend/Armature/untitled.blenda13.blendip verts.blendnDATAP$P"FpEDHF?Eo@AHM=3=WX38LLhhDATAhTransform PropertiesView3dA>"DATAr333?P$`L?zgV??EV>~.F"q=s?F>:8+$?^L??"q=egEV>s?V?.FL>~@7@?_?\XVF'?ZEH?F?~.F?ރ=c@9Fꚾ!A+$A0;?5 ?s\=n~wHe=BG>`ӢBײן1A˜ǰA(@?Eo@AHM`L?zgV??EV>~.F"q=s?F>:8+$?B?C7j'ijoR@ B??[; #<C8|;`s 8|=`s = DATA{333?P$CC?=m??SRxPSRAction0LHOOPP%P,H DATA0LxLDATAxLL0LDATALMxLDATAMPMLDATAPMMMDATAMMPMDATAM(NMDATA(NpNMDATApNN(NDATANOpNDATAOHONDATAHOODATAOOxLLDATAO PO0LMDATA PhPO0LPMDATAhPP PMMDATAPPhPPMMDATAP@QPxLMDATA@QQPL(NDATAQQ@QM(NDATAQQM(NDATAQpNNDATAX(NNDATAXMpNDATAXMNDATA0PMpNDATA0xPMODATAx0MODATAxNHODATAPpNHODATAPOHODATAP%P'0LPMMM =&P&DATAOutputRender>DATARenderRender@>DATAȾAnimRender>DATAȾFormatRender>DATAȾLink and MaterialsEditing>DATAMeshEditing@>DATA(Mesh ToolsEditing>DATA(@Mesh Tools 1Editing>DATA@X(ArmatureEditing@>DATAXp@Armature BonesEditing>DATApXAnim settingsObject>DATApDrawObject@>DATAConstraintsObject>DATAEffectsObjectDATAPaintEditing>DATATexture faceEditing>DATA&' 333?x ?zDzDBCFzD #<HB DATA('v&333?x ?̽̌?R~?ף?@ #< #<`jF@F OB?̽̌?DATAx}(' 333?x DATA(|H< 333?x ?zDzDBCzDzD=HB DATAhH<yP&(333?x %Save Runtime/ DATAP&wH<333?x D hCSDaaCC(BDC??DATAP'P(P%MxLL(NDATAP(P*P'PMOHOpN =>o?=DATATransform PropertiesView3dCR>"9ODATAr)333?@ ?3?3@/s???3@/:s?? =B'2n;>/an<?AK`@zC@/:s?? =>o??3?3@/s?5?5A B??S<=C@/s@  DATA)z333?@ @̌A\;\;BA( A@CC #<@(DATA$~*)333?@ DATA(*vP)333?@ zC AzC A #< #<`jFzD OBDATAP)w=*333?@ DdCDv@CC(BDC??DATAh=yP)333?@ Save AsRARY PATHD:\Blender\Makehuman\Main\h180.blend\Text\Object\t\ions//lend/Armature/mh180b.blendeta13.blendip verts.blendjDATAP*P,P(pNN(NM!>>o?L@,x?DATATransform PropertiesView3dA>"DATA(@,v-333?0 ?̽̌?R~?ף?@   #< #<`jFzD OB?̽̌?DATA-@, 333?0 ?zDzDBCFzD #<HB DATAr-333?0 )X僾>'>B^ =`?3w4w?O= )(>N@B??)X(>4w僾P^ =4w?>`?O=<"˿F!?w Hvǚ=;>Eջ<>T?pުmA@ÿ@q>th@jMo<<"˿F!?!>>o?)X僾>'>B^ =`?3w4w?O= )(>N@B??o>2訽1*0 @ B?=Cݽ"?E!@  DATA$~H333?0 DATAxH}. 333?0 6P'  D?IK9kDATA.{P+H333?0 CC???DATAP+wx?.333?0 DdCDv@CC(BDC??DATAhx?yP+333?0 TLoad Body settingd:\Blender\Makehuman\lab\h180.blend\Text\nder\scripts\provasetting.txtget.blendDATAP,P*OMNHO?B`@AHM`ANNDATANTransform PropertiesView3dCR>"9ODATA`r/333? `L?zgV??EV>~.F"q=s?F>:8+$?^L??"q=egEV>s?V?.FL>~@7@?_?KVF'?d;?F?~.F?ރ=VU@9Fꚾ3!A+$A(1;? ?`y\=4hHt=>4ҢBײן1A–ǰA(@?B`@AHM`L?zgV??EV>~.F"q=s?F>:8+$?B?C7j'ij >A B??--;=CI?,@  DATA/z8`333? @̌A\;\;BA( A@CC #<@(DATA$8~(/333? DATA((vP-8333? zC AzC A #< #<`jFzD OBDATAP-wA(333? DdCDv@CC(BDC??DATAhAyP-333? Save AsRARY PATHD:\Blender\Makehuman\Main\h180.blend\Text\Object\t\ions//lend/Armature/mh180b.blendeta13.blendip verts.blendjSRxSRDetail P.P1H DATADATA(DATA(pDATAp(DATApDATAHDATAHDATAHDATA|DATA h(DATAh pDATAhDATA@pDATA@DATA@HDATA(DATA`HDATA`DATA`HDATAP.P0pP/BO]DATAOPAnim settingsObject>DATAPQODrawObject@>DATAQRPHooksObject@>PDATARTQConstraintsObject>DATAT UREffectsObjectRDATA U8VTParticle InteractionObject>RDATA8VPW UOutputRender>DATAPWhX8VRenderRender@>DATAhXYPWAnimRender>DATAYZhXFormatRender>DATAZ[YLink and MaterialsEditing>DATA[\ZMeshEditing@>DATA\][Mesh ToolsEditing>DATA]\Mesh Tools 1Editing>DATAP/wB333?Ÿ DdC`J¦DPydCC(BDC??DATAhByP/333?Ÿ /9DATAP0P1P.H(DATAP1P0H?B@Pף@DDATAr@D333?ո Fw?e>>F>%V҇߳]?>Nn>>ݐ????Fw?냄>4F>ڳ]?e>%V>6V*@7l*W@?:?•UeeM>d?)(V?%V?Tɍ?JHP>(*@K?A??A)b?Mr>65`jZ>}4>O7{ï+Dy÷ HsCVxC HB?B@PףFw?e>>F>%V҇߳]?>Nn>>ݐ????M[?Z?A B??): #<CJ<? w? DATAh@Dy333?ո (Save Runtime/ SRx@SRMontage"P" oP2`H DATA8DATA8DATA8DATA DATA X DATAX   DATA  X DATA 0! DATA0!x! DATAx!!0!DATA!"x!dDATA"!dDATAP""8DATA""P"DATA"(#" DATA(#p#"X DATAp##(# X DATA#$p#8 DATA$H$# DATAH$$$  DATA$$H$ 0!DATA$ %$ 0!DATA %h%$ x!DATAh%% %X x!DATA%%h%0!x!DATA%@&%0!!DATA@&n%x!!DATAnn@& "DATAn on "DATA on!"DATAP2P4 X P3~^@bDATA^`OutputRender>DATA`(a^RenderRender@>DATA(a@b`AnimRender>DATA@b(aFormatRender>DATAP3w~333?p DdCaJ¦DO(dCC(BDC??DATAh~yP3333?p /9DATAP4P5P2 8 DATAP5P6P4 0!x!X 8=i>o? x(DATAxx333?` zCAzCA A@FB= A DATAr(x333?` ????????8=i>o?fffAD&@??fffA B? #<C DATAh(y333?` AVE TARGA/t1.blend9DATAP6`P5!" x!8=H>o?eee `DATA`x8333? zCAzCA1||1 A@FB= A DATA8r`333? ????????8=H>o?fffA*@??fffA B? #<C DATAhy8333? AVE TARGA/t1.blend9DATA`P60! "!8=>o?cccdXDATA(v333? B̽̌?B̽̌?## #< #<`jFzD SQB̽̌?DATArX333? ????????8=>o?fffA@??fffA B? #<C DATAhXy333? OAD FILE/9SRx@SRTexturing vues.001horrw``H DATAhooDATAoohoDATAo@poDATA@ppoDATApp@pDATApqpDATAq`qpDATA`qqqDATAqq`qDATAq8rqDATA8rrqDATAr8rDATArsooDATAsXsrho@pDATAXssshopDATAssXs@ppDATAs0tsppDATA0txtsoqDATAxtt0to`qDATAtuxtq`qDATAuPut`qqDATAPuuupqDATAuuPuqqDATAu(vupqDATA(vpvup8rDATApvv(vq8rDATAvwpvqrDATAwHwvqrDATAHwww8rrDATAwwHwqqDATAwwp`qDATA``hopp@p`XcXDATAXcpdOutputRender>DATApdeXcRenderRender@>DATAefpdAnimRender>DATAfgeFormatRender>DATAghfLink and MaterialsEditing>DATAhigMeshEditing@>DATAikhMesh ToolsEditing>DATAkliMesh Tools 1Editing>DATAl0mkArmatureEditing@>DATA0m`lArmature BonesEditing>DATA`x0mAnim settingsObject>DATAx`DrawObject@>DATAxConstraintsObject>DATAEffectsObjectDATAPaintEditing>DATATexture faceEditing>DATAPreviewMaterial>DATA MaterialMaterial@>DATA 8RampsMaterial@>DATA8P ShadersMaterial>DATAPh8Mirror TranspMaterial>8DATAhPTextureMaterial>DATAhCameraEditing@>DATAPreviewWorld>DATAWorldWorld@>DATAMist / Stars / PhysicsWorld>DATAAmb OccWorld>DATATexture and InputWorld>DATA(Map ToWorld>DATA(@Map InputMaterial>hDATA@X(Map ToMaterial>hDATAXp@PreviewTexture>DATApXTextureTexture@>DATApColorsTexture@>pDATAImageTexture>DATAAnim and MovieTexture>DATAPreviewLamp>DATALampLamp@>DATA`Shadow and SpotLamp>DATA`xTexture and InputLamp>DATAx`Map ToLamp>`DATAxScriptlinksScript>DATAHooksObject@>xDATAParticle InteractionObject>DATAWoodTexture>DATAStucciTexture>DATA MagicTexture>DATA 8 BlendTexture>DATA8 P  MusgraveTexture>DATAP h 8 Distorted NoiseTexture>DATAh  P YafRayRender@>pdDATA h YafRay GIRender@>pdDATA SoftbodyObject>DATACloudsTexture>DATAVoronoiTexture>DATAModifiersEditing>DATAShapesEditing>DATA(Fields and DeflectionPhysics>DATA(@Particles Physics@>DATA@X(Soft BodyPhysics>DATAX@Fluid SimulationPhysics>@DATA`wDdCD,َkCC(BEC?H?DATAhy`333?%Save Runtime\ DATA```qoo`qDATA```p8rrq^>-~>o?pDATApTransform PropertiesView3dU>"9ODATApView PropertiesView3dT>"DATABackground ImageView3dT>"DATAr0333??H<2F<22???D<22?H<2?^>=;A7$1}p;Y1/~>拦0?>@X3q-3陪7@ H8yCԞ8?^>-~>o??H<2F<22??5?52U)>@ B??R<=C8|=`s = g||>||>||>4TԿ"??@ DATA0z333?@̌A\;\;BA( A@CC #<@(DATA$~0333?DATA(v`333?zC AzC A #< #<`jFzD OBDATA`w333?DdCDv@CC(BDC??DATAhy`333?GLOAD UI FONT PICTURES/WINDOWS\Fonts\ Settings\Yann\Mes documents\Mes images\Blender\s//lend/Armature/timb____.ttftfta13.blendip verts.blend  DATA```8rqqrN<3=o? DATATransform PropertiesView3dCR>"9ODATAr2333? ????????N<3=o?`}BXxAy?N<3=o??????`}B B??>=C8|=`s = g????H DATA2z333? @̌A\;\;BA( A@CC #<@(00DATA,0OB`ADATA$~02333? DATA(0v`333? zC AzC A #< #<`jFzD OBDATA`w 0333? DdCDv@CC(BDC??DATAh y`333? Save FileRY PATHC:\Program Files\Blender Foundation\ake Human 1.8b\..\\t\ions//lend/Armature/untitled.blenda13.blendip verts.blendnDATA``qq`qp?QW?AHM%03XDATATransform PropertiesView3dA>"DATA03{X333? CC ?Ծ??DATAXr03333? `L?zgV??EV>~.F"q=s?F>:8+$?^L??"q=egEV>s?V?.FL>~@7@?_?)VF'?4>F?~.F?ރ=?9Fꚾ㿢!A+$A0;?& ?`t\=N9+>9iB? ԡABֲT֟6ALưAB(@?QW?AHM`L?zgV??EV>~.F"q=s?F>:8+$?B?C7j'ijoR@ B??_; #<C8|;`s 8|=`s = SCH pSC1P%'P%Bp*o6@҄&o6@J*o6@s>>*o6@=@dd??< 2 Xddd!@??BB???? d?fff?????o:?L=//C:\Documents and Settings\Yann\Mes documents\Mes images\Blender\//#D xZDATAP%c%lG DATA%c%P%r5 DATA%c@&%. DATA@&c&%.xDATA&c&@&. DATA&c0'&.k0DATA0'c'&.wDATA'c0'.DATA(@b,xd'=A@DATALmL?B ?o: ?? #<=DATA@Bh1 RenderLayerIMt4IMRender ResultCA85CACameraL>DB=B B@?LA$LALamp?????A4B>??? B4B?@@???LA$xLALamp.001?????A4B>??? B4B?@@???LAx$@LALamp.003?????A4B>??? B4B?@@???LA@$xLALamp.007?????A4B>??? B4B?@@???LA$@LALamp.008?????A4B>??? B4B?@@???IPTIPAction.handACIPTIPConstCOWO(aWOWorldٗ?ٗ?u??k;>?A@pA A'7?L=DATAx??????????TXh66TXGui.py x mmDATA xhxP'FREEDATAhxx x(DATAxxhxhFREEDATAx@yxh FREEDATA@yyxjFREEDATAyy@y%FREEDATAyzy'FREEDATAz`zy'FREEDATA`zzz'FREEDATAzz`z'FREEDATAz8{z0(FREEDATA8{{z7FREEDATA{{8{#FREEDATA{|{4FREEDATA|X|{h(FREEDATAX|||j FREEDATA||X| (FREEDATA|0}|k FREEDATA0}x}|(FREEDATAx}}0}Hk FREEDATA}~x}(FREEDATA~V};FREEDATAVHV~kFREEDATAHVVVp(FREEDATAVVHV(FREEDATAV WV)FREEDATA WhWVFREEDATAhWW WkFREEDATAWWhWFREEDATAW@XW@FREEDATA@XXW=FREEDATAXX@Xp8FREEDATAXYX>FREEDATAY`YX`)FREEDATA`YYYH#FREEDATAYY`YFREEDATAY8ZYмFREEDATA8ZZYl FREEDATAZZ8Z%FREEDATAZ[Z-FREEDATA[X[ZHlFREEDATAX[[[l FREEDATA[[X[l FREEDATA[0\[DATA0\x\[`FREEDATAx\\0\FREEDATA\]x\FREEDATA]P]\8FREEDATAP]]]`.FREEDATA]]P])FREEDATA](^]8>FREEDATA(^p^]FREEDATAp^^(^ȾFREEDATA^_p^m[]DATA_H_^DATAH___XFREEDATA__H_p>FREEDATA_ `_`3FREEDATA `h`_>FREEDATAh`` `*e(fuDATA``h`tBFREEDATA`@a`Hm e(fuDATA@aa`%FREEDATAaa@a-FREEDATAabaȿ1FREEDATAb`baP*FREEDATA`bbbnPatDATAbb`b8FREEDATAb8cbP FREEDATA8ccb"FREEDATAcc8c)EDATAcdcm FREEDATAdXdc>FREEDATAXddd?FREEDATAddXd0FREEDATAd0edP?FREEDATA0exedP>FREEDATAxef0e*FREEDATAfHfxe*FREEDATAHfff?FREEDATAffHf@+FREEDATAf gf+FREEDATA ghgf#FREEDATAhgg g (FREEDATAgghgX$FREEDATAg@hg+FREEDATA@hhg)FREEDATAhh@hmFREEDATAhih)FREEDATAi`ih0,FREEDATA`iii,FREEDATAii`i@,FREEDATAi8jin FREEDATA8jji06FREEDATAjj8j"FREEDATAjkj#FREEDATAkXkj?FREEDATAXkkk4FREEDATAkkXkRFREEDATAk0lkOFREEDATA0lxlkHn FREEDATAxll0l(FREEDATAlmxl,FREEDATAmPmlOFREEDATAPmmm?FREEDATAmmPm0@FREEDATAm(nm`&sitiDATA(npnm!sitiDATApnn(nxFREEDATAnopnh@FREEDATAoHon -FREEDATAHooop-FREEDATAooHo-FREEDATAo po.FREEDATA phpoDATAhpp pFREEDATApphpPFREEDATAp@qp@FREEDATA@qqp2FREEDATAqq@q@FREEDATAqrq`.FREEDATAr`rq.FREEDATA`rrr-FREEDATArr`r/FREEDATAr8sr =FREEDATA8ssr#FREEDATAss8sFREEDATAstsh FREEDATAtXtsX=FREEDATAXtttnFREEDATAttXtnFREEDATAt0utFREEDATA0uxutP/FREEDATAxuv0u=FREEDATAvHvxu(FREEDATAHvvv/FREEDATAvvHv'FREEDATAv wv'FREEDATA whwvFREEDATAhww wpFREEDATAwwhw/FREEDATAw@xwp'FREEDATA@xxw FREEDATAxx@xFREEDATAxyxo FREEDATAy`yx@0FREEDATA`yyy0FREEDATAyy`yFREEDATAy8zy FREEDATA8zzyFREEDATAzz8z0FREEDATAz{z01FREEDATA{X{z #FREEDATAX{{{FREEDATA{{X{HFREEDATA{0|{1FREEDATA0|x|{1FREEDATAx||0|`*FREEDATA|}x|8FREEDATA}P}|FREEDATAP}}} 2FREEDATA}}P}p2FREEDATA}(~}x&FREEDATA(~p~}pFREEDATAp~~(~FREEDATA~p~2FREEDATAH~'FREEDATAH(%FREEDATAHFREEDATA 3s():DATA h)FREEDATAh Ho FREEDATAh`3FREEDATA@3FREEDATA@>FREEDATAЁ@h1FREEDATAЁFREEDATA`Ё4(setDATA` )FREEDATA`7FREEDATA8P4FREEDATA84FREEDATAȃ8#(setDATAȃ%FREEDATAXȃ-FREEDATAXFREEDATAX80FREEDATA02FREEDATA0xFREEDATAx0o(setDATAHx)(setDATAH0"FREEDATA؆HPFREEDATA؆ FREEDATA h؆@/FREEDATAh  FREEDATAhPFREEDATA@*FREEDATA@ FUNDATAЈ@o FREEDATAЈp FUNDATA`Ј!FREEDATA`FREEDATA`hFREEDATA8uDDATA80;FREEDATAȊ8uCFREEDATAȊ@FREEDATAXȊFREEDATAXFREEDATAXFREEDATA00FREEDATA0xvFFREEDATAx0FREEDATAx%FREEDATAPFREEDATAP8&FREEDATAPFREEDATA(#FREEDATA(p0FREEDATAp($FREEDATApG\FREEDATAH*FREEDATAH PFREEDATA؏HHXFREEDATA؏ hFREEDATA h؏`(FREEDATAh FREEDATAh*FREEDATA@@FREEDATA@@&FREEDATAБ@HpFREEDATAБ&FREEDATA`БFREEDATA`'FREEDATA`pFREEDATA8'FREEDATA8pFREEDATAȓ8X'FREEDATAȓFREEDATAXȓFREEDATAXq FREEDATAXWFREEDATA00WFREEDATA0xWFREEDATAx0@WFREEDATAHxVFREEDATAHFREEDATAؚH'FREEDATAؚ FREEDATA hؚ FREEDATAh pFREEDATAh#FREEDATA@HqFREEDATA@`&FREEDATAМ@FREEDATAМFREEDATA`МFREEDATA` FREEDATA` ,FREEDATA8(FREEDATA8*FREEDATAȞ8nrnamDATAȞq slidDATAXȞHFREEDATAXFREEDATAX1)EDATA0`FREEDATA0x@-FREEDATAx04FREEDATAxFREEDATAPFREEDATAP`FREEDATAPFREEDATA(qFREEDATA(pFREEDATAp(<FREEDATApFREEDATAH-FREEDATAH(FREEDATAأH8FREEDATAأ NFREEDATA hأr FREEDATAh REEDATAhREEDATA@p4rm =DATA@HrFREEDATAХ@v@FREEDATAХ+FREEDATA`ХFREEDATA`6FREEDATA`@ FREEDATA8 FREEDATA8FREEDATAȧ89t|QUDATAȧ@2FREEDATAXȧFREEDATAXPFREEDATAX FREEDATA0FREEDATA0x&FREEDATAx0h'FREEDATAHxFREEDATAHXFREEDATAتH`.FREEDATAت FREEDATA hت@ FREEDATAh .FREEDATAhFREEDATA@FREEDATA@@FREEDATAЬ@ -FREEDATAЬ0FREEDATA`Ь FREEDATA`-DATADATA`x = 0DATA8%FREEDATA8"FREEDATAȮ8$FREEDATAȮ(FREEDATAXȮH"FREEDATAX@(FREEDATAXp'FREEDATA0+FREEDATA0x+FREEDATAx0"FREEDATAxFREEDATAP2FREEDATAPFREEDATAP:FREEDATA(0FREEDATA(p:FREEDATAp("FREEDATAp"FREEDATAH`8FREEDATAH #FREEDATAسH`DATAس $ DATA hسh#ent DATAh `.i+1,DATAhJerHeDATA@2@d1DATA@ip)DATAе@|LDATAеFREEDATA`е &T GUDATA`@T GUDATA`FREEDATA8)FREEDATA8xFREEDATAȷ8 FREEDATAȷx FREEDATAXȷ#.mesDATAXpFREEDATAX )FREEDATA0FREEDATA0x FREEDATAx0#.mesDATAHxFREEDATAH6FREEDATAغHFREEDATAغ @$FREEDATA غ FREEDATAP'#!BPY7DATA,""" Registration info for Blender menus:DATAhName: 'MakeHuman-GUI'DATAhBlender: 230i(1DATAjGroup: 'Import'DATA(Tooltip: 'Make a parametric humanoid' DATA'REEDATA'"""DATA'""DATA 'print "starting MakeHuman 1.8a"DATA0( 32DATA8############IMPORT OF OS or NT#########################DATA$#This if-else is to make the scriptDATA8#available under Windows without install full pythonssDATAh(DATA jimport sysDATA (if sys.platform == "win32":DATA k import ntDATA(else:7DATA Hk import osDATA( 32DATA<############IMPORT OF SOME MODULES#########################DATAkimport BlenderDATAp(from Blender.Draw import *DATA(from Blender.BGL import *DATA)from Blender import WindowDATAimport MorphFilesEEDATAkimport MorphingDATAimport MHsymmetryEEDATA@#import PreviewerEEDATA=DATA<p############SOME GLOBAL VARIABLES#######################tDaDATA>DATA `)WinSize = Buffer(GL_FLOAT,4)namDATA$HglGetFloatv(GL_SCISSOR_BOX,WinSize)DATAbuttonWidth = 120EEDATAмbuttonHeight = 18EEDATA lBorder = 90DATA(nColumn = int(WinSize[2]/buttonWidth)DATA0nRows = int((WinSize[3]-Border)/buttonHeight)DATAHlidxOfGroup = 0DATA lpathOK = 0DATAlmainPath = ""DATAMenuButton = Create(0)DATA`MenuButton1 = Create(0)DATAMenuButton2 = Create(0)DATAMenuButton3 = Create(0)DATA8MenuButton4 = Create(0)DATA0`message = "OSI Certified Open Source Software"DATA )paintMode, riggingMode = 0,0DATA8> 32DATAnameOfGroups = []EEDATAȾtargetsPaths = []EEDATAmbuttonList = []DATAbuttonTooltips = []DATAXbuttonNames = [] EEDATAp> 32DATA4`############ PATH FUNCTIONS #######################DATA> 32DATA *def startSequence(fullPath):DATADt global pathOK, positionOfButtons ,Morph, nRows, nColumn, mainPathEDATA Hm pathOK = 0DATA( if fullPath.find("base.mesh") != -1:DATA0 mainPath = fullPath.replace("base.mesh","")DATA4ȿ print "mainPath from browse function", mainPathEEDATA P* MorphFiles.saveIni(mainPath)DATA makeButtons(mainPath)DATA< positionOfButtons = makeButtonPosition(nRows, nColumn),MoDATA$P MorphFiles.buildMesh(mainPath)EDATA$ Morph = Morphing.Morph(mainPath)EDATA Blender.Redraw()EDATAm pathOK = 1yDATA> DATA? 32DATA0def makeButtons(path):DATAP? 32DATA@P global targetsPaths, nameOfGroups, buttonList, buttonTooltipsDATA * if sys.platform == "win32":)DATA * fileList = nt.listdir(path)~DATA? else:DATA @+ fileList = os.listdir(path)orDATA+ for fileName in fileList:DATA$ if len(fileName.split(".")) == 1:DATA,  targetFolder = fileName.split(".")[0]DATA(X nameOfGroups.append(targetFolder)[0DATA + if sys.platform == "win32":DATA, fileList2 = nt.listdir(path+fileName)`DATA m else:EEDATA, fileList2 = os.listdir(path+fileName)DATA 0, for fileName2 in fileList2: DATA , if sys.platform == "win32":DATA0@ localPath = targetFolder+"\\"+fileName2DATA n else:DATA80 localPath = os.path.join(targetFolder, fileName2)DATA$ targetsPaths.append(localPath)EDATA$ buttonList.append(Create(0.00))DATA? 67DATA8 if len(fileName2.split(".")[0].split("-")) == 2: lDATAT buttonTooltips.append(fileName2.split(".")[0].split("-")[1].replace("_"," "))"DATAP buttonNames.append(fileName2.split(".")[0].split("-")[0].replace("_"," "))DATA Hn else:DATA, buttonTooltips.append("no tooltip")DATA , buttonNames.append("???")-DATAP print "WARNING: target name "+fileName2.split(".")[0]+" have wrong sintax"DATA? 7DATA0@ 32DATA(`def makeButtonPosition(rowns,columns):DATA$ global buttonHeight, buttonWidthEEDATAx positionsList = []DATAh@ x=10DATA - for i in range(columns):DATAp- y = int(WinSize[3]-80)1rDATA- for i2 in range(rowns):eDATA . positionsList.append([x,y])lDATA y -= buttonHeightDATA x += buttonWidth DATAP return positionsList DATA@ 32DATA4############ MAKEHUMAN FUNCTIONS #################EDATA@32DATA`.def saveTarget(targetPath):DATA. global mainPath, messageutDATA0 MorphFiles.writeTarget(targetPath, mainPath)DATA / message = "Saved" + targetPathDATA = 32DATA$def applyTarget(targetPath, value):DATA global Morph, messageDATA$h Morph.doMorph(targetPath,value)REEDATAX= 32DATAndef makeSymm():DATAn global messageDATA MHsymmetry.MHsym()DATAP/ message ="Symmetry done"DATA= DATA(def saveVGroup():EEDATA/ global mainPath, messageDATA( MorphFiles.save_vertexgroups(mainPath)DATA( message ="VGroup Saved in " + mainPathDATADATApdef loadVGroup():EEDATA/ global mainPath, messageDATA(p MorphFiles.load_vertexgroups(mainPath)DATA$ message ="Auto Vertex Group OK"evtDATA DATAodef autoUV():DATA@0 global mainPath, messageDATA 0 MorphFiles.applyUV(mainPath)DATA message ="Auto UV OK"DATA DATAdef saveUVcoo():REEDATA0 global mainPath, messageDATA 01 MorphFiles.saveUV(mainPath) DATA$  message ="UV saved in " + mainPathDATA DATAHdef buildBase():REEDATA1 global mainPath, messageDATA 1 MorphFiles.buildMesh(mainPath)DATA,` message = "build mesh in cursor position",DATA8DATAdef saveBaseFaces():DATA 2 global mainPath, messageDATA p2 MorphFiles.saveFaces(mainPath)DATA(x message = "Saved faces in "+ mainPathDATApDATAdef saveBaseVerts():DATA2 global mainPath, messageDATA( MorphFiles.writeOriginalMesh(mainPath)DATA(( message = "Saved mesh in "+ mainPathDATA 32DATA 3def saveSettings(settingPath):DATA, global buttonList, targetsPaths, messageDATA Ho vList = []DATA `3 for eachButton in buttonList:gDATA 3 vList.append(eachButton.val)DATA@ MorphFiles.saveTargetsValue(settingPath, targetsPaths, vList)0DATA4h message = "Saved Body setting in "+ settingPathEEDATA 32DATA 4def loadSettings(settingPath):iDATA,  global buttonList, targetsPaths, messageDATA8 settingData = MorphFiles.loadTargetsValue(settingPath)DATAP4 for line in settingData:PDATA 4 tpath = line.split(",")[0]DATA$ tval = float(line.split(",")[1])DATA( for i in range(len(targetsPaths))::DATA0 if targetsPaths[i] == tpath and tval != 0:DATA  buttonList[i].val = tvalh aDATA48 applyTarget(mainPath + targetsPaths[i],tval)DATA4 message = "Load Body setting from "+ settingPathEDATA 32DATAodef resetAll():DATA, global buttonList, targetsPaths, messageDATA$0 for i in range(len(buttonList)):EDATA P if buttonList[i].val != 0:enDATA buttonList[i].val = 0.00DATA0@ applyTarget(mainPath + targetsPaths[i],0.00)DATA  message = "Reset Done"DATAP 32DATA,############DRAW FUNCTION#################DATA 32DATA odef draw():DATAp global pathOKDATA$ glClearColor(0.0, 0.0, 0.0, 0.0)##DATA  glClear(GL_COLOR_BUFFER_BIT)##DATAh if pathOK == 1:REEDATAHu global buttonTooltips,positionOfButtons,WinSize,message,buttonListgeDATA<0 global buttonWidth, buttonHeight, idxOfGroup,nameOfGroupsDATADu global MenuButton,MenuButton1,MenuButton2,MenuButton3,MenuButton4DATA @ global paintMode, riggingModeDATA ##DATA  #Generation of menu stringslsDATA  menuOfGroups = "Anatomy %t"DATA0 for name in nameOfGroups:DATAHv menuOfGroups += "| " + name + " %x" + str(nameOfGroups.index(name))DATA if paintMode == 0:DATA( paintCommand = "Paint mode "+ "ON"DATA else:DATA(8 paintCommand = "Paint mode "+ "OFF"DATA if riggingMode == 0:DATA$ riggCommand = "Rigg mode "+ "ON"DATA0 else:DATA( riggCommand = "Rigg mode "+ "OFF"DATA`G commands1 = "Edit %t|Symm%x0|Build%x1|"+paintCommand+"%x2|"+riggCommand+"%x3|Reset All%x4"DATA, commands2 = "Auto %t| UV%x0| VGroups%x1"DATAT  commands3 = "Advanc %t|Save Groups%x0|Save UV%x1|Save faces%x2|Save vertex%x3"##DATA\H commands4 = "File %t|Save Target%x0|Save Body Setting%x1|Load Body Setting%x2|Exit%x3"DATAh50,DATA,` #Buttons background and buttons title#DATA glColor3f(0.5,0.5,0.5)DATA, glRectf(0,WinSize[3],1000,WinSize[3]-45)DATA@ glColor3f(1,1,1)EDATA(@ glRasterPos2i(10,int(WinSize[3]-15))DATAHp Text("File")DATA( glRasterPos2i(90,int(WinSize[3]-15))DATA Text("Anatomy")EEDATA( glRasterPos2i(170,int(WinSize[3]-15))DATAp Text("Edit")DATA( glRasterPos2i(250,int(WinSize[3]-15))DATAp Text("Auto")DATA(X glRasterPos2i(330,int(WinSize[3]-15))DATA Text("Advanced")EDATA DATA q #ButtonsDATAX MenuButton = Menu(menuOfGroups, 1000, 90, int(WinSize[3]-40), 80, 18, MenuButton.val)DATAX0 MenuButton1 = Menu(commands1, 1001, 170, int(WinSize[3]-40), 80, 18, MenuButton1.val)DATAX MenuButton2 = Menu(commands2, 1002, 250, int(WinSize[3]-40), 80, 18, MenuButton2.val)DATAX@ MenuButton3 = Menu(commands3, 1003, 330, int(WinSize[3]-40), 80, 18, MenuButton3.val)DATAX MenuButton4 = Menu(commands4, 1004, 10, int(WinSize[3]-40), 80, 18, MenuButton4.val)DATA i = 0DATA( groupToSee = nameOfGroups[idxOfGroup]DATA sliderTtip = "no tooltip"DATA  for eachPath in targetsPaths:DATA p if sys.platform == "win32":kDATA$ pathData = eachPath.split("\\")DATA Hq else:DATA(` pathData = os.path.split(eachPath)DATA 32DATA  buttonGroup = pathData[0]1lDATA targetInfo = pathData[1]DATA$ if buttonGroup == groupToSee:DATA0  buttonIdx = targetsPaths.index(eachPath)DATA, buttonLabel = buttonNames[buttonIdx]DATA, buttonTtip = buttonTooltips[buttonIdx]DATAn buttonList[buttonIdx] = Number(buttonLabel, buttonIdx+1, positionOfButtons[i][0], positionOfButtons[i][1], buttonWidth, buttonHeight, buttonList[buttonIdx].val,-2.00,2.00,buttonTtip)DATA q i += 1DATAH 1DATA else:DATA glColor3f(1,1,1)EDATA` glRasterPos2i(100,150)1%DATA0@ Text("base.mesh not found, please load it")DATA8 Button("Load base.mesh", 10000, 100, 100, 150, 20)DATA !DATA  #Copyright and message lines 2DATA` glColor3f(1,1,1)EEDATA glRasterPos2i(10,25)DATAq Text(message)DATA glRasterPos2i(10,10)DATA@ Text("MAKEHUMAN 1.8 (c) Manuel Bastioni, 2002-2004","tiny")lenDATA 32DATA0############ EVENT FUNCTIONS#################DATA( 32DATA8def bevent(evt):REEDATAP global paintMode, riggingMode, idxOfGroup, targetsPaths, mainPath, buttonListDATA r if (evt):DATA if evt < 1000:REEDATA  if sys.platform == "win32":DATA8p targetPathFull = mainPath + targetsPaths[evt-1]DATA Hr else:DATADv targetPathFull = os.path.join(mainPath,targetsPaths[evt-1])REEDATA, if MorphFiles.fileExist(targetPathFull):DATA  try:DATA8 applyTarget(targetPathFull,buttonList[evt-1].val)DATA @ except:DATA  passDATA  else:DATA< PupMenu("Warning%t|Target not found, check console" )DATA4@ print "The file ", targetPathFull, "not exist"EDATA if (evt == 1000):DATA P idxOfGroup = MenuButton.valDATA  Draw()DATA if (evt == 1001):DATA( if MenuButton1.val == 0: makeSymm()DATA(h if MenuButton1.val == 1: buildBase()DATA  if MenuButton1.val == 2: elDATAX if paintMode == 0:DATA0` applyTarget(mainPath+"paint.target",1.00)EDATA paintMode = 1EDATA @ else:DATA0 applyTarget(mainPath+"paint.target",0.00)EDATA paintMode = 0EDATA if MenuButton1.val == 3:DATA@ if riggingMode == 0:DATA0  applyTarget(mainPath+"rigg.target",1.00)EEDATA0 riggingMode = 1DATA  else:DATA0 applyTarget(mainPath+"rigg.target",0.00)EEDATAx riggingMode = 0DATA( if MenuButton1.val == 4:resetAll()oDATA" if (evt == 1002):DATA( if MenuButton2.val == 0: autoUV()DATA, if MenuButton2.val == 1: loadVGroup()DATAH" if (evt == 1003):DATA,@ if MenuButton3.val == 0: saveVGroup()DATA(p if MenuButton3.val == 1: saveUVcoo()DATA, if MenuButton3.val == 2: saveBaseFaces()DATA, if MenuButton3.val == 3: saveBaseVerts()DATA" if (evt == 1004):DATA if MenuButton4.val == 0:DATA4 Window.FileSelector(saveTarget, "Save Target")EDATA  if MenuButton4.val == 1: ndoDATA< Window.FileSelector(saveSettings, "Save Body setting")eDATA0 if MenuButton4.val == 2:DATA< Window.FileSelector(loadSettings, "Load Body setting")DATA$ if MenuButton4.val == 3: Exit()EDATA" if (evt == 10000):DATA<` Window.FileSelector(startSequence, "Select BaseMesh");DATA # Window.RedrawAll()DATA` DATA DATAh#def event(evt, val):DATA0` if (evt== ESCKEY and not val): Exit(); returnEDATAL else: return # this is important: only re-register if an event was caught DATAD2 Register(draw, event, bevent) # re-register to stay in the loopideDATA )DATA Register(draw, event, bevent)DATA 32DATA( ############START GUI#################ADATA@###DATA mainPath = MorphFiles.readIni()DATA,print "mainPath from ini file: ",mainPathDATAxtry:7DATA  if sys.platform == "win32": 0DATA$x for f in nt.listdir(mainPath):REEDATA# if f == "base.mesh":DATAp print "base.mesh found"DATA,  startSequence(mainPath + "base.mesh")DATA else:DATA$ for f in os.listdir(mainPath):REEDATA# if f == "base.mesh":DATA print "base.mesh found"DATA8 startSequence(os.path.join(mainPath, "base.mesh"))DATAexcept:DATA@$ print "no ini file"DATA  TXh676TXMHsymmetry.pyx2$w$$(DATAHx2c:\Programmi\Blender Foundation\Blender\.blender\scripts\MHsymmetry.pyDATA$$*DATA$%$PRFREEDATA%`%$x0DATA`%%%XFREEDATA%%`% FREEDATA%8&%[[[DATA8&&%DATA&&8&DATA&'&`DATA'X'&DATAX'''DATA''X'DATA'0('@ vvvDATA0(x('wDATAx((0(DATA()x(PDATA)P)(8DATAP)))DATA))P)DATA)(*)pDATA(*p*) DATAp**(*DATA*+p* 2DATA+H+* 5DATAH+++@ 9DATA++H+2DATA+ ,+(#DATA ,h,+89DATAh,, ,>DATA,,h,p6DATA,@-,@DATA@--,8DATA--@-DATA-.-8xDATA.`.-xDATA`... DATA..`.DATA.8/.,3DATA8//.x(DATA//8/DATA/0/DATA0X0/DATAX000yDATA00X0Xy8DATA0010yDATA01x10PDATAx1B01!DATABHBx1yDATAHBBB0zDATABBHB DATAB CBxzDATA ChCBzDATAhCC C DATACChCxDATAC@DC0DATA@DDCDATADD@D@ DATADEDDATAE`EDDATA`EEE xDATAEE`EpDATAE8FE@)DATA8FFE7DATAFF8FH3DATAFGFDATAGXGFDATAXGGG DATAGGXG0DATAG0HGhDATA0HxHG2E 0 MDATAxHH0HDATAHIxHDATAIPIH؄DATAPIII`DATAIIPI DATAI(JIDATA(JpJIDATApJJ(JDATAJKpJ0#&DATAKHKJHI]?DATAHKKKPu?DATAKKHKDATAK LK{DATA LhLKDATAhLL LDATALLhL DATAL@ML@ DATA@MMLDATAMM@Mh3CDATAMNM(DATAN`NMmDATA`NNN*DATANN`N DATAN8ON`DATA8OONP{DATAOO8O{DATAOPOPDATAPXPODATAXPPPDATAPPXP&DATAP0QP#DATA0QxQP@EDATAxQQ0QІDATAQRxQIZDATARPRQ3DATAPRRR HDATARRPRDATAR(SR{DATA(SpSR(|DATApSS(S `7~DATASTpS@9DATATHTS69DATAHTTTxDATATTHTDATAT UTDATA UhUTDATAhUU U0DATAUUhU@ DATAU@VU$f>DATA@VVU m>DATAVV@V v)?DATAVWV@98'?DATAW`WVDATA`WWWX`7~DATAWW`W DATAW8XWDATA8XXWȈDATAXX8Xp|DATAXYX DATAYXYXDATAXYYY,DATAYYXY|`7~DATAY0ZY}DATA0ZxZY@ JDATAxZZ0Z8s!DATAZ[xZ3BBDATA[P[ZpDATAP[[[DATA[[P[DATA[(\[ DATA(\p\[DATAp\\(\ЌDATA\]p\ =DATA]H]\ s}DATAH]]]ؚ{DATA]]H]p{DATA] ^]DATA ^h^]8 %DATAh^^ ^2`7~DATA^^h^DATA^@_^DATA@__^ %DATA__@_ DATA_`_`DATA```_DATA````HoDATA````M`7~DATA`8a`@ `7~DATA8aa`K`7~DATAab8a DATAbHbaH}DATAHbbb DATAbbHb}DATAb cbDATA chcb !DATAhcc c_DATAcchc {UDATAc@dc@ yDATA@ddc DATAdd@d ȑDATAded}dDATAe`ed/DATA`eee PxDATAee`e(mDATAe8feQWDATA8ffe ~nDATAff8fh~q8?DATAfgf~DATAgXgf~iDATAXgggPDATAggXg@DATAg0hgDATA0hxhgDATAxhh0h`ջDATAhixh`7~DATAiPih`7~DATAPiii`7~DATAiiPi@ `7~DATAi(ji2ջDATA(jpjiL?DATApjj(jМDATAjkpj@DATAkHkjDATAHkkkDATAkkHk@DATAk lkxDATA lhlkDATAhll l`DATAllhlX4EDATAl@mlDATA@mml4ADATAmm@mZľDATAmnm ȑDATAn`nm DATA`nnnX-DATAnn`n DATAn8on9#DATA8oon 8DATAoo8oH5ADATAopo)0@DATApXpo@ dZ7DATAXppp;8DATAppXpȞ0/6DATAp0qp B6DATA0qxqpDATAxqq0q8DATAqrxqDATArPrqpDATAPrrrDATArrPrDATAr(srDATA(spsr@ 'DATApss(sCDATAstps(DATAtHtsP`7~DATAHttt@ `7~DATAttHt ]DATAt ut `7~DATA uhut MDATAhuu u`7~DATAuuhu07a0DATAu@vu;?DATA@vvu0:]n?DATAvv@v ML?DATAvwv@DATAw`wv@ @DATA`www &֐&@DATAw`wDATA,# Adapted from symetry.py by vnd@seznam.czDATATP# This is stripped down to help with target creation...NO UV or coloring done hereDATA4x# Use the original for a more robust symetry applenDATAX#yDATA# Craig SmithsDATApyDATAimport BlenderDATAfrom Blender import NMeshanDATA`from Blender.Draw import *rDATAfrom Blender.BGL import *urDATApyDATA adjustVertexCoords = Create(1)xDATA@delta = 0.001DATAwdelta2 = delta * deltaDATApyDATA Pdef MHdist2sym (verts, v1, v2):DATA8 DATA x1, y1, z1 = verts[v1].conDATA x2, y2, z2 = verts[v2].conDATApDATA  x2 = -x2DATADATA dx = x1 - x2DATA dy = y1 - y2DATA@ dz = z1 - z2DATADATA$( return dx * dx + dy * dy + dz * dzDATA8DATA@def MHmakeSymetry (verts, faces, left, right, centr, corresp):gDATApDATA@ moved = [0] * len(verts)inDATA  for i in range(0, len(right)):DATA vi = right[i]DATA8x cvi = corresp[vi]DATAx if (cvi == -1):DATA  continueDATADATA0 if (MHdist2sym(verts, vi, cvi) >= delta2):DATAx moved[vi] = 1DATA DATA x, y, z = verts[cvi].cokuDATA DATAy verts[vi].co[0] = -xDATAXy verts[vi].co[1] = yDATAy verts[vi].co[2] = zDATAP DATA$ for i in range(0, len(corresp)):liDATAy if (i == corresp[i]):DATA0z x = verts[i].co[0]DATA$ if (x < -delta or x > delta):.pyDATAxz moved[i] = 2DATAz verts[i].co[0] = 0DATA return movedDATADATA 0def MHcreateEdgeDict(faces):t.bDATADATA @ edges = {}DATA  for i in range(0, len(faces)):DATA numf = len(faces[i].v)latDATA  for vi in range(0, numf):DATA p v1 = faces[i].v[vi].indexDATA,@ v2 = faces[i].v[(vi + 1) % numf].indexDATA8 if ((v1,v2) in edges and edges[(v1,v2)] != (i, vi)):DATA4H print "edge in 2 faces, this should not happen"DATA edges[(v1,v2)] = (i, vi)DATADATA return edgesDATA0 DATAhDATAH2def MHcheckCorrespFace(faces, corresp, correspfaces, f1, f2, offset):V?DATA DATA numf = len(faces[f1].v)>DATA؄DATA ` if (numf != len(faces[f2].v)):DATA  return 0DATADATA for vi in range(0, numf): DATA  v1 = faces[f1].v[vi].indexDATA$0 vi2 = (numf - vi + offset) % numfDATAHDATA P v2 = faces[f2].v[vi2].indexDATA DATA{ c1 = corresp[v1]DATADATA  if (c1 != -1 and c1 != v2):DATA  return 0DATA @ return 1DATA DATADh3def MHsetCorrespFace(faces, corresp, correspfaces, f1, f2, offset):DATA(DATAp if (correspfaces[f1] != -1 and correspfaces[f1] != f2 or correspfaces[f2] != -1 and correspfaces[f2] != f1):DATA, print "corresp face already set", f1, f2DATA  return 0DATA`DATAP{ correspfaces[f1] = f2;DATA{ correspfaces[f2] = f1;DATAP numf = len(faces[f1].v)xDATADATA for vi in range(0, numf): DATA  v1 = faces[f1].v[vi].indexhDATA$ vi2 = (numf - vi + offset) % numfDATA @ v2 = faces[f2].v[vi2].indexDATAІ DATA\I if (corresp[v1] != -1 and corresp[v1] != v2 or corresp[v2] != -1 and corresp[v2] != v1):DATA4 print "corresp face already set", f1, f2, v1, v2DATA  return 0DATA DATA{ corresp[v1] = v2DATA(| corresp[v2] = v1DATA  return 1DATA@DATA8def MHfindCorresp(verts, left, right, ylist, corresp):DATAxDATA  for i in range(0, len(ylist)):DATA y0, vi0, side0 = ylist[i]DATA DATA0 if (corresp[vi0] != -1):DATA @ continueDATA DATA i2 = i + 1_?DATA  DATA<@ while (i2 < len(ylist) and ylist[i2][0] - y0 <= delta):>DATA y, vi, side = ylist[i2]DATAX DATA DATA i2 = i2 + 1DATAȈ DATAp| if (side == side0):DATA continueDATA DATA0 if (MHdist2sym(verts, vi0, vi) < delta2):DATA| corresp[vi0] = viDATA} corresp[vi] = vi0DATA @ breakDATA8 DATAD3def MHfindCorrespFaces(faces, left, right, corresp, correspfaces):DATApDATA notchanged = 1DATA DATA$ edges = MHcreateEdgeDict(faces)DATA DATA Ќ for i in range(0, len(faces)):DATA  if (correspfaces[i] != -1):<=DATA  continueDATAؚ DATAp numf = len(faces[i].v)DATA for vi in range(0, numf):DATA(8  c1 = corresp[faces[i].v[vi].index]DATA4 c2 = corresp[faces[i].v[(vi + 1) % numf].index]DATA  if (c1 != -1 and c2 != -1):DATA DATA(  if ((c2,c1) not in edges):DATA continueDATA ` cf, offset = edges[(c2,c1)]DATA  offset = offset - vi + 1DATAH DATAP if (not MHcheckCorrespFace(faces, corresp, correspfaces, i, cf, offset)):s\DATA@ continueDATAL if (not MHsetCorrespFace(faces, corresp, correspfaces, i, cf, offset)):DATA continueDATAH} notchanged = 0DATA  break~DATA} return notchangedDATADATA$ def MHfindSymetry (verts, faces):DATADATA  left = []DATA @ right = []DATA  centr = []DATA corresp = []?DATA} correspfaces = []DATA DATA  ylist = []DATA( DATA  for i in range(0, len(verts)):DATA ~ corresp.append(-1)q=DATAh~ x, y, z = verts[i].coDATA~ if (x <= -delta):DATA~ left.append(i)DATAP ylist.append([y,i,'l'])DATA@ elif (x >= delta):DATA right.append(i)DATA ylist.append([y,i,'r'])DATA` else:DATA centr.append(i)DATA corresp[i] = iDATADATA@ ylist.sort()DATA4 MHfindCorresp(verts, left, right, ylist, corresp)?DATA correspVerts = corresp[:]?DATAМDATA @ for i in range(0, len(faces)):DATA correspfaces.append(-1)~DATADATA@DATAxDATA  res = 0DATA` while (res == 0):DATAHX4 res = MHfindCorrespFaces(faces, left, right, corresp, correspfaces)DATADATAD4 return (left, right, centr, corresp, correspVerts, correspfaces)_DATA DATA DATAdef MHsym():ΧDATAX """DATA DESCRIPTION:>DATA< Attempts to make the both sides of the mesh symmetrical.DATA<  This code has been adapted from the original symetry.pyDATADH5 from vnd@seznam.cz. The homepage is http://sweb.cz/vnd/symetry/@DATA DATA @ SYNOPSIS:DATA  MHsym()1DATAȞ DATA PARAMETERS:DATA NoneDATA8DATA RETURN VALUES:DATAp NoneDATA """DATADATA global adjustVertexCoordsDATA(@  Objects = Blender.Object.GetSelected()DATA DATA mesh = Objects[0].dataDATAPDATA @ left = []DATA  right = []DATA  centr = []DATA corresp = []DATADATAd07 left, right, centr, corresp, correspVerts, correspFaces = MHfindSymetry (mesh.verts, mesh.faces)?DATADATA 0 if (adjustVertexCoords.val):H>DATAP  moved = MHmakeSymetry (mesh.verts, mesh.faces, left, right, centr, corresp)DATADATA@ mesh.update()DATA(  Objects[0].makeDisplayList() # addedDATA Blender.Redraw()TXh7(:6TXMorphFiles.py58a[[pDATAH5c:\Programmi\Blender Foundation\Blender\.blender\scripts\MorphFiles.pyDATA8FREEDATA8 FREEDATAFREEDATA0БFREEDATA0x  FREEDATAx00FREEDATAx@  FREEDATAPh2tl;DATAP b2tl;DATAPP2xL;DATA(2tl;DATA(p  2tl;DATAp(ءa?DATAp  DATAHH 'DATAH`)b?DATAHb)DATA ό?DATA h  DATAh  DATAhH@DATA@! DATA@>DATA@:DATAr---DATA`rDATA`@!---DATA` #---DATA8sDATA8Hs---DATA8sDATA2---DATAX!3DATAXs6DATAX %DATA0s8DATA0xc)DATAx0P # 34 DATAx 0DATAPzDATAPpDATAPDATA(`c)DATA(p DATAp(DATAp 'DATAH(t DATAH0DATAH`tDATA  'DATA h_DATAh X 'en(fDATAh  (f.uDATA@zTIONDATA@t REDATA@p8 # DATA`roblDATA` = fDATA`0{asUVDATA` #uvVeDATA80end(DATA8 lisDATA8Pa[0]DATAlf.oDATAX` sh.vDATAXtame,DATAX"placDATA0DATA0xuDATAx0` DATAx uDATAP@u uDATAPxu+DATAP@ uDATA(x{3 10DATA(p3 15DATAp(u 0 MDATApc) 0 MDATAH d/--- DATAH DATAH# DATA  n22DATA hd+cameDATAh d( uDATAh{sssDATA@@e)DATA@86FsssDATA@ DATA`H!DATA`mDATA`|`7~DATA`X2`7~DATA8uDATA8P|DATA8DATA DATAX vDATAX0DATAXXvDATA0 DATA0x5DATAx0(5AQDATAxvDATAP  DATAPDATAPv!DATA(` `7~DATA(ph&p!DATAp(w`v?DATAp|?DATAH&Y@DATAH8wDATAHpwDATA wDATA |DATA wDATA0"DATA0xЖDATAx0DATAx DATAPDATAPxDATAPp%DATA(e.FREEDATA(pPxFREEDATAp(f/FREEDATAp FREEDATAH!DATAH`f+DATAHf(DATA xj 5DATA h<UeDATAh   `7~DATAhx T@DATA@(}DATA@0DATA@pDATA` >DATA`x)7>DATA`p} 0=DATA`xr=DATA80yG|DATA8 CY=DATA8}%R>DATA g+(j>DATAXDATAXhyDATAX  DATA0~DATA0xyDATAx0` DATAxDATAP@$DATAP2DATAP DATA(DATA(pyDATAp(zDATApHzDATAH@0?DATAH"mpDATAHDATA  impoDATA h`a2 =DATAh `2 DATAhxe(0,DATA@$ cDATA@ foDATA@H~ movDATA~acesDATA`H#, thDATA`s[f1DATA`P[f2]DATA8~): DATA8#set"DATA8@2 = DATArintDATAXrespDATAX ist[DATAX, viDATA0eak DATA0x  nDATAx0 (facDATAx indeDATAP' DATAPP& ifDATAP#s, fDATA(& verDATA(pX$r.apDATAp(XrresDATAp  spFaDATAHhRIPTDATAH ThDATAH` ARAMDATA 0t = DATA hexCoDATAh  raw(DATAh---DATA@g++?DATA@  ---DATA@ȼ---DATA'DATA`DATA` 7@DATA` DATA8 DATA8p DATA8@---DATA---DATAX&DATAX1DATAXDATA0` 0@DATA0x297 DATAx0---DATAx`$---DATAP!DATAPeb-0DATAPPDATA(DATA(p#DATAp(DATAp`BA@DATAHh BA@DATAH@169 DATAHЀ---DATA $---DATA DATA DATA0`an-0DATA0xg.an-0DATAx0&DATAxp$DATAPDATAPA@DATAPȱ&A@DATA(0203 DATA(pP9---DATAp(@h)DATAp6ADATAHh.166 DATAHDATAH8eb-0DATA pargeDATA hgetsDATAh p = DATAh = 0:DATA@dVGrDATA@ MenDATA@  ton4DATA `(staDATA `  thiDATA`    aw, DATA  `  $ilesDATA 8   f iDATA8    DATA  8 PDATA   DATA X  FREEDATAX   x#DATA  X DATA 0  `FREEDATA0 x   DATAx  0 DATA  x в"DATA P  DATAP   0DATA  P DATA ( hDATA(p   DATAp(pDATApDATAH` DATAH DATAHؿDATA  DATA h  DATAh `DATAhDATA@DATA@DATA@HDATADATA``DATA`FREEDATA`8DATA8 DATA8(&DATA8DATADATAXDATAX(DATAX`0DATA0`DATA0x` DATAx0DATAxDATAP DATAP1DATAPDATA( DATA(p00DATAp((7CDATAp DATAH`DATAHDATAH@DATA xDATA hDATAh DATAhDATA@i.DATA@`i.DATA@PDATA`8gDATA`0DATA`@DATA`DATA8DATA8xDATA8%DATA@DATAXDATAXDATAXDATA0DATA0xس&DATAx00'DATAx:DATAPSDATAPDATAP8dDATA( DATA( p 0DATAp  ( DATA !p 4DATA!H! h6DATAH!!!  DATA!!H! DATA! "!7ADATA ""!XDATA"" "DATA"0#"` DATA0#x#"0:DATAx##0#DATA#$x# DATA$P$#>DATAP$$$DATA$$P$ DATA$(%$'DATA(%p%$8CDATAp%%(%`WDATA%&p% DATA&H&%@DATAH&&&8DATA&&H&pDATA& '&DATA 'h'&DATAh'' 'DATA''h'DATA'@('i.DATA@(('9cDATA((@( DATA()((P,DATA)`)("nnnDATA`)))sssDATA))`)0sssDATA)8*)osssDATA8**)83sssDATA**8*PsssDATA*+*psssDATA+X+*FREEDATAX+++DATA++X+8%DATA+0,+DATA0,x,+DATAx,,0,`DATA,-x,DATA-P-,DATAP---DATA--P-'DATA-(.-IZDATA(.p.-DATAp..(.DATA./p.DATA/H/. j/DATAH///@DATA//H/0DATA/ 0/DATA 0h0/ DATAh00 0VDATA00h0#DATA0@10pTDATA@110'DATA11@13DATA121ȂDATA2`21;DATA`222DATA22`2PDATA2832XDATA8332DATA3383DATA343@DATA4X43DATAX444 DATA44X4 DATA4054=DATA05x54@ DATAx5505DATA56x5 DATA6P65hDATAP666DATA66P6DATA6(76 DATA(7p76@'DATAp77(7DATA78p7 DATA8H87@ DATAH888DATA88H8 DATA8 98&FFFDATA 9h98DATAh99 9DATA99h9HDATA9@:9DATA@::9DATA::@:DATA:;:DATA;`;:"DATA`;;;0DATA;;`;@DATA;8<;DATA8<<;DATA<<8<DATA<=<DATA=X=<DATAX=== DATA==X=DATA=0>=(DATA0>x>=pDATAx>>0>0v)DATA>?x>@FREEDATA?P?>H FREEDATAP??? PPPDATA??P?PPPDATA?(@?6PPPDATA(@p@?;DATAp@@(@xDATA@Ap@ DATAAHA@`DATAHAAADATAAAHADATAA BA DATA BBAj+DATABB BDATAB0CB@ DATA0CxCB DATAxCC0CDATACDxC DATADPDC&DATAPDDDDATADDPD@DATAD(ED@DATA(EpEDxDATApEE(EDATAEFpEPDATAFHFEDATAHFFF"DATAFFHFDATAF GFDATA GhGFP"DATAhGG GDATAGGhGDATAG@HGDATA@HHGDATAHH@HDATAHIH$DATAI`IH@DATA`IIIa DATAII`I`DATAI8JIDATA8JJIDATAJJ8J(DATAJKJ DATAKXKJa DATAXKKK DATAKKXK b DATAK0LKPDATA0LxLK#DATAxLL0LDATALMxLDATAMPML DATAPMMMpDATAMMPM@ DATAM(NMDATA(NpNM DATApNN(Nj,DATANOpN DATAOHON DATAHOOO(1)DATAOOHOXb FREEDATAO PO@FREEDATA PhPOb FREEDATAhPP PFREEDATAPPhPX FREEDATAP@QPHFREEDATA@QQPb FREEDATAQQ@Qc FREEDATAQRQFREEDATAR`RQ@REEDATA`RRR FREEDATARR`RFREEDATAR8SR FREEDATA8SSR8c FREEDATASS8Spc FREEDATASTSp7):EDATATXTSc FREEDATAXTTT@ FREEDATATTXT'FREEDATAT0UTc FREEDATA0UxUT FREEDATAxUU0U3FREEDATAUVxUd FREEDATAVPVU FREEDATAPVVV$FREEDATAVVPV@k-FREEDATAV(WV@1FREEDATA(WpWVFREEDATApWW(W@FREEDATAWXpWPd FREEDATAXHXWd FREEDATAHXXXd FREEDATAXXHXFREEDATAX YX`!FREEDATA YhYX7FREEDATAhYY Y FREEDATAYYhYk(FREEDATAY@ZY FREEDATA@ZZY'FREEDATAZZ@Zd FREEDATAZ[Z0e FREEDATA[`[Z0FREEDATA`[[[he FREEDATA[[`[ FREEDATA[8\[i #FREEDATA8\\[e FREEDATA\\8\@ FREEDATA\]\FREEDATA]X]\e FREEDATAX]]] FREEDATA]]X] FREEDATA]0^]FREEDATA0^x^]@FREEDATAx^^0^ FREEDATA^_x^f FREEDATA_P_^Hf FREEDATAP___؇FREEDATA__P_j !FREEDATA_(`_ th+"DATA(`p`_hFREEDATAp``(``j #FREEDATA`ap`j "FREEDATAaHa`FREEDATAHaaaFREEDATAaaHaFREEDATAaak &DATAimport BlenderDATA import sysDATAfrom Blender import NMeshanDATAБif sys.platform == "win32":DATA  import ntDATA0else:DATA @  import osDATAhpyDATA bdef normcube(vector):DATA4P return vector[0]**2 + vector[1]**2 + vector[2]**2EDATApyDATA$ def writeTarget(filename, path):bleDATAء """eDATA  DESCRIPTION?DATA(H  Create target file from "Base" obj in DATA,` the scene, where only different verticesplDATA,b between the original Basemesh are storedDATA DATA  SYNOPSIS/@DATA  writeTarget(filename, path)eDATAH DATA ! PARAMATERSDATA@ filename : Full path of file to put vertex coordinates inDATA< path : the path where search the vertex list of BasemeshDATAr DATAr DATA@! RETURN VALUES:DATA$  Return 1 if success, 0 otherwise. DATAs """ DATAHsDATAsDATA4 #Open the file to retrieve the comments, if existDATA! comments = []DATAs try:DATA(  fileDescriptor = open(filename,'r')lDATAs try:DATA,c lineToRead = fileDescriptor.readline()DATA$P  except IOError, (errno,strerror):DATA4  print "I/O error(%s): %s" % (errno, strerror)DATAz while lineToRead:DATAp if "#" in lineToRead:sinDATA  comments.append(lineToRead)DATA,`c lineToRead = fileDescriptor.readline()DATA fileDescriptor.close()ckuDATA  except:@DATA(  print "Error in opening %s" %filenameDATA(tDATA4 #Reopen the file to read the points coordinatesDATA`t try:DATA(  fileDescriptor = open(filename,'w+') DATA  except: pDATA(X  print "Error in opening %s" %filenameDATA  return 0rDATAz sourceVertexList = []PDATAtDATA<p #Open the base file to read the points init coordinates" DATA ` file = open(path+"base.mesh")bDATA  vertexData = file.readline().bDATA0{ while vertexData:tDATA$  vertexCoo = vertexData.split(',')DATA4 sourceVertexList.append([float(vertexCoo[0]),\e(1DATA  float(vertexCoo[1]),\171DATA P float(vertexCoo[2])]) flDATA  vertexData = file.readline()+DATA` file.close()2]DATAt DATA$ #Write the comments, if retriviedcDATA for comment in comments:edDATAu try:DATA$` fileDescriptor.write(comment) uDATA  except:DATA@u passDATAxuDATA @ #Write the points of target 0DATAx{ epsilon = 0.001 12DATA targetVertexList = None DATAu try:DATA,c targetData = Blender.Object.Get("Base")DATA0 d targetVertexList = targetData.getData().vertsDATA  except: 14DATA$ print "No target object in scene"DATA  return0 RDATA,d for index in range(len(sourceVertexList)):DATA,d sourceVertex = sourceVertexList[index]ssDATA{ if targetVertexList:DATA,@e targetVertex = targetVertexList[index]sDATAH86 if abs(normcube(sourceVertex)-normcube(targetVertex.co)) > epsilon:DATA$ # write to the target file #7~DATA ` try:DATAp fileDescriptor.write("%d,%f,%f,%f\n" % (index,targetVertex.co[0],targetVertex.co[1],targetVertex.co[2]))DATA| except IOError:DATA4X print "Error in writing data in %s" %filenameDATAu DATAP| # for file flushing #DATA fileDescriptor.close() DATA  return 1DATA vDATA 0def writeOriginalMesh(path):DATAXv """DATA DESCRIPTION6DATA8 Create the base.mesh, an indexed list of all vertexDATA8( of baseMesh, in their original no modified position-DATAv DATA  SYNOPSISDATA writeOriginalMesh(path)DATAv DATA` PARAMATERSDATA(h path : the path where save the fileDATAw DATA| RETURN VALUES:?DATA( Return 1 if success, 0 otherwise. DATA8w """ DATApw DATAwDATA| # Get Raw mesh data #DATAw try:DATA$ obj = Blender.Object.Get("Base")DATAЖ obj_mesh = obj.getData()DATA  except:DATA  print "Base obj not in scene"DATA  returnDATAxDATA(p sourceMeshVertexData = obj.getData()DATA0e sourceVertexList = sourceMeshVertexData.vertsDATAPx try:DATA0f fileDescriptor = open(path+"base.faces", "w")DATA  except:DATA$ print "error to save mesh file"EEDATA,`f for index in range(len(sourceVertexList)):DATA,f sourceVertex = sourceVertexList[index]FZ@DATAx try:DATA@ fileDescriptor.write("%f,%f,%f\n" % (sourceVertex.co[0],\DATA$  sourceVertex.co[1],\T@DATA$x sourceVertex.co[2]))DATA(} except IOError:DATA4 print "Error in writing data in %s" %filenameDATAp fileDescriptor.close() DATA ` return 1~DATAxDATAp}def saveFaces(path):wDATAxDATA0y """DATA DESCRIPTIONDATA} Save an ascii file:?DATA, g each line is a the index of the vertex in DATA  a face.DATAhyDATA  SYNOPSISDATA~ saveFaces(path)DATAyDATA ` PARAMATERSDATA filename: the name of fileDATA(@ path: the path where save the files DATA4 SourceObject: the object in Blender scene to saveDATA =DATA RETURN VALUES:DATAy NoneDATAz """DATAHz DATA@ try:DATA$ obj = Blender.Object.Get("Base")zDATA obj_mesh = obj.getData() DATA  except: * DATA ` print "Base obj not in scene"DATA ` return faDATAx DATA( file = open(path+"base.faces", "w")a.DATA for f in obj_mesh.faces: DATAH~ nfaces = len(f)acDATA~ if nfaces == 3:2)DATA$H file.write(str(f.v[0].index)+",\DATA  "+str(f.v[1].index)+",\1 =DATA P "+str(f.v[2].index)+"\n")uDATA~ if nfaces == 4:[fDATA$ file.write(str(f.v[0].index)+",\DATA@ "+str(f.v[1].index)+",\DATA "+str(f.v[2].index)+",\DATA  "+str(f.v[3].index)+"\n")i0DATA file.close()i2DATADATADATA def buildMesh(path):(faDATA  """DATA DESCRIPTION= -DATA( Build the mesh reading two ascii file:DATA(P a vertex list and a faces list, namedcDATA$ Basedata.vertex and Basedata.facesDATA( If the Base object already exist, theaDATA(X function only print a short messagep) DATAX DATA  SYNOPSIS rDATAh buildMesh(path)codDATADATA ` PARAMATERSDATA 0 filename : The list of facestsDATA  filename2 : The list of vertexDATA DATA RETURN VALUES:DATA,g Return an object named Base, using a mesh DATA  named Base.DATAȼ """DATA( #test if an obj named Base or Base.***DATA #is already in the scene.DATA  allObjs = Blender.Object.Get()DATA obAlreadyInScene = 0DATA for ob in allObjs:DATAp if ob.name[:4] == "Base":DATA@ obAlreadyInScene = 1DATA if obAlreadyInScene == 1:DATA( print "Base object already in scene"DATA else:DATA  newBaseMesh = NMesh.GetRaw()DATA ` file = open(path+"base.mesh")DATA  vertexData = file.readline()DATA while vertexData:DATA(` vertexCoo = vertexData.split(',')DATA$ vx,vy,vz=float(vertexCoo[0]),\A@DATA float(vertexCoo[1]),\@DATAP float(vertexCoo[2])03 DATA  vertex=NMesh.Vert(vx,vy,vz)rDATA$ newBaseMesh.verts.append(vertex)DATA  vertexData = file.readline()DATA` file.close()DATA$h file = open(path+"base.faces")DATA @ faceData = file.readline()DATAЀ while faceData:DATA( vertexIndex = faceData.split(',')DATA newFace=NMesh.Face()DATA for i in vertexIndex:DATA` index=int(i)7@DATA0g newFace.v.append(newBaseMesh.verts[index])DATA( #newFace.smooth=1 # addedDATA(p newBaseMesh.faces.append(newFace)8-FDATA  faceData = file.readline()DATA file.close()DATA(ȱ newBaseObj=NMesh.PutRaw(newBaseMesh)DATA 0 newBaseObj.setName("Base")DATA<P #newBaseMesh.setMode('SubSurf', 'Optimal') # addedA@DATA,@h newBaseMesh.update(1) # added-DATAD6 newBaseObj.setLocation(Blender.Window.GetCursorPos()) # addedDATA0h newBaseObj.makeDisplayList() # addedDATA  Blender.Window.RedrawAll()DATA8 DATApDATAdef saveIni(path):pDATA """DATA DESCRIPTION100DATA  Save a text file makehuman.iniDATA DATA  SYNOPSIS DATA` saveIni(path)eDATADATA  PARAMATERSDATA(  path: the path where save the files"baDATA DATA  RETURN VALUES:DATAP NoneDATA """DATA try:DATA$x file = open("makehuman.ini", "w")DATA file.write(path)DATA` file.close()DATA  print "saved new ini file"PatDATA  except:DATA$в print "problem to save ini file"DATADATA0DATAdef readIni():DATAh """DATA  DESCRIPTIONDATA p Read a text file makehuman.iniDATA DATA ` SYNOPSISDATA  readIni()DATAؿDATA  PARAMATERSDATA  no parameterDATA` DATA RETURN VALUES:DATA the path of targets libDATA """DATAH try:DATA  file = open("makehuman.ini")DATA ` targetsPath = file.readline()DATA file.close()DATA8 return targetsPathDATA  except:DATA(( print "problem to retrieve ini file"DATADATADATA32DATA( DATA4`def save_vertexgroups(path, names_to_save = []):DATA` """DATA` DESCRIPTIONDATA  save the vertexgroup of a meshDATA DATA  SYNOPSISDATA4 save_vertexgroups (filename, names_to_save = [])DATADATA  PARAMATERSDATA40 path = the path into save the vertexgroups fileDATAD(7 names_to_save = name of vertexgroup to save. If not gived save allDATA  DATA` RETURN VALUES:DATA noDATA@ DATAx OTHERDATA thanks to Michael ShardtDATA DATA USAGEDATA0i The scene must contain a object called "Base"DATA0`i to save all vertexgroups in "C:/base.vgroup":DATAP save_vertexgroups ("C:/")DATAh`8 to save vertexgroups named "group1" and "group2" (if existing) of object obj to file "C:/base.vgroup":DATA4 save_vertexgroups ("C:/", ["group1", "group2"])DATA@ """DATA  filename = path+"base.vgroup"DATA # Get Raw mesh data #DATAx try:DATA( object = Blender.Object.Get("Base")DATA@ mesh = object.getData()DATA  except:DATA  print "Base obj not in scene"DATA  returnDATA DATA(س if not names_to_save: # save allDATA(0 groupnames = mesh.getVertGroupNames()DATA< else: # save only specified groups (if existing)DATAT groupnames = [name for name in names_to_save if name in mesh.getVertGroupNames()]DATADATAh8 if groupnames: # is there anything to save? If not - no need to create an empty file, right?DATA f = file (filename, "w")DATA 0 for groupname in groupnames:DATA  f.write (groupname + ":\n")DATA8 for data in mesh.getVertsFromGroup(groupname, 1):DATA8h f.write (str(data[0]) + "," + str(data[1]) + "\n")DATA  f.close()DATA DATAD7def load_vertexgroups(path, names_to_load = [], append_mode = 0):DATAXDATA """DATA` DESCRIPTIONDATA<0 load the vertexgroup from file, and apply it yo an objectDATA DATA  SYNOPSISDATA@ load_vertexgroups (path, names_to_load = [], append_mode = 0)DATADATA  PARAMATERSDATA( path = path from load the vertexgroupsDATAD8 names_to_load = name of vertexgroup to load. If not gived load allDATAX` append_mode = if true, the vertexgroup will be append to existent, else it replace allDATA  DATA@ RETURN VALUES:DATA8 noDATAp DATA OTHERDATA thanks to Michael ShardtDATA DATA USAGEDATA0i The scene must contain a object called "Base"DATAd9 to load all vertexgroups from file "C:/base.vgroup" to object obj, deleting existing groups first:DATA  load_vertexgroups ("C:/")DATA( to load all vertexgroups from file "C:/base.vgroup" to object obj, keeping existing groups (except for name-collisions - see remark below):nnDATA$ load_vertexgroups ("C:/", [], 1)DATA to load only vertexgroups named "group1" and "group2" (if existing) from file "C:/base.vgroup" to object obj, deleting existing groups first:DATA4 load_vertexgroups ("C:/", ["group1", "group2"])ssDATAo to load only vertexgroups named "group1" and "group2" (if existing) from file "C:/base.vgroup" to object obj, keeping existing groups (except for name-collisions - see remark below):DATA48 load_vertexgroups ("C:/", ["group1", "group2"], 1)DATAP """DATA p filename = path+"base.vgroup"DATA # Get Raw mesh data #DATA try:DATA(8 object = Blender.Object.Get("Base")DATA mesh = object.getData()DATA  except:DATA ` print "Base obj not in scene"DATA  returnDATA DATA if not append_mode:DATA( for name in mesh.getVertGroupNames():DATA\I mesh.removeVertGroup(name) # remove all existing vertexgroups before loading new onesDATA try:DATA f = file (filename, "r")DATA  except:DATA0 j print "Problem to open the vertex group file"DATA @ returnDATA0DATA  line = (f.readline()).strip()DATA while line:DATAX if line[len(line) - 1] == ":": # last character is a colon - it's a new groupnameDATA$ groupname = line[:len(line) - 1]DATAXp if (not names_to_load) or (groupname in names_to_load): # new group will be addedDATA' if groupname in mesh.getVertGroupNames(): mesh.removeVertGroup(groupname) # name conflict - remove (old) duplicate group firstDATA4 mesh.addVertGroup (groupname) # now add new oneDATAȂ skip_data = 0DATA< else: # skip this group (and the data following) DATA skip_data = 1DATAP else: # it's dataDATAX if not skip_data:DATA data = line.split(",")DATA index = int(data[0]) DATA@ weight = float(data[1])DATA  try:DATA  mesh.assignVertsToGroup (groupname, [index], weight, "replace") # could also use "add" or "substract" instead of "replace" - dont't knowDATA  except:DATA@ print "vertex group file corrupted or not for this mesh"DATA @ returnDATA  line = (f.readline()).strip()DATA  f.close()DATAh DATAdef saveUV(path):DATA """DATA DESCRIPTIONDATA(@ save the UV coordinates in a text fileDATA DATA  SYNOPSISDATA@ saveUV(path)DATADATA  PARAMATERSDATA( path = the full path for file to saveDATA DATA RETURN VALUES:DATAH noDATA """DATA # Get Raw mesh data #DATA path = path+"base.uv"DATA try:DATA$ obj = Blender.Object.Get("Base")DATA0 obj_mesh = obj.getData()DATA @ except:DATA  print "Base obj not in scene"DATA  returnDATA try:DATA file = open(path, "w")DATA  except:DATA  print "problem to save file"DATA  returnDATA( DATAp for f in obj_mesh.faces:DATA0 nvrt = len(f.uv)EDATA@ if nvrt == 0:DATA$H print "Object do not have UV"REEDATA  returnDATA for n in range(nvrt-1):PDATA8 file.write(str(f.uv[n][0])+","+str(f.uv[n][1])+";")DATA< file.write(str(f.uv[nvrt-1][0])+","+str(f.uv[nvrt-1][1]))DATAx file.write("\n")DATA file.close()DATA`DATAdef applyUV(path):DATA """DATA DESCRIPTIONDATA,j apply the UV coordinates from a text fileDATA DATA @ SYNOPSISDATA saveUV(path)DATADATA  PARAMATERSDATA( path = the full path for file to saveDATA DATA@ RETURN VALUES:DATA@ noDATAx """DATA path = path+"base.uv"DATAP # Get Raw mesh data #DATA try:DATA$ obj = Blender.Object.Get("Base")DATA obj_mesh = obj.getData()DATA  except:DATA$P print "Select the human, please"DATA  returnDATA obj_mesh.hasFaceUV(0)DATA try:DATA file = open(path)DATA  except:DATA( print "problem to open file", pathDATA @ returnDATAa  DATA` for f in obj_mesh.faces:DATA uvData = file.readline()DATA uvCoo = uvData.split(';')DATA( if len(f.uv) != 0:DATA hasUV = 1DATAa  else:DATA hasUV = 0DATA b  try:DATA P for i in range(len(f.v)):DATA$ uvVertCoo = uvCoo[i].split(',')DATA x = float(uvVertCoo[0])DATA y = float(uvVertCoo[1])DATA if hasUV:DATAp f.uv[i] = (x,y)DATA @ else:DATA f.uv.append((x,y))DATA  except:DATA0j print "the UV is not suitable for object"DATA  returnDATA file.close()DATA obj_mesh.update(1)DATAXb  32DATA@def fileExist(filename):1lDATAb  """eDATA  this function will be deletedDATA$X when os module will be includedREEDATAH in blender built-inDATAb  """DATAc  try:alDATA file = open(filename)DATA@ file.close()DATA  return 1DATA  except: DATA  return 0DATA8c  32DATApc  32DATA8pdef saveTargetsValue(filePath, targetList, valuesList):DATAc  """aDATA@ DESCRIPTIONDATA( Save a text file with row target,valueDATAc  DATA  SYNOPSISDATA4 saveTargetsValue(filePath, targetList, valuesList)DATAd DATA  PARAMATERSDATA( path: the path where save the filesalDATA0@k targetList: a list of all targets local pathDATA4@ valuesList: a list of all targets values appliedEEDATA DATA@ RETURN VALUES:DATAPd  None?DATAd  """DATAd  #try:DATA file = open(filePath, "w")DATA$` for i in range(len(targetList)):EDATA8 file.write(targetList[i]+","+str(valuesList[i])+"\n")DATA file.close()DATA,k print "Body setting saved to ",filePathDATA  #except:DATA( # print "problem to save body setting"DATAd DATA0e DATA 0def loadTargetsValue(filePath):DATAhe  """?DATA DESCRIPTION nDATA$i  Read file with slider setting infoDATAe  DATA @ SYNOPSISDATA loadTargetsValue(filePath)DATAe ?DATA  PARAMATERSDATA no parameterDATA DATA@ RETURN VALUES:DATA  filePathDATAf  """DATAHf  try:DATA؇ file = open(filePath)DATA$j  nameAndValues = file.readline()EEDATA  valuesData = []EEDATAh while nameAndValues:DATA$`j  valuesData.append(nameAndValues)DATA$j  nameAndValues = file.readline()EDATA file.close()DATA return valuesDataDATA  except:DATA(k  print "problem to open setiing file"ETXh(:7TXMorphing.py8G{ DATAH8c:\Programmi\Blender Foundation\Blender\.blender\scripts\Morphing.pyDATA@@DATA@ DATAЉ@FREEDATAЉ DATA`Љf u@DATA`( 8@DATA`f 3j@DATA88| DATA8f DATAȋ8| DATAȋ| DATAXȋ(g DATAX DATAX`g DATA0} DATA0xhk $DATAx0pDATAxX} DATAP} DATAPk $DATAPl*DATA(`l*DATA(pl.DATAp( m*DATAp`7~DATAHh`7~DATAHg `7~DATAؐHl $z!DATAؐ g jDATA hؐm)`7~DATAh 4DATAhh DATA@} DATA@@h DATAВ@pl %DATAВm)DATA`Вl $eA2DATA`xh D!DATA`h {DATA8 m $KADATA8xm #q8>DATAȔ8x0MDATAȔh DATAXȔ@n)DATAXm #DATAX0DATA0 i {DATA0xXi 9g?DATAx00~ UDATAx9A}e>DATAP9A`7~DATAP(n $DATAPDATA(n "DATA(pn  DATAp(0o  DATApo  DATAH("DATAH:cDATAؙHX;cDATAؙ ;cDATA y ؙx~ aDATAy y  9@`7~DATAy @z y DATA@z z y n/DATAz z @z o)!@DATAz { z `"DATA{ `{ z DATA`{ { { ~ DATA{ { `{ `o)DATA{ { o((0!DATA@import BlenderDATA import sysDATAif sys.platform == "win32":DATA  import ntDATAf else:DATA ( import osDATAf pyDATA8| class Morph(object):DATAf  yDATA|  originalPoints = []DATA|  targetUsed = {}DATA(g pyDATA  def __init__(self,thePath):fixDATA`g DATA}  self.path = thePathDATA(hk  file = open(self.path+"base.mesh")dDATA p vertexData = file.readline()xDATAX}  while vertexData:DATA}  PointToDraw = []DATA(k  vertexCoo = vertexData.split(',').blDATA,l PointToDraw.append(float(vertexCoo[0]))DATA,`l PointToDraw.append(float(vertexCoo[1]))lDATA0l PointToDraw.append(float(vertexCoo[2])) DATA, m self.originalPoints.append(PointToDraw)DATA  vertexData = file.readline()DATAh file.close()DATAg DATA(l  def doMorph(self,targetPath,Value):.blDATAg  DATA,m if self.targetUsed.has_key(targetPath):>DATA8 morphFactor = Value - self.targetUsed[targetPath]DATAh  else:DATA}  morphFactor = ValueDATA@h DATA(pl  self.targetUsed[targetPath] = ValueziDATA,m actual_obj = Blender.Object.Get("Base")RDATA(l  actual_mesh = actual_obj.getData().blDATAxh DATAh  try:DATA( m  fileDescriptor = open(targetPath)ps[DATA$xm  except IOError, (errno,strerror):DATA4x print "I/O error(%s): %s" % (errno, strerror)DATAh  try:DATA,@n stringData = fileDescriptor.readline()#@DATA$m  except IOError, (errno,strerror):DATA4 print "I/O error(%s): %s" % (errno, strerror)qh>DATA i DATAXi  DATA0~  while stringData:DATAD9 if stringData.find("#") == -1 and stringData.find(",") != -1: ~DATAD9 #The second condition above is to check the line is not emptyDATA((n  listData = stringData.split(',')DATA  try:DATA$n  pointIndex = int(listData[0])pDATA$n  pointX = float(listData[1])endDATA$0o  pointY = float(listData[2])endDATA$o  pointZ = float(listData[3])ascDATA("DATAd: actual_mesh.verts[pointIndex].co[0] += (pointX-self.originalPoints[pointIndex][0])*morphFactorDATAdX; actual_mesh.verts[pointIndex].co[1] += (pointY-self.originalPoints[pointIndex][1])*morphFactorDATAd; actual_mesh.verts[pointIndex].co[2] += (pointZ-self.originalPoints[pointIndex][2])*morphFactorDATAx~  except ValueError:DATAD9 print "the target file", fileName, "have some imperfection"DATA  else:DATA0n print "COMMENT",stringData.replace("#"," ")DATA,o stringData = fileDescriptor.readline()DATA`" DATA fileDescriptor.close()latDATA~  actual_mesh.update(1)DATA,`o actual_obj.makeDisplayList() # addedDATA,o Blender.Window.RedrawAll() # addedNAC<`ACActionDATA< p phand.lDATA, pConstOB [OBCamera 85y@7@???W?FqA>$??aL??"q=}gEV>s?V?.FG>y@7@??????+tڳI?"3ײ?e }D6?OBd??)d??>)d?????OB [0OBLamp :n K?????????:n K??????dL??"q=~gEV>s?V?.FG>NDtAJwk@?DOBd8? #=?>=??@???OB 0[xOBLamp.001 C'Az K?????????C'Az K??????aL??"q=}gEV>s?V?.FE>M؝iJk@?DOBd8? #=?>=??@???OB x[ 0OBLamp.002 @lXO*@????????lXO*@?????cL??"q=~gEV>s?V?.FF>ұA,u@???DOBd8? #=?>=??@???OB  [ xOBLamp.003 x A"<@???????? A"<@?????aL??"q=gEV>s?V?.FF>F[nT?DOBd8? #=?>=??@???OB  [  OBLamp.004 ~klXn@????????~klXn@?????bL??"q=}gEV>s?V?.FF>H@(u@:???DOBd8? #=?>=??@???OB  [  OBPlane"?????????????cL??"q={gEV>s?V?.FG>y@7@?DOBd8? #=?>=??@???67yDATA"OB  [ OBCylinder@"Cp #?????????Cp #??????`??"=p羼E>?V?.ƿI?a4AMoLf@?DOBd8? #=?>=??@???=X45yDATA"MA & x MAMaterial6L?L?L??????????R.??L??C ?9?ٲ:@??2 ????????@?=?==? ??????L?L?L?L==ff????MA & MAMaterial.001?????????D1!??(=?qu?9??? ????????@?=?==? ??????L?L?L?L==ff????TE"TETex5>@???????@@????? @??<ME2@MEPlane =# pp( xP 6+IA+IA?DATA# DATA,DATAP8+IA+IA+IA+I+I+I+I+IADATA,pDATA0p5####DATA,x UVTexp@Col(DATA 4DATA,p<????DATA(9ME@2MECylinder<@#`R  # H ?D?D?gf6@($DATA@# DATA, DATA% 85?5???G2T?9?K)2G^l?>jS"G{?G>XG?i!3IZG{?GXcG_l?þjSsG2T?9KG5?5?)G9?2T)2G>`l"GG>{sGL﮴GG{csG$þ[lsݖG9,TG55))G8T9GdlþsG{GscG5G{G>sGWl8>"G&T9?)2G55?)?G9>T?KGþhl?sjSG]G{?cXGw5?IZG1G>{?XGL>Sl?"jSG9? T?)2KG 5?5?fff=G=GNDT?9?fffS7Nll?>fff]&N{?3G>fffbN?ȪfffdN{?^lfff&NG>{fff1Ny5fffANkG{fffY1NþjlfffsN9ETffffff1N~l}>fff좍&NcT9?fff<7N755?fffø=GN/:T?fffSNþ5l?fffs]NG{?fffYbN-D?fffdNG>{?fffbN>l?fff&]Nd9?T?fff7SN=4I*>3337SN|=6=>333&]N=xH>333bNiõL>333dNTH>333YbN俜5=>333r]NLH*>333SN>333ø=GNI*L=333<7N6=̾=333좍&NpH|=3331NLp_\333AN\H,3331YN5=333sNH*333<N333øøNI*333333=GøNH*>܏333SN5=>h333]sN`H>333bYNL>@333dNlH>=333bN5=>=333]&NI*>=333S7N>>333=G=GN>>>XXI*>=>g4E5=>=>s/lH>=>,zML>@񴚙>|`H>>,z5=>h>sUЕH*>܏㽚>g̺>>X맕=H*>4EmH=5=>/ꌕ=dH>MԅG4L>o$hH>ԅ5=>UꌕI*>̺m>맕H*㽚>m̺5=>UЕ\H,>ԅLp_\>opH|=>ԅM6=̾=>ꌫ/I*L=>m4E>>XLH*>>˺g俜5=>>UsTH>>,ziõL>>|=xH>>M,z|=6=>>/s=4I*>>4EgF*>m>?GkjE=>?0?vEo=>?}EM>?E>o>?}ES>??vE9*,m>?kjEt9Y8Y>?ZEmy*>?GE荾2=?0Eo=?yEG?EBo?yE_荾d?EPm*?E9YJ9Y?E*m?帕Et荾?Eo?yE;•4?EFo= ?yE=k荾?0Eͫ*>tm?GE9Y>,9Y?ZEbm>*?kjEe>??vE>o?}E>4?E>no=?}Et>=??v0Em>*>?kjGE>9Y>9Y>?ZZE2 >1 >433?WW0&>4=433?Sg Ez8>Ә=433?r/C>!=433?y>G>k 433?E|C>433?yz8>8Ԙ433?rrЧ&>vݽ433?Sg1 >1 433?W!W=%&433? EԘ=z8433?/1=C433?>B4G433?PC433?Әz8433?r10ݽ0&433?1 2 433?!! &ݽ433?z8gԘ433?1rЧCQ433?G V433?C=433?> {8Ә=433?1/H&=433? E%2 1 >433?!Wݽ&>433?SgԘz8>433?rrC>433?yG>433?E|=C>433?>yRӘ={8>433?/r=_&>433? ESg=_&>??)d$=C>?J k$G>?$m$C>? k$Ԙz8>??]ÿZ$%2 1 >?Ӳ-M$H&=?@<$ {8Ә=?*)$C=?J$G V?ܒ$CQ?$z8gԘ?+<$ &ݽ?A]$1 2 ?ӲӲ$0ݽ0&?]@$Әz8?<*$PC?$B4G?ܒ$=C?K$Ԙ=z8?)+$W=%&?1 ?-MӲ$&>vݽ?Z]$z8>8Ԙ?d<$C>? k$G>k 봚?$m$C>!=? kJ$z8>Ә=?d)$0&>4=?Z<$2 >1 >?-M-M$>>43? >gg>43?!x>\ ?=e>43?^%z?2=43?'?G43?r(?f43?'/\ ?T>e43?^% >g43?!鑆>Ӿ43?g㑆g> 43?x_ޑ&>e>5\ 43?zڑ=43?Uؑ543?בx43?Uؑ=e>\ 43?ڑdg 43?_ޑӾӾ43?gg㑆 g43?_ވ鑆)\ >e43?چ43?U%!43?=43?UI\ p=e>43?z 0g>43?_x8Ӿ>43?ggq >43?! ?e\ ?43?^%?43?'Q厶?43?r(=?43?'U\ ?43?z^%f> >43?x!f&? y?@t$6<>U\?@<i>?@ [@Q•?@Ai?@3[@ ?\?@<g&q y?@ۏ68SS?@f. y0g&?@qt$I\p=>@aᒿi>@ •%@bᒿi@3)\>@a yg&@qɌSS@њdg& y@q=>\@axiᒿ@35•@bi>ᒿ@ &>>5\@ag&? y@t$qS?S@f. y?g&@6/\?T>@<?fi@[@3•?G0@A?2i>@[@ >\?=>@< y?gg&?@6t$S?S?@f.f.&~?&~?33@%W%Wsl?IG?33@yfxDsK? ?33@q)/sLB?=>33@x sD?aS33@>{sBB?=33@xs9?̋ 33@qsl?G33@yfs&~?&~33@%WۨshG?l33@xDs ?@33@)/$s=>EB33@  s75D33@„sH=IB33@ s K33@$sEGl33@s&~&~33@ۨۨslG33@s2 33@$s>B0>33@ sD`33@„sOB<>33@ sXD ?33@$)/slG?33@xDs'~Q&~?33@ۨ%WsGl?33@yfs: $?33@qs>7B?33@xsy+D?33@>{s!<>VB?33@ xs ?f?33@)/qsʮG? m?33@xDyfs?o?gf@(/F_>ӄ?gf@{ lN_5``>?gf@@S_. ŏ?gf@T_md`?gf@q@S_ܾPӄ?gf@kN_Eo?gf@ГF_tRKQK?gf@<_o9?gf@m(/_zӄ>gf@{ _"a`>gf@_ŏgf@_c`gf@q_[ӄ#ܾgf@_gogf@m_RKKRKgf@_kogf@m_pܾoӄgf@ߕ_ b`gf@q_,5ŏgf@_b`>gf@_>gӄgf@{ _?ogf@(/m_RK?/RKgf@<_wo?gf@F_aӄ?ܾgf@kN_?b`gf@@Sq_ŏ?:)gf@T_?a`>gf@@S_oӄ?e>gf@kN{ _o?n?gf@F(/_ARK? RK?gf@<<_E?gE?gf@FFxVOh?9?gf@xV?W>gf@ѨxV?~Z>gf@rxV?&p$gf@xV?Zgf@rixV?վgf@Ѩ$xVOh?9gf@m4xVzE?Egf@FBxV9?Ohgf@wNxV>gf@/WxVAZ>gf@\xV 5gf@^^xVZgf@i\xV`վgf@$/WxV9Ohgf@m4wNxVcEEgf@BBxVOh9gf@wNm4xVվgf@/W$xV( Zgf@\ixVaRgf@^^xVZ>gf@\xV>gf@/WxVOhe9?gf@wNxV̐E7E?gf@BFxV:sOh?gf@m4xVzվ?gf@$ѨxV Z?gf@irxVP?gf@xVZ>?gf@rxV>?gf@ѨxV59?Ph?gf@ˉxV/:?܋?43@^ǚ'|?h?43@jч'B>?43@A虈'# 5?43@C'De?43@'g?43@.'8:܋?43@Cǚ'mSm?43@V멅'܋h:?43@9e^'h?43@ypjх'{C>43@gw@'5B43@y'krD43@gw'ge43@yp.'܋:43@9eC'mm43@VV':܋43@C9e'h43@.yp'Cu43@gw'5543@y'C>q43@@gw'$?g43@jyp':?܋43@^9e'm?m43@V'܋?:43@ǚC'g?=43@.'o?D43@'5?E43@C'x?rC>43@@'h??43@jх'܋?:?43@ǚ^'m?m?43@멅' O>?N>?@q_??@ϣqmx?>@-ʵq?R>@ƣq}? f@q?R@] qSx?/;@-Kq`_?K@] qN>?N>@2)q6?p_@p0q>]x@5q@R>@#9q35}@B:qR@] #9q;mx@K5q_@] p0qN>O>@1)2)qR_f@p0] qHxo;@5KqR@#9] q}͐@B:qR>@#9qxc>@5q_?@p0q9O>N>?@2)q2_?@^ q;3x?@K.qR?@] qf}?@qR>?@q>x?@-q?_?@ߐq43?43?Ek43?]k43?k43?k43?]k43?k43?k43?ok43? Ek43?2 ]k43? k43? k43? ]k43?2 k43? k43?k43? k43?2 k43?] k43? k43? k43?]2 k43?E k43?ok43?k43?k43?]k43?k43?k43?]k43?Ek43?ookDATA,H# DATA.# 5@ "@ !""@ !"""@ "#""@ #$""@ $%""@ %&""@ &'""@ '(" " @ ()" " @ )*" " @ *+" " @ +," " @ ,-" "@ -.""@ ./""@ /0""@ 01""@ 12""@ 23""@ 34""@ 45""@ 56""@ 67""@ 78""@ 89""@ 9:""@ :;""@ ;<""@ <=""@ =>""@ >?"" ?"!" """#"$"%"&"'"(" )" *" +" ," -"."/"0"1"2"3"4"5"6"7"8"9":";"<"=">"?"?A"A`" `">B"AB"=C"BC"<D"CD";E"DE":F"EF"9G"FG"8H"GH"7I"HI"6J"IJ"5K"JK"4L"KL"3M"LM"2N"MN"1O"NO"0P"OP"/Q"PQ".R"QR"-S"RS",T"ST"+U"TU"*V"UV")W"VW"(X"WX"'Y"XY"&Z"YZ"%["Z["$\"[\"#]"\]""^"]^"!_"^_"_`"`a"ab"_b"bc"^c"cd"]d"de"\e"ef"[f"fg"Zg"gh"Yh"hi"Xi"ij"Wj"jk"Vk"kl"Ul"lm"Tm"mn"Sn"no"Ro"op"Qp"pq"Pq"qr"Or"rs"Ns"st"Mt"tu"Lu"uv"Kv"vw"Jw"wx"Ix"xy"Hy"yz"Gz"z{"F{"{|"E|"|}"D}"}~"C~"~"B""A"a"""a"""~""}""|""{""z""y""x""w""v""u""t""s""r""q""p""o""n""m""l""k""j""i""h""g""f""e""d""c""b"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""  "   " " " " " " "   "   "   "   "   " " " " " " " " " " " " " " " " " " " " !"!"""""#"#"#$"$"$%"%"%&"&"&'"'"'("("()")")*"*"*+"+"+,",",-"-"-."."./"/"/0"0"01"1"12"2"23"3"34" 4"45" 5"56" 6"67" 7"78" 8"89"9"9:":":;";";<"<"<="="=>">">?"?"?@"@"!@"@A"A`"!`"?B"AB">C"BC"=D"CD"<E"DE";F"EF":G"FG"9H"GH"8I"HI"7J"IJ"6K"JK"5L"KL"4M"LM"3N"MN"2O"NO"1P"OP"0Q"PQ"/R"QR".S"RS"-T"ST",U"TU"+V"UV"*W"VW")X"WX"(Y"XY"'Z"YZ"&["Z["%\"[\"$]"\]"#^"]^""_"^_"_`"`a ab#_b bc#^c cd#]d de#\e ef#[f fg#Zg gh#Yh hi#Xi ij#Wj jk#Vk kl#Ul lm#Tm mn#Sn no#Ro op#Qp pq#Pq qr#Or rs#Ns st#Mt tu#Lu uv#Kv vw#Jw wx#Ix xy#Hy yz#Gz z{#F{ {|#E| |}#D} }~#C~ ~#B #A a#""a"""~""}""|""{""z""y""x""w""v""u""t""s""r""q""p""o""n""m""l""k""j""i""h""g""f""e""d""c""b""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "  " " " " " " " " " " " " " " " " " " " " " " " " " " " " " """"""""""""""""""""""""""""""""""DATA,`R DATA(`R 4@@@@@@@@@ @ @ @ @ @ @@@@@@@@@@@@@@@@@@ !!""##$$%%&&''(()  )*  *+  +,  ,-  -..//00112233445566778899::;;<<==>>? ? ?A`?>BA>=CB=<DC<;ED;:FE:9GF98HG87IH76JI65KJ54LK43ML32NM21ON10PO0/QP/.RQ.-SR-,TS,+UT+*VU*)WV)(XW('YX'&ZY&%[Z%$\[$#]\#"^]"!_^! `__`ab^_bc]^cd\]de[\efZ[fgYZghXYhiWXijVWjkUVklTUlmSTmnRSnoQRopPQpqOPqrNOrsMNstLMtuKLuvJKvwIJwxHIxyGHyzFGz{EF{|DE|}CD}~BC~AB`Aaa~~}}||{{zzyyxxwwvvuuttssrrqqppoonnmmllkkjjiihhggffeeddccbba             !""##$$%%&&''(())**++,,--..//0011223 34  45  56  67  78 899::;;<<==>>??@ @!!@A`@?BA?>CB>=DC=<ED<;FE;:GF:9HG98IH87JI76KJ65LK54ML43NM32ON21PO10QP0/RQ/.SR.-TS-,UT,+VU+*WV*)XW)(YX('ZY'&[Z&%\[%$]\$#^]#"_^"!`__`ab^_bc]^cd\]de[\efZ[fgYZghXYhiWXijVWjkUVklTUlmSTmnRSnoQRopPQpqOPqrNOrsMNstLMtuKLuvJKvwIJwxHIxyGHyzFGz{EF{|DE|}CD}~BC~AB`Aaa~~}}||{{zzyyxxwwvvuuttssrrqqppoonnmmllkkjjiihhggffeeddccbbaDNA1pSDNANAMEF*next*prev*first*lastxyzwxminxmaxyminymax*pointergroupvalpadname[32]typesubtypeflagsaveddatalentotallen*newid*libname[24]usicon_id*propertiesid*idblock*filedataname[240]filename[240]tot*parentcurvecurblocktypeshowkeyposcurvaladrcodetotelem*data*weightsvgroup[32]sliderminslidermax*refkeyelemstr[32]elemsizeblock*ipo*fromtotkeyslurph**scripts*flagactscripttotscript*line*formatblen*nameflagsnlineslines*curl*sellcurcselc*undo_bufundo_posundo_len*compiledsizeseekpassepartalphaangleclipstaclipendlensortho_scaledrawsizeshiftxshiftyYF_dofdistYF_apertureYF_bkhtypeYF_bkhbiasYF_bkhrotscriptlinkh*rectframenrframesoffsetsfrafie_imacyclokmulti_indexlayerpassmenunribufs*anim*rrsourcepad1lastframetpageflagtotbindxrepyreptwstatwendbindcode*repbind*packedfile*previewlastupdatelastusedanimspeedgen_xgen_ygen_type*vnodetexcomaptomaptonegblendtype*object*texuvname[32]projxprojyprojzmappingofs[3]size[3]texflagcolormodelrgbkdef_varcolfacnorfacvarfacdispfacwarpfacname[160]*handle*pname*stnamesstypesvars*varstr*result*cfradata[32](*doit)()(*instance_init)()(*callback)()versionaipotype*ima*cube[6]imat[4][4]obimat[3][3]stypeviewscalenotlaycuberesdepthrecalclastsizenoisesizeturbulbrightcontrastrfacgfacbfacfiltersizemg_Hmg_lacunaritymg_octavesmg_offsetmg_gaindist_amountns_outscalevn_w1vn_w2vn_w3vn_w4vn_mexpvn_distmvn_coltypenoisedepthnoisetypenoisebasisnoisebasis2imaflagcropxmincropymincropxmaxcropymaxxrepeatyrepeatextendcheckerdistnablaiuser*plugin*coba*envloc[3]rot[3]mat[4][4]min[3]max[3]*obmodetotexenergydistspotsizespotblendhaintatt1att2shadspotsizebiassoftbufsizesampbuffersfiltertypebufflagbuftyperay_sampray_sampyray_sampzray_samp_typearea_shapearea_sizearea_sizeyarea_sizeztexactshadhalostepYF_numphotonsYF_numsearchYF_phdepthYF_useqmcYF_bufsizeYF_padYF_causticblurYF_ltradiusYF_glowintYF_glowofsYF_glowtypeYF_pad2*mtex[10]specrspecgspecbmirrmirgmirbambrambbambgambemitangspectraray_mirroralpharefspeczoffsaddtranslucencyfresnel_mirfresnel_mir_ifresnel_trafresnel_tra_ifiltertx_limittx_falloffray_depthray_depth_traharseed1seed2mode_lflarecstarclinecringchasizeflaresizesubsizeflarebooststrand_stastrand_endstrand_easesbiasshad_alphapadfrgbselpr_typeuse_nodespr_backpr_lampseptexml_flagdiff_shaderspec_shaderroughnessrefracparam[4]rmsdarkness*ramp_col*ramp_specrampin_colrampin_specrampblend_colrampblend_specramp_showpad3rampfac_colrampfac_spec*nodetree*groupfrictionfhreflectfhdistxyfrictdynamodepad2sss_radius[3]sss_col[3]sss_errorsss_scalesss_iorsss_colfacsss_texfacsss_frontsss_backsss_flagsss_presetYF_arYF_agYF_abYF_dscaleYF_dpwrYF_dsmpYF_presetYF_djitname[256]scale*bbi1j1k1i2j2k2selcol1selcol2quat[4]expxexpyexpzradrad2s*mat*imatelemsdisp**mattotcolwiresizerendersizethreshvec[3][3]alfaweightradiush1h2f1f2f3hidevec[4]mat_nrpntsupntsvresoluresolvorderuordervflaguflagv*knotsu*knotsv*bp*beztcharidxkernnurb*bevobj*taperobj*textoncurve*path*keybevpathlenbevresolwidthext1ext2resolu_renresolv_renspacemodespacinglinedistshearfsizewordspaceulposulheightxofyoflinewidth*strfamily[24]*vfont*vfontb*vfonti*vfontbisepchartotboxactbox*tbselstartselend*strinfocurinfoname[128]maxrcttotrctvartypetotvertipoextraprtbitmaskslide_minslide_max*drivereffect*mface*mtface*tface*mvert*medge*dvert*mcol*msticky*texcomesh*mselect*oc*sumohandlevdataedatafdatatotedgetotfacetotselectcubemapsizesmoothreshsubdivsubdivrsubsurftype*mr*pv*tpageuv[4][2]col[4]transptileunwrapv1v2v3v4edcodecreasedef_nr*dwtotweightco[3]no[3]co[2]indexv[4]midchildrenstartpad[2]v[2]*verts*faces*colfaces*edges*vert_edge_map*vert_face_map*map_memlevelslevel_countcurrentnewlvledgelvlpinlvlrenderlvluse_col*edge_flags*edge_creases*vert_map*edge_map*old_faces*old_edges*errormodifiersubdivTyperenderLevels*emCache*mCachedefaxispad[6]startlengthrandomizeseed*start_cap*end_cap*curve_ob*offset_oboffset[3]scale[3]merge_distfit_typeoffset_typecountaxistolerancesplit_angle*texturestrengthdirectiondefgrp_name[32]midleveltexmapping*map_objectuvlayer_name[32]uvlayer_tmp*projectors[10]*imagenum_projectorsaspectxaspectypercentfaceCountfacrepeat*objectcenterstartxstartyheightnarrowspeeddamptimeoffslifetimedeformflagparentinv[4][4]cent[3]falloff*indexartotindexforceoperationpntswopntsuopntsvopntswtypeutypevtypewfufvfwdudvdw*defvec[8][3]dvec[3]max**obpartypepar1par2par3parsubstr[32]*track*proxy*proxy_group*proxy_from*action*poseconstraintChannelsnetworkdefbasemodifiersdloc[3]orig[3]dsize[3]drot[3]dquat[4]obmat[4][4]laycolbitstransflagipoflagtrackflagupflagnlaflagprotectflagipowinscaflagscavisflagboundtypedupondupoffdupstadupendsfctimemassdampinginertiaformfactorrdampingsizefacdtdtxactcolempty_drawtypepad1[7]empty_drawsizepropsensorscontrollersactuatorsbbsize[3]actdefgameflaggameflag2softflaganisotropicFriction[3]constraintsnlastripshooks*pd*soft*dup_groupfluidsimFlagrestrictflagshapenrshapeflagrecalcopad4*fluidsimSettings*derivedDeform*derivedFinallastDataMaskcurindexactivedeflectforcefieldpdef_damppdef_rdamppdef_permf_strengthf_powermaxdistpdef_sbdamppdef_sbiftpdef_sbofttotpointtotspring*bpoint*bspringnodemassgravmediafrictrklimitphysics_speedgoalspringgoalfrictmingoalmaxgoaldefgoalvertgroupfuzzynessinspringinfrictefraintervallocalsolverflags**keystotpointkeysecondspringcolballballdampballstiffsbc_modeaeroedgeminloopsmaxloopschokepad5*scratchshow_advancedoptionsresolutionxyzpreviewresxyzrealsizeguiDisplayModerenderDisplayModeviscosityValueviscosityModeviscosityExponentgravxgravygravzanimStartanimEndgstarmaxRefineiniVelxiniVelyiniVelz*orgMesh*meshSurface*meshBBsurfdataPath[240]bbStart[3]bbSize[3]typeFlagsdomainNovecgenvolumeInitTypepartSlipValuegenerateTracersgenerateParticlessurfaceSmoothingsurfaceSubdivsunusedDNADummyparticleInfSizeparticleInfAlphafarFieldSize*meshSurfNormalsmistypehorrhorghorbhorkzenrzengzenbzenkambkfastcolexposureexprangelinfaclogfacgravityactivityBoxRadiusskytypephysicsEnginemisimiststamistdistmisthistarrstargstarbstarkstarsizestarmindiststardiststarcolnoisedofstadofenddofmindofmaxaodistaodistfacaoenergyaobiasaomodeaosampaomixaocolor*aosphere*aotableshemiresmaxiterdrawtypesubshootpsubshootenodelimmaxsublamppamapamielmaelmimaxnodeconvergenceradfacgammaselcolsxsy*lpFormat*lpParmscbFormatcbParmsfccTypefccHandlerdwKeyFrameEverydwQualitydwBytesPerSeconddwFlagsdwInterleaveEveryavicodecname[128]*cdParms*padcdSizeqtcodecname[128]codecaudio_codecvideo_bitrateaudio_bitrategop_sizerc_min_raterc_max_raterc_buffer_sizemux_packet_sizemux_ratemixratemainpad[3]*mat_override*light_overridelayflagpassflagpass_xor*avicodecdata*qtcodecdataffcodecdatacfrapsfrapefraimagesframaptothreadsframelenblurfacedgeRedgeGedgeBfullscreenxplayyplayfreqplayattribrt1rt2stereomodedimensionspresetmaximsizexschyschxaspyaspxpartsypartswinposplanesimtypesubimtypequalityscemoderendererocresrpad[2]alphamodeosafrs_secedgeintsafetyborderdisprectlayersactlaygausspostmulpostgammaposthuepostsatdither_intensitybake_osabake_filterbake_modebake_flagGIqualityGIcacheGImethodGIphotonsGIdirectYF_AAYFexportxmlYF_nobumpYF_clamprgbyfpad1GIdepthGIcausdepthGIpixelspersampleGIphotoncountGImixphotonsGIphotonradiusYF_numprocsYF_raydepthYF_AApassesYF_AAsamplesGIshadowqualityGIrefinementGIpowerGIindirpowerYF_gammaYF_exposureYF_raybiasYF_AApixelsizeYF_AAthresholdbackbuf[160]pic[160]ftype[160]col[3]framename[64]*brushtoolcornertypeeditbutflagjointrilimitdegrstepturnextr_offsdoublimitsegmentsringsverticesunwrapperuvcalc_radiusuvcalc_cubesizeuvcalc_mapdiruvcalc_mapalignuvcalc_flagimapaintselect_threshclean_threshretopo_moderetopo_paint_toolline_divellipse_divretopo_hotspotmultires_subdiv_typepad4[2]dirairbrushview*sessiondrawbrushsmoothbrushpinchbrushinflatebrushgrabbrushlayerbrushflattenbrushbrush_typetexnrtexrepttexfadetexsepaveragingdraw_flagtablet_sizetablet_strengthsymm*camera*world*setbase*basactcursor[3]twcent[3]twmin[3]twmax[3]editbutsizeselectmodeproportionalprop_mode*ed*radioframing*toolsettingsaudiomarkersjumpframe*theDagdagisvaliddagflagssculptdatazoomblendximyimspacetypeblockscale*areablockhandler[8]viewmat[4][4]viewinv[4][4]persmat[4][4]persinv[4][4]winmat1[4][4]viewmat1[4][4]viewquat[4]zfacpad0persp*ob_centre*bgpic*localvd*ri*retopo_view_data*depthsob_centre_bone[32]localviewlayactscenelockaroundcamzoompivot_lastgridgridviewpixsizenearfarcamdxcamdygridlinesviewbutgridflagmodeselecttwtypetwmodetwflagtwdrawflagtwmat[4][4]clip[4][4]*clipbbafterdrawzbufxrayflag2gridsubdivsnap_target*properties_storageverthormaskmin[2]max[2]minzoommaxzoomscrollkeeptotkeepaspectkeepzoomoldwinxoldwinyrowbutv2d*editipoipokeyactname[32]constname[32]totipopinbutofschannellockmedian[3]cursenscuractaligntabomainbmainbo*lockpointexfromshowgroupmodeltypescriptblockre_alignoldkeypresstab[7]chanshown*filelisttotfiletitle[24]dir[160]file[80]ofssortmaxnamelencollums*libfiledataretvalmenuact(*returnfunc)()(*returnfunc_event)()(*returnfunc_args)()*arg1*arg2*menup*pupmenuoopsvisiflagtree*treestoresearch_string[32]search_tsesearch_flagsdo_outlinevisstoreflagdeps_flags*cumapimanrcurtileimtypenrshowsparecentxcenty*info_str*info_spare*spare*texttopviewlinesfont_idlheightleftshowlinenrstabnumbercurrtab_setshowsyntaxunused_paddpix_per_linetxtscrolltxtbar*script*but_refsredraws*idaspect*curfont*edittreetreetypetitle[28]fasesubfasemouse_move_redrawimafasemxmydirslidirsli_linesdirsli_sxdirsli_eydirsli_exdirsli_himaslifileselmenuitemimasli_sximasli_eyimasli_eximasli_hdssxdssydsexdseydesxdesydeexdeeyfssxfssyfsexfseydsdhfsdhfesxfesyfeexfeeyinfsxinfsyinfexinfeydnsxdnsydnwdnhfnsxfnsyfnwfnhfole[128]dor[128]file[128]dir[128]*firstdir*firstfiletopdirtotaldirshilitetopfiletotalfilesimage_sliderslider_heightslider_spacetopimatotalimacurimaxcurimay*first_sel_ima*hilite_imatotal_selectedima_redraw*cmapoutline[4]neutral[4]action[4]setting[4]setting1[4]setting2[4]num[4]textfield[4]textfield_hi[4]popup[4]text[4]text_hi[4]menu_back[4]menu_item[4]menu_hilite[4]menu_text[4]menu_text_hi[4]but_drawtypeiconfile[80]back[4]header[4]panel[4]shade1[4]shade2[4]hilite[4]grid[4]wire[4]select[4]lamp[4]active[4]group[4]group_active[4]transform[4]vertex[4]vertex_select[4]edge[4]edge_select[4]edge_seam[4]edge_sharp[4]edge_facesel[4]face[4]face_select[4]face_dot[4]normal[4]bone_solid[4]bone_pose[4]strip[4]strip_select[4]vertex_sizefacedot_sizebpad[2]syntaxl[4]syntaxn[4]syntaxb[4]syntaxv[4]syntaxc[4]movie[4]image[4]scene[4]audio[4]effect[4]plugin[4]transition[4]meta[4]bpad1[4]tuitbutstv3dtfiletipotinfotsndtacttnlatseqtimatimaseltexttoopsttimetnodebpad[4]spec[4]dupflagsavetimetempdir[160]fontdir[160]renderdir[160]textudir[160]plugtexdir[160]plugseqdir[160]pythondir[160]sounddir[160]yfexportdir[160]versionsvrmlflaggameflagswheellinescrolluiflaglanguageuserprefviewzoomconsole_bufferconsole_outmixbufsizefontsizeencodingtransoptsmenuthreshold1menuthreshold2fontname[256]themesundostepscurssizetb_leftmousetb_rightmouselight[3]tw_hotspottw_flagtw_handlesizetw_sizetextimeouttexcollectratememcachelimitframeserverportpad_rot_angleobcenter_diarvisizervibrightversemaster[160]verseuser[160]recent_filessmooth_viewtxvertbaseedgebaseareabase*sceneendxendysizexsizeyscenenrscreennrfullmainwinwinakthandler[8]*newvvec*v1*v2panelname[64]tabname[64]drawname[64]ofsxofsycontrolsnapold_ofsxold_ofsysortcounter*paneltab*v3*v4*fullwinmat[4][4]headrctwinrctheadwinwinheadertypebutspacetypewinxwinyhead_swaphead_equalwin_swapwin_equalheadbutlenheadbutofscursorspacedatauiblockspanelssubvstr[4]subversionpadsminversionminsubversiondisplaymode*curscreen*curscenefileflagsglobalfname[80]*ibuf*se1*se2*se3nrdone*stripdataorxory*instance_private_data**current_private_data*newseqstartofsendofsstartstillendstillmachinestartdispenddispmulhandsize*strip*curelemfacf0facf1*seq1*seq2*seq3seqbase*sound*hdaudiolevelpancurposstrobe*effectdataanim_preseek*oldbasep*parseq*seqbasepmetastackedgeWidthforwardwipetypefMinifClampfBoostdDistdQualitybNoCompScalexIniScaleyIniScalexFinScaleyFinxInixFinyIniyFinrotInirotFin*frameMapglobalSpeedbuttypeuserjitstaendtotpartnormfacobfacrandfactexfacrandlifeforce[3]vectsizemaxlendefvec[3]mult[4]life[4]child[4]mat[4]texmapcurmultstaticstepomattimetexspeedtexflag2negvertgroup_vvgroupname[32]vgroupname_v[32]*keysminfacusedusedelemdxdylinkotypeold*poin*oldpoinresetdistlastval*makeyqualqual2targetName[32]toggleName[32]value[32]maxvalue[32]materialName[32]damptimerdelaypropname[32]matname[32]axisflag*fromObjectsubject[32]body[32]pulsefreqtotlinks**linksinvertfreq2axisfbuttonbuttonfhathatfprecisionstr[128]*mynewinputstotslinks**slinksvalotime*actblendinprioritystrideaxisstridelengthsndnrpad1[2]makecopycopymadepad2[1]trackvolume*melinVelocity[3]localflagforceloc[3]forcerot[3]linearvelocity[3]angularvelocity[3]butstabutendminvisifacslowminloc[3]maxloc[3]minrot[3]maxrot[3]distributionint_arg_1int_arg_2float_arg_1float_arg_2toPropName[32]*toObjectbodyTypefilename[64]loadaniname[64]goaccellerationmaxspeedmaxrotspeedmaxtiltspeedrotdamptiltdampspeeddamp*sample*stream*newpackedfile*snd_soundpanningattenuationpitchmin_gainmax_gaindistancestreamlenchannelshighpriopad[10]gaindopplerfactordopplervelocitynumsoundsblendernumsoundsgameengine*lamprengobjectchildbaserollhead[3]tail[3]bone_mat[3][3]arm_head[3]arm_tail[3]arm_mat[4][4]xwidthzwidthease1ease2rad_headrad_tailbonebasechainbasepathflaglayer_protectedghostepghostsizeghosttypepathsizeghostsfghostefpathsfpathefconstflagikflagselectflag*bone*childiktree*b_bone_matschan_mat[4][4]pose_mat[4][4]pose_head[3]pose_tail[3]limitmin[3]limitmax[3]stiffness[3]ikstretch*customchanbaseproxy_layerstride_offset[3]cyclic_offset[3]reserved1autosnapactnractwidthtimeslidename[30]enforce*tariterationsrootbonesubtarget[32]orientweightgrabtarget[3]reserved2minmaxflagstickystuckcache[3]lockflagfollowflagzminzmaxvolmodeplaneorglengthbulgepivXpivYpivZaxXaxYaxZminLimit[6]maxLimit[6]extraFzchannel[32]no_rot_axisstride_axiscurmodactstartactendactoffsstridelenblendoutstridechannel[32]offs_bone[32]hasinputhasoutputdatatypesockettypenslimitstack_indexinternstack_index_extlocxlocyown_indexto_index*tosock*link*new_nodelastyoutputs*storageminiwidthcustom1custom2need_execexectotrbutrprvr*typeinfo*fromnode*tonode*fromsocknodeslinks**stackinitstacksizecur_indexalltypes*owntype(*timecursor)()(*stats_draw)()(*test_break)()cyclicmoviesamplesminspeedbokehhuesatt1t2t3fstrengthfalphakey[4]colname[32]bktyperotationpreviewgamcono_zbuffstopmaxblurbthreshshortymintablemaxtableext_in[2]ext_out[2]*curve*table*premultablecurrcliprcm[4]black[3]white[3]bwmul[3]offset[2]innerradiusratergb[3]cloneactive_rndpad[4]*layerstotlayermaxlayertotsizeTYPEcharucharshortushortintlongulongfloatdoublevoidLinkListBasevec2svec2ivec2fvec2dvec3ivec3fvec3dvec4ivec4fvec4drctirctfIDPropertyDataIDPropertyIDLibraryFileDataIpoKeyBlockKeyScriptLinkTextLineTextPackedFileCameraPreviewImageImageUserImageanimRenderResultMTexObjectTexPluginTexCBDataColorBandEnvMapImBufTexMappingLampWaveMaterialbNodeTreeGroupVFontVFontDataMetaElemBoundBoxMetaBallBezTripleBPointNurbCharInfoTextBoxCurvePathIpoDriverIpoCurveMeshMFaceMTFaceTFaceMVertMEdgeMDeformVertMColMStickyMSelectOcInfoCustomDataMultiresPartialVisibilityMDeformWeightMultiresColMultiresColFaceMultiresFaceMultiresEdgeMultiresLevelMultiresMapNodeModifierDataSubsurfModifierDataLatticeModifierDataCurveModifierDataBuildModifierDataArrayModifierDataMirrorModifierDataEdgeSplitModifierDataDisplaceModifierDataUVProjectModifierDataDecimateModifierDataSmoothModifierDataCastModifierDataWaveModifierDataArmatureModifierDataHookModifierDataSoftbodyModifierDataBooleanModifierDataLatticebDeformGroupLBufbActionbPosePartDeflectSoftBodyFluidsimSettingsDerivedMeshObHookSBVertexBodyPointBodySpringSBScratchWorldRadioBaseAviCodecDataQuicktimeCodecDataFFMpegCodecDataAudioDataSceneRenderLayerRenderDataGameFramingTimeMarkerImagePaintSettingsBrushToolSettingsBrushDataSculptDataSculptSessionSceneDagForestBGpicView3DSpaceLinkScrAreaRenderInfoRetopoViewDataViewDepthsView2DSpaceInfoSpaceIpoSpaceButsSpaceSeqSpaceFiledirentryBlendHandleSpaceOopsTreeStoreTreeStoreElemSpaceImageCurveMappingSpaceNlaSpaceTextSpaceScriptScriptSpaceTimeSpaceNodeSpaceImaSelImaDirOneSelectableImaThemeUIThemeSpacebThemeSolidLightUserDefbScreenScrVertScrEdgePanelFileGlobalStripElemStripPluginSeqSequencebSoundhdaudioMetaStackEditingWipeVarsGlowVarsTransformVarsSolidColorVarsSpeedControlVarsEffectBuildEffPartEffParticleWaveEffOopsbPropertybNearSensorbMouseSensorbTouchSensorbKeyboardSensorbPropertySensorbCollisionSensorbRadarSensorbRandomSensorbRaySensorbMessageSensorbSensorbControllerbJoystickSensorbExpressionContbPythonContbActuatorbAddObjectActuatorbActionActuatorbSoundActuatorbCDActuatorbEditObjectActuatorbSceneActuatorbPropertyActuatorbObjectActuatorbIpoActuatorbCameraActuatorbConstraintActuatorbGroupActuatorbRandomActuatorbMessageActuatorbGameActuatorbVisibilityActuatorFreeCamerabSamplebSoundListenerSpaceSoundGroupObjectBonebArmaturebPoseChannelbActionChannelSpaceActionbConstraintChannelbConstraintbKinematicConstraintbTrackToConstraintbRotateLikeConstraintbLocateLikeConstraintbMinMaxConstraintbSizeLikeConstraintbActionConstraintbLockTrackConstraintbFollowPathConstraintbDistanceLimitConstraintbRotationConstraintbStretchToConstraintbLocLimitConstraintbRotLimitConstraintbSizeLimitConstraintbRigidBodyJointConstraintbClampToConstraintbActionModifierbActionStripbNodeStackbNodeSocketbNodeLinkbNodebNodePreviewbNodeTypeNodeImageAnimNodeBlurDataNodeHueSatNodeImageFileNodeChromaNodeGeometryNodeVertexColNodeDefocusCurveMapPointCurveMapBrushCloneCustomDataLayerTLEN  L4(Thxh tx T8pDDlh8$88\,< @ @ 44DX`Dt<<<\h`4@t( <(,((0@XP Lt<$x$(h x$ 8x h (88,@0,HhH,(lDLP@< <@Lh48<8l(DlP<,4D4,,D,@,<4` <$t (@  ,<STRC                 !"#$ %&'( )*+, -./01 234* 56789 :;<=!!!>?@" ABC D!E!FGHIJK L#MNB -$OPQRSTUVWXYZ[\6 ]%^_& `abcdefghij'! k(l)mfnopqrstuvwx#y%z{|}~ *+,-   .)&/#&.0+'1QRfp,4dabc&6'-/02+34QR   * 6 ]465p  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI/J/KLMNOPQRS* 6T67UVWXYZ[\]^_`abcdefghijklmno ]8pq9-#y:::;rstuvwxyz{|}~<;r  65= >???>=@\A^B9;r  +++6C5 \D)8888A@@D+'+EEE>='+  *DF);r 65GHIJKLMNFOP QQQ\RS I GKTLTJMNOH'UVUWX Y YYJ W V X   ZR QQSGK[[[\[ !"B # $][ +^[ +%&_[ '()*` [ +++,+-+./0(123B4a[ 56b[ 7Bc [ ,89:;<=+>?@d [ +A'BBCDE?@e[ FGf[ H;Ig[ +HM;h[ +J;,8+>KLMNOP=@?QRi[ So\+;j [ +TUVWXYk[ l[ +Zm[\]^\_`abcdefg>h6Lnnn;iPjo#k+l+gmnopq+$+r+s+t+u6C;rpvqw - x  y  z {5|}~{T ]        rs7tuu vvv+$TUVWXYr ws(xycw8Qzt(FFF6     J{9 !"#$%&'()*+,-./0123456789:;<=6*  ]|>?@ABCDEFGHIJKL}}}MNO+~ P QRSTUVWXYZ[ \ ]^\_ `abcdBefghijkl 5m7nopqe~rstucvwxyz{|}~M \o\QQ\M9* %+{' }     >6T |  ] o\Q '&MD !"#$%&'()*+++,-./01@234567oS89:;<=>?@ABjCDEFGH;I JKLMNO\ P#&QRSTUVWXYZ[\]   ^\_ ` a67bcdefg('jhi#. jklm_njeo pqrstuvw _nx\ yz{|}~      _ e p  _'B&jh\1  jh_ "Bj Bjo __7j 6T6Q\1       l0   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ@R4STUVWXYZ[\]^_`abcdefghijklmn opqrstuvwxyz{|}~&   KL  ]      1f | p     ) 'c6(l      P B(c-R8*   P  M7UKLMNOPQR, - !" # $% & '()o\5*+,-./0123P\P5*456o7+89:$;<=o\ ->+?@ 5ABCDEFG"HI=$J\Q ->KLM+ pNOPQR STUVWSXY M+FZ[\+0+ ]^|_` o&ab+MckH5dPefghi l&ab7U*jklmn5o+p9qo\:rs H$t -+ uvwxyz{| }#y#~ 6YB_Sh\+ 7 h$ (h  @Sh \$  {+q 6 xp  _pveh6 - ++B++ +bo\+ +'ckpN++b+o\/   +   M   o   o++o\+ +6pN+';IO {ck -   o      j I   z           6       ac voHL\p`c !"#$ %&'()*+,q- ./01234 &56789:;'B; M<=>* ?b@A -QBCDEENDB