diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi index 1c7cf916..cc3a8578 100644 --- a/lazproj/coedit.lpi +++ b/lazproj/coedit.lpi @@ -50,11 +50,6 @@ - - - - - @@ -115,18 +110,21 @@ - + - + - + - + + + + - + @@ -192,6 +190,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lazproj/coedit.lpr b/lazproj/coedit.lpr index 18cc0b32..811eec68 100644 --- a/lazproj/coedit.lpr +++ b/lazproj/coedit.lpr @@ -6,9 +6,9 @@ uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} - Interfaces, - Forms, lazcontrols, ce_main, ce_widget, ce_common, - ce_messages, ce_editor, ce_project, ce_synmemo, ce_dmdwrap; + Interfaces, Forms, lazcontrols, runtimetypeinfocontrols, ce_main, ce_widget, + ce_common, ce_messages, ce_editor, ce_project, ce_synmemo, ce_dmdwrap, + ce_projconf, ce_projconfframe, ce_projconfall; {$R *.res} diff --git a/src/ce_common.pas b/src/ce_common.pas index da32650a..8e178125 100644 --- a/src/ce_common.pas +++ b/src/ce_common.pas @@ -45,7 +45,7 @@ type fFilename: string; fBasePath: string; fOptsColl: TCollection; - fSrcs, fSrcsCop: TStringList; // an editor can be associated to a file using the Object[] property + fSrcs, fSrcsCop: TStringList; fConfIx: Integer; procedure doChanged; procedure subMemberChanged(sender : TObject); @@ -55,6 +55,7 @@ type procedure setConfIx(aValue: Integer); function getConfig(const ix: integer): TCompilerConfiguration; function getSrcs: TStringList; + function getCurrConf: TCompilerConfiguration; published property OptionsCollection: TCollection read fOptsColl write setOptsColl; property Sources: TStringList read fSrcs write setSrcs; // 'read' should return a copy to avoid abs/rel errors @@ -69,6 +70,7 @@ type function getOpts: string; // property configuration[ix: integer]: TCompilerConfiguration read getConfig; + property currentConfiguration: TCompilerConfiguration read getCurrConf; property fileName: string read fFilename write setFname; property onChange: TNotifyEvent read fOnChange write fOnChange; end; @@ -111,7 +113,10 @@ begin str1.Position := 0; ObjectTextToBinary(str1,str2); str2.Position := 0; - str2.ReadComponent(aComp); + try + str2.ReadComponent(aComp); + except + end; finally str1.Free; str2.Free; @@ -133,7 +138,7 @@ begin end; end; -// TODO: comments handling +// TODO: block comments handling function getModuleName(const aSource: TStrings): string; var ln: string; @@ -161,14 +166,17 @@ begin end; if tok then if ln[pos] = ';'then - begin - result := id; - exit; - end; + exit(id); id += ln[pos]; Inc(pos); + if id = '//' then + begin + Inc(pos, length(ln)); + break; + end; + if id = 'module' then begin tok := true; @@ -188,9 +196,9 @@ begin inherited create(aOwner); fSrcs := TStringList.Create; fSrcsCop := TStringList.Create; - fSrcs.OnChange := @subMemberChanged; fOptsColl := TCollection.create(TCompilerConfiguration); reset; + fSrcs.OnChange := @subMemberChanged; end; destructor TCEProject.destroy; @@ -269,11 +277,20 @@ procedure TCEProject.doChanged; begin fModified := true; if assigned(fOnChange) then fOnChange(Self); + {$IFDEF DEBUG} + writeln(getOpts); + {$ENDIF} end; function TCEProject.getConfig(const ix: integer): TCompilerConfiguration; begin result := TCompilerConfiguration(fOptsColl.Items[ix]); + result.onChanged := @subMemberChanged; +end; + +function TCEProject.getCurrConf: TCompilerConfiguration; +begin + result := TCompilerConfiguration(fOptsColl.Items[fConfIx]); end; function TCEProject.getSrcs: TStringList; @@ -300,13 +317,12 @@ procedure TCEProject.reset; var defConf: TCompilerConfiguration; begin + fConfIx := 0; fOptsColl.Clear; defConf := addConfiguration; defConf.name := 'default'; fSrcs.Clear; fFilename := ''; - fModified := true; - fConfIx := 0; doChanged; end; @@ -315,12 +331,13 @@ var rel, abs: string; begin result := ''; + if fConfIx = -1 then exit; for rel in fSrcs do begin abs := expandFilenameEx(fBasePath,rel); result += '"' + abs + '"'; end; - result += TCompilerConfiguration(fOptsColl.Items[fConfIx]).getOpts; + result += ' ' + TCompilerConfiguration(fOptsColl.Items[fConfIx]).getOpts; end; function TCEProject.getAbsoluteSourceName(const aIndex: integer): string; diff --git a/src/ce_dmdwrap.pas b/src/ce_dmdwrap.pas index da3bbd1c..c9494194 100644 --- a/src/ce_dmdwrap.pas +++ b/src/ce_dmdwrap.pas @@ -64,7 +64,6 @@ type fWarnEx: boolean; fVtls: boolean; fQuiet: boolean; - fProp: boolean; procedure setDepHandling(const aValue: TDepHandling); procedure setVerb(const aValue: boolean); procedure setWarn(const aValue: boolean); @@ -79,20 +78,39 @@ type property tlsInformations: boolean read fVtls write setVtls; property quiet: boolean read fQuiet write setQuiet; public + constructor create; function getOpts: string; override; end; + (***************************************************************************** + * Describes the target registry size + *) + TTargetSystem = (auto, os32bit, os64bit); + (** + * Describes the output kind + *) + TBinaryKind = (executable, staticlib, sharedlib, obj); + + (***************************************************************************** * Encapsulates the options/args related to the analysis & the code gen. *) TOutputOpts= class(TOptsGroup) private + fTrgKind: TTargetSystem; + fBinKind: TBinaryKind; + fUt: boolean; + fVerId: string; fInline: boolean; fNoBounds: boolean; - fOptims: boolean; + fOptimz: boolean; fGenStack: boolean; fMain: boolean; fRelease: boolean; + procedure setUt(const aValue: boolean); + procedure setVerId(const aValue: string); + procedure setTrgKind(const aValue: TTargetSystem); + procedure setBinKind(const aValue: TBinaryKind); procedure setInline(const aValue: boolean); procedure setNoBounds(const aValue: boolean); procedure setOptims(const aValue: boolean); @@ -100,25 +118,20 @@ type procedure setMain(const aValue: boolean); procedure setRelease(const aValue: boolean); published + property targetKind: TTargetSystem read fTrgKind write setTrgKind; + property binaryKind: TBinaryKind read fBinKind write setBinKind; property inlining: boolean read fInline write setInline; property noBoundsCheck: boolean read fNoBounds write setNoBounds; - property optimisations: boolean read fOptims write setOptims; + property optimizations: boolean read fOptimz write setOptims; property generateStackFrame: boolean read fGenStack write setGenStack; property addMain: boolean read fMain write setMain; property release: boolean read fRelease write setRelease; + property unittest: boolean read fUt write setUt; + property versionIdentifier: string read fVerId write setVerId; public function getOpts: string; override; end; - (***************************************************************************** - * Describes the target registry size - *) - TTargetSystem = (auto, os32bit, os64bit); - (** - * Describes the output kind - *) - TBinaryKind = (executable, staticlib, sharedlib); - (** * Encapsulates the options/args related to the debuging *) @@ -129,9 +142,19 @@ type fDbgD: boolean; fDbgC: boolean; fMap: boolean; + procedure setDbg(const aValue: boolean); + procedure setDbgIdent(const aValue: string); + procedure setDbgD(const aValue: boolean); + procedure setDbgC(const aValue: boolean); + procedure setMap(const aValue: boolean); published + property debug: boolean read fDbg write setDbg; + property debugIdentifier: string read fDbgIdent write setDbgIdent; + property addDInformations: boolean read fDbgD write setDbgD; + property addCInformations: boolean read fDbgC write setDbgC; + property generateMapFile: boolean read fMap write setMap; public - //function getOpts: string; override; + function getOpts: string; override; end; (***************************************************************************** @@ -269,9 +292,14 @@ end; (******************************************************************************* * TMsgOpts *) +constructor TMsgOpts.create; +begin + fDepHandling := TDepHandling.warning; +end; + function TMsgOpts.getOpts: string; const - DepStr : array[TDepHandling] of string = ('-d ','-dw ','-de '); + DepStr : array[TDepHandling] of string = ('-d ','-dw ', '-de '); begin result := DepStr[fDepHandling]; if fVerb then result += '-v '; @@ -327,16 +355,50 @@ end; * TOutputOpts *) function TOutputOpts.getOpts: string; +const + trgKindStr: array[TTargetSystem] of string = ('', '-m32 ','-m64 '); + binKindStr: array[TBinaryKind] of string = ('', '-lib ', '-shared ', '-c '); begin - result := ''; + result := binKindStr[fBinKind]; + result += trgKindStr[fTrgKind]; + if fUt then result += '-unittest '; + if fVerId <> '' then result += '-version=' + fVerId + ' ';; if fInline then result += '-inline '; if fNoBounds then result += '-noboundscheck '; - if fOptims then result += '-O '; + if fOptimz then result += '-O '; if fGenStack then result += '-gs '; if fMain then result += '-main '; if fRelease then result += '-release '; end; +procedure TOutputOpts.setUt(const aValue: boolean); +begin + if fUt = aValue then exit; + fUt := aValue; + doChanged; +end; + +procedure TOutputOpts.setVerId(const aValue: string); +begin + if fVerId = aValue then exit; + fVerId := aValue; + doChanged; +end; + +procedure TOutputOpts.setTrgKind(const aValue: TTargetSystem); +begin + if fTrgKind = aValue then exit; + fTrgKind := aValue; + doChanged; +end; + +procedure TOutputOpts.setBinKind(const aValue: TBinaryKind); +begin + if fBinKind = aValue then exit; + fBinKind := aValue; + doChanged; +end; + procedure TOutputOpts.setInline(const aValue: boolean); begin if fInline = aValue then exit; @@ -353,8 +415,8 @@ end; procedure TOutputOpts.setOptims(const aValue: boolean); begin - if fOptims = aValue then exit; - fOptims := aValue; + if fOptimz = aValue then exit; + fOptimz := aValue; doChanged; end; @@ -379,6 +441,54 @@ begin doChanged; end; +(******************************************************************************* + * TDebugOpts + *) +function TDebugOpts.getOpts: string; +begin + result := ''; + if fDbg then result += '-debug '; + if fDbgIdent <> '' then result += '-debug=' + fDbgIdent + ' '; + if fDbgD then result += '-g '; + if fDbgC then result += '-gc '; + if fMap then result += '-map '; +end; + +procedure TDebugOpts.setDbg(const aValue: boolean); +begin + if fDbg = aValue then exit; + fDbg := aValue; + doChanged; +end; + +procedure TDebugOpts.setDbgIdent(const aValue: string); +begin + if fDbgIdent = aValue then exit; + fDbgIdent := aValue; + doChanged; +end; + +procedure TDebugOpts.setDbgD(const aValue: boolean); +begin + if fDbgD = aValue then exit; + fDbgD := aValue; + doChanged; +end; + +procedure TDebugOpts.setDbgC(const aValue: boolean); +begin + if fDbgC = aValue then exit; + fDbgC := aValue; + doChanged; +end; + +procedure TDebugOpts.setMap(const aValue: boolean); +begin + if fMap = aValue then exit; + fMap := aValue; + doChanged; +end; + (******************************************************************************* * TPathsOpts *) @@ -515,11 +625,11 @@ end; function TCompilerConfiguration.getCmdLine: string; begin - result := - fDocOpts.getOpts + (*fDebugOpts.getOpts +*) fMsgOpts.getOpts + result := + fDocOpts.getOpts + fDebugOpts.getOpts + fMsgOpts.getOpts + fOutputOpts.getOpts + fPathsOpts.getOpts + fOthers.getOpts; - if result[length(result)] = ' ' then - setlength(result, length(result)-1); + if result[length(result)] = ' ' then + setlength(result, length(result)-1); end; procedure TCompilerConfiguration.setName(const aValue: string); @@ -528,6 +638,7 @@ begin fName := aValue; if fName = '' then fName := nameFromID; Changed(true); + doChanged; end; procedure TCompilerConfiguration.subOptsChanged(sender: TObject); diff --git a/src/ce_editor.lfm b/src/ce_editor.lfm index 6afad2dc..dd93df52 100644 --- a/src/ce_editor.lfm +++ b/src/ce_editor.lfm @@ -1,37 +1,39 @@ inherited CEEditorWidget: TCEEditorWidget Left = 1248 - Height = 517 + Height = 336 Top = 89 Width = 481 Caption = 'EditorWidget' - ClientHeight = 517 + ClientHeight = 336 ClientWidth = 481 inherited Back: TPanel - Height = 517 + Height = 336 Width = 481 - ClientHeight = 517 + ClientHeight = 336 ClientWidth = 481 inherited Content: TScrollBox - Height = 491 + Height = 310 Width = 481 HorzScrollBar.Page = 477 - VertScrollBar.Page = 487 - ClientHeight = 487 + VertScrollBar.Page = 306 + ClientHeight = 306 ClientWidth = 477 object PageControl: TExtendedNotebook[0] Left = 2 - Height = 460 + Height = 279 Top = 2 Width = 473 Align = alClient BorderSpacing.Around = 2 TabOrder = 0 OnChange = PageControlChange + TabDragMode = dmAutomatic + TabDragAcceptMode = dmAutomatic end object editorStatus: TStatusBar[1] Left = 0 Height = 23 - Top = 464 + Top = 283 Width = 477 Panels = < item @@ -50,11 +52,12 @@ inherited CEEditorWidget: TCEEditorWidget Width = 481 end end - object macRecorder: TSynMacroRecorder[1] + object macRecorder: TSynMacroRecorder[2] RecordShortCut = 24658 PlaybackShortCut = 24656 + left = 64 end - object imgList: TImageList[2] + object imgList: TImageList[3] left = 32 Bitmap = { 4C69010000001000000010000000CCCBC900CCCBC900CCCBC900CCCBC900CCCB @@ -92,7 +95,4 @@ inherited CEEditorWidget: TCEEditorWidget 0000000000000000000000000000 } end - object ApplicationProperties1: TApplicationProperties[3] - left = 64 - end end diff --git a/src/ce_editor.pas b/src/ce_editor.pas index 401e50b5..1ac0b826 100644 --- a/src/ce_editor.pas +++ b/src/ce_editor.pas @@ -13,7 +13,6 @@ uses type { TCEEditorWidget } TCEEditorWidget = class(TCEWidget) - ApplicationProperties1: TApplicationProperties; imgList: TImageList; PageControl: TExtendedNotebook; macRecorder: TSynMacroRecorder; diff --git a/src/ce_main.lfm b/src/ce_main.lfm index 1a0457ec..54f4d18e 100644 --- a/src/ce_main.lfm +++ b/src/ce_main.lfm @@ -4,91 +4,770 @@ object CEMainForm: TCEMainForm Top = 0 Width = 655 Caption = 'Coedit' + DockSite = True + DragMode = dmAutomatic Menu = mainMenu + OnDropFiles = FormDropFiles LCLVersion = '1.2.2.0' object mainMenu: TMainMenu + Images = imgList object MenuItem1: TMenuItem Caption = 'File' object MenuItem5: TMenuItem Action = actNewFile + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF000000 + 0000000000330000000000000033000000000000003300000000000000330000 + 000000000033000000000000003300000000FFFFFF00FFFFFF00FFFFFF000000 + 003389898AFF0000003389898AFF0000003389898AFF0000003389898AFF0000 + 003389898AFF0000003389898AFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFFDFDFDFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC + FCFFFCFCFCFFFDFDFDFFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFFAF9F9FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8 + F8FFF9F8F8FFFAF9F9FFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4 + F3FFF4F4F3FFF4F4F3FFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1 + F0FFF2F1F0FFF2F1F0FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEF + EEFFEEEEEDFFEEEFEEFFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFEDEBEAFFEDECEBFFEDECEBFFEDECEBFFEDECEBFFECEBEAFFECEB + E9FFEBEAE9FFECEAE9FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFE9E9E8FFEAEAE9FFEAEAE9FFEAEAE9FFE9E9E8FFF4F4F2FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFE7E6E5FFE8E7E6FFE8E7E6FFE8E7E6FFE6E5E4FFFFFFFFFF9191 + 91FFFFFFFFFF929292FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFE3E3E2FFE4E4E3FFE4E5E4FFE4E4E3FFE3E3E2FFFFFFFFFFFFFF + FFFFE6E6E4FFFFFFFFFFE0E0E0AB89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFE0DFDDFFE0DFDEFFE0DFDEFFE0DFDEFFDFDEDCFFFFFFFFFF9191 + 91FFFFFFFFFFDDDDDDA789898AFF00000000FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFE0E0E0AB89898AFF0000000000000000FFFFFF00FFFFFF00FFFFFF00A5A5 + A53889898AFF0000000089898AFF0000000089898AFF0000000089898AFF0000 + 000089898AFF000000000000000000000000FFFFFF00FFFFFF00 + } end object MenuItem24: TMenuItem Action = actNewRunnable end object MenuItem2: TMenuItem Action = actOpenFile + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF000000 + 00000000000000000000000000000000001200000025000000330000002E0000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF000000 + 0000000000120000002500000033326E987A3E8BC1C84195D1FF3892D1ED0000 + 00330000003300000033000000330000003300000023FFFFFF00FFFFFF000000 + 002F326F997C3D8AC1C74092CEFF54ADDEFF66C4EDFF78E0FEFF3591D1FFBBB2 + AAFFB0AEABFFADADABFFAEAEABFFAFAFADFFA4A4A2C0FFFFFF00FFFFFF004295 + CEEF58B0DFFF6DC9EFFF7FE2FDFF7EE3FEFF7ADEFCFF7EE1FFFF308CCDFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0ADFFFFFFFF00FFFFFF004094 + CFFF92F1FFFF85E7FFFF80E1FDFF7ADEFBFF77DBFBFF83E1FFFF308ACBFFFFFF + FBFFFFFFFDFFFCFCFCFFFCFCFCFFFFFFFFFFAEAEABFFFFFFFF00FFFFFF003E92 + CEFF9AF0FFFF83E4FDFF7EDFFCFF7ADDFBFF76DAFAFF89E2FEFF48A8DDFF70AE + D9FFFFFCF8FFF9F6F6FFF7F6F6FFFFFFFFFFADADABFFFFFFFF00FFFFFF003E92 + CEFFA3F1FFFF82E3FCFF7EDFFCFF7ADDFBFF76DAFAFF71D9FBFF9DE8FFFF2A89 + CBFFFFFBF6FFF6F4F3FFF4F3F3FFFFFFFFFFADADABFFFFFFFF00FFFFFF003D92 + CEFFADF3FFFF81E3FCFF7EDFFCFF7ADDFBFF76DAFAFF6FD8FAFFABEBFFFF2B89 + CCFFFFF8F1FFF2F1EFFFEFF0EEFFFFFFFFFFADADABFFFFFFFF00FFFFFF003C92 + CEFFB6F6FFFF80E3FCFF7DDFFCFF7ADDFBFF76DAFAFF6ED7FAFFB9EFFFFF2A89 + CCFFFCF2EDFFEEECEBFFEBEAEAFFFFFFFFFFADADABFFFFFFFF00FFFFFF003C91 + CEFFC0F8FFFF7FE2FCFF7DDFFCFF7ADDFBFF75DAFAFF6DD7FAFFC6F3FFFF2989 + CBFFFFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFAEAEABFFFFFFFF00FFFFFF003B91 + CEFFC9F9FFFF7EE2FCFF7CDEFCFF78DCFBFF72D9FAFF6AD6FAFFD2F6FFFF2888 + CBFFFFFFFFFFCDCBC9FFA4A4A2FFFFFFFFFFAFAFADFFFFFFFF00FFFFFF003A91 + CEFFD2FCFFFF7AE2FCFF77DDFCFF7FDFFBFF9BE6FDFFB3EDFFFFD4F9FFFF2688 + CBFFFFFFFFFFA7A5A2FFFFFFFFFFE9E9E9FFB0B0AEACFFFFFF00FFFFFF003991 + CFFFE9FFFFFFAFF0FFFFCEF7FFFFDAFAFFFFC4ECFCFF8CCAECFF5FAEE0FF82BD + E6FFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA700000000FFFFFF00FFFFFF003C93 + D0FFE9FFFFFFA8DAF3FF7BBDE4FF4398D2FF408EC7FF6E9CBCFF90A5B2FFBAAF + A6FFB5ADA6FFB5AFA9FFB5B1ADA40000000000000000FFFFFF00FFFFFF004297 + D2FF3B93D0FF62ADDCFF93CDEDFFBBE7FAFFD8FCFFFFD6FCFFFFD3FBFFFFD1FB + FFFFD3FCFFFF2E91D5FF000000000000000000000000FFFFFF00FFFFFF00459A + D3EF4498D2FF4197D1FF3F95D1FF3D94D0FF3B93D0FF3A92D0FF3A92D0FF3A93 + D0FF3C94D1FF3E97D3EE000000000000000000000000FFFFFF00 + } end object MenuItem6: TMenuItem Caption = '-' end object MenuItem3: TMenuItem Action = actSaveFileAs + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000002C0000 + 0033000000330000003300000033000000330000003300000033000000330000 + 00330000003300000033000000330000002C0000000000000000B3811AE1B781 + 14FFB57E10FFB57D0CFFB67C0BFFB67C0AFFB57C0AFFB67D0AFFB77D0BFFB77E + 0BFFB77E0CFFB67F10FFB78114FFB3811AE1BB871E00BB871F00B78115FFFEE9 + C7FFFBE4BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFE7BCFFFFEAC6FFB78115FFBB861D00BB871F00B67F12FFFBE9 + CFFFD88500FFFFFFFFFF797B7FFFA2A4A5FFFFFCF3FF828180FF425C72FF385A + 80FF3784DDFFEB8D00FFFFECCCFFB78011FFBB861C00BC871D00B67F12FFFAE4 + C1FFDB8D0AFFFEFFFFFFFDF7EBFFFFF8EAFFFFF7E9FFFFFDEBFF507C9CFF7BA3 + B5FF86D2FFFF1F60A2FFFFEBB6FFBE830DFFC0871600C2891600B68013FFF7DE + B5FFDC9317FFFFFFFFFF787879FF7A7979FFA4A2A1FFABA39FFF3AABF2FFA1ED + FFFF9ADEFEFF0998FFFF2366A9FFCA8604FF0000000971747E00B68014FFF5D9 + AAFFDF9822FFFFFFFFFFF1E6D9FFF2E6D9FFF2E6D7FFF6E6D6FFCED9DBFF1D6F + C5FF39C4FFFF1DABFFFF7EA3C4FF7C7878FF3B3B3A5674767000B68114FFF4D4 + A2FFE29F31FFE9E1E2FFFEFFFFFFFEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF1B74D0FFACDBF4FF928782FFC1C0BAFF797B71FF00000033B68115FFF3D1 + 99FFE3A740FFE2A336FFE19F2EFFE19E2BFFE19E2BFFE29F2CFFE3A02CFFE8A3 + 2DFFF1A830FF817F83FFE9E9E8FF898B83FFAC7BA7FF9969CBFFB68115FFF3CE + 93FFE5AB48FFEED7B6FFF5F3F7FFF5F1F4FFF7F3F6FFFBF8FAFFFCF8FAFFF9F6 + F9FFF2D9B4FFEEAE40FF7A8185FFE0B1E4FFCB96C7FFAE7DCEFFB68116FFF3CB + 8CFFE7AE4EFFF5F4F8FFF0E9E4FFF1E9E2FFF8EFE8FF8A847FFF88817EFFF8F0 + EBFFF7F5F9FFEAAF4BFFF6CD7DFFBC87E4FFBE8ADAFFAC7BCF00B68116FFF1C8 + 87FFE8B258FFF6F5F7FFEEE2D9FFEFE3D9FFFFFAF5FF5C5752FF48423FFFFFFB + F7FFF7F6F8FFE9B257FFF2C880FFB68100FFBE8AEC00AB7BDF00B68116FFF2CA + 85FFEBB962FFF8F8FBFFE9DCD1FFEBDDD1FFFFFFFCFF958B83FF4A443FFFFFFF + FFFFFAF9FCFFEBB962FFF2CA83FFB6810FFFBB860F00BC880D00B78218FFF6CC + 89FFF2C274FFFFFFFFFFFEFDFCFFFFFEFCFFFFFEF9FF93887EFF4A433DFFFFFF + FFFFFFFFFFFFF2C274FFF6CC89FFB78217FFBB861C00BB871C00B9851CC5B781 + 16FFB37A06FFD6CFD1FFD4C9C3FFD4C9C1FFD8CCC5FFE3D7D02B4A433D00DFD4 + CEFFD8D1D2FFB37A06FFB78116FFB9851CC5BB871F00BB871F00 + } end object MenuItem4: TMenuItem Action = actSaveFile + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003300000033000000330000003300000030AA7C29C0B681 + 24FFB57F20FFB47F1FFFB57F20FFB68226FFB8831FFFB78216FFB68114FFB880 + 10FFB9810FFFB87F0EFFB67E0FFFB68013FFB78218FFB7831CF2B68124FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB37A09FFF5CB89FFF3C275FFF9FC + FFFF8B8D91FFF9F9F9FFF4F8FCFFF2C174FFF6CD8BFFB78218FFB57F20FFFFFF + FFFFE6D6AEFFE6D7B0FFE8D9B3FFEBDFC0FFB17805FFF2CA88FFEBB65CFFF2ED + EDFF7F7978FFF1E9E2FFEEE9E9FFEAB55BFFF3CC8BFFB68116FFB47E1FFFFFFF + FFFFE6D6AFFFE7D7B2FFE8DAB5FFEBE0C2FFB17805FFF2CD91FFE6AD4FFFEACF + A9FFFFFFFFFFFDFFFFFFE8CEA7FFE6AD4EFFF3CE93FFB68115FFB47E1EFFFFFF + FFFFE6D5ADFFE6D6AFFFE7D8B3FFEBDFC0FFB17703FFF4D39CFFE4A641FFE3A4 + 3AFFE3A133FFE2A132FFE3A43AFFE3A641FFF4D49EFFB68114FFB47E1EFFFFFF + FFFFF8F4E7FFF8F4E8FFF9F6EBFFFCFDFAFFB07601FFF5D7A9FFE19E2FFFE7CA + A1FFEBE2E0FFEBE2E0FFE7CAA1FFE19E2FFFF6D9ADFFB68014FFB47E1EFFFFFF + FFFFF4EDDDFFF4EDDDFFF5EFE1FFF9F7F0FFB07500FFF7E0B9FFDD9419FFEEE9 + E9FFEFE6DEFFEFE6DEFFEEE9E9FFDD9419FFF8E2BCFFB68012FFB47E1EFFFFFF + FFFFF3EAD6FFF3EAD7FFF4ECDAFFF8F3E8FFB07500FFFAE9CEFFDA8802FFF0EE + ECFFB2ADA7FFB2ADA7FFF0EEECFFDA8802FFFBEAD1FFB67F12FFB47E1EFFFFFF + FFFFF1E6CEFFF1E7CFFFF2E8D3FFF6EFDFFFB07400FFFDE8C7FFFBE6C2FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE6C4FFFFECCEFFB78114FFB47E1EFFFFFF + FFFFEEE3C8FFEFE4C9FFEFE5CCFFF2E9D3FFC9A14FFFB07500FFB27803FFB379 + 04FFB37801FFB27600FFB37A05FFB57E0EFFB78114FFB9851BEFB47E1EFFFFFF + FFFFECE0C1FFEDE1C3FFEDE1C5FFEEE3C7FFEFE5CBFFFFFFFFFFD5B683FFB37D + 1DFFB27A19FFFFFFFFFFB68227FFB9841800BA861C00BB871E00B47E1EFFFFFF + FFFFEADCB9FFEADDBCFFEBDDBDFFEADDBCFFEADCBBFFFFFFFFFFAE740EFFFEFE + FAFFFFFFFFFFECDDC5FFB78429AABA8A3500BB871D00BB871F00B57F1FFFFFFF + FFFFE7D8B1FFE7D8B2FFE7D9B3FFE7D8B2FFE7D8B0FFFFFFFFFFAC7107FFFFFF + FFFFEADABFFFB57F20A7B9872E00BB8A3500BB871D00BB871F00B68124FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDC + C3FFB57F20A6B9872D00BB893200BB8A3500BB871D00BB871F00B9872DEFB681 + 24FFB57F1FFFB47E1EFFB47E1EFFB47E1EFFB47E1EFFB47F1FFFB58022FFB783 + 27EAB9872E00BB893200BB8A3300BB8A3500BB871D00BB871F00 + } end object MenuItem25: TMenuItem Caption = '-' end object MenuItem26: TMenuItem Action = actAddCurrToProj + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0033000000330000003300000033000000330000003300000033000000330000 + 00330000002F00000000000000000000000000000000000000004498D1F24397 + D1FF4094D0FF3F92CFFF3F92CFFF4093D0FF4193D1FF4193D1FF4194D1FF4194 + D1FF4295CFEF00000012000000000000000000000000000000004498D2FF449A + D3FFAAF4FFFF92F1FFFF94F1FFFF9AF4FFFF9EF7FFFF9FF7FFFF9FF7FFFFB1FD + FFFF6DBDEDFF3175A573000000000000000000000000000000004397D1FF62B8 + E3FF7ECCEDFF81E6FFFF87E8FFFF26A786FF007F38FF007F3BFF007F3CFF0081 + 3BFF25A082FF368CD1D2000000330000003300000033000000234095D0FF86D7 + F4FF4AA7DBFFE2FFFFFFE9FFFFFF007F39FF16EBABFF00E39DFF00E49FFF00E8 + 9FFF008039FFC2B1B0FFB3AFABFFAFAEABFFB0AFADFFA4A4A2C03E93D0FFB1F6 + FFFF4DA7DCFF388CCEFF4190D9FF00823BFF47E8BCFF00D699FF00D79CFF007C + 3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0ADFF3D92CFFFBBF3 + FFFF72DAFBFF6CCCF3FF74D0FFFF008139FF75EAD0FF4BEAD0FF00C59AFF00C8 + 9CFF007A34FFFFFFFFFFFEFCFDFFFCFCFCFFFFFFFFFFAEAEABFF3B92CFFFC6F5 + FFFF6BD8FAFF6FDAFCFF77DFFFFF008037FF93EDE0FF007B36FF88E5DCFF86E6 + DDFF007932FFFFFDFFFFFAF7F8FFF7F6F6FFFFFFFFFFADADABFF3B92CFFFD5F7 + FFFF5FD1F9FFB6EBFEFFE2FCFFFF44B188FF007E35FFFFFFFFFF007933FF0079 + 32FFFFFDFFFFFCF6F8FFF5F3F3FFF4F3F3FFFFFFFFFFADADABFF3D94D0FFDCFD + FFFFD8F9FFFFDBFBFFFF388FD1FF3993D9FFC2B2AEFFFFFFFFFFFFF6FAFFFFF6 + F9FFF8F3F4FFF1F0EFFFEFEFEEFFEFEFEEFFFFFFFFFFADADABFF4398D2B03D94 + D0FF3B92CFFF3D94D0FF4097D2E400000000BAB0A9FFFFFFFFFFEFEDEDFFEFED + EDFFF6F6F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEABFF000000000000 + 000000000000000000000000000000000000B7B0A9FFFFFFFFFFE8E7E8FFE8E7 + E7FFFFFFFFFFCBCBCAFFA7A7A4FFA5A5A3FFFFFFFFFFAFAFADFF000000000000 + 000000000000000000000000000000000000B2AFAAFFFFFFFFFFE5E4E3FFE5E4 + E2FFFFFFFFFFA7A7A4FFEBEBEAFFFFFFFFFFE9E9E9FFB0B0AEAC000000000000 + 000000000000000000000000000000000000AFAEABFFFFFFFFFFE0E0DFFFDFDF + DEFFFFFFFFFFA5A5A3FFFFFFFFFFE8E8E8FFAFAFACA700000000000000000000 + 000000000000000000000000000000000000B0AFADFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFE9E9E9FFAEAEACA70000000000000000000000000000 + 000000000000000000000000000000000000B3B3B1B0B0B0ADFFAEAEACFFADAD + ABFFAEAEABFFAFAFADFFB0B0AEAC000000000000000000000000 + } + end + object MenuItem36: TMenuItem + Caption = '-' + end + object MenuItem37: TMenuItem + Action = actCompAndRunFile + end + object MenuItem38: TMenuItem + Action = ActCompAndRunFileWithArgs end end object MenuItem7: TMenuItem Caption = 'Edit' object MenuItem15: TMenuItem Action = actCopy + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000003000000033000000330000 + 0033000000330000003300000033000000330000003300000030000000000000 + 000000000000000000000000000000000000B1B1AFF2B0B0AEFFAEAEACFFADAD + ABFFADADABFFADADABFFADADABFFAEAEABFFAFAFADFFB1B1AFF2000000000000 + 000B0000000A0000000A0000000A00000007B0B0AEFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0ADFF0000002F6868 + 675F6464625C6464625C616160594E4E4D4EB0B0ADFFF6F6F5FFECECEBFFFBFA + FAFFFDFDFDFFFCFCFCFFFBFBFCFFFCFCFCFFFFFFFFFFAEAEABFFB0B0AEF1AFAF + ADFFAEAEABFFADADABFFADADABFFADADABFFACACAAFFA9A9A7FFA8A8A6FFB8B7 + B6FFFBFAFAFFF8F6F6FFF7F6F6FFF7F6F6FFFFFFFFFFADADABFFB0B0ADFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8 + A5FFF9F8F8FFF5F4F4FFF4F3F3FFF4F3F3FFFFFFFFFFADADABFFAEAEABFFFFFF + FFFFFCFCFCFFFBFBFCFFFBFBFCFFFBFBFCFFFBFBFCFFFCFCFCFFFFFFFFFFA7A7 + A5FFF5F5F4FFF1F1F0FFEFEFEEFFEFEFEEFFFFFFFFFFADADABFFADADABFFFFFF + FFFFF7F6F6FFF7F6F6FFF7F6F6FFF7F6F6FFF7F6F6FFF7F6F6FFFFFFFFFFA7A7 + A5FFF1F1F1FFEDEDECFFEBEBEAFFEBEBEAFFFFFFFFFFADADABFFADADABFFFFFF + FFFFF4F3F3FFF4F3F3FFF4F3F3FFF4F3F3FFF4F3F3FFF4F3F3FFFFFFFFFFA8A8 + A5FFEDECECFFF4F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFAEAEABFFADADABFFFFFF + FFFFF0F0EFFFF0F0EFFFF0F0EFFFF0F0EFFFEFEFEEFFEFEFEEFFFFFFFFFFA8A8 + A5FFE9E8E7FFFFFFFFFFCACAC9FFA4A4A2FFFFFFFFFFAFAFADFFADADABFFFFFF + FFFFECECEBFFEDEDECFFEDEDECFFECECEBFFEBEBEAFFEBEBEAFFFFFFFFFFA8A8 + A5FFE4E4E3FFFFFFFFFFA4A4A2FFFFFFFFFFE9E9E9FFB0B0AEACADADABFFFFFF + FFFFE9E8E8FFEAE8E9FFE9E8E8FFF3F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFA9A9 + A6FFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA700000000AEAEABFFFFFF + FFFFE5E4E3FFE6E5E4FFE5E4E3FFFFFFFFFFCACAC9FFA4A4A2FFFFFFFFFFADAD + AAFFAFAFADFFAEAEACFFAFAFADFFB0B0AEAC0000000000000000AEAEACFFFFFF + FFFFE0E0DFFFE0E0DFFFE0E0DFFFFFFFFFFFA4A4A2FFFFFFFFFFE9E9E9FFB0B0 + AEA4000000000000000000000000000000000000000000000000AFAFADFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA70000 + 0000000000000000000000000000000000000000000000000000B3B3B1EFB0B0 + ADFFAEAEACFFAEAEABFFADADABFFAEAEABFFAFAFADFFB0B0AED5000000000000 + 0000000000000000000000000000000000000000000000000000 + } end object MenuItem16: TMenuItem Action = actCut + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00000000000000000000000033000000330000001400000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000B97B3DFFB0773FFF8458318400000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000C1803CFF00000000B2773FFF00000000000000000000 + 000000000000000000210000003300000023FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000C9843AFF00000010B97B3DFF00000000000000000000 + 00000000002DA9713AB0B0773FFF9F6C3BBEFFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000CF8639E08D5C2871C07F3CFF00000000000000000000 + 0023B97B3AE5BA7B3DAF00000016B0753FF6FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000000000000000D3893726D08736FFC98235FF0000001300000021B677 + 36BDBF7E3AEB0000002B9361308BB6793EE3FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000B3906DFF7171717DBE792DB5CC85 + 38FFC7833BE6C2803BD7BE7E3CFF00000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000021AB8968FF9E958EFFE09B4DFF0000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000000000000022989BA1B6D37C1DFFB98B5EFF000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000002F9C9B9BB9ECEDEFFFBDB4A8FFCACCD0FF000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000001BAAA8A5EDEBEBEBFFD2D1D1D3C4C3C3FFC7C6C6FF000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF009694949DEBEAEBFFD7D5D4E300000000CDCBCAFFC8C7C5FF000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00D4D4D3FFDAD9D8EB0000000000000000D4D2D1FFBDBBBAFF000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00B9B7B5D3000000000000000000000000D9D7D6FFC2C2C0FF000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000D3D1D1FFAFADABEA000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000000000000000000000000000BAB8B6FC00000000000000000000 + 000000000000000000000000000000000000FFFFFF00FFFFFF00 + } end object MenuItem17: TMenuItem Action = actPaste + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000002E00000033000000330000 + 0033000000330000003300000033000000330000003300000030000000230000 + 003300000033000000330000003300000033BBB7B0ECB1B0AEFFAEAEABFFADAD + ABFFADADABFFADADABFFADADABFFAEAEABFFAFAFADFFB1B1AFF23B6088C04068 + 93FF3F6893FF406893FF3E6793FF335F8FFFBBB7B0FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0ADFF3F6A94FF568A + B0FF4C82ABFF4D82ABFF4B81ABFF417BA8FFB9B4ADFFFFFFFFFFFDFDFDFFFFFF + FFFFFFFFFFFFFFFFFFFFFEFEFEFFFCFCFCFFFFFFFFFFAEAEABFF3F6A95FF6594 + BBFF4C83AEFF4E83AEFF4C82AEFF427DACFFB8B3ACFFFFFFFFFFFBFBFAFF8181 + 81FFB5B5B6FFB4B4B4FFB1B1B1FFF9F9F8FFFFFFFFFFADADABFF3F6B95FF74A1 + C3FF4F86B1FF5187B2FF4F86B2FF4581B0FFB8B2ABFFFFFFFFFFF6F6F5FFFBFB + FAFFFBFBFAFFF9F9F8FFF7F7F6FFF4F4F3FFFFFFFFFFADADABFF3F6B97FF82AB + CCFF5088B5FF528AB6FF5189B6FF4784B5FFB8B2ABFFFFFFFFFFF3F2F2FF8484 + 84FFB2B2B3FFF5F4F4FFAEAEAEFFF1F0F0FFFFFFFFFFADADABFF3E6C97FF91B6 + D5FF528BBAFF558CBBFF548CBBFF4B88BBFFB8B2ABFFFFFFFFFFEEEDEDFFF3F2 + F2FFF3F2F2FFF1F0F0FFF0EFEFFFEDEBEBFFFFFFFFFFADADABFF3E6D97FF9FC1 + DDFF538EBDFF5791BFFF5691BFFF4D8CBFFFB7B1AAFFFFFFFFFFE9E9E8FF8585 + 85FFB2B1B1FFB0AFAFFFAEADADFFE8E8E6FFFFFFFFFFAEAEABFF3E6E99FFACCA + E4FF5691C1FF5A93C3FF5993C3FF508FC3FFB8B2AAFFFFFFFFFFE3E2E0FFE6E5 + E4FFE7E5E4FFE6E5E4FFE4E3E2FFE2E1E0FFFFFFFFFFAEAEACFF3E6F9AFFB9D5 + EAFF5794C7FF5B97C8FF5B98C9FF5395CAFFBAB3ABFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFADFF3D709AFFC6DE + F0FF5797CCFF5A9ACFFF589AD1FF5398D2FF92AABEFFB5B2ADFFB2AFAAFFB2AE + A9FFB3B0ABFFB1AFACFFAFAEACFFAEAEACFFB0B0ADFFB3B3B1B03E729DFFD4E7 + F7FF569BD3FFADA096FFAA9F98FFA79E98FFA49E99FFA59D97FF4E98D5FFCCE4 + F8FF2F6A9AFFC0BAB300B8B7B300B5B4B200B4B4B200B5B5B30042759FFFAFD2 + F2FFA9D0F3FF978E87FFCECAC8FFCBC8C6FFCDCAC8FF968D87FFA8D0F4FFADD1 + F2FF3D739EFF3972A100C3BCB500B9B7B400B5B5B300B5B5B300477AA3B04378 + A2FF3D77A4FF888079FFB9B6B6FFB7B5B5FFB9B6B6FF888079FF3D77A4FF4378 + A2FF4779A3B04479A4003973A300BEBAB400B7B5B300B5B5B3004A7CA500487C + A600427BA9008D847D00807F7EFF7E7E7EFF807F7EFF8D847D00427BA900487C + A6004A7CA500487BA5003E76A300C0BBB500B7B6B300B5B5B300 + } end object MenuItem18: TMenuItem Caption = '-' end object MenuItem19: TMenuItem Action = actUndo + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000003300000027000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008F4F00008F + 4E0000000033008C4BFF008548CD008F4F00008F4F00008F4F00008F4F00008F + 4F00FFFFFF00008F4F00008F4F00008F4F00008F4F00008F4F00008F4E000000 + 0033008745FF54D9B0FF008847FF000000330000003300000033000000330000 + 0033000000330000003300000022FFFFFF00008F4F00008F4F00000000330087 + 44FF65D7B3FF00D9A0FF00C384FF008544FF008746FF008847FF008847FF0088 + 47FF008847FF008948FF007E43B900000033008F4F00008F4F00008A48FF74DB + BDFF00D09CFF00CE9AFF00D59CFF00D89FFF00D9A0FF00D9A0FF00D9A0FF00D9 + A0FF00D9A1FF00D79CFF00B174FF008947FF00000033008F4F00008A48FF86E0 + C8FF00CB9BFF00C999FF5FE3C3FF5CE5C6FF5CE6C7FF5CE6C8FF5CE6C7FF5BE5 + C6FF5BE4C5FF29D8AFFF00D09FFF00C593FF008A47FF0000001EFFFFFF000087 + 43FF9BE3D0FF00C69EFF00C28FFF008441FF008744FF008744FF008744FF0086 + 42FF29AA78FF60D6BCFF0DC8A6FF00C5A1FF00A876FF007C42A9008E4E00008C + 4A00008743FFA4E6D9FF008845FF008C4B00008D4D00008E4D00008D4D00008D + 4C08008A48670E9256FF40CAAAFF00C6A0FF00C19AFF008948F9008F4F00008E + 4E00008D4C00008B49FF008D4CC0008F4E00008F4F00008F4F00008F4F00008F + 4F00008E4D0000874768009D61FF00CDA1FF00CFA4FF008947FF008F4F00008F + 4F00008F4F00008F4E02008F4F03008F4F00008F4F00008F4F00008F4F00008F + 4F00008F4F00004F2B29009656FF00D4A1FF00D6A3FF008947FF008F4F00008F + 4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F + 4F0000000010006A398500A061FF00D8A0FF00DAA3FF008847FF008F4F000000 + 0023000000330000003300000033000000330000003300000033000000330000 + 003300613474008D4BFF00CB90FF00D99FFF00D197FF008848F8008F4F000081 + 46C0008A49FF008846FF008846FF008846FF008846FF008846FF008846FF0087 + 44FF009F60FF00C78FFF00D59DFF20DEADFF2FBD8BFF008B4A95008E4E00008A + 49FF14DFB0FF11DAABFF11DAAAFF11DAAAFF11DAAAFF11DAAAFF11DAAAFF11D9 + A9FF10D4A9FF1DD5ABFF52E1C2FF3AD1ABFF008846FF008D4D00008E4E00008A + 47FF66E2D0FF62DDCAFF62DDC8FF62DDC8FF62DDC8FF62DDC8FF62DDC8FF62DD + C9FF61E0CAFF62DEC8FF3ABA91FF008845FFFFFFFF00008F4F00008F4E00008C + 4AB000965DFF00935AFF009359FF009359FF009359FF009359FF009359FF0094 + 5AFF008743FF008945FF008A49A8FFFFFF00008F4E00008F4F00 + } end object MenuItem20: TMenuItem Action = actRedo + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000002200000033000000330000003300000033000000330000 + 0033000000330000003300000033000000330000003000000000008F4F00008F + 4F0000000033007E43BB008948FF008847FF008847FF008847FF008847FF0088 + 47FF008847FF008847FF008847FF008A49FF008B4CF2008F4F00008F4F000000 + 0033008947FF00B174FF00D79CFF00DCA1FF00DCA0FF00DCA0FF00DCA0FF00DC + A0FF00DCA0FF00DCA0FF00DCA1FF00E1A7FF008A49FF008E4E000000001E008A + 47FF00C593FF00D09FFF29D8AFFF5BE3C5FF5BE4C6FF5CE5C7FF5CE5C8FF5CE5 + C8FF5CE5C8FF5CE5C8FF5CE6C9FF60EACEFF008A48FF008E4E00007C42AA00A8 + 76FF00C5A1FF0DC8A6FF60D6BCFF29AA78FF008642FF008744FF008744FF0087 + 44FF008744FF008744FF008745FF008947FF008D4CB0008F4F00008948F900C1 + 9AFF00C6A0FF40CAAAFF0E9256FF008A4867008D4C08008D4D00008E4D00008E + 4D00008E4D00008E4D00008E4D00008E4E00008F4F00008F4F00008947FF00CF + A4FF00CDA1FF009D61FF00864654008E4D00008F4F00008F4F00008F4F00008F + 4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00008947FF00D6 + A3FF00D4A1FF009656FF004F2B29008F4F00008F4F00008F4F00008F4F00008F + 4F00008F4F000000002300000033008F4F00008F4F00008F4F00008847FF00DA + A3FF00D8A0FF00A061FF006A3985000000100000000A008F4F00008F4F00008F + 4F00008F4F00008147C1008C4BFF00000033008F4E00008F4F00008848F800D1 + 97FF00D99FFF00CB90FF008D4BFF00613474004E2B5C00000033000000330000 + 003300000033008947FF54D9B0FF008846FF00000033008F4E00008B4A962FBD + 8BFF20DEADFF00D59DFF00C78FFF009F60FF008744FF008846FF008846FF0088 + 46FF008643FF00BA7EFF00D8A0FF65D7B3FF008744FF00000033008D4D000088 + 46FF3AD1ABFF52E1C2FF1DD5ABFF10D4A8FF11D5AAFF11D6ABFF11D6ABFF11D6 + ABFF11D5A9FF13D3A8FF00CC9BFF00CE9DFF74DBBFFF008A48FF008F4F00008C + 4C00008845FF3ABA91FF62DEC8FF61E0CAFF62E0CAFF62E0CAFF62E0CAFF62E0 + CAFF62E0C9FF65DEC7FF00C59AFF00C69CFF86DEC8FF008A48FF008F4F00008F + 4E00008D4C00008A49AA008946FF008844FF008744FF008744FF008744FF0087 + 44FF008641FF00AB7DFF00BF9EFF9BDFD0FF008743FF008D4B00008F4F00008F + 4F00008F4F00008E4E00008E4D00008E4D00008E4D00008E4D00008E4D00008E + 4D00008D4B00008945FFA4E4D9FF008743FF008C4A00008F4E00008F4F00008F + 4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F + 4F00008F4E00008D4CB1008C49FF008D4C00008F4E00008F4F00 + } end object MenuItem21: TMenuItem Caption = '-' end object MenuItem22: TMenuItem Action = actMacStartStop + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00000000000000001E00000033000000330000 + 00330000001E00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000000001E2F44B4AC344BCBFF334ACAFF344B + CBFF2F44B4AC0000001EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002F44B4AC425AD9FF6F88FFFF738CFFFF6F88 + FFFF425AD9FF2F44B4ACFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00354BCBFF5F7CFFFF607CFFFF5F7BFDFF607C + FFFF5F7CFFFF354BCBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00334ACBFF6D88FFFF4D6DFBFF4D6DFAFF4D6D + FBFF6D88FFFF334ACBFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00334ACCFF90A5FDFF5A79FAFF5573F9FF5A79 + FAFF90A5FDFF334ACCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00354CCD97455DDBFF90A6FCFF95ACFFFF90A6 + FCFF445DDBFF354CCD97FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0000000000354CCD973249CCFF3148CBFF3249 + CCFF354CCD9700000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } end object MenuItem23: TMenuItem Action = actMacPlay + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A8A8A8349C9C9C80979797C0969696ED929292ED9090 + 90C08E8E8E8092929234FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00AFAFAF67AAAAAAD5CECECEFFE6E6E6FFF5F5F5FFF2F2F2FFDDDD + DDFFC0C0C0FF939393D590909067FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00BCBCBC67B9B9B9F1ECECECFFFEFEFEFFF3F3F3FFE8E8E8FFE7E7E7FFF1F1 + F1FFFBFBFBFFE1E1E1FF999999F193939367FFFFFF00FFFFFF00FFFFFF00C7C7 + C734C4C4C4D5F0F0F0FFFFFFFFFFE5E5E5FFE5E5E5FFEFEFEFFFE3E3E3FFE2E2 + E2FFE1E1E1FFFEFEFEFFE2E2E2FF999999D599999934FFFFFF00FFFFFF00CECE + CE80E4E4E4FFFEFEFEFFE8E8E8FFE7E7E7FFE6E6E6FF737373FFEFEFEFFFE4E4 + E4FFE3E3E3FFE2E2E2FFFBFBFBFFC6C6C6FF99999980FFFFFF00FFFFFF00D1D1 + D1C0F2F2F2FFF5F5F5FFE9E9E9FFE9E9E9FFE8E8E8FF787878FF747373FFEFEF + EFFFE5E5E5FFE4E4E4FFF2F2F2FFE1E1E1FF9D9D9DC0FFFFFF00FFFFFF00D3D3 + D3EDFCFCFCFFEFEFEFFFEBEBEBFFEAEAEAFFE9E9E9FF757575FF797878FF7473 + 73FFEFEFEFFFE5E5E5FFE8E8E8FFF4F4F4FFA2A2A2EDFFFFFF00FFFFFF00D4D4 + D4EDFCFCFCFFF0F0F0FFEDEDEDFFEBEBEBFFEAEAEAFF757575FF757575FF7A79 + 79FFCDCDCDFFE6E6E6FFE9E9E9FFFAFAFAFFA7A7A7EDFFFFFF00FFFFFF00D6D6 + D6C0F5F5F5FFF7F7F7FFEDEDEDFFEDEDEDFFECECECFF767575FF767575FFC0C0 + C0FFE9E9E9FFE8E8E8FFF4F4F4FFEEEEEEFFABABABC0FFFFFF00FFFFFF00D7D7 + D780EBEBEBFFFFFFFFFFEFEFEFFFEEEEEEFFEDEDEDFF777676FFC2C2C2FFEBEB + EBFFE9E9E9FFE9E9E9FFFFFFFFFFDDDDDDFFB3B3B380FFFFFF00FFFFFF00D9D9 + D934D8D8D8D5F8F8F8FFFFFFFFFFEFEFEFFFEEEEEEFFC3C3C3FFEDEDEDFFECEC + ECFFEBEBEBFFFFFFFFFFF5F5F5FFC0C0C0D5BEBEBE34FFFFFF00FFFFFF00FFFF + FF00D9D9D967D8D8D8F1F8F8F8FFFFFFFFFFF8F8F8FFF2F2F2FFF1F1F1FFF7F7 + F7FFFFFFFFFFF5F5F5FFC9C9C9F1C7C7C767FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D9D9D967D8D8D8D5EBEBEBFFF5F5F5FFFCFCFCFFFCFCFCFFF4F4 + F4FFE8E8E8FFCECECED5CCCCCC67FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00D9D9D934D8D8D880D7D7D7C0D6D6D6EDD5D5D5EDD3D3 + D3C0D2D2D280D0D0D034FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } end end object MenuItem14: TMenuItem Caption = 'Project' object MenuItem31: TMenuItem Action = actNewProj + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF000000 + 0000000000330000000000000033000000000000003300000000000000330000 + 000000000033000000000000003300000000FFFFFF00FFFFFF00FFFFFF000000 + 003389898AFF0000003389898AFF0000003389898AFF0000003389898AFF0000 + 003389898AFF0000003389898AFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFFDFDFDFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC + FCFFFCFCFCFFFDFDFDFFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFFAF9F9FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8 + F8FFF9F8F8FFFAF9F9FFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4 + F3FFF4F4F3FFF4F4F3FFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1 + F0FFF2F1F0FFF2F1F0FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEF + EEFFEEEEEDFFEEEFEEFFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFEDEBEAFFEDECEBFFEDECEBFFEDECEBFFEDECEBFFECEBEAFFECEB + E9FFEBEAE9FFECEAE9FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFE9E9E8FFEAEAE9FFEAEAE9FFEAEAE9FFE9E9E8FFF4F4F2FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFE7E6E5FFE8E7E6FFE8E7E6FFE8E7E6FFE6E5E4FFFFFFFFFF9191 + 91FFFFFFFFFF929292FFFFFFFFFF00000033FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFE3E3E2FFE4E4E3FFE4E5E4FFE4E4E3FFE3E3E2FFFFFFFFFFFFFF + FFFFE6E6E4FFFFFFFFFFE0E0E0AB89898AFFFFFFFF00FFFFFF00FFFFFF000000 + 0033FFFFFFFFE0DFDDFFE0DFDEFFE0DFDEFFE0DFDEFFDFDEDCFFFFFFFFFF9191 + 91FFFFFFFFFFDDDDDDA789898AFF00000000FFFFFF00FFFFFF00FFFFFF008989 + 8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFE0E0E0AB89898AFF0000000000000000FFFFFF00FFFFFF00FFFFFF00A5A5 + A53889898AFF0000000089898AFF0000000089898AFF0000000089898AFF0000 + 000089898AFF000000000000000000000000FFFFFF00FFFFFF00 + } end object MenuItem30: TMenuItem Action = actOpenProj + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF000000 + 00000000000000000000000000000000001200000025000000330000002E0000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF000000 + 0000000000120000002500000033326E987A3E8BC1C84195D1FF3892D1ED0000 + 00330000003300000033000000330000003300000023FFFFFF00FFFFFF000000 + 002F326F997C3D8AC1C74092CEFF54ADDEFF66C4EDFF78E0FEFF3591D1FFBBB2 + AAFFB0AEABFFADADABFFAEAEABFFAFAFADFFA4A4A2C0FFFFFF00FFFFFF004295 + CEEF58B0DFFF6DC9EFFF7FE2FDFF7EE3FEFF7ADEFCFF7EE1FFFF308CCDFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0ADFFFFFFFF00FFFFFF004094 + CFFF92F1FFFF85E7FFFF80E1FDFF7ADEFBFF77DBFBFF83E1FFFF308ACBFFFFFF + FBFFFFFFFDFFFCFCFCFFFCFCFCFFFFFFFFFFAEAEABFFFFFFFF00FFFFFF003E92 + CEFF9AF0FFFF83E4FDFF7EDFFCFF7ADDFBFF76DAFAFF89E2FEFF48A8DDFF70AE + D9FFFFFCF8FFF9F6F6FFF7F6F6FFFFFFFFFFADADABFFFFFFFF00FFFFFF003E92 + CEFFA3F1FFFF82E3FCFF7EDFFCFF7ADDFBFF76DAFAFF71D9FBFF9DE8FFFF2A89 + CBFFFFFBF6FFF6F4F3FFF4F3F3FFFFFFFFFFADADABFFFFFFFF00FFFFFF003D92 + CEFFADF3FFFF81E3FCFF7EDFFCFF7ADDFBFF76DAFAFF6FD8FAFFABEBFFFF2B89 + CCFFFFF8F1FFF2F1EFFFEFF0EEFFFFFFFFFFADADABFFFFFFFF00FFFFFF003C92 + CEFFB6F6FFFF80E3FCFF7DDFFCFF7ADDFBFF76DAFAFF6ED7FAFFB9EFFFFF2A89 + CCFFFCF2EDFFEEECEBFFEBEAEAFFFFFFFFFFADADABFFFFFFFF00FFFFFF003C91 + CEFFC0F8FFFF7FE2FCFF7DDFFCFF7ADDFBFF75DAFAFF6DD7FAFFC6F3FFFF2989 + CBFFFFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFAEAEABFFFFFFFF00FFFFFF003B91 + CEFFC9F9FFFF7EE2FCFF7CDEFCFF78DCFBFF72D9FAFF6AD6FAFFD2F6FFFF2888 + CBFFFFFFFFFFCDCBC9FFA4A4A2FFFFFFFFFFAFAFADFFFFFFFF00FFFFFF003A91 + CEFFD2FCFFFF7AE2FCFF77DDFCFF7FDFFBFF9BE6FDFFB3EDFFFFD4F9FFFF2688 + CBFFFFFFFFFFA7A5A2FFFFFFFFFFE9E9E9FFB0B0AEACFFFFFF00FFFFFF003991 + CFFFE9FFFFFFAFF0FFFFCEF7FFFFDAFAFFFFC4ECFCFF8CCAECFF5FAEE0FF82BD + E6FFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA700000000FFFFFF00FFFFFF003C93 + D0FFE9FFFFFFA8DAF3FF7BBDE4FF4398D2FF408EC7FF6E9CBCFF90A5B2FFBAAF + A6FFB5ADA6FFB5AFA9FFB5B1ADA40000000000000000FFFFFF00FFFFFF004297 + D2FF3B93D0FF62ADDCFF93CDEDFFBBE7FAFFD8FCFFFFD6FCFFFFD3FBFFFFD1FB + FFFFD3FCFFFF2E91D5FF000000000000000000000000FFFFFF00FFFFFF00459A + D3EF4498D2FF4197D1FF3F95D1FF3D94D0FF3B93D0FF3A92D0FF3A92D0FF3A93 + D0FF3C94D1FF3E97D3EE000000000000000000000000FFFFFF00 + } end object MenuItem29: TMenuItem Caption = '-' end object MenuItem27: TMenuItem Action = actSaveProj + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003300000033000000330000003300000030AA7C29C0B681 + 24FFB57F20FFB47F1FFFB57F20FFB68226FFB8831FFFB78216FFB68114FFB880 + 10FFB9810FFFB87F0EFFB67E0FFFB68013FFB78218FFB7831CF2B68124FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB37A09FFF5CB89FFF3C275FFF9FC + FFFF8B8D91FFF9F9F9FFF4F8FCFFF2C174FFF6CD8BFFB78218FFB57F20FFFFFF + FFFFE6D6AEFFE6D7B0FFE8D9B3FFEBDFC0FFB17805FFF2CA88FFEBB65CFFF2ED + EDFF7F7978FFF1E9E2FFEEE9E9FFEAB55BFFF3CC8BFFB68116FFB47E1FFFFFFF + FFFFE6D6AFFFE7D7B2FFE8DAB5FFEBE0C2FFB17805FFF2CD91FFE6AD4FFFEACF + A9FFFFFFFFFFFDFFFFFFE8CEA7FFE6AD4EFFF3CE93FFB68115FFB47E1EFFFFFF + FFFFE6D5ADFFE6D6AFFFE7D8B3FFEBDFC0FFB17703FFF4D39CFFE4A641FFE3A4 + 3AFFE3A133FFE2A132FFE3A43AFFE3A641FFF4D49EFFB68114FFB47E1EFFFFFF + FFFFF8F4E7FFF8F4E8FFF9F6EBFFFCFDFAFFB07601FFF5D7A9FFE19E2FFFE7CA + A1FFEBE2E0FFEBE2E0FFE7CAA1FFE19E2FFFF6D9ADFFB68014FFB47E1EFFFFFF + FFFFF4EDDDFFF4EDDDFFF5EFE1FFF9F7F0FFB07500FFF7E0B9FFDD9419FFEEE9 + E9FFEFE6DEFFEFE6DEFFEEE9E9FFDD9419FFF8E2BCFFB68012FFB47E1EFFFFFF + FFFFF3EAD6FFF3EAD7FFF4ECDAFFF8F3E8FFB07500FFFAE9CEFFDA8802FFF0EE + ECFFB2ADA7FFB2ADA7FFF0EEECFFDA8802FFFBEAD1FFB67F12FFB47E1EFFFFFF + FFFFF1E6CEFFF1E7CFFFF2E8D3FFF6EFDFFFB07400FFFDE8C7FFFBE6C2FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE6C4FFFFECCEFFB78114FFB47E1EFFFFFF + FFFFEEE3C8FFEFE4C9FFEFE5CCFFF2E9D3FFC9A14FFFB07500FFB27803FFB379 + 04FFB37801FFB27600FFB37A05FFB57E0EFFB78114FFB9851BEFB47E1EFFFFFF + FFFFECE0C1FFEDE1C3FFEDE1C5FFEEE3C7FFEFE5CBFFFFFFFFFFD5B683FFB37D + 1DFFB27A19FFFFFFFFFFB68227FFB9841800BA861C00BB871E00B47E1EFFFFFF + FFFFEADCB9FFEADDBCFFEBDDBDFFEADDBCFFEADCBBFFFFFFFFFFAE740EFFFEFE + FAFFFFFFFFFFECDDC5FFB78429AABA8A3500BB871D00BB871F00B57F1FFFFFFF + FFFFE7D8B1FFE7D8B2FFE7D9B3FFE7D8B2FFE7D8B0FFFFFFFFFFAC7107FFFFFF + FFFFEADABFFFB57F20A7B9872E00BB8A3500BB871D00BB871F00B68124FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDC + C3FFB57F20A6B9872D00BB893200BB8A3500BB871D00BB871F00B9872DEFB681 + 24FFB57F1FFFB47E1EFFB47E1EFFB47E1EFFB47E1EFFB47F1FFFB58022FFB783 + 27EAB9872E00BB893200BB8A3300BB8A3500BB871D00BB871F00 + } end object MenuItem28: TMenuItem Action = actSaveProjAs + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000002C0000 + 0033000000330000003300000033000000330000003300000033000000330000 + 00330000003300000033000000330000002C0000000000000000B3811AE1B781 + 14FFB57E10FFB57D0CFFB67C0BFFB67C0AFFB57C0AFFB67D0AFFB77D0BFFB77E + 0BFFB77E0CFFB67F10FFB78114FFB3811AE1BB871E00BB871F00B78115FFFEE9 + C7FFFBE4BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFE7BCFFFFEAC6FFB78115FFBB861D00BB871F00B67F12FFFBE9 + CFFFD88500FFFFFFFFFF797B7FFFA2A4A5FFFFFCF3FF828180FF425C72FF385A + 80FF3784DDFFEB8D00FFFFECCCFFB78011FFBB861C00BC871D00B67F12FFFAE4 + C1FFDB8D0AFFFEFFFFFFFDF7EBFFFFF8EAFFFFF7E9FFFFFDEBFF507C9CFF7BA3 + B5FF86D2FFFF1F60A2FFFFEBB6FFBE830DFFC0871600C2891600B68013FFF7DE + B5FFDC9317FFFFFFFFFF787879FF7A7979FFA4A2A1FFABA39FFF3AABF2FFA1ED + FFFF9ADEFEFF0998FFFF2366A9FFCA8604FF0000000971747E00B68014FFF5D9 + AAFFDF9822FFFFFFFFFFF1E6D9FFF2E6D9FFF2E6D7FFF6E6D6FFCED9DBFF1D6F + C5FF39C4FFFF1DABFFFF7EA3C4FF7C7878FF3B3B3A5674767000B68114FFF4D4 + A2FFE29F31FFE9E1E2FFFEFFFFFFFEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF1B74D0FFACDBF4FF928782FFC1C0BAFF797B71FF00000033B68115FFF3D1 + 99FFE3A740FFE2A336FFE19F2EFFE19E2BFFE19E2BFFE29F2CFFE3A02CFFE8A3 + 2DFFF1A830FF817F83FFE9E9E8FF898B83FFAC7BA7FF9969CBFFB68115FFF3CE + 93FFE5AB48FFEED7B6FFF5F3F7FFF5F1F4FFF7F3F6FFFBF8FAFFFCF8FAFFF9F6 + F9FFF2D9B4FFEEAE40FF7A8185FFE0B1E4FFCB96C7FFAE7DCEFFB68116FFF3CB + 8CFFE7AE4EFFF5F4F8FFF0E9E4FFF1E9E2FFF8EFE8FF8A847FFF88817EFFF8F0 + EBFFF7F5F9FFEAAF4BFFF6CD7DFFBC87E4FFBE8ADAFFAC7BCF00B68116FFF1C8 + 87FFE8B258FFF6F5F7FFEEE2D9FFEFE3D9FFFFFAF5FF5C5752FF48423FFFFFFB + F7FFF7F6F8FFE9B257FFF2C880FFB68100FFBE8AEC00AB7BDF00B68116FFF2CA + 85FFEBB962FFF8F8FBFFE9DCD1FFEBDDD1FFFFFFFCFF958B83FF4A443FFFFFFF + FFFFFAF9FCFFEBB962FFF2CA83FFB6810FFFBB860F00BC880D00B78218FFF6CC + 89FFF2C274FFFFFFFFFFFEFDFCFFFFFEFCFFFFFEF9FF93887EFF4A433DFFFFFF + FFFFFFFFFFFFF2C274FFF6CC89FFB78217FFBB861C00BB871C00B9851CC5B781 + 16FFB37A06FFD6CFD1FFD4C9C3FFD4C9C1FFD8CCC5FFE3D7D02B4A433D00DFD4 + CEFFD8D1D2FFB37A06FFB78116FFB9851CC5BB871F00BB871F00 + } + end + object MenuItem32: TMenuItem + Caption = '-' + end + object MenuItem41: TMenuItem + Action = actProjOpts + end + object MenuItem40: TMenuItem + Caption = '-' + end + object MenuItem33: TMenuItem + Action = actCompileProj + end + object MenuItem34: TMenuItem + Action = actCompileAndRunProj + end + object MenuItem35: TMenuItem + Action = actCompAndRunProjWithArgs end end object MenuItem8: TMenuItem Caption = 'Run' object MenuItem9: TMenuItem Action = actCompAndRunFile + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 001F000000080000003300000033000000040000002400000000000000000000 + 0000000000000000000000000000000000330000003300000033000000332D73 + BAAF1B3D60523F93D4FF3F93D4FF102438413578BAC300000024000000000000 + 0000000000230000002F00000000B88445FFC89451FFCE934AFF6D8192FF40A9 + EAFF429EDDFF52D0F8FF52D0F8FF439EDCFF48AAE2FF3980C8B6000000000000 + 0023AA7A3EBFB68243ED00000033B58142FFF5C378FFFCC371FFAD7E49FF3B9E + E3FF4ECFFBFF41B0EDFF42B1EDFF50CFFAFF439EDCFF1B3D5F5200000000AA7A + 3FBED2A76FFFD7A561FFB88241FFD39F58FFEDB96BFFF7B962FF288DE3FF4CCF + FCFF40B0EDFFC39F7BFF987653CB42B1EEFF52D0F9FF3F92D5FF00000000B984 + 43E9DDBB8CFFEEC486FFE8B466FFF1CC96FFF7DCB5FFFFDEADFF288CDFFF4CCE + FBFF3FAFEDFFFAB66DFFC7751FCE41B1EFFF52D0F9FF3F92D5FF000000330000 + 0033B78242FFE4B163FFEBC68EFFEACFA9FFD1A774FFD9A970FFCCBBA4FF399C + E1FF4CCEFBFF3FB0EEFF40B1EFFF4FCFFCFF429EDCFF16324E31B98545FFB782 + 42FFC8934EFFDFAB5EFFE4C494FFB68245DAB8813F3CBE823B2561809CFF37A8 + EFFF399DE3FF4CCFFDFF4AC7F8FF3D9EE1FF45AAE4FF3982CB9FC38F4EFFE2B5 + 72FFDEB06AFFDBA658FFC59555FF926935300000000000000000AA7333436A83 + 99FFCD9F5FFF298DE2FF2B8FE1FFB48B5AFF3081D29100000000C5995FFFF1DC + BBFFECD2ACFFD6A152FFC18C49FF70502A620000000C0000000C704F2861C88D + 44FFDFA24CFFEACEA6FFF1D7B2FFD79A51FF0000000000000000B98442FFB680 + 3EFFCEA673FFDBAE6EFFCB954BFFB88344FF6E4F2A616E4F2A61B88344FFCD97 + 4AFFDCAE6DFFD0A772FFB9813CFFBE843FFF0000000000000000000000000000 + 002FBA8547FFCE9949FFDAB276FFC9944BFFBE8943FFBE8943FFC9944BFFDAB2 + 76FFCE9949FFBA8546FF0000002F00000000000000000000000000000000B782 + 42ECD3AE7CFFE7CBA4FFEAD4B2FFE8D0ADFFCF9D56FFCF9D56FFE8D0ADFFEAD4 + B2FFE7CBA4FFD3AE7CFFB78242EC00000000000000000000000000000000B985 + 44AFCCA26CFFD4B080FFB98343FFCCA470FFC9984EFFC9984EFFCCA470FFB983 + 43FFD4B080FFCCA26CFFB98544AF000000000000000000000000000000000000 + 0000B98544AFB98443E900000000B78140FFE9D4B4FFE9D4B4FFB78140FF0000 + 0000B98443E9B98544AF00000000000000000000000000000000000000000000 + 0000000000000000000000000000BA8545FFB9843FFFB9843FFFBA8545FF0000 + 0000000000000000000000000000000000000000000000000000 + } end object MenuItem13: TMenuItem Action = ActCompAndRunFileWithArgs + Bitmap.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 001F000000080000003300000033000000040000002400000000000000000000 + 0000000000000000000000000000000000330000003300000033000000332D73 + BAAF1B3D60523F93D4FF3F93D4FF102438413578BAC300000024000000000000 + 0000000000230000002F00000000B88445FFC89451FFCE934AFF6D8192FF40A9 + EAFF429EDDFF52D0F8FF52D0F8FF439EDCFF48AAE2FF3980C8B6000000000000 + 0023AA7A3EBFB68243ED00000033B58142FFF5C378FFFCC371FFAD7E49FF3B9E + E3FF4ECFFBFF41B0EDFF42B1EDFF50CFFAFF439EDCFF1B3D5F5200000000AA7A + 3FBED2A76FFFD7A561FFB88241FFD39F58FFEDB96BFFF7B962FF288DE3FF4CCF + FCFF40B0EDFFC39F7BFF987653CB42B1EEFF52D0F9FF3F92D5FF00000000B984 + 43E9DDBB8CFFEEC486FFE8B466FFF1CC96FFF7DCB5FFFFDEADFF288CDFFF4CCE + FBFF3FAFEDFFFAB66DFFC7751FCE41B1EFFF52D0F9FF3F92D5FF000000330000 + 0033B78242FFE4B163FFEBC68EFFEACFA9FFD1A774FFD9A970FFCCBBA4FF399C + E1FF4CCEFBFF3FB0EEFF40B1EFFF4FCFFCFF429EDCFF16324E31B98545FFB782 + 42FFC8934EFFDFAB5EFFE4C494FFB68245DAB8813F3CBE823B2561809CFF37A8 + EFFF399DE3FF4CCFFDFF4AC7F8FF3D9EE1FF45AAE4FF3982CB9FC38F4EFFE2B5 + 72FFDEB06AFFDBA658FFC59555FF926935300000000000000000AA7333436A83 + 99FFCD9F5FFF298DE2FF2B8FE1FFB48B5AFF3081D29100000000C5995FFFF1DC + BBFFECD2ACFFD6A152FFC18C49FF70502A620000000C0000000C704F2861C88D + 44FFDFA24CFFEACEA6FFF1D7B2FFD79A51FF0000000000000000B98442FFB680 + 3EFFCEA673FFDBAE6EFFCB954BFFB88344FF6E4F2A616E4F2A61B88344FFCD97 + 4AFFDCAE6DFFD0A772FFB9813CFFBE843FFF0000000000000000000000000000 + 002FBA8547FFCE9949FFDAB276FFC9944BFFBE8943FFBE8943FFC9944BFFDAB2 + 76FFCE9949FFBA8546FF0000002F00000000000000000000000000000000B782 + 42ECD3AE7CFFE7CBA4FFEAD4B2FFE8D0ADFFCF9D56FFCF9D56FFE8D0ADFFEAD4 + B2FFE7CBA4FFD3AE7CFFB78242EC00000000000000000000000000000000B985 + 44AFCCA26CFFD4B080FFB98343FFCCA470FFC9984EFFC9984EFFCCA470FFB983 + 43FFD4B080FFCCA26CFFB98544AF000000000000000000000000000000000000 + 0000B98544AFB98443E900000000B78140FFE9D4B4FFE9D4B4FFB78140FF0000 + 0000B98443E9B98544AF00000000000000000000000000000000000000000000 + 0000000000000000000000000000BA8545FFB9843FFFB9843FFFBA8545FF0000 + 0000000000000000000000000000000000000000000000000000 + } end object MenuItem10: TMenuItem Caption = '-' @@ -97,27 +776,37 @@ object CEMainForm: TCEMainForm Action = actCompileProj end object MenuItem12: TMenuItem - Action = ActCompileAndRunProj + Action = actCompileAndRunProj end + object MenuItem39: TMenuItem + Action = actCompAndRunProjWithArgs + end + end + object mnuItemWin: TMenuItem + Caption = 'Window' end end object Actions: TActionList + Images = imgList OnUpdate = ActionsUpdate left = 32 object actSaveFile: TAction Category = 'File' Caption = 'Save file' + ImageIndex = 3 OnExecute = actSaveFileExecute end object actCopy: TAction Category = 'Edit' Caption = 'Copy' + ImageIndex = 4 OnExecute = actCopyExecute ShortCut = 16451 end object actSaveProj: TAction Category = 'Project' Caption = 'Save project' + ImageIndex = 3 OnExecute = actSaveProjExecute end object Action4: TAction @@ -127,74 +816,87 @@ object CEMainForm: TCEMainForm object actSaveFileAs: TAction Category = 'File' Caption = 'Save file as...' + ImageIndex = 2 OnExecute = actSaveFileAsExecute end object actOpenFile: TAction Category = 'File' Caption = 'Open file...' + ImageIndex = 9 OnExecute = actOpenFileExecute end object actNewFile: TAction Category = 'File' Caption = 'new empty file' + ImageIndex = 8 OnExecute = actNewFileExecute end object actCompAndRunFile: TAction Category = 'Run' Caption = 'Compile and run file' + ImageIndex = 21 OnExecute = actCompAndRunFileExecute end object ActCompAndRunFileWithArgs: TAction Category = 'Run' Caption = 'Compile and run file...' + ImageIndex = 21 OnExecute = ActCompAndRunFileWithArgsExecute end object actCompileProj: TAction Category = 'Run' Caption = 'Compile project' + OnExecute = actCompileProjExecute end - object ActCompileAndRunProj: TAction + object actCompileAndRunProj: TAction Category = 'Run' Caption = 'Compile and run project' end object actSaveProjAs: TAction Category = 'Project' Caption = 'Save project as...' + ImageIndex = 2 OnExecute = actSaveProjAsExecute end object actPaste: TAction Category = 'Edit' Caption = 'Paste' + ImageIndex = 5 OnExecute = actPasteExecute ShortCut = 16470 end object actCut: TAction Category = 'Edit' Caption = 'Cut' + ImageIndex = 6 OnExecute = actCutExecute ShortCut = 16472 end object actUndo: TAction Category = 'Edit' Caption = 'Undo' + ImageIndex = 0 OnExecute = actUndoExecute ShortCut = 16474 end object actRedo: TAction Category = 'Edit' Caption = 'Redo' + ImageIndex = 1 OnExecute = actRedoExecute ShortCut = 24666 end object actMacStartStop: TAction Category = 'Edit' Caption = 'Start/stop macro recording' + ImageIndex = 10 OnExecute = actMacStartStopExecute ShortCut = 24658 end object actMacPlay: TAction Category = 'Edit' Caption = 'Play macro' + ImageIndex = 11 OnExecute = actMacPlayExecute ShortCut = 24656 end @@ -206,20 +908,739 @@ object CEMainForm: TCEMainForm object actAddCurrToProj: TAction Category = 'File' Caption = 'Add file to project' + ImageIndex = 7 OnExecute = actAddCurrToProjExecute end object actOpenProj: TAction Category = 'Project' Caption = 'Open project...' + ImageIndex = 9 OnExecute = actOpenProjExecute end object actNewProj: TAction Category = 'Project' Caption = 'New project' + ImageIndex = 8 OnExecute = actNewProjExecute end + object actCompAndRunProjWithArgs: TAction + Category = 'Run' + Caption = 'Compile and run project...' + end + object actProjOpts: TAction + Category = 'Project' + Caption = 'Projects options' + OnExecute = actProjOptsExecute + end end object imgList: TImageList left = 64 + Bitmap = { + 4C69160000001000000010000000008F4E00008C4AB000965DFF00935AFF0093 + 59FF009359FF009359FF009359FF009359FF00945AFF008743FF008945FF008A + 49A8FFFFFF00008F4E00008F4F00008E4E00008A47FF66E2D0FF62DDCAFF62DD + C8FF62DDC8FF62DDC8FF62DDC8FF62DDC8FF62DDC9FF61E0CAFF62DEC8FF3ABA + 91FF008845FFFFFFFF00008F4F00008E4E00008A49FF14DFB0FF11DAABFF11DA + AAFF11DAAAFF11DAAAFF11DAAAFF11DAAAFF11D9A9FF10D4A9FF1DD5ABFF52E1 + C2FF3AD1ABFF008846FF008D4D00008F4F00008146C0008A49FF008846FF0088 + 46FF008846FF008846FF008846FF008846FF008744FF009F60FF00C78FFF00D5 + 9DFF20DEADFF2FBD8BFF008B4A95008F4F000000002300000033000000330000 + 0033000000330000003300000033000000330000003300613474008D4BFF00CB + 90FF00D99FFF00D197FF008848F8008F4F00008F4F00008F4F00008F4F00008F + 4F00008F4F00008F4F00008F4F00008F4F00008F4F0000000010006A398500A0 + 61FF00D8A0FF00DAA3FF008847FF008F4F00008F4F00008F4F00008F4E02008F + 4F03008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00004F2B290096 + 56FF00D4A1FF00D6A3FF008947FF008F4F00008E4E00008D4C00008B49FF008D + 4CC0008F4E00008F4F00008F4F00008F4F00008F4F00008E4D0000874768009D + 61FF00CDA1FF00CFA4FF008947FF008E4E00008C4A00008743FFA4E6D9FF0088 + 45FF008C4B00008D4D00008E4D00008D4D00008D4C08008A48670E9256FF40CA + AAFF00C6A0FF00C19AFF008948F9FFFFFF00008743FF9BE3D0FF00C69EFF00C2 + 8FFF008441FF008744FF008744FF008744FF008642FF29AA78FF60D6BCFF0DC8 + A6FF00C5A1FF00A876FF007C42A9008A48FF86E0C8FF00CB9BFF00C999FF5FE3 + C3FF5CE5C6FF5CE6C7FF5CE6C8FF5CE6C7FF5BE5C6FF5BE4C5FF29D8AFFF00D0 + 9FFF00C593FF008A47FF0000001E008A48FF74DBBDFF00D09CFF00CE9AFF00D5 + 9CFF00D89FFF00D9A0FF00D9A0FF00D9A0FF00D9A0FF00D9A1FF00D79CFF00B1 + 74FF008947FF00000033008F4F0000000033008744FF65D7B3FF00D9A0FF00C3 + 84FF008544FF008746FF008847FF008847FF008847FF008847FF008948FF007E + 43B900000033008F4F00008F4F00008F4E0000000033008745FF54D9B0FF0088 + 47FF000000330000003300000033000000330000003300000033000000330000 + 0022FFFFFF00008F4F00008F4F00008F4F00008F4E0000000033008C4BFF0085 + 48CD008F4F00008F4F00008F4F00008F4F00008F4F00FFFFFF00008F4F00008F + 4F00008F4F00008F4F00008F4F00000000000000000000000000000000330000 + 0027000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000008F4F00008F4F00008F4F00008F4F00008F + 4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F4E00008D4CB1008C + 49FF008D4C00008F4E00008F4F00008F4F00008F4F00008F4F00008E4E00008E + 4D00008E4D00008E4D00008E4D00008E4D00008E4D00008D4B00008945FFA4E4 + D9FF008743FF008C4A00008F4E00008F4F00008F4E00008D4C00008A49AA0089 + 46FF008844FF008744FF008744FF008744FF008744FF008641FF00AB7DFF00BF + 9EFF9BDFD0FF008743FF008D4B00008F4F00008C4C00008845FF3ABA91FF62DE + C8FF61E0CAFF62E0CAFF62E0CAFF62E0CAFF62E0CAFF62E0C9FF65DEC7FF00C5 + 9AFF00C69CFF86DEC8FF008A48FF008D4D00008846FF3AD1ABFF52E1C2FF1DD5 + ABFF10D4A8FF11D5AAFF11D6ABFF11D6ABFF11D6ABFF11D5A9FF13D3A8FF00CC + 9BFF00CE9DFF74DBBFFF008A48FF008B4A962FBD8BFF20DEADFF00D59DFF00C7 + 8FFF009F60FF008744FF008846FF008846FF008846FF008643FF00BA7EFF00D8 + A0FF65D7B3FF008744FF00000033008848F800D197FF00D99FFF00CB90FF008D + 4BFF00613474004E2B5C00000033000000330000003300000033008947FF54D9 + B0FF008846FF00000033008F4E00008847FF00DAA3FF00D8A0FF00A061FF006A + 3985000000100000000A008F4F00008F4F00008F4F00008F4F00008147C1008C + 4BFF00000033008F4E00008F4F00008947FF00D6A3FF00D4A1FF009656FF004F + 2B29008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00000000230000 + 0033008F4F00008F4F00008F4F00008947FF00CFA4FF00CDA1FF009D61FF0086 + 4654008E4D00008F4F00008F4F00008F4F00008F4F00008F4F00008F4F00008F + 4F00008F4F00008F4F00008F4F00008948F900C19AFF00C6A0FF40CAAAFF0E92 + 56FF008A4867008D4C08008D4D00008E4D00008E4D00008E4D00008E4D00008E + 4D00008E4E00008F4F00008F4F00007C42AA00A876FF00C5A1FF0DC8A6FF60D6 + BCFF29AA78FF008642FF008744FF008744FF008744FF008744FF008744FF0087 + 45FF008947FF008D4CB0008F4F000000001E008A47FF00C593FF00D09FFF29D8 + AFFF5BE3C5FF5BE4C6FF5CE5C7FF5CE5C8FF5CE5C8FF5CE5C8FF5CE5C8FF5CE6 + C9FF60EACEFF008A48FF008E4E00008F4F0000000033008947FF00B174FF00D7 + 9CFF00DCA1FF00DCA0FF00DCA0FF00DCA0FF00DCA0FF00DCA0FF00DCA0FF00DC + A1FF00E1A7FF008A49FF008E4E00008F4F00008F4F0000000033007E43BB0089 + 48FF008847FF008847FF008847FF008847FF008847FF008847FF008847FF0088 + 47FF008A49FF008B4CF2008F4F00000000000000000000000000000000220000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003000000000B9851CC5B78116FFB37A06FFD6CFD1FFD4C9 + C3FFD4C9C1FFD8CCC5FFE3D7D02B4A433D00DFD4CEFFD8D1D2FFB37A06FFB781 + 16FFB9851CC5BB871F00BB871F00B78218FFF6CC89FFF2C274FFFFFFFFFFFEFD + FCFFFFFEFCFFFFFEF9FF93887EFF4A433DFFFFFFFFFFFFFFFFFFF2C274FFF6CC + 89FFB78217FFBB861C00BB871C00B68116FFF2CA85FFEBB962FFF8F8FBFFE9DC + D1FFEBDDD1FFFFFFFCFF958B83FF4A443FFFFFFFFFFFFAF9FCFFEBB962FFF2CA + 83FFB6810FFFBB860F00BC880D00B68116FFF1C887FFE8B258FFF6F5F7FFEEE2 + D9FFEFE3D9FFFFFAF5FF5C5752FF48423FFFFFFBF7FFF7F6F8FFE9B257FFF2C8 + 80FFB68100FFBE8AEC00AB7BDF00B68116FFF3CB8CFFE7AE4EFFF5F4F8FFF0E9 + E4FFF1E9E2FFF8EFE8FF8A847FFF88817EFFF8F0EBFFF7F5F9FFEAAF4BFFF6CD + 7DFFBC87E4FFBE8ADAFFAC7BCF00B68115FFF3CE93FFE5AB48FFEED7B6FFF5F3 + F7FFF5F1F4FFF7F3F6FFFBF8FAFFFCF8FAFFF9F6F9FFF2D9B4FFEEAE40FF7A81 + 85FFE0B1E4FFCB96C7FFAE7DCEFFB68115FFF3D199FFE3A740FFE2A336FFE19F + 2EFFE19E2BFFE19E2BFFE29F2CFFE3A02CFFE8A32DFFF1A830FF817F83FFE9E9 + E8FF898B83FFAC7BA7FF9969CBFFB68114FFF4D4A2FFE29F31FFE9E1E2FFFEFF + FFFFFEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B74D0FFACDBF4FF9287 + 82FFC1C0BAFF797B71FF00000033B68014FFF5D9AAFFDF9822FFFFFFFFFFF1E6 + D9FFF2E6D9FFF2E6D7FFF6E6D6FFCED9DBFF1D6FC5FF39C4FFFF1DABFFFF7EA3 + C4FF7C7878FF3B3B3A5674767000B68013FFF7DEB5FFDC9317FFFFFFFFFF7878 + 79FF7A7979FFA4A2A1FFABA39FFF3AABF2FFA1EDFFFF9ADEFEFF0998FFFF2366 + A9FFCA8604FF0000000971747E00B67F12FFFAE4C1FFDB8D0AFFFEFFFFFFFDF7 + EBFFFFF8EAFFFFF7E9FFFFFDEBFF507C9CFF7BA3B5FF86D2FFFF1F60A2FFFFEB + B6FFBE830DFFC0871600C2891600B67F12FFFBE9CFFFD88500FFFFFFFFFF797B + 7FFFA2A4A5FFFFFCF3FF828180FF425C72FF385A80FF3784DDFFEB8D00FFFFEC + CCFFB78011FFBB861C00BC871D00B78115FFFEE9C7FFFBE4BDFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7BCFFFFEA + C6FFB78115FFBB861D00BB871F00B3811AE1B78114FFB57E10FFB57D0CFFB67C + 0BFFB67C0AFFB57C0AFFB67D0AFFB77D0BFFB77E0BFFB77E0CFFB67F10FFB781 + 14FFB3811AE1BB871E00BB871F000000002C0000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 00330000002C0000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00B9872DEFB68124FFB57F1FFFB47E1EFFB47E + 1EFFB47E1EFFB47E1EFFB47F1FFFB58022FFB78327EAB9872E00BB893200BB8A + 3300BB8A3500BB871D00BB871F00B68124FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDCC3FFB57F20A6B9872D00BB89 + 3200BB8A3500BB871D00BB871F00B57F1FFFFFFFFFFFE7D8B1FFE7D8B2FFE7D9 + B3FFE7D8B2FFE7D8B0FFFFFFFFFFAC7107FFFFFFFFFFEADABFFFB57F20A7B987 + 2E00BB8A3500BB871D00BB871F00B47E1EFFFFFFFFFFEADCB9FFEADDBCFFEBDD + BDFFEADDBCFFEADCBBFFFFFFFFFFAE740EFFFEFEFAFFFFFFFFFFECDDC5FFB784 + 29AABA8A3500BB871D00BB871F00B47E1EFFFFFFFFFFECE0C1FFEDE1C3FFEDE1 + C5FFEEE3C7FFEFE5CBFFFFFFFFFFD5B683FFB37D1DFFB27A19FFFFFFFFFFB682 + 27FFB9841800BA861C00BB871E00B47E1EFFFFFFFFFFEEE3C8FFEFE4C9FFEFE5 + CCFFF2E9D3FFC9A14FFFB07500FFB27803FFB37904FFB37801FFB27600FFB37A + 05FFB57E0EFFB78114FFB9851BEFB47E1EFFFFFFFFFFF1E6CEFFF1E7CFFFF2E8 + D3FFF6EFDFFFB07400FFFDE8C7FFFBE6C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFCE6C4FFFFECCEFFB78114FFB47E1EFFFFFFFFFFF3EAD6FFF3EAD7FFF4EC + DAFFF8F3E8FFB07500FFFAE9CEFFDA8802FFF0EEECFFB2ADA7FFB2ADA7FFF0EE + ECFFDA8802FFFBEAD1FFB67F12FFB47E1EFFFFFFFFFFF4EDDDFFF4EDDDFFF5EF + E1FFF9F7F0FFB07500FFF7E0B9FFDD9419FFEEE9E9FFEFE6DEFFEFE6DEFFEEE9 + E9FFDD9419FFF8E2BCFFB68012FFB47E1EFFFFFFFFFFF8F4E7FFF8F4E8FFF9F6 + EBFFFCFDFAFFB07601FFF5D7A9FFE19E2FFFE7CAA1FFEBE2E0FFEBE2E0FFE7CA + A1FFE19E2FFFF6D9ADFFB68014FFB47E1EFFFFFFFFFFE6D5ADFFE6D6AFFFE7D8 + B3FFEBDFC0FFB17703FFF4D39CFFE4A641FFE3A43AFFE3A133FFE2A132FFE3A4 + 3AFFE3A641FFF4D49EFFB68114FFB47E1FFFFFFFFFFFE6D6AFFFE7D7B2FFE8DA + B5FFEBE0C2FFB17805FFF2CD91FFE6AD4FFFEACFA9FFFFFFFFFFFDFFFFFFE8CE + A7FFE6AD4EFFF3CE93FFB68115FFB57F20FFFFFFFFFFE6D6AEFFE6D7B0FFE8D9 + B3FFEBDFC0FFB17805FFF2CA88FFEBB65CFFF2EDEDFF7F7978FFF1E9E2FFEEE9 + E9FFEAB55BFFF3CC8BFFB68116FFB68124FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFB37A09FFF5CB89FFF3C275FFF9FCFFFF8B8D91FFF9F9F9FFF4F8 + FCFFF2C174FFF6CD8BFFB78218FFAA7C29C0B68124FFB57F20FFB47F1FFFB57F + 20FFB68226FFB8831FFFB78216FFB68114FFB88010FFB9810FFFB87F0EFFB67E + 0FFFB68013FFB78218FFB7831CF2000000000000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003300000030B3B3B1EFB0B0ADFFAEAEACFFAEAEABFFADAD + ABFFAEAEABFFAFAFADFFB0B0AED5000000000000000000000000000000000000 + 0000000000000000000000000000AFAFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFE9E9E9FFAFAFADA70000000000000000000000000000 + 0000000000000000000000000000AEAEACFFFFFFFFFFE0E0DFFFE0E0DFFFE0E0 + DFFFFFFFFFFFA4A4A2FFFFFFFFFFE9E9E9FFB0B0AEA400000000000000000000 + 0000000000000000000000000000AEAEABFFFFFFFFFFE5E4E3FFE6E5E4FFE5E4 + E3FFFFFFFFFFCACAC9FFA4A4A2FFFFFFFFFFADADAAFFAFAFADFFAEAEACFFAFAF + ADFFB0B0AEAC0000000000000000ADADABFFFFFFFFFFE9E8E8FFEAE8E9FFE9E8 + E8FFF3F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A6FFFFFFFFFFFFFFFFFFFFFF + FFFFE9E9E9FFAFAFADA700000000ADADABFFFFFFFFFFECECEBFFEDEDECFFEDED + ECFFECECEBFFEBEBEAFFEBEBEAFFFFFFFFFFA8A8A5FFE4E4E3FFFFFFFFFFA4A4 + A2FFFFFFFFFFE9E9E9FFB0B0AEACADADABFFFFFFFFFFF0F0EFFFF0F0EFFFF0F0 + EFFFF0F0EFFFEFEFEEFFEFEFEEFFFFFFFFFFA8A8A5FFE9E8E7FFFFFFFFFFCACA + C9FFA4A4A2FFFFFFFFFFAFAFADFFADADABFFFFFFFFFFF4F3F3FFF4F3F3FFF4F3 + F3FFF4F3F3FFF4F3F3FFF4F3F3FFFFFFFFFFA8A8A5FFEDECECFFF4F3F3FFFFFF + FFFFFFFFFFFFFFFFFFFFAEAEABFFADADABFFFFFFFFFFF7F6F6FFF7F6F6FFF7F6 + F6FFF7F6F6FFF7F6F6FFF7F6F6FFFFFFFFFFA7A7A5FFF1F1F1FFEDEDECFFEBEB + EAFFEBEBEAFFFFFFFFFFADADABFFAEAEABFFFFFFFFFFFCFCFCFFFBFBFCFFFBFB + FCFFFBFBFCFFFBFBFCFFFCFCFCFFFFFFFFFFA7A7A5FFF5F5F4FFF1F1F0FFEFEF + EEFFEFEFEEFFFFFFFFFFADADABFFB0B0ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A5FFF9F8F8FFF5F4F4FFF4F3 + F3FFF4F3F3FFFFFFFFFFADADABFFB0B0AEF1AFAFADFFAEAEABFFADADABFFADAD + ABFFADADABFFACACAAFFA9A9A7FFA8A8A6FFB8B7B6FFFBFAFAFFF8F6F6FFF7F6 + F6FFF7F6F6FFFFFFFFFFADADABFF0000002F6868675F6464625C6464625C6161 + 60594E4E4D4EB0B0ADFFF6F6F5FFECECEBFFFBFAFAFFFDFDFDFFFCFCFCFFFBFB + FCFFFCFCFCFFFFFFFFFFAEAEABFF000000000000000B0000000A0000000A0000 + 000A00000007B0B0AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFB0B0ADFF000000000000000000000000000000000000 + 000000000000B1B1AFF2B0B0AEFFAEAEACFFADADABFFADADABFFADADABFFADAD + ABFFAEAEABFFAFAFADFFB1B1AFF2000000000000000000000000000000000000 + 0000000000000000003000000033000000330000003300000033000000330000 + 00330000003300000033000000304A7CA500487CA600427BA9008D847D00807F + 7EFF7E7E7EFF807F7EFF8D847D00427BA900487CA6004A7CA500487BA5003E76 + A300C0BBB500B7B6B300B5B5B300477AA3B04378A2FF3D77A4FF888079FFB9B6 + B6FFB7B5B5FFB9B6B6FF888079FF3D77A4FF4378A2FF4779A3B04479A4003973 + A300BEBAB400B7B5B300B5B5B30042759FFFAFD2F2FFA9D0F3FF978E87FFCECA + C8FFCBC8C6FFCDCAC8FF968D87FFA8D0F4FFADD1F2FF3D739EFF3972A100C3BC + B500B9B7B400B5B5B300B5B5B3003E729DFFD4E7F7FF569BD3FFADA096FFAA9F + 98FFA79E98FFA49E99FFA59D97FF4E98D5FFCCE4F8FF2F6A9AFFC0BAB300B8B7 + B300B5B4B200B4B4B200B5B5B3003D709AFFC6DEF0FF5797CCFF5A9ACFFF589A + D1FF5398D2FF92AABEFFB5B2ADFFB2AFAAFFB2AEA9FFB3B0ABFFB1AFACFFAFAE + ACFFAEAEACFFB0B0ADFFB3B3B1B03E6F9AFFB9D5EAFF5794C7FF5B97C8FF5B98 + C9FF5395CAFFBAB3ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFAFAFADFF3E6E99FFACCAE4FF5691C1FF5A93C3FF5993 + C3FF508FC3FFB8B2AAFFFFFFFFFFE3E2E0FFE6E5E4FFE7E5E4FFE6E5E4FFE4E3 + E2FFE2E1E0FFFFFFFFFFAEAEACFF3E6D97FF9FC1DDFF538EBDFF5791BFFF5691 + BFFF4D8CBFFFB7B1AAFFFFFFFFFFE9E9E8FF858585FFB2B1B1FFB0AFAFFFAEAD + ADFFE8E8E6FFFFFFFFFFAEAEABFF3E6C97FF91B6D5FF528BBAFF558CBBFF548C + BBFF4B88BBFFB8B2ABFFFFFFFFFFEEEDEDFFF3F2F2FFF3F2F2FFF1F0F0FFF0EF + EFFFEDEBEBFFFFFFFFFFADADABFF3F6B97FF82ABCCFF5088B5FF528AB6FF5189 + B6FF4784B5FFB8B2ABFFFFFFFFFFF3F2F2FF848484FFB2B2B3FFF5F4F4FFAEAE + AEFFF1F0F0FFFFFFFFFFADADABFF3F6B95FF74A1C3FF4F86B1FF5187B2FF4F86 + B2FF4581B0FFB8B2ABFFFFFFFFFFF6F6F5FFFBFBFAFFFBFBFAFFF9F9F8FFF7F7 + F6FFF4F4F3FFFFFFFFFFADADABFF3F6A95FF6594BBFF4C83AEFF4E83AEFF4C82 + AEFF427DACFFB8B3ACFFFFFFFFFFFBFBFAFF818181FFB5B5B6FFB4B4B4FFB1B1 + B1FFF9F9F8FFFFFFFFFFADADABFF3F6A94FF568AB0FF4C82ABFF4D82ABFF4B81 + ABFF417BA8FFB9B4ADFFFFFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE + FEFFFCFCFCFFFFFFFFFFAEAEABFF3B6088C0406893FF3F6893FF406893FF3E67 + 93FF335F8FFFBBB7B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFB0B0ADFF000000230000003300000033000000330000 + 003300000033BBB7B0ECB1B0AEFFAEAEABFFADADABFFADADABFFADADABFFADAD + ABFFAEAEABFFAFAFADFFB1B1AFF2000000000000000000000000000000000000 + 0000000000000000002E00000033000000330000003300000033000000330000 + 0033000000330000003300000030FFFFFF00FFFFFF0000000000000000000000 + 000000000000BAB8B6FC00000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000000D3D1D1FFAFADABEA000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00B9B7B5D3000000000000 + 000000000000D9D7D6FFC2C2C0FF000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00D4D4D3FFDAD9D8EB0000 + 000000000000D4D2D1FFBDBBBAFF000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF009694949DEBEAEBFFD7D5 + D4E300000000CDCBCAFFC8C7C5FF000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000001BAAA8A5EDEBEB + EBFFD2D1D1D3C4C3C3FFC7C6C6FF000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000002F9C9B + 9BB9ECEDEFFFBDB4A8FFCACCD0FF000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0022989BA1B6D37C1DFFB98B5EFF000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000021AB8968FF9E958EFFE09B4DFF0000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000000B3906DFF7171717DBE792DB5CC8538FFC7833BE6C2803BD7BE7E + 3CFF00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000D389 + 3726D08736FFC98235FF0000001300000021B67736BDBF7E3AEB0000002B9361 + 308BB6793EE3FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000CF86 + 39E08D5C2871C07F3CFF000000000000000000000023B97B3AE5BA7B3DAF0000 + 0016B0753FF6FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000C984 + 3AFF00000010B97B3DFF0000000000000000000000000000002DA9713AB0B077 + 3FFF9F6C3BBEFFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000C180 + 3CFF00000000B2773FFF00000000000000000000000000000000000000210000 + 003300000023FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000B97B + 3DFFB0773FFF8458318400000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0033000000330000001400000000000000000000000000000000000000000000 + 000000000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 000000000000B3B3B1B0B0B0ADFFAEAEACFFADADABFFAEAEABFFAFAFADFFB0B0 + AEAC000000000000000000000000000000000000000000000000000000000000 + 000000000000B0AFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9 + E9FFAEAEACA70000000000000000000000000000000000000000000000000000 + 000000000000AFAEABFFFFFFFFFFE0E0DFFFDFDFDEFFFFFFFFFFA5A5A3FFFFFF + FFFFE8E8E8FFAFAFACA700000000000000000000000000000000000000000000 + 000000000000B2AFAAFFFFFFFFFFE5E4E3FFE5E4E2FFFFFFFFFFA7A7A4FFEBEB + EAFFFFFFFFFFE9E9E9FFB0B0AEAC000000000000000000000000000000000000 + 000000000000B7B0A9FFFFFFFFFFE8E7E8FFE8E7E7FFFFFFFFFFCBCBCAFFA7A7 + A4FFA5A5A3FFFFFFFFFFAFAFADFF4398D2B03D94D0FF3B92CFFF3D94D0FF4097 + D2E400000000BAB0A9FFFFFFFFFFEFEDEDFFEFEDEDFFF6F6F5FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFAEAEABFF3D94D0FFDCFDFFFFD8F9FFFFDBFBFFFF388F + D1FF3993D9FFC2B2AEFFFFFFFFFFFFF6FAFFFFF6F9FFF8F3F4FFF1F0EFFFEFEF + EEFFEFEFEEFFFFFFFFFFADADABFF3B92CFFFD5F7FFFF5FD1F9FFB6EBFEFFE2FC + FFFF44B188FF007E35FFFFFFFFFF007933FF007932FFFFFDFFFFFCF6F8FFF5F3 + F3FFF4F3F3FFFFFFFFFFADADABFF3B92CFFFC6F5FFFF6BD8FAFF6FDAFCFF77DF + FFFF008037FF93EDE0FF007B36FF88E5DCFF86E6DDFF007932FFFFFDFFFFFAF7 + F8FFF7F6F6FFFFFFFFFFADADABFF3D92CFFFBBF3FFFF72DAFBFF6CCCF3FF74D0 + FFFF008139FF75EAD0FF4BEAD0FF00C59AFF00C89CFF007A34FFFFFFFFFFFEFC + FDFFFCFCFCFFFFFFFFFFAEAEABFF3E93D0FFB1F6FFFF4DA7DCFF388CCEFF4190 + D9FF00823BFF47E8BCFF00D699FF00D79CFF007C3DFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFB0B0ADFF4095D0FF86D7F4FF4AA7DBFFE2FFFFFFE9FF + FFFF007F39FF16EBABFF00E39DFF00E49FFF00E89FFF008039FFC2B1B0FFB3AF + ABFFAFAEABFFB0AFADFFA4A4A2C04397D1FF62B8E3FF7ECCEDFF81E6FFFF87E8 + FFFF26A786FF007F38FF007F3BFF007F3CFF00813BFF25A082FF368CD1D20000 + 00330000003300000033000000234498D2FF449AD3FFAAF4FFFF92F1FFFF94F1 + FFFF9AF4FFFF9EF7FFFF9FF7FFFF9FF7FFFFB1FDFFFF6DBDEDFF3175A5730000 + 00000000000000000000000000004498D1F24397D1FF4094D0FF3F92CFFF3F92 + CFFF4093D0FF4193D1FF4193D1FF4194D1FF4194D1FF4295CFEF000000120000 + 0000000000000000000000000000000000000000003300000033000000330000 + 003300000033000000330000003300000033000000330000002F000000000000 + 0000000000000000000000000000FFFFFF00A5A5A53889898AFF000000008989 + 8AFF0000000089898AFF0000000089898AFF0000000089898AFF000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF0089898AFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0AB89898AFF0000 + 000000000000FFFFFF00FFFFFF00FFFFFF0000000033FFFFFFFFE0DFDDFFE0DF + DEFFE0DFDEFFE0DFDEFFDFDEDCFFFFFFFFFF919191FFFFFFFFFFDDDDDDA78989 + 8AFF00000000FFFFFF00FFFFFF00FFFFFF0089898AFFFFFFFFFFE3E3E2FFE4E4 + E3FFE4E5E4FFE4E4E3FFE3E3E2FFFFFFFFFFFFFFFFFFE6E6E4FFFFFFFFFFE0E0 + E0AB89898AFFFFFFFF00FFFFFF00FFFFFF0000000033FFFFFFFFE7E6E5FFE8E7 + E6FFE8E7E6FFE8E7E6FFE6E5E4FFFFFFFFFF919191FFFFFFFFFF929292FFFFFF + FFFF00000033FFFFFF00FFFFFF00FFFFFF0089898AFFFFFFFFFFE9E9E8FFEAEA + E9FFEAEAE9FFEAEAE9FFE9E9E8FFF4F4F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF89898AFFFFFFFF00FFFFFF00FFFFFF0000000033FFFFFFFFEDEBEAFFEDEC + EBFFEDECEBFFEDECEBFFEDECEBFFECEBEAFFECEBE9FFEBEAE9FFECEAE9FFFFFF + FFFF00000033FFFFFF00FFFFFF00FFFFFF0089898AFFFFFFFFFFEFEFEEFFEFEF + EEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEFEFEEFFEEEEEDFFEEEFEEFFFFFF + FFFF89898AFFFFFFFF00FFFFFF00FFFFFF0000000033FFFFFFFFF2F1F0FFF2F1 + F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFF2F1F0FFFFFF + FFFF00000033FFFFFF00FFFFFF00FFFFFF0089898AFFFFFFFFFFF4F4F3FFF4F4 + F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFF4F4F3FFFFFF + FFFF89898AFFFFFFFF00FFFFFF00FFFFFF0000000033FFFFFFFFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFFFFF + FFFF00000033FFFFFF00FFFFFF00FFFFFF0089898AFFFFFFFFFFFAF9F9FFF9F8 + F8FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8F8FFF9F8F8FFFAF9F9FFFFFF + FFFF89898AFFFFFFFF00FFFFFF00FFFFFF0000000033FFFFFFFFFDFDFDFFFCFC + FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFDFDFDFFFFFF + FFFF00000033FFFFFF00FFFFFF00FFFFFF0089898AFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF89898AFFFFFFFF00FFFFFF00FFFFFF000000003389898AFF000000338989 + 8AFF0000003389898AFF0000003389898AFF0000003389898AFF000000338989 + 8AFF00000033FFFFFF00FFFFFF00FFFFFF000000000000000033000000000000 + 0033000000000000003300000000000000330000000000000033000000000000 + 003300000000FFFFFF00FFFFFF00FFFFFF00459AD3EF4498D2FF4197D1FF3F95 + D1FF3D94D0FF3B93D0FF3A92D0FF3A92D0FF3A93D0FF3C94D1FF3E97D3EE0000 + 00000000000000000000FFFFFF00FFFFFF004297D2FF3B93D0FF62ADDCFF93CD + EDFFBBE7FAFFD8FCFFFFD6FCFFFFD3FBFFFFD1FBFFFFD3FCFFFF2E91D5FF0000 + 00000000000000000000FFFFFF00FFFFFF003C93D0FFE9FFFFFFA8DAF3FF7BBD + E4FF4398D2FF408EC7FF6E9CBCFF90A5B2FFBAAFA6FFB5ADA6FFB5AFA9FFB5B1 + ADA40000000000000000FFFFFF00FFFFFF003991CFFFE9FFFFFFAFF0FFFFCEF7 + FFFFDAFAFFFFC4ECFCFF8CCAECFF5FAEE0FF82BDE6FFFFFFFFFFFFFFFFFFE9E9 + E9FFAFAFADA700000000FFFFFF00FFFFFF003A91CEFFD2FCFFFF7AE2FCFF77DD + FCFF7FDFFBFF9BE6FDFFB3EDFFFFD4F9FFFF2688CBFFFFFFFFFFA7A5A2FFFFFF + FFFFE9E9E9FFB0B0AEACFFFFFF00FFFFFF003B91CEFFC9F9FFFF7EE2FCFF7CDE + FCFF78DCFBFF72D9FAFF6AD6FAFFD2F6FFFF2888CBFFFFFFFFFFCDCBC9FFA4A4 + A2FFFFFFFFFFAFAFADFFFFFFFF00FFFFFF003C91CEFFC0F8FFFF7FE2FCFF7DDF + FCFF7ADDFBFF75DAFAFF6DD7FAFFC6F3FFFF2989CBFFFFF9F4FFFFFFFFFFFFFF + FFFFFFFFFFFFAEAEABFFFFFFFF00FFFFFF003C92CEFFB6F6FFFF80E3FCFF7DDF + FCFF7ADDFBFF76DAFAFF6ED7FAFFB9EFFFFF2A89CCFFFCF2EDFFEEECEBFFEBEA + EAFFFFFFFFFFADADABFFFFFFFF00FFFFFF003D92CEFFADF3FFFF81E3FCFF7EDF + FCFF7ADDFBFF76DAFAFF6FD8FAFFABEBFFFF2B89CCFFFFF8F1FFF2F1EFFFEFF0 + EEFFFFFFFFFFADADABFFFFFFFF00FFFFFF003E92CEFFA3F1FFFF82E3FCFF7EDF + FCFF7ADDFBFF76DAFAFF71D9FBFF9DE8FFFF2A89CBFFFFFBF6FFF6F4F3FFF4F3 + F3FFFFFFFFFFADADABFFFFFFFF00FFFFFF003E92CEFF9AF0FFFF83E4FDFF7EDF + FCFF7ADDFBFF76DAFAFF89E2FEFF48A8DDFF70AED9FFFFFCF8FFF9F6F6FFF7F6 + F6FFFFFFFFFFADADABFFFFFFFF00FFFFFF004094CFFF92F1FFFF85E7FFFF80E1 + FDFF7ADEFBFF77DBFBFF83E1FFFF308ACBFFFFFFFBFFFFFFFDFFFCFCFCFFFCFC + FCFFFFFFFFFFAEAEABFFFFFFFF00FFFFFF004295CEEF58B0DFFF6DC9EFFF7FE2 + FDFF7EE3FEFF7ADEFCFF7EE1FFFF308CCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFB0B0ADFFFFFFFF00FFFFFF000000002F326F997C3D8AC1C74092 + CEFF54ADDEFF66C4EDFF78E0FEFF3591D1FFBBB2AAFFB0AEABFFADADABFFAEAE + ABFFAFAFADFFA4A4A2C0FFFFFF00FFFFFF000000000000000012000000250000 + 0033326E987A3E8BC1C84195D1FF3892D1ED0000003300000033000000330000 + 00330000003300000023FFFFFF00FFFFFF000000000000000000000000000000 + 00000000001200000025000000330000002E0000000000000000000000000000 + 00000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000000000354CCD973249CCFF3148CBFF3249CCFF354CCD9700000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00354CCD97455DDBFF90A6FCFF95ACFFFF90A6FCFF445DDBFF354CCD97FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00334ACCFF90A5FDFF5A79FAFF5573F9FF5A79FAFF90A5FDFF334ACCFFFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00334ACBFF6D88FFFF4D6DFBFF4D6DFAFF4D6DFBFF6D88FFFF334ACBFFFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00354BCBFF5F7CFFFF607CFFFF5F7BFDFF607CFFFF5F7CFFFF354BCBFFFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002F44B4AC425AD9FF6F88FFFF738CFFFF6F88FFFF425AD9FF2F44B4ACFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000001E2F44B4AC344BCBFF334ACAFF344BCBFF2F44B4AC0000001EFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00000000000000001E0000003300000033000000330000001E00000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D9D9 + D934D8D8D880D7D7D7C0D6D6D6EDD5D5D5EDD3D3D3C0D2D2D280D0D0D034FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D9D9D967D8D8 + D8D5EBEBEBFFF5F5F5FFFCFCFCFFFCFCFCFFF4F4F4FFE8E8E8FFCECECED5CCCC + CC67FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D9D9D967D8D8D8F1F8F8 + F8FFFFFFFFFFF8F8F8FFF2F2F2FFF1F1F1FFF7F7F7FFFFFFFFFFF5F5F5FFC9C9 + C9F1C7C7C767FFFFFF00FFFFFF00FFFFFF00D9D9D934D8D8D8D5F8F8F8FFFFFF + FFFFEFEFEFFFEEEEEEFFC3C3C3FFEDEDEDFFECECECFFEBEBEBFFFFFFFFFFF5F5 + F5FFC0C0C0D5BEBEBE34FFFFFF00FFFFFF00D7D7D780EBEBEBFFFFFFFFFFEFEF + EFFFEEEEEEFFEDEDEDFF777676FFC2C2C2FFEBEBEBFFE9E9E9FFE9E9E9FFFFFF + FFFFDDDDDDFFB3B3B380FFFFFF00FFFFFF00D6D6D6C0F5F5F5FFF7F7F7FFEDED + EDFFEDEDEDFFECECECFF767575FF767575FFC0C0C0FFE9E9E9FFE8E8E8FFF4F4 + F4FFEEEEEEFFABABABC0FFFFFF00FFFFFF00D4D4D4EDFCFCFCFFF0F0F0FFEDED + EDFFEBEBEBFFEAEAEAFF757575FF757575FF7A7979FFCDCDCDFFE6E6E6FFE9E9 + E9FFFAFAFAFFA7A7A7EDFFFFFF00FFFFFF00D3D3D3EDFCFCFCFFEFEFEFFFEBEB + EBFFEAEAEAFFE9E9E9FF757575FF797878FF747373FFEFEFEFFFE5E5E5FFE8E8 + E8FFF4F4F4FFA2A2A2EDFFFFFF00FFFFFF00D1D1D1C0F2F2F2FFF5F5F5FFE9E9 + E9FFE9E9E9FFE8E8E8FF787878FF747373FFEFEFEFFFE5E5E5FFE4E4E4FFF2F2 + F2FFE1E1E1FF9D9D9DC0FFFFFF00FFFFFF00CECECE80E4E4E4FFFEFEFEFFE8E8 + E8FFE7E7E7FFE6E6E6FF737373FFEFEFEFFFE4E4E4FFE3E3E3FFE2E2E2FFFBFB + FBFFC6C6C6FF99999980FFFFFF00FFFFFF00C7C7C734C4C4C4D5F0F0F0FFFFFF + FFFFE5E5E5FFE5E5E5FFEFEFEFFFE3E3E3FFE2E2E2FFE1E1E1FFFEFEFEFFE2E2 + E2FF999999D599999934FFFFFF00FFFFFF00FFFFFF00BCBCBC67B9B9B9F1ECEC + ECFFFEFEFEFFF3F3F3FFE8E8E8FFE7E7E7FFF1F1F1FFFBFBFBFFE1E1E1FF9999 + 99F193939367FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00AFAFAF67AAAA + AAD5CECECEFFE6E6E6FFF5F5F5FFF2F2F2FFDDDDDDFFC0C0C0FF939393D59090 + 9067FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A8A8 + A8349C9C9C80979797C0969696ED929292ED909090C08E8E8E8092929234FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF008C8987009794920096939100979492008C89 + 87008D8A88008D8A88008D8A880097949200969391F4969391FF908D8B009693 + 91FF969391F4979492008D8A88008C8987009794920096939100979492008C89 + 87008D8A88008D8A88008D8A88008B888600848180C28D8989FF8C8987E68D89 + 89FF848180C18B8886008D8A88008C8987009794920096939100979492008C89 + 87008D8A88008D8A88008D8A88F48A8785B3A5A2A1FBDFDEDDFFE4E4E3FFDFDE + DDFFA5A2A1F98A8785DE8D8A88F58C898700979492009693910096939100928F + 8D009895930088858300898684FF858280FFD7D5D4FFB7B6B4FF94928FFFB7B6 + B4FFD7D5D4FF858280FF868381DF8C898700979492009693910096939100918E + 8C009794920099969400000000337D7A7AE9D4D3D2FF8F8D8DFF000000338F8D + 8DFFD4D3D2FF777474CA0000002B8D8A880097949200969391F4969391FF908D + 8B00969391FF989593E17C7A7AFF7A7A7BFFC4C7CAFFA8ACB1FF888C92FFA8AC + B1FFC4C7CAFF7A7A7CFF7E7D7DD68D8A88008B888600848180C28D8989FF8C89 + 87E68D8A89FF838181B2707071D57B716CF3A76831FFB05100FFAF5100FFB051 + 00FFA76832FF7B7370F9747A7FEE8D8A88F48A8785B3A5A2A1FBDFDEDDFFE4E4 + E3FFDFDEDDFFA4A4A5F3877C75CEB0580BFFD19963FFEBCDABFFE9C9A7FFEBCD + ABFFD19A64FFB15608FC0000002F8A8785FF858280FFD7D5D4FFB7B6B4FF9492 + 8FFFB7B6B5FFD4D7DAFF9F6029FFD49C68FFE6C29BFFCF924EFFFFFFFFFFCF92 + 4EFFE6C39BFFD39F6EFFB05B13BB000000337D7A79EBD4D2D1FF908C8BFF0000 + 00338F8D8DFFCFD4DAFFAE5000FFEACCA6FFCC8B40FFC98335FFC8802FFFC983 + 35FFCC8B40FFEACEAAFFAE5912FF7F7C7BFF7C7978FFC6C5C2FFAAA8A6FF8A86 + 86FFA9A8A7FFC1C7CBFFAF5203FFDEAC73FFD19149FFCF8C41FFFFFFFFFFCF8C + 41FFD19149FFDEAD75FFAE5A13FF7B7876F5767371E3908D8AF9BFBCBAFFC4C1 + BEFFBEBCBBFF83888DF3B25608FFDBA25EFFD69C58FFD3944CFFFFFFFFFFD394 + 4CFFD69C58FFDBA360FFAF5B15FF000000300000002C6F6C6CE473706FFF6B68 + 67CB727071FF6A6E75DAA3510CB9CC8844FFDEA968FFDAA05BFFFFFFFFFFDAA0 + 5BFFDEA968FFCB8846FFA55716CA7D7A7800726F6E00726F6EF66E6B6AE00000 + 00266D6C6CDF6C7177EF00000021AF5B13FFCD8E4CFFE5B676FFE3B271FFE5B6 + 76FFCD8E4CFFAE5B15FF2F1907317E7B790073706F00000000310000002B7976 + 75000000002B0000002FB85F12002313053DA45615CAAE5A13FFAD5912FFAE5A + 13FFA45615CA2514053D00000003000000000000000000000000000000000000 + 0000000000000000000000000000000000020000002600000033000000330000 + 00330000002600000003000000009E9E9E8F9B9B9BFF9A9A9AFF9A9B9BFF9B9B + 9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9A9B9BFF9A9A + 9AFF9B9B9BFF9E9E9E8FFFFFFF009B9B9BFFF9F7F6FFE0DEDDFFE0DFDEFFE1E0 + DFFFE1E0DFFFE1E0DFFFE1E0DFFFE1E0DFFFE1E0DFFFE1E0DFFFE0DFDEFFE0DE + DDFFF9F7F6FF9B9B9BFFFFFFFF00999A9AFFF1F2F0FFB9B7B5FFBBB9B7FFBBB9 + B7FFBBB9B7FFBBB9B7FFBBB9B7FFBBB9B7FFBCB9B7FFBCBAB7FFBBB9B7FFB9B7 + B5FFF1F2F0FF999A9AFFFFFFFF00999A9AFFF0EFEEFFBFBDBBFFC0BEBCFFC1BF + BCFFC1BFBCFFC1BFBCFFC1BFBDFFC1BFBDFFC1C0BDFFC1C0BDFFC1BFBDFFBFBD + BBFFF0EFEEFF999A9AFFFFFFFF00999A9AFFEFECEDFFC7C3C2FFF1F1F0FFF3F2 + F1FFF3F2F1FFF3F2F1FFF3F2F1FFE9E7E6FFC9C6C5FFC7C4C3FFC6C3C2FFC5C2 + C1FFEEECECFF999A9AFFFFFFFF00999A9AFFEDECEBFFCECBCAFF363433FF3A38 + 37FF3B3938FF3B3938FF3A3837FF363433FFD0CDCCFFCCC8C7FFCBC8C7FFC9C6 + C5FFECECEAFF999A9AFFFFFFFF00999A9AFFECEAEAFFD1CFCDFFD6D4D2FFDAD8 + D6FFFCFBFAFFFDFCFBFFFDFCFBFFFBFAF9FFF6F5F4FFF4F3F2FFEAE9E8FFD0CE + CBFFECEAEAFF999A9AFFFFFFFF00999A9AFFEAE9E8FFD3D1D0FFD5D3D2FFDAD7 + D6FF474443FF4B4846FF4B4847FF4B4847FF4A4746FF494645FF454241FFD8D5 + D4FFEBEAE9FF999A9AFFFFFFFF00999999FFEBEAEAFFD7D5D4FFD7D5D4FFDCDA + D9FFF9F8F9FFFDFCFCFFFDFDFDFFFDFDFDFFFDFDFDFFF6F4F4FFE0DEDDFFDAD8 + D7FFECEBEBFF999999FFFFFFFF00999999FFECEBEAFFDBDAD9FFDCDBDAFFE0E0 + DFFF54504FFF595554FF595655FF595655FF595554FF545150FFE1E0DFFFDDDC + DBFFECEBEAFF999999FFFFFFFF00999999FFEDECECFFDFDEDDFFDFDEDDFFE4E3 + E2FFFAFBFAFFFEFFFEFFFFFFFFFFFFFFFEFFF8F9F8FFE8E7E6FFE2E1E0FFE0DF + DEFFEDECECFF999999FFFFFFFF00989999FFEFEEEEFFE5E3E3FFE5E3E3FFE9E7 + E7FF615D5CFF656261FF666261FF656261FF615E5CFFEAE8E8FFE5E3E3FFE5E3 + E3FFEFEEEEFF989999FFFFFFFF00999999FFF3F1F1FFEAE8E8FFEAE8E8FFECEA + EAFFF0EEEEFFF2F0F0FFF3F0F1FFF2F0F0FFF0EEEEFFECEAEAFFEAE8E8FFEAE8 + E8FFF3F1F1FF999999FFFFFFFF009A9A9AFFFAF9F9FFF5F4F3FFF5F4F2FFF5F4 + F3FFF6F5F3FFF6F5F4FFF6F5F4FFF6F5F4FFF6F5F3FFF5F4F3FFF5F4F2FFF5F4 + F3FFFAF9F9FF9A9A9AFFFFFFFF007B7B7B889A9A9AFF989898FF989898FF9898 + 98FF989898FF989898FF989898FF989898FF989898FF989898FF989898FF9898 + 98FF9A9A9AFF8585859CFFFFFF00000000000000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000001AFFFFFF000000000000000000000000002C3CC25B303F + C4FF4555CEFF4454CDFF4354CDFF4454CDFF4555CEFF303FC4FF2C3CC25B0000 + 00000000000000000000FFFFFF0000000000000000002C3CC2582F3EC3FF95A1 + EFFFAEB9F8FFADB9F7FFADB9F7FFADB9F7FFAEB9F8FF95A1EFFF2F3EC3FF2C3C + C2580000000000000000FFFFFF00000000002C3CC2582F3FC2FF97A4EEFF7B8D + F1FF2340E5FF2542E5FF2642E5FF2542E5FF2340E5FF7B8DF1FF97A4EEFF2F3F + C2FF2C3CC25800000000FFFFFF002D3DC25B2E3EC3FF99A6F0FF7F91F3FF2B47 + E7FF304CE8FF324DE8FF324DE8FF324DE8FF304CE8FF2B47E7FF7F91F3FF99A6 + F0FF2E3EC3FF2D3DC25BFFFFFF002838C1FF9FABF1FF8393F4FF304BE9FF3651 + EAFF3853EAFF3953EAFF3953EAFF3953EAFF3853EAFF3651EAFF304BE9FF8393 + F4FF9FABF1FF2838C1FFFFFFFF002637BFFFCED6FFFF334EEDFF3B54EDFF3E57 + EDFF3E57EDFF3E57EDFF3E57EDFF3E57EDFF3E57EDFF3E57EDFF3B54EDFF334E + EDFFC6CFFEFF2737BFFFFFFFFF002737BFFF9AA8FBFF3B55EFFF405AEFFF425B + EFFF425BEFFF425BEFFF425BEFFF425BEFFF425BEFFF425BEFFF405AEFFF3C56 + EFFF8E9DFAFF2838BFFFFFFFFF002939BFFF8696FBFF435AF1FF465DF1FF475E + F1FF475EF1FF475EF1FF475EF1FF475EF1FF475EF1FF475EF1FF465DF1FF435B + F1FF7D90F9FF2A39BFFFFFFFFF002A3ABFFF7386FAFF4A60F4FF4C62F3FF4C62 + F3FF4C62F3FF4C62F3FF4C62F3FF4C62F3FF4C62F3FF4C62F3FF4C62F3FF4A60 + F4FF6E81FAFF2B3ABFFFFFFFFF002B3BBFFF6276FCFF5066F6FF5066F5FF5066 + F5FF5066F5FF5066F5FF5066F5FF5066F5FF5066F5FF5066F5FF5066F5FF5066 + F6FF5F75FCFF2C3BBFFFFFFFFF002D3DC0FF5367F2FF576CFAFF556BF8FF556A + F7FF556AF7FF556AF7FF556AF7FF556AF7FF556AF7FF556AF7FF566BF8FF576D + FAFF5166F2FF2D3DC0FFFFFFFF00222D8E7C303FC2FF5669F3FF5D71FCFF5B6F + FAFF5A6EF9FF5A6EF9FF5A6EF9FF5A6EF9FF5A6EF9FF5B6FFAFF5D71FCFF5669 + F3FF303FC2FF222D8E7CFFFFFF0000000012212D8D792F3EC2FF596CF6FF6175 + FFFF5F74FEFF5F73FDFF5F73FDFF5F73FDFF5F74FEFF6175FFFF596CF6FF2F3E + C2FF212D8D7900000012FFFFFF000000000000000012212D8D792F3EC3FF5F71 + F9FF697DFFFF697CFFFF697CFFFF697CFFFF697DFFFF5F71F9FF2F3EC3FF212D + 8D790000001200000000FFFFFF00000000000000000000000012222D8E7C2C3C + C0FF2B3BBEFF2B3ABEFF2B3ABEFF2B3ABEFF2B3BBEFF2C3CC0FF222D8E7C0000 + 00120000000000000000FFFFFF00000000000000000000000000000000120000 + 0033000000330000003300000033000000330000003300000033000000120000 + 00000000000000000000FFFFFF00AF9B8600AF9B8600AD9984B0AB9681FFA995 + 80FFA99580FFA99580FFA99580FFA99480FFA99480FFA9947FFFA9947FFFAB96 + 81FFAD9984B0AF9B8600AF9B8600AE9A8400AE998300AA957FFFF3F7EAFFF0F6 + ECFFF0F7EEFFF0F7EEFFEFF6EDFFEFF5ECFFEFF5EBFFEFF4EAFFF0F4E8FFF2F2 + E4FFAA957FFFAE998300AE9A8400AC988200AB978100A7927CFFEDEFE4FFCD70 + 15FFD27F27FFD98B34FFDC923EFFDE9848FFE09C52FFDE9F5AFFDFA061FFE8E7 + D9FFA6927CFFAB978100AC988200AA968000A9957F00A5907BFFE6E8DBFFD27E + 23FFDC9039FFE19C45FFE5A34EFFE6A857FFE6AC61FFE5AD69FFE4A96AFFE3E0 + D0FFA4907AFFA9957F00AA968000A8947E00A7937D00A38F79FFE0DED0FFDA89 + 2AFFE29B3FFFE7A74BFFEDB057FFEEB461FFEDB76BFFEBB874FFE9B271FFDDD8 + C8FFA38F79FFA7937D00A8947E00A6927C00A5917B00A18D78FFDAD4C4FFDF92 + 30FFE8A345FFEEAF4DFFF0AD42FFF0AB37FFECA12CFFE69729FFDF8B20FFD8D1 + C0FFA18D78FFA5917B00A6927C00A4907A00A38F79009F8B77FFD4CBB9FFE498 + 34FFEAA037FFEFA52DFFF7AF2DFFF9B02EFFF2A82EFFEB9E2DFFE49023FFD3C9 + B7FF9F8B77FFA38F7900A4907A00A28E7800A18D77009D8975FFCEC0AAFFE591 + 24FFEB9820FFF3A421FFFDB023FFFFB323FFF6A822FFED9C21FFE58E1BFFCFBF + A9FF9D8A75FFA18D7700A28E7800A08A73009F8A74009C8872FFCCB699FFF3F9 + F1FFF0F7F1FFEFF6F1FFEEF5F1FFEEF5F1FFEEF5F1FFF0F6F1FFF3F9F1FFCCB6 + 99FF9C8872FF9F8A7400A08A7300A19B8E00A19B8F008A7965B19A8874FF9785 + 71FF968470FF968370FF968370FF968370FF968370FF968470FF978571FF9A88 + 74FF8A7965B1A19B8F00A19B8E00A1998C009F978A00989185DE9B9387FF9A93 + 86FF9A9386FF9A9285FF9A9286FF9A9285FF9A9286FF9A9285FF9A9386FF9B93 + 86FF989184DE9F978A00A1998C009F9789009A9183E3EEECE9FFCFC9BEFFF3F1 + EEFFCEC8BEFFF3F1EEFFCEC8BEFFF3F1EEFFCEC8BEFFF3F1EEFFCEC8BDFFF3F1 + EEFFEDECE8FF999183E29F9789009C9486AAF0ECEAFFCDC8BDFFF0EEEAFFCBC6 + BBFFF0EEEAFFCBC6BBFFF0EEEAFFCBC6BBFFF0EEEAFFCBC6BBFFF0EEEAFFCCC6 + BCFFCEC9BEFFF0ECEAFF9C9486E99C9487FFE8E5DFFFE5E1DBFFE3E0DAFFE3E0 + DAFFE3E0DAFFE3E0DAFFE3E0DAFFE3E0DAFFE3E0DAFFE3E0DAFFE3E0DAFFE4E1 + DAFFE5E1DBFFE8E5DFFF9C9487FF9D9588F29C9487FF9B9385FF9B9285FF9B92 + 85FF9B9285FF9B9285FF9B9285FF9B9285FF9B9285FF9B9285FF9B9285FF9B93 + 85FF9B9385FF9C9487FF9D9588F2000000000000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003300000000A5A5A5EFA2A2A2FFA0A0A0FFA1A1A1FFA1A1 + A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1 + A1FFA0A0A0FFA2A2A2FFA5A5A5EFA2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFA2A2A2FFA0A0A0FFFFFFFFFFE6E5E4FF42403FFF5351 + 4FFF5D5B5AFF696664FF73706EFF767472FF6B6968FF615F5EFF575552FF4643 + 42FFE7E6E4FFFFFFFFFFA0A0A0FF9F9F9FFFFFFFFFFFE7E7E6FFECEEEFFFEFF3 + F5FFEFF1F2FFEEEFEFFFF0F1F0FFF6F6F5FFF8F9F8FFF9FAF9FFF9FAF9FFF5F5 + F4FFEAEAE9FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFE8E8E8FFEBEEF2FFD18F + 47FFEBEAECFFECEEF1FFF3F2F3FF514F4DFF6C6A69FF817E7CFF716F6EFF5553 + 51FFF0EFEEFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFEAECEEFFECF5FEFFD487 + 2FFFD79549FFEAE0D4FFF4F7F9FF504E4CFF6C6969FF807E7CFF706E6DFF5552 + 50FFF2F3F2FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFEDF0F3FFDA8828FFDE94 + 3BFFDE933AFFDF9945FFF6F8FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FDFFF4F2F1FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFEFF2F4FFF2FBFFFFD286 + 2EFFD48D3AFFEEE4DAFFFAFDFEFF504E4CFF6B6968FF807E7BFF706E6DFF5452 + 4FFFF8F8F7FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFF3F3F3FFF5F9FDFFD190 + 47FFF3F5F7FFF7F9FCFFFEFEFDFF4F4D4BFF6B6968FF7F7D7BFF706D6DFF5451 + 4FFFFCFBFAFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFF8F8F8FFFEFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFCFCFBFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFFEFEFEFF413F3EFF5351 + 4FFF5D5B5AFF686663FF72706EFF767471FF6A6766FF5F5D5CFF555250FF4341 + 40FFFEFEFEFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFCFCFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFFFFFFFFF444240FF5D5A + 58FF6F6D6AFF73706EFF605E5BFF484645FFFFFFFFFFFFFFFFFFFEFEFFFFFEFE + FEFFFEFEFEFFFFFFFFFF9F9F9FFFA2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFA2A2A2FF979797C0A2A2A2FFA0A0A0FFA1A1A1FFA1A1 + A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA0A0A0FF9F9F9FFF9F9F9FFF9F9F + 9FFF9F9F9FFFA2A2A2FF979797C0000000000000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003300000000A5A5A5EFA2A2A2FFA0A0A0FFA1A1A1FFA1A1 + A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1 + A1FFA0A0A0FFA2A2A2FFA5A5A5EFA2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFA2A2A2FFA0A0A0FFFFFFFFFFE6E5E4FF42403FFF5351 + 4EFF5D5B5BFF696664FF73706EFF767472FF6B6968FF615F5EFF575552FF4643 + 42FFE7E6E4FFFFFFFFFFA0A0A0FF9F9F9FFFFFFFFFFFE7E7E6FFECEDEDFFEFF1 + F2FFEFF2F5FFEEF0F1FFF0F1F1FFF6F6F5FFF8F9F8FFF9FAF9FFF9FAF9FFF5F5 + F4FFEAEAE9FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFE8E7E7FFEAECEFFFEBEA + ECFFD18F47FFEDF0F4FFF3F3F3FF514F4CFF6C6A69FF817E7CFF716F6EFF5553 + 51FFF0EFEEFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFEAECEEFFE7DFD2FFD795 + 49FFD4872FFFEEF7FFFFF4F7F9FF504E4CFF6C6969FF807E7CFF706E6DFF5552 + 50FFF2F3F2FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFEDF0F3FFDE9743FFDE93 + 3AFFDE943BFFDB8A29FFF6F8FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FDFFF4F2F1FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFEFF2F4FFECE3D8FFD48D + 3AFFD2862EFFF4FCFFFFFAFCFEFF504E4CFF6B6968FF807E7BFF706E6DFF5452 + 4FFFF8F8F7FFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFF3F3F2FFF5F7F9FFF3F5 + F7FFD19047FFF8FBFFFFFEFEFEFF4F4D4AFF6B6968FF7F7D7BFF706D6DFF5451 + 4FFFFCFBFAFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFF8F8F7FFFDFEFEFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFCFCFBFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFFEFEFEFF413E3DFF5250 + 4EFF5D5B5BFF686664FF72706EFF767471FF6A6766FF5F5D5CFF555250FF4341 + 40FFFEFEFEFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFCFCFFFFFFFFFF9F9F9FFF9F9F9FFFFFFFFFFFFFFFFFFF444240FF5D5A + 58FF6F6D6AFF73706EFF605E5BFF484645FFFFFFFFFFFFFFFFFFFEFEFFFFFEFE + FEFFFEFEFEFFFFFFFFFF9F9F9FFFA2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFA2A2A2FF979797C0A2A2A2FFA0A0A0FFA1A1A1FFA1A1 + A1FFA1A1A1FFA1A1A1FFA1A1A1FFA1A1A1FFA0A0A0FF9F9F9FFF9F9F9FFF9F9F + 9FFF9F9F9FFFA2A2A2FF979797C0000000000000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003300000000B3B3B1EFB0B0ADFFAEAEACFFAEAEABFFAEAE + ABFFAEAEABFFADAEABFFAEAEABFFAFAFADFFB0B0AEEAB3B3B100B5B5B200B4B9 + B000C188D400BF8AD200AC7BCC00AFAFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9FFAEAEACA6B3B3B000B3B9 + B000C188D400BF8AD200AC7BCC00AEAEACFFFFFFFFFFE0DFDEFFE1DFDEFFE1E0 + DFFFE1DFDEFFE0DFDEFFFFFFFFFFA5A5A3FFFFFFFFFFE8E8E8FFAFAFACA6B2B8 + AE00C088D400BF8AD200AC7BCC00AEAEABFFFFFFFFFFE3E3E2FFE4E4E3FFE4E5 + E4FFE4E4E3FFE3E3E2FFFFFFFFFFA7A7A4FFEBEBEAFFFFFFFFFFEAEBEAFFB1B6 + AD98C087D5FFBE8AD3FFAC7BCC00ADAEABFFFFFFFFFFE7E6E4FFE8E7E6FFE8E7 + E6FFE8E7E6FFE7E5E4FFFFFFFFFFCCCCCAFFA8A7A5FFA9A8A6FFFFFFFFFF7D7E + 77FFE1B1DFFFCB96C6FFAE7DCEFFADADABFFFFFFFFFFEAEAE9FFECECEBFFEDED + ECFFECECEBFFEAEAE9FFF4F4F3FFFFFFFFFFFFFFFFFFFFFFFFFF807973FFE9E6 + E2FF888B82FFBA7AB6FF9869CAFFADADABFFFFFFFFFFEFEEECFFCACACAFFCBCC + CCFFCACACAFFF0EEEDFFF0EEECFFF7F2EEFFFFF7EEFF1C70C4FFACD9EEFF9188 + 7FFFC1BFB8FF777C6EFF00000033ADADABFFFFFFFFFFF2F2F0FFCACACBFFCDCD + CDFFCBCBCBFFF4F4F2FFFAF7F3FF9F938AFF2674C4FF40C6FFFF20AAFFFF83B0 + D7FF7E7871FF000000339D6ACF00ADADABFFFFFFFFFFF5F3F2FFC9C9C9FFCBCB + CBFFCACAC9FFFDF8F4FFFFFFF5FF2574C4FF44C7FFFF2BABFFFF129BFFFF2966 + 9FFF0000003379796F009A64CF00ADADABFFFFFFFFFFF6F6F5FFFAFAF8FFFCFC + FAFFFFFDF9FFFFFFF8FF1E6EC2FF3EC4FFFF2AA9FFFF1398FFFF2A6195FFC5BB + B1FFBDBBB600BABBB600B8BCB300ADADABFFFFFFFFFFF9F9FAFFC9C9C9FFCDCC + CBFFD5CFCCFF39A9EFFF88E4FFFF7ED3FFFF0C95FFFF245C90FFFFFFFFFFB6B3 + AEFFB6B5B300B6B6B300B5B6B300ADADABFFFFFFFFFFFEFCFDFFCACACAFFCFCE + CDFFD9D4D1FF507B9AFF7CA3B4FF87CFFCFF1E5890FFFFFFFFFFFFFFFFFFAFAF + ACFFB4B4B200B5B5B300B5B5B300AEAEABFFFFFFFFFFFFFFFFFFC8C8C8FFCCCC + CCFFD4D1D0FF40596CFF375879FF367ECEFFFFFFFFFFFFFFFFFFFFFFFFFFAEAE + ABFFB4B4B200B5B5B300B5B5B300B0B0ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0 + ADFFB4B4B200B5B5B300B5B5B300A4A4A2C0AFAFADFFAEAEACFFAEAEACFFAEAE + ACFFAFAFACFFB0AFADFFB0AFADFFAFAFACFFAEAEABFFAEAEABFFAFAFADFFA4A4 + A2C0B5B5B300B5B5B300B5B5B300000000000000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0000000000000000000000000000929292EF8E8F8FFF8D8D8EFF8D8D8EFF8D8E + 8EFF8D8D8EFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8D8DFF8C8C + 8DFF8C8D8DFF8E8E8EFF929292EF8E8F8FFFFFFFFFFFF7F7FAFFF7F9FDFFF7F9 + FEFFF7F7FAFFF5F4F5FFF5F3F3FFF5F3F3FFF5F3F3FFF5F3F3FFF5F2F2FFF4F2 + F2FFF4F2F2FFFFFFFFFF8E8E8EFF8C8D8DFFFFFFFFFFC4A47FFFAE7A41FFAF7B + 41FFC5A581FFE2E2E3FFE2E0E0FFE2E0DFFFE1DFDEFFE0DEDDFFDEDCDBFFDDDB + D9FFDCDAD9FFFFFEFEFF8C8C8CFF8C8D8DFFFFFFFFFF9F6931FFF0DABCFFE2BE + 91FFA06A33FFE8E9ECFF626364FFA2A3A3FFA1A1A1FF9E9F9FFFE2E0DFFFE0DE + DDFFE0DDDCFFFCFDFBFF8C8C8CFF8C8C8DFFFFFFFFFFBC9C7AFFA36E37FFA26D + 36FFBC9C7BFFE9EAEEFFE9E8E9FFE9E7E7FFE8E6E6FFE6E4E4FFE4E2E3FFE3E1 + E1FFE3E1E1FFFCFBFBFF8C8C8CFF8C8C8CFFFEFEFFFFEFEFF2FF858A8EFFF1F4 + FAFFEDF1F7FFECEFF4FFEBEDF2FFEAEAEDFFE8E7E8FFE8E6E6FFE8E5E6FFE7E5 + E5FFE7E5E5FFFCFBFBFF8C8C8CFF8C8C8CFFFDFCFCFFF1F1F0FF868788FFF7FA + FCFFCBAB89FFAE7A40FFAD7A40FFC8A885FFEFF1F2FFEFEFEEFFEFEEEDFFEFEE + ECFFEEEDECFFFDFCFCFF8C8C8CFF8B8C8CFFFEFDFDFFF5F4F3FF878788FF878B + 8FFFA26C34FFF0DABCFFE1BD90FF9E6931FFF5F8FBFF5F6061FFA0A0A0FF9E9F + 9FFF9C9D9DFFFFFEFEFF8C8C8CFF8B8B8BFFFFFEFEFFF8F7F6FF858585FFFFFF + FFFFC2A280FF9F6A34FF9F6A34FFC0A07EFFF5F7F9FFF6F5F4FFF5F4F3FFF5F4 + F2FFF4F3F2FFFFFEFEFF8C8C8CFF8B8B8BFFFFFFFFFFFAFAFAFF838383FFFDFF + FFFFFAFFFFFFFCFFFFFFFCFFFFFFF9FEFFFFF4F7F9FFF4F4F4FFF3F4F4FFF3F3 + F3FFF4F4F4FFFFFEFEFF8B8B8BFF8B8B8BFFFFFFFFFFFEFEFEFF838384FFFFFF + FFFFCFB08CFFAD7941FFAD7941FFCCAD8AFFFBFEFFFFFBFCFCFFFBFBFBFFFAFA + FAFFFAFAFAFFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFFFFFFFFF808182FF8387 + 8AFFA16A32FFF0D9BBFFE0BC8FFF9D672FFFFFFFFFFF5C5D5DFF9E9E9EFF9C9C + 9CFF9A9A9AFFFFFFFFFF8B8B8BFF8B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFC6A584FF9E6932FF9E6932FFC4A482FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF8B8B8BFF8D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF8D8D8DFF868686C08D8D8DFF8A8A8AFF8A8A8AFF8A8A + 8BFF8B8B8CFF8B8C8DFF8B8C8DFF8B8B8CFF8A8A8BFF8A8A8AFF8A8A8AFF8A8A + 8AFF8A8A8AFF8D8D8DFF868686C0000000000000003300000033000000330000 + 0033000000330000003300000033000000330000003300000033000000330000 + 0033000000330000003300000000FFFFFF00FFFFFF0000000000000000000000 + 000000000000A971314AA76D2DFFA66C2BFFA76D2DFFA9713135000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000000A76D2DFFE4CB96FFE7CD99FFE4CB96FFA76D2DFF000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000000A66C2CFFE7C182FFDEB068FFE7C182FFA66C2DFF000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000000A66D2EFFEEBF76FFF0BE74FFEEBB70FFA66D2DFF000000000000 + 000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 000000000000A36B2CEFA26727FFA06525FFA26626FFA26829E9A76D2D8DA970 + 2F0B00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000A66C2BE0C3985CFFE5CA96FFE7CF9CFFE8CF9CFFE5CA96FFD0AB72FFBC8D + 50FFA9702F4AFFFFFF00FFFFFF00FFFFFF00FFFFFF00A97131B1A76D2CFFA469 + 28FFD2AC74FFEBD19CFFD9AD68FFD4A55EFFD4A55EFFD6A963FFE1BE81FFEED5 + A1FFA46B2CD3FFFFFF00FFFFFF00FFFFFF00FFFFFF00A86F2EFFF6E0AEFFF4DC + AAFFE9CC96FFC38D45FFC48C44FFD49F52FFD49E52FFCB9549FFAD7531FFDAA6 + 57FFA76E2EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF009B682DC1A76D2DFFA66B + 2BFFA46A2AF7A36828FFCCA368FFD9A55AFFD9A55AFFEBCB90FFA2692AFFE3B0 + 64FFA87030FFFFFFFF00FFFFFF00FFFFFF00FFFFFF0000000023000000330000 + 0033926027A9BC8D52FFF2D7A2FFDCA85EFFE0AE63FFD7A258FFA46A2CF7A870 + 30FF9C692EBFFFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0000AF793AFFF5DBA9FFE7B86FFFAD7533FFD6A35BFFE5BB7BFF9A6428CB0000 + 003300000023FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000A66D + 2CFDEFD3A1FFE6BB7AFFA96F2FFF81552388BC8541FFF6D193FFC6995FFFA86E + 2E0700000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000A56C + 2BFFFFDFA4FFA86E2EFF96632AB5000000159D662AD4ECBC74FFF6DCAAFFA66C + 2B9400000000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000A66E + 2EFFFFD488FFA66D2DFF000000200000000082562474C6904CFFFFE3A8FFA66D + 2DFF00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000009B68 + 2DC1A86F30FF9B682DC00000000000000000000000129A652BBDA76E2EFF9C68 + 2CC100000000FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000 + 0023000000330000002300000000000000000000000000000023000000330000 + 002400000000FFFFFF00FFFFFF00000000000000000000000000000000000000 + 0000BA8545FFB9843FFFB9843FFFBA8545FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000B98544AFB98443E90000 + 0000B78140FFE9D4B4FFE9D4B4FFB78140FF00000000B98443E9B98544AF0000 + 000000000000000000000000000000000000B98544AFCCA26CFFD4B080FFB983 + 43FFCCA470FFC9984EFFC9984EFFCCA470FFB98343FFD4B080FFCCA26CFFB985 + 44AF00000000000000000000000000000000B78242ECD3AE7CFFE7CBA4FFEAD4 + B2FFE8D0ADFFCF9D56FFCF9D56FFE8D0ADFFEAD4B2FFE7CBA4FFD3AE7CFFB782 + 42EC000000000000000000000000000000000000002FBA8547FFCE9949FFDAB2 + 76FFC9944BFFBE8943FFBE8943FFC9944BFFDAB276FFCE9949FFBA8546FF0000 + 002F000000000000000000000000B98442FFB6803EFFCEA673FFDBAE6EFFCB95 + 4BFFB88344FF6E4F2A616E4F2A61B88344FFCD974AFFDCAE6DFFD0A772FFB981 + 3CFFBE843FFF0000000000000000C5995FFFF1DCBBFFECD2ACFFD6A152FFC18C + 49FF70502A620000000C0000000C704F2861C88D44FFDFA24CFFEACEA6FFF1D7 + B2FFD79A51FF0000000000000000C38F4EFFE2B572FFDEB06AFFDBA658FFC595 + 55FF926935300000000000000000AA7333436A8399FFCD9F5FFF298DE2FF2B8F + E1FFB48B5AFF3081D29100000000B98545FFB78242FFC8934EFFDFAB5EFFE4C4 + 94FFB68245DAB8813F3CBE823B2561809CFF37A8EFFF399DE3FF4CCFFDFF4AC7 + F8FF3D9EE1FF45AAE4FF3982CB9F0000003300000033B78242FFE4B163FFEBC6 + 8EFFEACFA9FFD1A774FFD9A970FFCCBBA4FF399CE1FF4CCEFBFF3FB0EEFF40B1 + EFFF4FCFFCFF429EDCFF16324E3100000000B98443E9DDBB8CFFEEC486FFE8B4 + 66FFF1CC96FFF7DCB5FFFFDEADFF288CDFFF4CCEFBFF3FAFEDFFFAB66DFFC775 + 1FCE41B1EFFF52D0F9FF3F92D5FF00000000AA7A3FBED2A76FFFD7A561FFB882 + 41FFD39F58FFEDB96BFFF7B962FF288DE3FF4CCFFCFF40B0EDFFC39F7BFF9876 + 53CB42B1EEFF52D0F9FF3F92D5FF0000000000000023AA7A3EBFB68243ED0000 + 0033B58142FFF5C378FFFCC371FFAD7E49FF3B9EE3FF4ECFFBFF41B0EDFF42B1 + EDFF50CFFAFF439EDCFF1B3D5F520000000000000000000000230000002F0000 + 0000B88445FFC89451FFCE934AFF6D8192FF40A9EAFF429EDDFF52D0F8FF52D0 + F8FF439EDCFF48AAE2FF3980C8B6000000000000000000000000000000000000 + 0000000000330000003300000033000000332D73BAAF1B3D60523F93D4FF3F93 + D4FF102438413578BAC300000024000000000000000000000000000000000000 + 0000000000000000000000000000000000000000001F00000008000000330000 + 0033000000040000002400000000 + } end end diff --git a/src/ce_main.pas b/src/ce_main.pas index 35c1082b..a249dda0 100644 --- a/src/ce_main.pas +++ b/src/ce_main.pas @@ -7,7 +7,7 @@ interface uses Classes, SysUtils, FileUtil, SynEditKeyCmds, Forms, Controls, Graphics, Dialogs, Menus, ActnList, ce_common, ce_widget, ce_messages, ce_editor, - ce_project, ce_synmemo, process; + ce_project, ce_synmemo, ce_projconf, process, ce_dmdwrap; type @@ -15,8 +15,10 @@ type TCEMainForm = class(TForm) actCompAndRunFile: TAction; actCompileProj: TAction; - ActCompileAndRunProj: TAction; + actCompileAndRunProj: TAction; ActCompAndRunFileWithArgs: TAction; + actCompAndRunProjWithArgs: TAction; + actProjOpts: TAction; actNewProj: TAction; actOpenProj: TAction; actSaveProjAs: TAction; @@ -63,6 +65,17 @@ type MenuItem3: TMenuItem; MenuItem30: TMenuItem; MenuItem31: TMenuItem; + MenuItem32: TMenuItem; + MenuItem33: TMenuItem; + MenuItem34: TMenuItem; + MenuItem35: TMenuItem; + MenuItem36: TMenuItem; + MenuItem37: TMenuItem; + MenuItem38: TMenuItem; + MenuItem39: TMenuItem; + MenuItem40: TMenuItem; + MenuItem41: TMenuItem; + mnuItemWin: TMenuItem; MenuItem4: TMenuItem; MenuItem5: TMenuItem; MenuItem6: TMenuItem; @@ -72,6 +85,7 @@ type procedure actAddCurrToProjExecute(Sender: TObject); procedure actCompAndRunFileExecute(Sender: TObject); procedure ActCompAndRunFileWithArgsExecute(Sender: TObject); + procedure actCompileProjExecute(Sender: TObject); procedure actCopyExecute(Sender: TObject); procedure actCutExecute(Sender: TObject); procedure ActionsUpdate(AAction: TBasicAction; var Handled: Boolean); @@ -83,25 +97,31 @@ type procedure actOpenFileExecute(Sender: TObject); procedure actOpenProjExecute(Sender: TObject); procedure actPasteExecute(Sender: TObject); + procedure actProjOptsExecute(Sender: TObject); procedure actRedoExecute(Sender: TObject); procedure actSaveFileAsExecute(Sender: TObject); procedure actSaveFileExecute(Sender: TObject); procedure actSaveProjAsExecute(Sender: TObject); procedure actSaveProjExecute(Sender: TObject); procedure actUndoExecute(Sender: TObject); + procedure FormDropFiles(Sender: TObject; const FileNames: array of String); private fProject: TCEProject; fWidgList: TCEWidgetList; fMesgWidg: TCEMessagesWidget; fEditWidg: TCEEditorWidget; fProjWidg: TCEProjectWidget; + fPrjCfWidg: TCEProjectConfigurationWidget; // widget interfaces subroutines procedure checkWidgetActions(const aWidget: TCEWidget); + procedure widgetShowFromAction(sender: TObject); // run & exec sub routines procedure ProcessOutputToMsg(const aProcess: TProcess); procedure compileAndRunFile(const edIndex: NativeInt; const runArgs: string = ''); + procedure compileProject(const aProject: TCEProject); + procedure runProject(const aProject: TCEProject); // file sub routines procedure newFile; @@ -141,6 +161,10 @@ uses {$REGION std comp methods ******************************************************} constructor TCEMainForm.create(aOwner: TComponent); +var + act: TAction; + itm: TMenuItem; + widg: TCEWidget; begin inherited create(aOwner); // @@ -148,19 +172,31 @@ begin fMesgWidg := TCEMessagesWidget.create(nil); fEditWidg := TCEEditorWidget.create(nil); fProjWidg := TCEProjectWidget.create(nil); + fPrjCfWidg:= TCEProjectConfigurationWidget.create(nil); fWidgList.addWidget(@fMesgWidg); fWidgList.addWidget(@fEditWidg); fWidgList.addWidget(@fProjWidg); + fWidgList.addWidget(@fPrjCfWidg); - checkWidgetActions(fMesgWidg); + for widg in fWidgList do widg.Show; - fMesgWidg.Show; - fEditWidg.Show; - fProjWidg.Show; + for widg in fWidgList do + begin + act := TAction.Create(self); + act.Category := 'Window'; + act.Caption := widg.Caption; + act.OnExecute := @widgetShowFromAction; + act.Tag := ptrInt(widg); + itm := TMenuItem.Create(self); + itm.Action := act; + itm.Tag := ptrInt(widg); + mnuItemWin.Add(itm); + end; fProject := TCEProject.Create(self); fProject.onChange := @projChange; + projChange(nil); end; @@ -170,6 +206,7 @@ begin fMesgWidg.Free; fEditWidg.Free; fProjWidg.Free; + fPrjCfWidg.Free; // inherited; end; @@ -399,6 +436,14 @@ begin str := fEditWidg.editor[fEditWidg.editorIndex].fileName; fProject.addSource(str); end; + +procedure TCEMainForm.FormDropFiles(Sender: TObject;const FileNames: array of String); +var + fname: string; +begin + for fname in FileNames do + openFile(fname); +end; {$ENDREGION} {$REGION edit ******************************************************************} @@ -503,18 +548,21 @@ procedure TCEMainForm.compileAndRunFile(const edIndex: NativeInt; const runArgs: var dmdproc: TProcess; runproc: TProcess; - fname, temppath: string; + fname, temppath, olddir: string; begin + olddir := ''; dmdproc := TProcess.Create(nil); runproc := TProcess.Create(nil); + getDir(0,olddir); try - temppath := GetTempDir; + temppath := GetTempDir(false); + chDir(temppath); {$IFDEF DEBUG}{$WARNINGS OFF}{$HINTS OFF}{$ENDIF} fname := temppath + format('temp_%.8x',[LongWord(@dmdproc)]); {$IFDEF DEBUG}{$WARNINGS ON}{$HINTS ON}{$ENDIF} fEditWidg.editor[edIndex].Lines.SaveToFile(fname + '.d'); - dmdproc.Options:= [poWaitOnExit,poUsePipes,poStdErrToOutput]; + dmdproc.Options:= [poWaitOnExit,poStdErrToOutput,poUsePipes]; dmdproc.Executable:= 'dmd'; dmdproc.Parameters.Text := '"'+ fname +'.d"'; try @@ -547,9 +595,39 @@ begin finally dmdproc.Free; runproc.Free; + chDir(olddir); end; end; +procedure TCEMainForm.compileProject(const aProject: TCEProject); +var + dmdproc: TProcess; + olddir, prjpath: string; +begin + dmdproc := TProcess.Create(nil); + getDir(0,olddir); + try + + prjpath := extractFilePath(aProject.fileName); + if directoryExists(prjpath) then chDir(prjpath); + dmdproc.Options:= [poStdErrToOutput,poUsePipes]; + dmdproc.Executable := 'dmd'; + dmdproc.Parameters.Text := aProject.getOpts; + dmdproc.Execute; + ProcessOutputToMsg(dmdproc); + + finally + dmdproc.Free; + chDir(olddir); + end; +end; + +procedure TCEMainForm.runProject(const aProject: TCEProject); +begin + if aProject.currentConfiguration.outputOptions.binaryKind <> + executable then exit; +end; + procedure TCEMainForm.actCompAndRunFileExecute(Sender: TObject); begin if fEditWidg = nil then exit; @@ -569,9 +647,19 @@ begin if InputQuery('Execution arguments', 'enter switches and arguments', runargs) then compileAndRunFile(fEditWidg.editorIndex, runargs); end; + +procedure TCEMainForm.actCompileProjExecute(Sender: TObject); +begin + compileProject(fProject); +end; {$ENDREGION} {$REGION view ******************************************************************} +procedure TCEMainForm.widgetShowFromAction(sender: TObject); +begin + TCEWidget( TComponent(sender).tag ).Show; +end; + {$ENDREGION} {$REGION project ***************************************************************} @@ -584,8 +672,21 @@ begin end; procedure TCEMainForm.newProj; +var + // cf. with ce_projconf, fProject is hook + // ICEProjectMonitor would recquire beforeProjChanged-), afterProjChage(), ... + old: TCEProject; begin - fProject.reset; + old := fProject; + fProject := nil; + projChange(nil); + // + old.Free; + old := nil; + // + fProject := TCEProject.Create(self); + fProject.onChange := @projChange; + projChange(nil); end; procedure TCEMainForm.saveProj; @@ -647,5 +748,10 @@ begin Free; end; end; + +procedure TCEMainForm.actProjOptsExecute(Sender: TObject); +begin + fPrjCfWidg.Show; +end; {$ENDREGION} end. diff --git a/src/ce_messages.lfm b/src/ce_messages.lfm index fb1b881f..9fc00722 100644 --- a/src/ce_messages.lfm +++ b/src/ce_messages.lfm @@ -1,35 +1,35 @@ inherited CEMessagesWidget: TCEMessagesWidget - Left = 1248 - Height = 186 - Top = 643 - Width = 657 + Left = 1247 + Height = 85 + Top = 463 + Width = 658 Caption = 'MessagesWidget' - ClientHeight = 186 - ClientWidth = 657 + ClientHeight = 85 + ClientWidth = 658 inherited Back: TPanel - Height = 186 - Width = 657 - ClientHeight = 186 - ClientWidth = 657 + Height = 85 + Width = 658 + ClientHeight = 85 + ClientWidth = 658 inherited Content: TScrollBox - Height = 160 - Width = 657 - HorzScrollBar.Page = 653 - VertScrollBar.Page = 156 - ClientHeight = 156 - ClientWidth = 653 + Height = 59 + Width = 658 + HorzScrollBar.Page = 637 + VertScrollBar.Page = 55 + ClientHeight = 55 + ClientWidth = 637 object List: TListView[0] Left = 2 - Height = 152 + Height = 150 Top = 2 - Width = 649 + Width = 633 Align = alClient AutoSort = False AutoWidthLastColumn = True BorderSpacing.Around = 2 Columns = < item - Width = 645 + Width = 629 end> GridLines = True IconOptions.Arrangement = iaLeft @@ -40,10 +40,10 @@ inherited CEMessagesWidget: TCEMessagesWidget end end inherited Header: TPanel - Width = 657 + Width = 658 end end - object imgList: TImageList[1] + object imgList: TImageList[2] Bitmap = { 4C69030000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF diff --git a/src/ce_projconf.lfm b/src/ce_projconf.lfm new file mode 100644 index 00000000..09ff58f8 --- /dev/null +++ b/src/ce_projconf.lfm @@ -0,0 +1,119 @@ +inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget + Left = 1249 + Height = 377 + Top = 587 + Width = 546 + Caption = 'ProjectConfigurationWidget' + ClientHeight = 377 + ClientWidth = 546 + inherited Back: TPanel + Height = 377 + Width = 546 + ClientHeight = 377 + ClientWidth = 546 + inherited Content: TScrollBox + Height = 351 + Width = 546 + HorzScrollBar.Page = 542 + VertScrollBar.Page = 347 + ClientHeight = 347 + ClientWidth = 542 + object Tree: TTreeView[0] + Left = 4 + Height = 313 + Top = 30 + Width = 190 + Align = alLeft + BorderSpacing.Around = 4 + DefaultItemHeight = 18 + ScrollBars = ssAutoBoth + ShowRoot = False + TabOrder = 0 + Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoShowButtons, tvoShowLines, tvoToolTips, tvoThemedDraw] + Items.Data = { + F9FFFFFF020003000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 + 0000000700000047656E6572616CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0500 + 000000000000010A00000043617465676F72696573FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFF000000000000000000080000004D65737361676573FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF000000000000000000080000004465627567696E67FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000D000000446F6375 + 6D656E746174696F6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 + 0000060000004F7574707574FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 + 0000000000060000004F7468657273FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + 00000000000000000E000000416C6C2063617465676F72696573 + } + end + inline frameEditAll: TCEProjConfAll[1] + Left = 198 + Height = 317 + Top = 28 + Width = 342 + Align = alClient + BorderSpacing.Around = 2 + ClientHeight = 317 + ClientWidth = 342 + TabOrder = 1 + DesignLeft = 1406 + DesignTop = 572 + inherited Grid: TTIPropertyGrid + Left = 2 + Height = 313 + Top = 2 + Width = 338 + BorderSpacing.Around = 2 + DefaultItemHeight = 22 + PreferredSplitterX = 150 + SplitterX = 150 + end + end + object Panel1: TPanel[2] + Left = 2 + Height = 24 + Top = 2 + Width = 538 + Align = alTop + BorderSpacing.Around = 2 + BevelOuter = bvNone + ClientHeight = 24 + ClientWidth = 538 + TabOrder = 2 + object selConf: TComboBox + Left = 0 + Height = 23 + Top = 1 + Width = 297 + Align = alClient + BorderSpacing.Top = 1 + BorderSpacing.Right = 1 + ItemHeight = 15 + OnChange = selConfChange + Style = csDropDownList + TabOrder = 0 + end + object btnAddConf: TButton + Left = 298 + Height = 24 + Top = 0 + Width = 120 + Align = alRight + Caption = 'Add configuration' + OnClick = btnAddConfClick + TabOrder = 1 + end + object btnDelConf: TButton + Left = 418 + Height = 24 + Top = 0 + Width = 120 + Align = alRight + Caption = 'Delete configuration' + OnClick = btnDelConfClick + TabOrder = 2 + end + end + end + inherited Header: TPanel + Width = 546 + end + end +end diff --git a/src/ce_projconf.pas b/src/ce_projconf.pas new file mode 100644 index 00000000..6db7e172 --- /dev/null +++ b/src/ce_projconf.pas @@ -0,0 +1,107 @@ +unit ce_projconf; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, + ComCtrls, StdCtrls, ce_widget, ce_common, ce_projconfall, ce_dmdwrap; + +type + + { TCEProjectConfigurationWidget } + TCEProjectConfigurationWidget = class(TCEWidget) + btnAddConf: TButton; + btnDelConf: TButton; + selConf: TComboBox; + frameEditAll: TCEProjConfAll; + Panel1: TPanel; + Tree: TTreeView; + procedure btnAddConfClick(Sender: TObject); + procedure btnDelConfClick(Sender: TObject); + procedure selConfChange(Sender: TObject); + private + fProj: TCEProject; + protected + procedure updaterProc2; //override; + public + procedure projChange(const aProject: TCEProject); override; + property project: TCEProject read fProj; + end; + +implementation +{$R *.lfm} + +procedure TCEProjectConfigurationWidget.projChange(const aProject: TCEProject); +begin + fProj := aProject; + updaterProc2; +end; + +procedure TCEProjectConfigurationWidget.selConfChange(Sender: TObject); +begin + if fUpdating then exit; + if fProj = nil then exit; + if selConf.ItemIndex = -1 then exit; + // + fProj.ConfigurationIndex := selConf.ItemIndex; + updaterProc2; +end; + +procedure TCEProjectConfigurationWidget.btnAddConfClick(Sender: TObject); +var + nme: string; + cfg: TCompilerConfiguration; +begin + if fProj = nil then exit; + // + cfg := fProj.addConfiguration; + nme := ''; + if InputQuery('Configuration name', '', nme) then cfg.name := nme; + fProj.ConfigurationIndex := cfg.Index; +end; + +procedure TCEProjectConfigurationWidget.btnDelConfClick(Sender: TObject); +begin + if fProj = nil then exit; + if fProj.OptionsCollection.Count = 1 then exit; + // + frameEditAll.Grid.TIObject := nil; + frameEditAll.Grid.Clear; + frameEditAll.Invalidate; + fProj.OptionsCollection.Delete(selConf.ItemIndex); + fProj.ConfigurationIndex := 0; + updaterProc2; +end; + +procedure TCEProjectConfigurationWidget.updaterProc2; +var + i: NativeInt; + obj: TPersistent; +begin + + selConf.Clear; + + if (fProj = nil) then + begin + frameEditAll.Grid.Selection.Clear; + frameEditAll.Grid.Clear; + // AV if the previous TIObject is already destroyed + frameEditAll.Grid.TIObject := nil; + frameEditAll.Invalidate; + exit; + end; + + for i:= 0 to fProj.OptionsCollection.Count-1 do + selConf.Items.Add(fProj.configuration[i].name); + selConf.ItemIndex := fProj.ConfigurationIndex; + + obj := fProj.configuration[fProj.ConfigurationIndex]; + if frameEditAll.Grid.TIObject <> obj then + frameEditAll.Grid.TIObject := obj; + +end; + +end. + diff --git a/src/ce_projconfall.lfm b/src/ce_projconfall.lfm new file mode 100644 index 00000000..8d02de2c --- /dev/null +++ b/src/ce_projconfall.lfm @@ -0,0 +1,20 @@ +inherited CEProjConfAll: TCEProjConfAll + Height = 428 + Width = 297 + ClientHeight = 428 + ClientWidth = 297 + DesignLeft = 1271 + DesignTop = 500 + object Grid: TTIPropertyGrid[0] + Left = 0 + Height = 428 + Top = 0 + Width = 297 + Align = alClient + DefaultValueFont.Color = clWindowText + Filter = [tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod, tkSString, tkLString, tkAString, tkWString, tkVariant, tkArray, tkRecord, tkInterface, tkClass, tkObject, tkWChar, tkBool, tkInt64, tkQWord, tkDynArray, tkInterfaceRaw, tkProcVar, tkUString, tkUChar, tkHelper] + Indent = 16 + NameFont.Color = clWindowText + ValueFont.Color = clMaroon + end +end diff --git a/src/ce_projconfall.pas b/src/ce_projconfall.pas new file mode 100644 index 00000000..8e85bfa1 --- /dev/null +++ b/src/ce_projconfall.pas @@ -0,0 +1,28 @@ +unit ce_projconfall; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, RTTIGrids, Forms, Controls, Graphics, Dialogs, + ce_projconfframe; + +type + + { TCEProjConfAll } + + TCEProjConfAll = class(TCEProjConfFrame) + Grid: TTIPropertyGrid; + private + { private declarations } + public + { public declarations } + end; + +implementation + +{$R *.lfm} + +end. + diff --git a/src/ce_projconfframe.lfm b/src/ce_projconfframe.lfm new file mode 100644 index 00000000..87c8ea8d --- /dev/null +++ b/src/ce_projconfframe.lfm @@ -0,0 +1,9 @@ +object CEProjConfFrame: TCEProjConfFrame + Left = 0 + Height = 240 + Top = 0 + Width = 320 + TabOrder = 0 + DesignLeft = 677 + DesignTop = 497 +end diff --git a/src/ce_projconfframe.pas b/src/ce_projconfframe.pas new file mode 100644 index 00000000..4916cfb0 --- /dev/null +++ b/src/ce_projconfframe.pas @@ -0,0 +1,20 @@ +unit ce_projconfframe; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, ce_common; + +type + TCEProjConfFrame = class(TFrame) + private + protected + end; + +implementation +{$R *.lfm} + +end. + diff --git a/src/ce_project.lfm b/src/ce_project.lfm index a173e34a..611856e5 100644 --- a/src/ce_project.lfm +++ b/src/ce_project.lfm @@ -1,29 +1,29 @@ inherited CEProjectWidget: TCEProjectWidget Left = 1745 - Height = 517 + Height = 336 Top = 89 Width = 163 Caption = 'ProjectWidget' - ClientHeight = 517 + ClientHeight = 336 ClientWidth = 163 inherited Back: TPanel - Height = 517 + Height = 336 Width = 163 - ClientHeight = 517 + ClientHeight = 336 ClientWidth = 163 inherited Content: TScrollBox - Height = 491 + Height = 310 Width = 163 HorzScrollBar.Page = 159 - VertScrollBar.Page = 487 - ClientHeight = 487 + VertScrollBar.Page = 306 + ClientHeight = 306 ClientWidth = 159 object Tree: TTreeView[0] Left = 2 - Height = 206 + Height = 302 Top = 2 Width = 155 - Align = alTop + Align = alClient AutoExpand = True BorderSpacing.Around = 2 DefaultItemHeight = 18 @@ -45,7 +45,7 @@ inherited CEProjectWidget: TCEProjectWidget end end object imgList: TImageList[2] - top = 3 + left = 32 Bitmap = { 4C69040000001000000010000000B3B3B1EFB0B0ADFFAEAEACFFAEAEACFFAEAE ACFFAFAFACFFAFAFADFFB1B1AFD5B4B4B100B5B5B300B5B5B300B5B5B300B5B5 @@ -111,39 +111,39 @@ inherited CEProjectWidget: TCEProjectWidget 71FFD17B47AFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D58757D5D58351FFD17D4BFFD179 45AFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00BB871F00BB871F00BB871E00B9841A00B67E - 0FEAC4973BFFC79D49FFC39538FFB37904FFB47A07FFB47A07FFB47A08FFB57C - 0AFFB67F0FFFB88114FFBA851B23BB871F00BB871F00BA861D00B7801283E4CF - A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFE9DABAFFEEE2C9FFB67F14BFBB871F00BB871F00B9851B00B27A09E5FFFF - FFFFFFFFFFFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFDFFFFFFFEFFFFFF - FFFFC69941FFECDFC2FFC19234FFBB871F00BB871E00B9831800C89E4AFFFFFF - FFFFFFFDF7FFFFFCF5FFFFFCF4FFFEFBF4FFFEFBF3FFFFFCF4FFFFFDF6FFFFFF - FFFFB27701FFBA851CFFBC8922FFBB871F00BB861E00B882150CCDA557FFFFFF - FFFF96989BFFC3C1BEFFC2C0BDFFC0BFBCFFFFFBF0FF96979AFFC3C2C2FFFFFF - FFFFAA7508D00000003300000033BB871F00BB861D00B07B1134DDC18AFFFFFF - FFFFFFF9EBFFFFF9EAFFFEF7E9FFFDF7E9FFFEF7E9FFFFF8E9FFFFFFFAFFF0E4 - CAFFA8740CB2BA851C00BD8C2800BB871F00BA861D00AE790F73EDDDBDFFC1C4 - C7FFA8A9A9FFC2C1BAFFC0BFB9FFFBF4E1FF989A9EFFC0BFB8FFFFFFFCFFE4D0 - A4FFA2710E90BA861D00BB871E00BB871F00BA851C00AB770C9BF3E6CDFFFDF5 - E4FFFAF2DBFFFAF1DBFFF8EFDAFFF7EFD9FFFAF0DAFFF8EFD9FFFFFFFFFFD7B8 - 79FF9A6C106BBB861D00BB871F00BB871F00BA851C00B07A0BD2FFFFFFFF999D - A4FFC0BFB8FFBFBEB8FFBEBDB7FFF6EDD4FF999BA2FFBEBCB5FFFFFFFFFFC9A0 - 4BFF90661141BB871E00BB871F00BB871E00B9841900B8821BEFFFFFFFFFF4EC - D4FFF5ECD3FFF4EBD4FFF4EBD3FFF3EAD4FFF3E9D1FFF1E6CCFFFFFFFFFFC190 - 31FF0000000ABB871F00BB871F00B98419FFB67E0EFFB67F10FFC0902EFFBF8E - 2AFFBF8E29FFC08E2AFFC08F2BFFC0902DFFD8BB7DFFF1E9D2FFFFFFFDFFB57C - 0AFFBA851B00BB871F00BB871F00B78012FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D9B7FFBB861DFFF4EEDCFFF6F0E2FFB17B - 0FE8BA851D00BB871F00BB871F00AC7A14CADCC189FFF5F0E0FFF4EDDBFFF4ED - DBFFF4EDDBFFF4EDDBFFF5EFDDFFF7F2E3FFDFCA99FFF8F4EAFFCFAB61FF9D6F - 1399BB861E00BB871F00BB871F0060440E44B88114FFB67E0FFFB57D0DFFB57D - 0CFFB57D0CFFB57D0CFFB67D0DFFB67E0FFFB77F11FFB78012FFB58016EE0000 - 001ABB871F00BB871F00BB871F00000000070000003300000033000000330000 - 00330000003300000033000000330000003300000033000000330000002F0000 - 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF - FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000001C00000033000000360000 + 0036000000360000003600000036000000360000003600000036000000200000 + 0002FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000033F8F8F8F0FBFBFBFDFCFC + FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFF8F8F8FF949494910000 + 002000000002FFFFFF00FFFFFF00FFFFFF0000000036FBFBFBFDF4F4F4FFF5F5 + F5FFF5F5F5FFF5F5F5FFF1F1F1FFEFEFEFFFE9E9E9FFFCFCFCFFE7E7E7FF9595 + 95910000002000000002FFFFFF000000000100000036FCFCFCFFF7F7F7FFF9F9 + F9FFF7F7F7FFF7F7F7FFF3F3F3FFF0F0F0FFEAEAEAFFFCFCFCFFF6F6F6FFF4F4 + F4FF9999999100000020FFFFFF000000000100000036FCFCFCFFF9F9F9FFC0C0 + C0FFBABABAFFB4B4B4FFAFAFAFFFAAAAAAFFA5A5A5FFFCFCFCFFFCFCFCFFFCFC + FCFFFCFCFCFF00000036000000010000000100000036FCFCFCFFFBFBFBFFFCFC + FCFFFCFCFCFFFBFBFBFFF8F8F8FFF5F5F5FFF1F1F1FFECECECFFEAEAEAFFE6E6 + E6FFFCFCFCFF00000036000000010000000100000036FCFCFCFFFCFCFCFFC7C7 + C7FFC2C2C2FFBEBEBEFFB8B8B8FFB4B4B4FFB1B1B1FFAEAEAEFFACACACFFEDED + EDFFFCFCFCFF00000036000000010000000100000036FCFCFCFFFCFCFCFFFCFC + FCFFFCFCFCFFFCFCFCFFFCFCFCFFFBFBFBFFF8F8F8FFF6F6F6FFF3F3F3FFF2F2 + F2FFFCFCFCFF00000036000000010000000100000036FCFCFCFFFCFCFCFFCECE + CEFFCACACAFFC6C6C6FFC3C3C3FFC0C0C0FFBDBDBDFFBCBCBCFFBABABAFFF6F6 + F6FFFCFCFCFF00000036000000010000000100000036FCFCFCFFFCFCFCFFFCFC + FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFBFBFBFFF9F9F9FFF9F9F9FFF8F8 + F8FFFCFCFCFF00000036000000010000000100000036FCFCFCFFFCFCFCFFD6D6 + D6FFD3D3D3FFCFCFCFFFCDCDCDFFCBCBCBFFC8C8C8FFC8C8C8FFC6C6C6FFF8F8 + F8FFFCFCFCFF00000036000000010000000100000036FCFCFCFFFCFCFCFFFCFC + FCFFFCFCFCFFFBFBFBFFFBFBFBFFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFFAFA + FAFFFCFCFCFF00000036000000010000000100000036FCFCFCFFFCFCFCFFDDDD + DDFFDBDBDBFFD9D9D9FFD7D7D7FFD5D5D5FFD4D4D4FFD4D4D4FFD4D4D4FFFBFB + FBFFFCFCFCFF00000036000000010000000100000036FCFCFCFEFCFCFCFFFCFC + FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC + FCFFFCFCFCFD00000036FFFFFF00FFFFFF0000000034F9F9F9F5FCFCFCFDFCFC + FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC + FCFDF9F9F9F300000033FFFFFF00FFFFFF000000001D00000034000000360000 + 0036000000360000003600000036000000360000003600000036000000360000 + 0036000000330000001DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF diff --git a/src/ce_project.pas b/src/ce_project.pas index c76b98b4..47024a02 100644 --- a/src/ce_project.pas +++ b/src/ce_project.pas @@ -66,13 +66,15 @@ begin if i > -1 then begin fname := fProject.getAbsoluteSourceName(i); - mainForm.openFile(fname); + if fileExists(fname) then + mainForm.openFile(fname); end; end else if Tree.Selected.Parent = fConfNode then begin i := Tree.Selected.Index; - fProject.ConfigurationIndex:= i; + fProject.ConfigurationIndex := i; + updateView; end; end; @@ -82,10 +84,10 @@ var itm: TTreeNode; i: NativeInt; begin - if fProject = nil then exit; - // fConfNode.DeleteChildren; fFileNode.DeleteChildren; + if fProject = nil then exit; + // for src in fProject.Sources do begin itm := Tree.Items.AddChild(fFileNode, src); @@ -95,6 +97,7 @@ begin for i := 0 to fProject.OptionsCollection.Count-1 do begin conf := fProject.configuration[i].name; + if i = fProject.ConfigurationIndex then conf += ' (active)'; itm := Tree.Items.AddChild(fConfNode, conf); itm.ImageIndex := 3; itm.SelectedIndex:= 3; diff --git a/src/ce_widget.lfm b/src/ce_widget.lfm index e62c3d71..69c8d214 100644 --- a/src/ce_widget.lfm +++ b/src/ce_widget.lfm @@ -1,11 +1,11 @@ object CEWidget: TCEWidget - Left = 1373 + Left = 1264 Height = 327 - Top = 440 + Top = 448 Width = 320 Caption = 'CEWidget' - ClientHeight = 327 - ClientWidth = 320 + ClientHeight = 0 + ClientWidth = 0 LCLVersion = '1.2.2.0' object Back: TPanel Left = 0 diff --git a/src/ce_widget.pas b/src/ce_widget.pas index 2b25a233..da26bb33 100644 --- a/src/ce_widget.pas +++ b/src/ce_widget.pas @@ -5,7 +5,7 @@ unit ce_widget; interface uses - Classes, SysUtils, FileUtil, DividerBevel, Forms, Controls, ExtCtrls, + Classes, SysUtils, FileUtil, Forms, Controls, ExtCtrls, ce_common, ActnList; type @@ -26,6 +26,7 @@ type protected fID: string; fNeedUpdate: boolean; + fUpdating: boolean; procedure UpdaterProc; virtual; published property ID: string read fID write fID; @@ -51,6 +52,16 @@ type property widget[index: integer]: TCEWidget read getWidget; end; + TWidgetEnumerator = class + fList: TCEWidgetList; + fIndex: Integer; + function getCurrent: TCEWidget; + Function moveNext: boolean; + property current: TCEWidget read getCurrent; + end; + + operator enumerator(aWidgetList: TCEWidgetList): TWidgetEnumerator; + implementation {$R *.lfm} @@ -72,8 +83,13 @@ end; procedure TCEWidget.updaterTimer(Sender: TObject); begin if not fNeedUpdate then exit; - fNeedUpdate := false; - UpdaterProc; + fUpdating := true; + try + UpdaterProc; + finally + fUpdating := false; + fNeedUpdate := false; + end; end; procedure TCEWidget.UpdaterProc; @@ -112,5 +128,23 @@ begin add(Pointer(aValue)); end; +function TWidgetEnumerator.getCurrent:TCEWidget; +begin + result := fList.widget[fIndex]; +end; + +function TWidgetEnumerator.moveNext: boolean; +begin + Inc(fIndex); + result := fIndex < fList.Count; +end; + +operator enumerator(aWidgetList: TCEWidgetList): TWidgetEnumerator; +begin + result := TWidgetEnumerator.Create; + result.fList := aWidgetList; + result.fIndex := -1; +end; + end.