'#174
+ +#230#163#254'i'#159#202#185#25'+/'#127'T}'#246#27#127'G]'#255#220'W'#223#215
+ +#251#151#206'>g5'#254#188'P'#251#179'\l~'#29#235#207#165#188'W'#199#251#181
+ +#218#159#10#248#19'&'#130#153#26'o'#223'S'#253#135'?`'#211' [,'#172#215#191
+ +#17#206#251'/'#147#221'/'#223#4#213#31'&'#192#152#22#132#130#224#12#180#170
+ +'?-'#152#231#15#14#193#145#211#236#243#185'I'#127#251#155#143'iX'#135' &'#20
+ +'%'#192'cZ'#241'Mt'#14#130'/'#0#166#0#189#230#10'-k'#15'G'#189#183'v'''#205
+ +#151#141'w_;'#250'b'#213'\'#135'?'#224'u'#21#213'$1'#168#17'["'#240'M[q'#19
+ +#30#180'='#5'i'#9#138#217#134'r'#201#21'8'#15'n'#129'{'#255#231#191#169#255
+ +#250';'#191'z'#218#167'q'#166'Gs'#253#138'z'#233#203'_S?'#243'+'#191#165#234
+ +#171#155#207#245#179'M#'#15'//'#8#0#21'}'#153#16#0#219#253#146#230#11#149#30
+ +'E> '#0#150#254#0#255'Tk'#1#179#193#158#218#187#253#135#244#191#194#238'W'
+ +#176#251#189'd'#241#234#202#246#247'B'#178#255#149#168#254#180'L'#137#4'0'
+ +#203'/:'#253#222#147'f'#159'w$'#1'h'#219'8'#254#158'W'#216#175':'#142#149#0
+ +#224#16#252#214#183#190#197'MC'#136#201'Z'#244#195'`'#152']'#22'-'#0'$pM!J'
+ +#160#188#149'w'#247#214#190'0Kk=eH'#0#210#157'H'#160's'#249'5'#186#233'/IRP'
+ +#205'j'#1#8#13#194#28#240'b'#157'#'#160#195#131#18'"4'#25#131#158''''#10#192
+ +#249#9#19#254#254#223#254'e'#245#240'";'#176'4'#26'kW'#212#205#159#255#154'z'
+ +#235#24'@_'#26#206#196#157'6'#209'G&'#241#204#165#161'g.'#177'~V'#253#167#218
+ +#238'O'#5#252')'#183#249#30#178#211'o1'#30'j'#233#159'&'#186'4'#152#237#254
+ +#189'w'#218#209#180'oT'#127'z>9'#230'Ok4'#250#228'f'#31' '#0#244#249#203#178
+ +#12#190#128#253#227'p'#252#185#227#184'aa'#29#130#244#163'j'#164#1'tMn'#0'H@'
+ +#136#0#29#133#215#147'<'#218#248#233#222#250#23'3'#130#189'q'#10#194#31#0'{'
+ +#191's'#245#227#170#209#187','#192#143#181'?'#192'5'#7'b]>\'#20#14'A'#11#208
+ +'D'#144#151#10#136#156#159#251#164'_~'#18#254#129'C'#190#31's'#1#254#222#175
+ +#127'A'#141#30#221'9'#129#147'8'#187#163#177'vYK'#250'_'#251'['#31#12#244'O{'
+ +#194#141#202#159#231#142#237'o'#192#159#217#226#158'\'#178#252'8'#140'7[X'
+ +#192'C'#242#167'Sc'#255#143#9#252#127#164'f'#163'}Q'#253#19#235'7Xo'#142#238
+ +'m6'#251#144#240#244'Hz'#166#216'g'#12#144'#'#227'O'#21#210#255'.'#225#4#181
+ +#254#187#180' '#230'?'#251#250#215#191#158'>O'#199#223#179'\'#158#231#241#249
+ +#236#16#188'v'#237'ZD?'#166'I?'#142'M'#1':~]'#242#2#224#16#132'V'#176#218#159
+ +'7n'#222#31#174'|'#138#253#1#220#16'$'#212#243#6#196#177#234'^{K'#213'z'#235
+ +'L'#0'69'#168')'#249#1'5m'#10#232'D'#161'P'#207'1`'#252#2#158'8'#6#13#1'x:'
+ +#195#235','#155#4#217'|'#170#254#227'o|^M'#182#31#156#246#169#156#232#208#160
+ +#255#243#234#19#4'zl'#31#247'0A'#23#207#216#251#210#196#147#255'!'#192'5Y~'
+ +#185#128#31#146'?'#19#181#127'!$'#144'Ng'#236#245#239#223#253#174#154#13'w4'
+ +#248#209#223#15#170#127#134'x?'#236#254#157#183#229#27'!'#253#145#245'7'#161
+ +#239#178'1'#127'I'#246'A'#143'?T'#254'm#'#227#143#204#229#217'q8'#254#220'q'
+ +#18'0`-'#128#214#193#189'{'#247'0'#181'x'#11#141'C'#148#6#189'!'#1#248#5'6i{'
+ +'e{'#210'}'#227#241#164#253#154'.'#24#242#25#208' '#129#176#214'P'#221#171'o'
+ +'q'#255#128'@'#204#129#192#248#3#140'S'#208'!'#1#27#29'p'#27#140'B#p'#253#1
+ +'v6'#226#167'\'#134#147'L)'#150's'#193#148#224#223#250#245#159'S'#211#189#173
+ +#147#251#238#19#30'A\S'#221#151'^W'#215#190#240#139#234#245#191#240#13#213'X'
+ +#127'N'#160'?'#202#253't<'#253'&'#191'7wm'#254#212'H'#254#2#252#25#131'_'''
+ +#251'X'#181#31#14#192#217'L'#245#31'|_M'#247#183#216''#239#186#170#127#179#217#156#16
+ +'^'#22#199#225#248'+]'#138#227#248#208'e'#223'cL'#1#218#174#199'q'#220'Y,'#22
+ +'k'#196'vp'#2#26#18#192#246#6#189#180#247'`'#216'{s'#127#214#188'a'#253#1'a'
+ +#164'g'#24#170#183'T'#239#198'[*nuu'#211#16'h'#2#13#153'h'#148#246#217#31'P3'
+ +#230'@A'#2'z'#242'Q_'#151#17'{^'#209'r'#251#6#242#202#229#240'N'#185#167'X'
+ +'Bv'#228#127#250#198#159'T'#227#199#247'O'#245'<'#158#215#128'F'#215#190#246
+ +#138#186#242#179#127'Z}'#228'k'#191#161'z/'#127#244#216#190#235'i'#247#210
+ +#230#243#155'F'#30#166#176'G'#156'}'#214#219#15#135'_R'#128#159#157'~'#211'"'
+ ,#236#135#253#193#131#183#9#252#247#11#143'?'#252#4'Y'#170'B/'#153#223'$'#240
+ +#199'~2sC~2'#193#7#167#251'*'#173#250#223#145'\'#255'GF'#245''''#201#143#196
+ +#160#244'8'#165#191#190'.''3'#216#20#248#202'W'#190#226#147#25#16#175#172#172
+ +'4'#8#252']'#250#161#27'2'#185'('#204#0#16#1'G'#5#8#176#157#187#131#149'O'#14
+ +#231#141'K'#202')'#29#230#28#129'f['#245#174#127#146#236#255#150#245#9'0'#17
+ +#196#146#31' '#154#128'I'#27'6'#181#3#158#211'_'#176#152's@'#251#8#220'^'#131
+ +'O'#157#233#229#20#198'w'#254#233'7'#213';'#255#254#159')'#253#12#157#159#1
+ +#226'mn^W'#151'>'#253'e'#245#234'/'#253'U'#181#249#214#23#143#241#203#158#208
+ +#198'/'#175#188#206'H{'''#179'O'#247#242'3'#224#207'X'#234'g'#21#201#207#241
+ +'~'#2'}'#6'{_'#136#0#165#189#147#157#247#24#252#186#181#151#158#212#211#207
+ +#210#228#229#149#237#31#212#130#197#196#181#251#149#14#249#193#238#223#18#213
+ +#31's'#252'q'#200#143#182'w'#8#15#195#231'Y'#236's'#132#203'vb'#195#166#9'_'
+ +#191'~'#29#154'@'#11#181#2#240#7#208#15#191'*aA'#204'1'#8'=p5'#247#252#206
+ +#157#254#234#167#198'I}'#213#23#167#160#23#232','#192#184#217'c'#18#8#26'uM'
+ +#0'l'#18'D'#146')'#136#16#161'4'#18'A'#152#208#180#21#243#29#18'0'#221#133'<'
+ +'!'#0#229#2#255'9D'#12#142'a6'#227#225#253#159#168#255#254#219#191#172#134
+ +#247'~z'#130#183#236#217#6#8#186#190#178#169#214'>'#254#179#234#213'?'#251'+'
+ +#234#218#159#248#165#163#191#249#176'k'#246'<'#158'PG'#218'kG'#191#201#231
+ +#207'm#'#143#194#230'/'#210'{y'#153#27#169#191#208#192#135#148#135#250'O'#132
+ +'0'#217#190#163'F[?"'#146#152'Ks'#15']'#223#143'?7'#187'{o7'#194#217#208#177
+ +#251#231#244'l'#163#197#23#18'='#182'%'#215#159#193'O8'#128#25#176#141#132
+ +#159#157#157#157#169'x'#253#13#248'_'#24#2#224#239's'#19#132#8#248#173'$I'
+ +#216#31'@'#11'B'#130#208#4#216#31'@'#235#149'\'#249#157'w'#247#214'?='#205
+ +#162#14#146#132#152#4#184'7'#0#145'@gMu'#174#189'%'#229#194#162#1#152#252#0
+ +'h'#1#146'-X8'#6#203#154'@a'#18#248#197#228'#N1'#209'Y'#237'='#248#255#254
+ +#205'?R?'#248'w'#255'DMw'#30#158#234'y'#4#245#166'jn\S+'#175'}'#130'$'#252
+ +#159'R7'#190#244#231'T}'#253#202'i_'#158#202#200#203#210'_Rz='#227#236#147'r'
+ +'^'#6#191#163#246'['#240#139#202#15#224#179'z'#207'*'#191#246#1#204'v'#31#168
+ +#193#195#183#233'usn'#238#193#239'Cyo'#154#229'W'#187'{?'#236#196#147#190#168
+ +'l'#214#238#23#167#223'.'#236'~ZX'#245#135#211#143'0'#240#152#222#187'O'#166
+ +#241#4#9'?'#199#233#245#175#142#211'x'#202'}'#152#2#180#6#9'X'#127#0#217'?'
+ +#151#29'S'#0#26#1#252#1#221'$'#243#187#239#246#215'?'#179#200#163#134'o'#204
+ +#1#216#247'$'#233#153#4#174'|'#156'H'#160'nA'#207'f'#128'h'#4'L'#2#145'&'#1
+ +#21#233#168#2#147'@h'#8'@r'#5'|'#129';'#214'2)'#225'Y'#159#166'|'#240#222#219
+ +#234#143#255#249#223'W'#15#254#247#31#208'C99'#190'/'#162'k'#17#183'{'#170'u'
+ +#245'e'#181#250#209#207#168'+'#159#251#170#186#250#249#175#210#245#175#159
+ +#246'%x'#250'03L'#219#130#30'c'#231#23#253#251#140#167#223'H~V'#225#231'I'#1
+ +'x'#6#255#156#155'{'#178'&@'#255#155#238#222'U'#163'G'#210#206'{Q'#168#253' '
+ +#146#203#173'}L'#231#181#131'/q'#156'~H'#245'E'#188#127#15#133'='#180#141'F'
+ +#144'P'#251#225#244'{D'#207#245#222'I'#218#253#238'8'#141'G|'#169'?@f'#22'b'
+ +#167#160#210'Z'#0#182#215#233#1#236#204#147'`'#229#189#254#250#167#19#21#198
+ +''#28#234'#p'#231'R'#217#151'I'
+ +#184#15#142'>'#14#251#137#31'`'#188#253#30'-'#239'jR'#224'i'#188'S'#142#22#0
+ +#252#27#205#193#237#245#198#240#145#11'~z'#182#140#221#15#240'o'#153'J?z'#230
+ +#239#201'4'#223#232#240#131#6' '#199#150#237#247','#151#242#196#190#215#245#7
+ +#208#197'h'#18#248'{'#164#10'm'#18#192#175'Hx'#144#179#4'iY'#3#9#204#210'x'
+ +#237#246#254#250'''3'#207#15'Yr#<'#24'j'#18#8#27'm'#213'!'#18#136#154#29#2'~'
+ +'h'#181#0#228#8'x'#236#20',H'#128#181#129'J'#152#208#212#17#24#18'`'#231' t'
+ +#148#220#153#144#164'`'#132#234#147#246#244'+y'#10#4'1'#219'{'#172#230#253#29
+ +'5'#31#236#210'zO-'#134#251'\9'#217'}'#249#13#213#185#249#250#217#149#224'G'
+ +#189#142'K'#239'C'#17#222's[u'#219#16#159#11#254#170#212#151#220#254'L'#154
+ +'z'#148#9'@K'#255#209#214#143#213'd'#239#30#189'n'#206#145#1'~'#159#228#248
+ +#175#214'F'#15#174#180#251'w'#243#2#252#200#244#131#221#15#240#195#238#127','
+ +'!'#191'{R'#223#15#27'n{:'#157#14#136#0#160#194'%''e'#247#31#245'r'#31#251'w'
+ +'W'#243#3#200#28'@3'#209'Md'#10'*'#237#16#196#26'$'#176'J m'#141#23#181#205
+ +#187#253#213#183#136#4#2'm'#207#11#9'p'#4#160#201#230'@D'#234#170#213#4#156
+ +#181#23#11#17#24'M'#128'L'#2#21'j'#191#130'2s'#17#26's'#192'M'#30'2UEn'#163
+ +#145'3l'#26'|'#232'F^'#10#226#8#224'M'#21#159#210#158'}'#137#239#187'i'#189
+ +#218#230#215#128#207#13#248#173#228'_0'#200#217#241'7'#211#161#190#225#163
+ ,#183#213#172#255'H'#146'|'#140#218#175'k'#251#187#209'd'#235'zw'#239'=m]d'
+ +#153'x'#252#145#236#3#240'#'#151#127'['#233'y'#253#24#252#216'F'#178#207'I'
+ +#198#251#15#27#167#253'('#151'R'#133'I'#11'h#'#25#136#180#128'K'#208#4'h'#31
+ +'Z'#0'H'#0#164#176'B@lM'#147'x'#237'N'#127#245#19#169#23#198#218#179'/>'#1
+ +#174#12#172#17#9'|L'#197#157'uM'#10#198#15'`'#192'/m'#198'=!'#2'_z'#10'('#19
+ +'%'#16#231#160'2'#230#128#239#21#4'`'#174#214#139'>]'#241'y'#25'.'#234']sGl|'
+ +'O'#202'wm'#3#143#170#179#207'8'#250#0'f'#212#243'/'#28#240#27#231#31#175#167
+ +'j'#240#240#7#164'ImK'#140'?'#209#196#145'j'#240#175#213'F'#247'/'#183#145
+ +#226'k'#193#159'I'#154'/g'#250')]'#226#251'H'#230#245#131#228#199#164#30#143
+ +'1'#171#207'|>'#31#31'w'#170#239'Q.'#227'i'#223'F'#207'8'#5#209'@'#4']'#132
+ +#208'P'#212#9#15'"O'#224#138#201#20#4#9'$y'#220#189#189#191#250#214'BE'#245
+ +#18#9#136's'#176's'#249#13#21'w/'#177'/'#192'3'#181#2#177#244#16#176'&A'#164
+ +#253#2'b'#14#168#208'/'#146#134#140'i '#13'F'#172'F`'#175#152#163#10#156#159
+ +':'#163#23'f'#148#146'xl'#171'.}'#140#193#159'i'#201'oc'#251#169'n'#226#1#240
+ +'+'''#204#151'K'#190'>'#171#244'3'#241#250#211#177'\B'#127#201't'#162#6#247
+ +#191#175#18#228#246'''s'#157#21#232#128#127#163'1'#184#189#217#28'>'#210#138
+ +'F'#150';'#146#31'*={'#252#149#238#237#7#240#223#151'p'#223'cH'#254#197'b1'
+ +#186'v'#237#26#156#131''''#234#244#171#142#179#240#236'Z'#18#232't:1'#177'b'
+ +#157'.T'#27#149#131#232'$'#4#2'0$ '#173#198'A'#2#205'L'#133#237#219#253#181
+ +'7gY'#220#214'}'#0#196#174#143't)qk'#243#150'j'#172'^'#215#146#222#1#189#217
+ +'f-'#160#166#147#139'8Dh'#219#142#7#133's0'#240#10#141#192'I rs'#137#205'f~'
+ +#224'''='#225#10'?'#211#173'>'#175']'#130#142#248'h='#245#250','#191#178#185
+ +#211#151#223#5#191#246#238#235#248#190'J'#181#202#175#4#176#156#155#159':'
+ +#246#254'\'#131'?'#183'j'#191'd'#242#17#25'$'#147#161#234#223#255#158'Ji]H~'
+ +#157#225#167#210','#191#220#217#255#201'j<'#217#21#193'o'#193#175#138#190'~'
+ +#166#190#255#1#164#191#132#254#30#163#190#159#198#168#209'h'#204#143';'#207
+ +#255'9'#222#165#227'?'#15'S:'#140#162#161#241'x'#140#134#162#29#169#25#184'd'
+ +'4'#1#165#251#7#160#177'H'#143#174'X'#147#16#218#188#211'_'#251#216'8'#173
+ +#173'x2'#239#160#206#254#211#18#191#190'rU'#181#214'oiM'#192#250#1'B'#157',$'
+ +'d'#224'I%'#161#138#138#190#2#166#152'Hq'#132#192#244#23#240#203#145#2#167
+ +#243'P.'#161#195#234#21#245#202#127#158'q'#228'O'#220'='#179#195'{'#234#129
+ +#167#255#238'|'#201#207#21#144#27#129#175#14#11#237'9'#133'<*-b'#251#197#162
+ +#129#207#210#127#190#144'p'#223'B'#180#129#5#255'o>'#216'a'#155'?'#157#142'u'
+ +''''#31'Z'#148#128#223'#'#241#127#181#187#247#163'n8'#27','#3#191#210#225'>'
+ +#128#31'-'#188#31#144'&'#203#14'?'#228#248'#'#220'G'#175#27#161#200'G'#157
+ +#146#211#239#131#222#157'c='#23#248#3'~'#252#227#31#251'h%F'#154'@'#195#228#8
+ +'`V!'#164#12#131#8'h'#141#164'!4'#26#237#210'Uk'#17#240#234#247#6'k'#175#15
+ +#23#245#13'c'#14'0'#17'DP'#241#145':'#220'Sm2'#9'PG'#224'K?'#193#2#252#142'6'
+ +#192#254#0'c'#14#232'm'#155'8Ti9f'#195#134#158#201'(tr'#207#171#253#7#204#173
+ +'=KW'#250','#143#202#245#202#157#166#156'%'#208#27#162#200#164'eW'#150#29'H'
+ +#231'Ui'#1'z'#227#237'O%'#212#151#207#231#142#195'O|'#0'D'#2#147#221#219'j'
+ +#178#253#158#222'w$?>'#223#167#15#184#222#219'{'#167#21#204#199'K'#192'ob'
+ +#253'h'#234#137'4_+'#249#233#153'}L'#160#223#165#231#23'5'#0' '#137'3'#1'~'
+ +#231'2'#159#153#193'$'#240#189#239'}/@x'#16'$@Z@W'#26#137#184#154#0'"'#3#235
+ +'('#28#162#27#129#18#227#248#254#160'wko'#222#188#234'['#245']k'#2#200#26#244
+ +#227#26#153#4#31'Q'#181#206#166#150#248#174#244#23#223#128#206#17'0'#249#2
+ +#129#205#30'TN'#6#161#237'@'#236#251#5#1'8m'#201#221#26#3#235#164#170#22#27
+ +#157#181'+~F'#134'Wr'#228#185#155#249#1#240'k'''#159'H'#251#180#144#250#165
+ +'t^'#168#251#137#238#215#175#9'@<'#254#226#237'7'#26#0#19#0#166#233#154'N'
+ +#213#136#164#254'|'#180#171#227#251'IR'#2#127#160#146#217'K'#221#221#31#214
+ +#131#197'T'#192'o'#28'~F'#242's'#129#15'r'#252#209#220#3#146#31#26#0#212#254
+ +'('#138'v'#7#131#193#136#180#218#19'M'#243'='#210'u?'#237#19'XvN&<'#184#181
+ +#181#21#211'Ek'#208#5'4$'#128'lA'#180#24#135')'#192'$@'#251']'#248#4#232'X'
+ +#237#209#168#243#210#246#180'}SO8bH@2'#0#137#8#234#189#171#170#185#241'*'#131
+ +#222's'#181#129'H'#147#129'''-'#199#149'q'#14'F'#21'm'#192'u'#16#154'z'#2'&'
+ +#3'eg)'#202#29'2p'#181#255#220'!'#133#15'f'#26#188'(C'#210'u\'#137#159#23#181
+ +#249#202'sT}'#199#201'W'#168#249'"'#245#197#214#231'2'#222#180'p'#242'1'#232
+ +#165#148#215'z'#252#141#234'/'#170'>'#219#254#201'B-'#250#187'j'#184#245#14
+ +#29#27#219#200#128#174#229#151#137';'#189#249#228#165#238#222#15#185#170#143
+ +#235#8'l'#168#143'S|'#149'd'#249')'#237#224'C'#184#15'R'#255#1#212'~'#178#249
+ +'w'#233#249#29'6'#155#205')i'#183#201'iz'#252#151#141#179#250#4#150'H'#160'A'
+ +'c2'#153#160#145#8#155#3'B'#2' '#3#209#4'T'#151#128#136#190#131#181#253'Yc'
+ +#243#225#168#251'Z'#166#194'PKn'#169'!'#8'C1'#9#186#164#13#188#193#213#132#0
+ +'>'#28#129#158'D'#4#220#16#161#155'9'#168#156'Z'#2#229#18#129#231#23#179#22
+ ,#251#198'I'#232'j'#3'E'#30'a'#238#148#25'z'#213#146#195#3#153'mg'#245#182#188
+ +#223#187#249#4#127#134#233#191#167#156#198#28'|'#188#2'zP'#168#3'~'#211#173
+ +#135'U}'#9#239')'#167'O?'#188#245#249#28#251#11'+'#249's)'#238#201'%'#207'?'
+ +''''#240#143'wn'#171')-'#153'y]*R_f'#238'iG'#147#237#171#173#253#219#129#151
+ +'&:'#151'(3e'#189#240#246'3'#248#149#206#242'CO?'#246#248#195#230'G'#168#15
+ +#224#167'eH'#166#236#20#177#254#179#6'~}'#205#207#238#176#133'C'#4#254#136'.'
+ +'b'#147'L'#130'.H@:'#10']6'#225'A%$'#128#16'!H`'#158#133#237#187#131#222#235
+ +#179#172#214#230'y'#3#140'o'#192#132#10#163#186'j_zM'#197#221#205#2#248'f1'#4
+ +#16'W'#142#7#186#211#144#178#243#19#6'em@'#26#143#148'#'#6#158#149#244#172#29
+ +','#137#30#152#249#11#142'zG'#206#204#147#227#222#168#167#189' ?'#252#128'i'
+ +#197#229'y'#14#248'3'''#150#175#28#27#223'Q'#247'y'#31#182#190#27#222'K'#11
+ +#137#159#27#208''':'#181'7/'#145'@'#194#245#19'#'#146#250#243#225#142'h'#11
+ +':'#188#167#138#30'~'#217#165'F'#255#246'Zc'#244#152'S{%'#212#167'tz/O'#223
+ +'-s'#248'A'#237'7'#137'>'#15#207#19#248#143't'#239'N'#251#252#12#9#244#251
+ +#253#184#213'j5'#232#226#162#197#248#154#132#4#225#16#188#12#173'@i'#18#232
+ +'1'#9'('#175#158#7'~'#252'p'#208#189#185'?o]-'#146'|t'#184#15'&'#129'oL'#130
+ +#245'W'#8#236#177#205#9#240'L'#5'a'#172'5'#6#171#9'p'#10'qPT'#21#210':'#15
+ +#220')'#202#140'V'#224#21'D'#160#138#237'"JP'#172'K%'#200#206'f^9'#236'='#235
+ +#173'z'#158'w'#245#153#31#215#188#152'>'#219'='#149#188#188#145';/'#178#245
+ +#249'n'#18#143#177#243'MG^'#145#250'*u$'#191'c'#235#27'/?'#219#237#12#244'E'
+ +#161#254#207#11'R'#192#255#23#240#242'?'#254'!i'#1#19#177#247'u|'#223'|n'#228
+ +'/&'#215#218'{?i'#132's'#174#229#23'G'#4#236'}'#147#222';'#145'P'#31#171#253
+ +'J'#194'}'#178'F'#169#239#222'y'#0#127#233#254#156#209#193#231'W%'#1'd'#12'"'
+ +'Y'#136'.'#178'!'#1#152#5#151'0'#247#128#210'y'#2'm'#186#212'u'#146#184#241
+ +'p'#222'X{0^'#185#149#145#236#215'@-'#155#4'H!'#6#9#196#157#13#201#7#144#136
+ +#128#1#191')$'#10'+$ '#11#147#138'h'#6#156'N,'#145#130'\'#162#6'V'#27'x'#26
+ +#17'8'#221#137'rG;'#240#202'^'#196''''#220#177#147#184#149#249#225#135'+'#167
+ +'i'#140'{'#175#244'6'#167'<'#23#0'WO'#0'~^'#150#248#202#22#239'8N>c'#239#187
+ +'v'#191#149#252#139#18#240'Y'#19#152'N'#213'd'#251#167'j6'#220'b'#130'@'#179
+ +#15'+'#241'3=__'''#154'<'#190#210#234#223'!'#149'?'#205'm'#147'@]'#210#235'd'
+ +#248#245#165#178#15#222#254'G'#146#215#255'H4'#129'}8'#252'666'#206'<'#248
+ +#237#253'9'#227#195#146#128#18#159#128#146'2b"'#130#21'h'#2#146'%h'#178#5'9Y'
+ +#136'$r'#155#192#211#160';'#23'''Y'#212#184';'#236#189'6Kk'#29'S'#0'd'#27#140
+ +#8#184#163#214#26#19'APo'#21#17#1#167#138#208's'#251#10'<'#137#8#220#148'b'
+ +#153#194#220#134#14#205#196'%'#165')'#204#202'k7'#132'h'#230'4'#176#135#14
+ +#132#20#143'n:<'#151'q'#152'*o'#156'v'#246#144#145#236#230#127#249#146#216
+ +#189'~'#157#14#227'I'#230#158'!'#2'k'#227'/Q'#247'S'#145#248#2'|'#181#208#149
+ +'|J'#236'w'#215#222'7'#206'?E'#251#147#254'=5'#221#189#173#19#127#210'%*?}'
+ +#209#229#198#224#189#149#198'h'#199#203'MI'#143#14#243')'#1'?'#173#199#180
+ +#223#151#154'~4k'#132#196'GE'#31#182#183'I('#161#145'''{'#251#201'\=s'#14#191
+ +'e'#227'<'#16#128'=OC'#2#251#251#251#17']'#228':]x'#174#29#136#162'h'#157#246
+ +'a'#6'\'#18''''#225#134#212#14'th'#27'}'#4'b'#210#0#162'G'#195#206'K{U'#147
+ +' '#212#201'C'#138#171#11'#U'#235']S'#245#181#27#156'M'#200#14'@'#199#4#0#1
+ +'(''Dh'#136#192#148#24'+'#153#181'X'#249#229#198'#'#182#21'Y%'#179'P'#231#15
+ +'-'''#3#207#209#255#139#222#4#166#151#161'{UN'#136#4#170#143#176#19#182'+m'
+ +#229#5'Y'#149'CxN'#165#158#27#198'3N='''#150'oA'#159#154'm'#0'>#b'#0#160'u'
+ +#17#143'Z'#20#13';'#173#199'?IJ>'#0#132#0#147#209#158#154#236#252'D-&'#131'B'
+ +#213#135#169#128#207'pU'#254#238#238'O'#234'^2'#245't'#229'@'#213#211'?'#147
+ +#22#222#168#234#219'q'#193#15'O'#127#24#134#232#235#223'_,'#22#227#25#141#243
+ +#2'~'#140#243'B'#0#246'\'#221'<'#1'8'#252#232#194#183#232'p'#143'.'#254#186
+ +'8'#7'A'#4#156','#132'V'#227'$'#129';$u'#27#180'_#'#240'E'#131'i}'#237#193
+ +#164#247'j'#150#235#249#7#180#147'0`'#21#222#244#16#132'Y'#208'X{'#133#139
+ +#138#188#208#137#6#200#220#3#134#8'4q'#4#162#29#136'&`{'#13'8]'#137#131#138
+ +#163'P'#8#161'hF"'#19#152#28'H76'#161#195#162','#185#240#15'T='#3'G'#200'1'
+ +#248#160'%'#203'y^yi'#25#240'z'#229'4'#218'TE|'#159'%'#189#153'l'#195#190#230
+ +#160#154#207#246'~'#154#149#218'r+'#150#250#153#6#173#0'_'#137'='#175#164#131
+ +#143'2'#4#144'h'#239#127':''u'#127#231']5'#239'?'#210#173#186'L'#26'p'#146#10
+ +#209'h'#149#31#149'|'#151'['#253#187'P'#249'9'#188#143#254'}'#160'!m'#239#219
+ +#24#191#1#191#210'e'#189#15'e'#198#222#199'R'#207'? '#1'4>K'#25'~G'#29#231
+ +#137#0#236'9'#155#180'a'#218#142#26#141'F'#13#17#2#164#7#27#231#160'8'#5'/'
+ +#217#218#1#29'&'#132's'#176#6#147' Sa'#252'h'#220'~'#169'?onz@'#166#137#20
+ +#216'f!Z'#226#195',h'#192', B'#176'R'#223#1#188'Bd '#22'B'#16'M@9'#25#132#214
+ +'I'#24'>A+8'#204'GP'#154#242#188#186'v:'#26'['#13#193#161#130#165#190#130'CB'
+ +#143'O'#200#187#183#160'.%'#224#23#26'H.'#234'})Q'#199'%'#0#215#147'/'#158'}'
+ ,#163#226#219'p'#158'q'#240'Y'#208#167'b'#231';'#158'}l'#11#192#181#202#175
+ +#215':'#175#223'8'#2'%vO'#235#217#222'}5'#222#131#186'?'#211#199#229'3y'#157
+ +#167'"'#245#147#201#149#230#254#237'f<'#27'z'#26#247'8'#15#146#250'%{'#223'&'
+ +#248#208#178'C'#210#254'1'#9#153'G'#210#213'g'#155#128#191'K'#160#31#160#149
+ +#23#13#152#8#231#10#252'K'#158#138's3,'#9#208#197#15'k4'#200#12'h"B'#16#4#193
+ +#170#227#23#128'F'#0#18'X'#5'A B &A'#148#19#196''''#139#176#253'p'#178#242
+ +#202','#141'ZE'#235#240#162'('#200#147'9'#10'k'#221'+'#170#182'rM'#5'h'#162
+ +#17#154'y'#8#3#199#28'pM'#3#9#17#134'RK`'#10#140'l'#14'A Z'#129#201'$t'#218
+ +#146'U'#137#160'j*'#148#202#146'+'#21#137#21'G'#162';'#242''''#146'A'#165#216
+ +'f'#217'c'#235'Jw'#222#168#172'e;7'#137'<'#153#27#190'3'#137'<'#142#164'wc'
+ +#249#2'|'#29#203'/'#192#175#137#192#9#241#217't^'#13'r'#237#3'H'#10''' -'#139
+ +#225#14#219#249#9#171#251#186'I'#167#146'L>'#179#246#232#207'j}t'#127#189'1x'
+ +#228#177#180#207'3'#147#214#171'$'#190'O'#203'\j'#249#135#226#233#135's'#15
+ +#210#30#249#252'['#178#191'O'#207#220#160#223#239'O'#187#221#238#156#8' =o'
+ +#224#175'>'#9#231'm'#148'J'#137'I'#19#136'%u'#152#157#131't'#140#181#1#144#0
+ +#250#11#210'z'#141#253#2#202'k#}'#152#182'czDc rw'#218#186#180'=m_'#207'H'
+ +#164#235#226#31#237'$'#132'fP'#168#249#145#170#181'/'#169#6#17#129#31'7'#180
+ +#244'7j'#191'k'#14#24#127'@'#224#164#17#187#166#129#201'!p'#29#133#198'<'#176
+ +#4#224'W'#18#139#180'G'#192#246'.'#180'='#11#141'iP'#152#3'n'#194'Q'#217';'
+ +#239#29'XU"s'#202'Az'#217#181#144#187#161'='#137#215#231'y'#197#214#151'B'#29
+ +#163#226'gy'#145#167'oSu'#139')'#183'\'#201'_H'#253#20'M5'#197'VO-'#9#184'a'
+ +#190#220#170#251#198'!H'#18#127#184#173#166'{wU:'#27#22'f'#129#11'~'#241')'
+ +#180#162#217'.I'#253';'#152#156#211'C/`}n'#172#242'+'#221#187#207#228#244#143
+ +#140#167#159#182#183#197#219#191'Ej'#254'6'#9#24'h'#2'}'#147#215#239#244#241
+ +'3'#192'?7'#224'w'#30#135's;,'#9#16#1#4#8#19#18#27#195'9'#216#154#205'f=h'#3
+ +#244#127#244#26'D'#171'1h'#2#240#11#160'r'#144#211#135#17'% '#192'D'#244#17
+ +'A'#146#249#241#163'I'#247#230'`'#214'X'#247'l'#241'O'#1'^?0 '#142#184#166#0
+ +#206'B'#244#211'3'#166#0#167#13'['#208#23#161'A'#27'!'#136#180#244#207#131
+ +#224'@wb'#235'#p*'#15#11'"P:'#164'h'#211#139#165']'#153'*L'#4#151#24#150'^"'
+ +#175'r'#197#170#26#192'!'#14#190#18#15#184#245#246#216#204#242#146#189'o5'#0
+ +'7W'#223#128#221'z'#244#141#202'/'#246'~'#166#167#219'V'#226#228#179#128#183
+ +#29'{'#202#224#183#197'='#236#253'_'#168#217'`K'#205#246#239#17#240#199#146
+ +#16#148'X'#147#1#251'J:'#246'D^2'#187#212#26#220'n'#215#166'}'#248#28'<'#143
+ +'U~V'#252#233#146#177#163'Oz'#247'Me'#178'Nk'#239'C'#237#151#153'{9'#190#15
+ +#149#159#20#206'1b'#252#245'z'#29#164'a'#234#249#237'U:O'#227#188#19#128#249
+ +#13'H'#24#194#154'#'#4'p'#14#18#1'4E'#27'X5'#190#1'!'#1'6'#9'h'#191#7#191#0
+ +'m'#195'A'#8'm'#128#222#231#251#163'$'#238'>'#28'uo.'#178#168#233#154#5#202
+ +'I+V'#226''''#136#219#27#170#222#187#174#130'F'#235#160#212'7'#170#191'C'#4
+ +#134'L'#148'K'#2#2'z'#229'U'#157#133#14')x'#166#10'Q9~'#130'J7cq$'#30#152#241
+ +#232#176#154#3'[m'#231#188#196'm'#180'a6'#189'B+'#240#158#2'zW'#213#247'*'
+ +#222'|'#29#215#207#172'Df'#7'`R'#168#251#158#1'}'#226'H~'#163#13'd'#134#8'2'
+ +#142#223#207#6#143#24#248#217'bb'#237'~'#227#216#203'\u'#159#132#252'J}'#252
+ +'p'#179'9x'#224#209#142#199#165#130#224#29#218'f%'#198':'#250'f'#210#187#207
+ +'t'#238#133#167#223#130#31#19'v'#160#137#7#254#143#254'}'#163#209'h^'#241#244
+ +'+u'#14#193#127#200#147'q.'#135#141#16#160#156#248#214#173'['#225#214#214'V'
+ +#141#14#213#137#173#17'*'#236#145#250#134'b'#162'u''u'#24#251#200'#hC'#27#160
+ +#237#26#251#6''#204'r'#143#204#130#246#229#221'Y'#243'J'#154#135#145'1'#11
+ +#236':'#8#172#175#0'N'#191#184#181#166#234'+D'#4#245'N'#17#1'p{'#10#28#0#190
+ +#16#131#235#24'tk'#11'l'#152'R'#230'3t'#29#134'Nv!k'#7'jIU'#162'\'#17#175#148
+ +'\T'#190#213#182#143'A'#245'B'#26#233'_r'#240')I'#218#145'}3}'#182#19#194#179
+ +#224#183#251#6#240'N"O'#213#203'/'#241'}'#227#236'c'#144#27#147'@r'#251#141
+ +'6'#144'%s'#246#232'O'#25#248'3'#171#254'g'#198#163#239'F'#17'h'#187'I'#234
+ +#254#229'F'#255'^'#28#192'3O'#146#158#5'>'#199#245'3'#201#231#183'R'#159#22
+ +#19#226'c'#149#31#160#199#2#149'_'#8#1#29'|'#198#244#182')'#217#253' '#140
+ +#132#180#206#236'<'#132#249#142#4#156#23'h'#176's'#240#219#223#254'6'#251#5
+ +#232#166'E'#4#234':'#28#132'259'#155#4'XD'#27'0$'#208#165#183#146'>'#175#26#4
+ +#167#24'f'#1#129'='#160#199'%'#220#157#183'6'#247'&'#173#203#137#10#226#3'D'
+ +#224#23#246'>4'#130#176#209'!'#173'`'#147#8'a]'#249'a,m'#198#140#3#240'0'#167
+ +#224'!'#5'F'#146'3'#224#149'|'#3#166#23'A1'#169#137'%'#2#153#224#196'LuV'#10
+ +#18#10'7'#148#156#132#14#3'xF'#210'Wd'#153#145#246#7#28'{N'#252#222#149#252
+ +#182'B'#207#237#200'c'#192'/'#132#160'\'#167#159#149#242#142#211#207#233#224
+ +#131#255'-'#166#251'j1'#220#162'e'#155'I w'#205#128','#147#150'_'#236#220#195
+ +'~'#222#138'g'#187#27#141#193#131'Z'#184#152#150#212'}'#199#214#151#182']'
+ +#166'c/l'#249'}i'#226#193#158'~Z?Fl'#159#164#252'>='''#3'2/'#199#244','#205
+ ,'{'#189#30#192#127'n'#237#253#165#128'9'#237#19'8'#166#223'T2'#9'h N'#211'di'
+ +'O'#128#167#155'j'#137'@'#204#3#236#19#9#168#14#1#174'A'#251'u:'#30#25#179
+ +#128'@'#21#236#205'Z'#27#187#227#230#229#133#10#235#218'F'#247#203#211#141#17
+ +#1'('#223#183'ZA'#173#177#170'""'#131#176#185#162#163#4#230#181#142'3'#208'H'
+ +'~'#255'0-'#192#152#8'&'#147#208#248#7#248#23'V2'#12#221#28#130#220#137#12#8
+ +#27#152#196#220#131#209#130'Jz'#174#167#172'j/'#255'V'#226#245'+Iyc'#227#27
+ +'{'#223'4'#227#176'Z'#128#1#186#172#165#192#166't'#220'M'#237'u'#215'('#203
+ +#157#13#31'3'#240'S'#132#242'2'']W'#166#220#206'e'#209#192'O'#243'vm'#182#189
+ +#217#24'>'#140'|H|'#28#23#191'>'#171#251#220'%'#208#205#232#227#240#30#242
+ +#249'i'#189'/'#237#187#182#205'"'#206'?'#28#199'k'#166'F'#229''''#205'2;'#207
+ +#246#254'a`y'#17'G'#201'$@'#168#176#213'j'#197#2'lT'#12'v'#197#25#184'J'#140
+ +#143#232#0#22#248#5'D'#27'P-!'#2#152#5'a'#206'd'#128#174#225#190#191'7k'#174
+ +#237#142'[W'#230'y'#216#176#206':'#3'|'#207'H'#242#162#2#17#154'@'#212#222' '
+ +#173'`C'#5#141#142#227#252#11#184#231#160#231'8'#2#139#168'@u'#10'3'#207#2
+ +#222'F'#5#2#209#4'\'#237#192#151#144#161#149#252'U'#7'`%'#159#192#12#183#149
+ +'6'#239'+'#235#28#176#213'zF'#229'O'#171#234'~&fA'#230'T'#234#21#206'?~'#189
+ +#209#0'*a'#191#18#9','#230'j6'#218'f'#208''''#211'A'#161'!'#152'L@'#199'l0}'
+ +#0#16#210#235#198#147#199#27#4'|x'#246'M'#190#241#19#212'}k'#235#211#210#151
+ +#238'='#12'~'#186#207#144#254#216#222#15#130#128#19'{h'#153#145#244'_ '#196
+ +#247#162#168#252'K'#129#242#2#15'k'#18' J'#128#178'b'#186#185'54'#25'!R@'#227
+ +'Q'#152#5'+ '#1#133'Y'#137'5'#9'@'#27#232#209#210#17#179#160#238'{~Lk'#16'A'
+ +#8'"'#240#9'}'#251#179#250#234#206#164'ue'#150'!'#135#192#128#177#144#218#5
+ +#176#3'K'#10'a'#212'Tq'#7'Z'#193#154#10'j'#141'2'#184#157#210'bo'#9'!'#184#9
+ +'C'#133#25#224#21'~'#2'''R`o'#173'u'#11'H'#180#192'M$'#146'W'#185'~'#128#210
+ +#172#185#178'*'#194'}'#174#244#207#156#233#180#225#240#203'd'#178#205#138#183
+ +#191'*'#245#179#188#18#1'H'#212'b'#178#175#230'P'#241#199#187#156#216#147';6'
+ +#189#251'~K '#244'}>1B'#183'6f'#224#7#200#15'6'#192#231#138#221'2'#240#149#6
+ +'?'#128#143'N'#189'#'#201#229#223#23#240#195#185#135#25'y'#25#248#240#240'+M'
+ +#14#211'N'#167'3G'#3#143'7'#223'|'#243#133'R'#249#15#0#228#180'O'#224#132'~#'
+ +#155#4#208#6'h;Z]]'#141#160#13#200#140'D0'#11'z'#162#17#172#233#244'aM'#4#180
+ +'&'#18'Pm'#186#235#220'l'#4'&'#129'o'#136' '#131'F'#224'y'#195#164#209#219
+ +#153'4/O'#211'Z'#7#200#180#192'tH'#160'4'#231#128#152#0#232'I'#16#212'z*jt'
+ +#201#168#232#210'~'#173#210'[`I'#231'!G'#213'/'#171#254'x'#173#18#159#128#241
+ +#234'{'#182#152#168#8#4'x'#149#181'*7'#222'PE'#218#190#178#13'8'#157#146#221
+ +#204#13#241#21#234#190'w'#192#23'P'#201#233'7'#145#0#2'v2'#27#170#20'v'#253
+ +#164'O'#219#131'"'#219#207'x'#239#197#137#231#153#254'~v;'#231'p^'#167'6'#217
+ +'^'#175#143#182'|'#143'sy'#213'2'#224';'#237#185#173#147'O'#233#9':'#160#214
+ +#239#25#240#3#248'$'#12#246#200#222#135#3#16'z'#254#132'l'#253#217#139#230
+ +#232'{'#26'8>,'#227#128'6P'#171#213'bz^0G'#22#166'*G'#159#129#30#28#133#240
+ +#17#28#212#6'T'#211#152#5#4#180#18#17'(.'#25#11#163#253'yc}0k'#172#205#210
+ +#168'Y'#0#180#172#198#27#245'>'#247#202#196#0'B'#8#27'+*'#170'wT'#0'B'#128#19
+ +#209'!'#0#27#14#148#162#162'jc'#210#146#9#224'4"'#177'w'#185#218#140'D'#194
+ +'~n'#233'n)'#12#232'j'#2#198#9#232#168#251'n'#184'/'#207'+I?yA'#0'H'#206'I'
+ +#166'}'#150#244#201'tH'#255'J'#10''' '#155#20'i)4'#200'Q'#0'K&'#184#184'Y'
+ +#138#4#158#149#218'x'#167#25#209#135'i'#204#231#154#160#24#248#0'<'#235#252
+ +'b'#231'/*'#234#254'H'#226#250#198#214'G'#136'oW'#188#251'}'#186#215'C'#168
+ +#251#176#245'www'#23'd'#231'sl'#255#19#159#248'D'#254#162#131#223'yB>4'#163
+ +#164#13#192'7'#176#178#178#18#17#25#208'f'#204'}'#6'h'#1#216#225'(\1'#218#128
+ +#210#26#2#250#18'"'#164'h'#136#0'Y'#132'1a.'#160'g=dg!'#20'r'#210#11#166'i'
+ +#220#216#155'5'#215'G'#179#218'Z'#162#130#200'S'#5#25#20#146#220#169#7#240
+ +#141#243#207#28#15#148#31'7Y;'#8#226#22'}B'#131#9#130#29#141#202'5'#3#156#181
+ +#141#18#136#170#159#171#194'$'#200#171#209#1'U'#16#130#155#244#227'6'#222'4'
+ +#7#149#201#4#212'$'#192' u'#18'}'#12#232#177'dp'#188#211#146'/'#198'l'#199'c'
+ +#201#200'4/'#1#190#186'm'#181#137#204#250#20'`'#195'7'#195'y'#191'S'#159#236
+ +'t'#163#233#158#199'I'#5'b'#143#232#188#131'Ll|l'#1#244#236#224's'#128#143
+ +#134#29'#'#153#153#135#195'{'#198#222'7'#14'>'#216#249't'#175#199't'#159#167
+ +'('#224'[b'#235';W'#224#197#29#31'6'#2#176#191#217'h'#3#155#155#155#254't:'
+ +#13'1S1'#252#3'0'#11#232#223'-'#178#7#225#12'D6'#225#138'8'#7'W'#196'y'#168
+ +#157#132#158#215#164#199#177'A'#159'V;@'#4#30#224#166'Q:'#152#215#187#253'Yc'
+ +'}'#148#196'+'#185#22#233'V'#133'7)'#191'E'#135#225#162#243#176'K'#8#185#152
+ +#0#164'x'#16#25#212#153#28#130#176#206')'#201'>'#214'd>'#148#10#139'J'#191
+ +#244'`'#219#242'"G'#160#236#237#247'Jf@^$'#7#25'3'#1#248'K'#209'H'#19'@'#159
+ +'p'#197']'#150#152#245#212#206#198#163#242#195#0#15#252'f%'#147#1#239'1'#251
+ +#181'`1&'#21#127#167'GK'#232#193'!'#160'L'#237'0'#147'B'#154'iu'#223#177#241
+ ,#171#18#223#216#249#3#1'?'#146'w'#0'~^'#144#194'K'#210#30#197';'#172#238'w'
+ +#187#221#217#214#214'V'#226'x'#248'_X['#255#176#241'a$'#128#210'o_f'#22#208
+ +#225#26#217#130#28'6$'#2#128'F'#208's'#23#209#6#208'k'#160'm'#136#128#128#140
+ +'(CL'#251#16#211'Rc'#204#157#238'|'#180'*O'#9#206#251#179#198#234'h^'#235'M'
+ +#211#168#157#230#162#25#24#199#158'r'#10#131'J'#132'`'#156#127#190'>ig'#187
+ +#152#199#16']'#144#27'*'#8'"q:'#134'tX"'#17#158#164'"'#243#233#232#181'/Z'
+ +#134#150#190#137#216#218'R)'#151'9'#139's'#28#146#28#18#158'_'#207#225'7'#7
+ +#196#182#196#183#240#1#184#0'W'#165#130' 1#8T'#167#242#154#191#24#213#163#249
+ +#176'G*>Zn'#23#17#8#145#246'8'#3#2'>x'#18#206'}''o'#223#134#244#164'K'#207
+ +#184#2'|'#187#208'=d'#224'#'#172#135'L>"'#2#246#238'#'#149#151#8' '#251#176
+ +'I}w|'#152#9#192#140#3'f'#1'B'#127#244'p'#196#198'QH'#255'o'#9#216#187#244' '
+ +#245#184#150#128#136'@4'#2'v'#20'*'#204'T'#164#188':4'#2')4'#10#173'V'#224'#'
+ +#29'E'#251#10#176#13#208#18#9#212#137#12#186#147'E'#220#157'$q'#139#224#16#26
+ +'S'#161#232''''#232';'#205'D+'#246#190#152#2#150','#148#155'*l~'#150#252'@.'
+ +#30':$$'#232#216#255#182'EW'#169'1'#191#201#250'S'#165'\'#0'['#221#167#138
+ +#148'`'#6'u'#166'T'#158'/'#7'<'#214#181' '#25#215#131#249#176#25#207#251#237
+ +'h6'#242#149'8'#243'<61'#140'moA'#175't'#202'.'#24#133#213'|Y'#230#198#179'o'
+ +'T}'#19#211#151#5#158#254'>'#128'OD>'#140#162'h'#12#137'O'#199#167't'#127#23
+ +'t<'#249'0'#170#251#203#198#5#1#20#195's'#205#130';w'#238#4#198'?'#128'9'#7
+ +#232'!B'#205'@'#203#241#19#244'$'#140#200'k'#248#7#20'"'#6'9W'#26#214#161#209
+ +#18#216#17'm@BQ'#24#248#30#200' '#160'c>'#180'^F'#165'/'#229'<'#244'wL$@'#132
+ +#208#153'.'#162#206'4'#141#219#153#14#8#138#237'^T'#4#22'e'#194#170#168#10'T'
+ +#254'R'#240#219#191'U'#207#127#241#207'J'#246'_'#197#7'`Gn'#205#0#3'z'#183
+ +#145'g'#225'G(^g'#0#31#251#201#164#22#206#135#173'h>h'#147#164#15#252'4)^c'
+ +#153#197#128'^Y'#21#255#160#180'/'#169#250#144#248'p'#224')'#1#187#164#242
+ +#150#164#189#1'~'#171#213#154#141'F#'#246#236#147#169#151'~X'#213#253'e'#227
+ +#130#0#202#227#128#127#192#16#1'=H'#28':'#164#127's2'#17#173'['#244#0#162#216
+ +#168'+'#26#129#171#13#176#143#0#175#229#228'#'#223#135'Ya'#200' 8@'#6#128#174
+ +#158'`'#132'a'#142'|<"'#132#246'x'#17#183#146'4'#168#207#179#176#190'H'#131
+ +'Z'#170#160#219'k'#251#221'8'#245#140'K'#191'T'#13#184'$'#239#223#141#8#228
+ +#203'~t5'#20'h'#134'['#251#239#185#210#221#253#191#6'n'#228#167#211#208#207
+ +'fQ'#144#204#234#225'bL'#18'~'#16'.'#3#188#233#18'"'#182'C'#174#127#145#168
+ +#248'E'#214#30'-'#11'g'#218'-'#171#234'+'#157#190#203#224#167'{'#224#18#192
+ +#144'#'#179'I'#194#210#254#2#248'O'#31#23#4#176'|,%'#2'Z'#135#244'@'#177'F'#0
+ +'`'#211#186'I*f'#139#236'J'#214#10#132#16#12#9'X"@'#19#18#218#6'y'#212'@'#6
+ +' '#2#218#14#133#12'|'#218#151#194#2#206#177#169#16#130#178#128'N'#179' '#154
+ +'fQm'#158#16')'#164'!'#19'C'#146#250#181'E'#22#214'r'#195#2'y'#17#247#207#221
+ +#219#235#29#248'y2'#242#165#155#252#170'R'#11'0'#253'7'#240#178'E'#236#167
+ +#179#200'O'#166'Q'#152#206#226' '#153#214'BZ'#252'd^'#10#31#28#4#188#212#222
+ +#235#20']Ro'#178#220#168#19#185'JM'''#30'U'#150#246'('#207#157'J?>'#11'|'#168
+ +#251't'#157#135#0#191#0#30'j>&'#221#132'I0E'#6#159#249#172'%'#192'_'#242'K?'
+ +#188#227#130#0#158'<'#150#18#1'|'#4#237'6'#201#183#217#140';'#20#19#1#160#203
+ +#144#169'5h'#201#186'm'#246#141#198#0#243'@i'#13#2#4#2'2`"'#144#133#181#2'!'
+ +#4#175'B'#8#162#229#235'F'#0'E*'#191#201#243#247#2'"'#129'('#205#252' '#205
+ +#149#159#229'~'#0#19'"'#203#184#160')'#160#181#143#207'&'#158#241#233'8'#142
+ +#249'x'#15' '#233'{y'#202#139#162'Wy'#10#219#153'g'#142'y'#244#137'~'#158#6#4
+ +'N'#218'N#?K0C'#14#127#181#237#249#167#247#204'1}Z'#185#20#11'j'#213#222#145
+ +#240#12'B'#237#197#183'q{+'#237'Mi'#174#210#192#159'HW'#158#145'*'#128#15#169
+ +#143#184'='#239#147#186#143#10#189'1'#173'!'#241#209#140'snl'#252'G'#143#30
+ +'e'#23#192#127#250#184' '#128#163#13'K'#4#223#253#238'w=4%'#5#25#208#161#144
+ +#164'N'#212'l6'#1'd'#214#10#232#129'lxz'#174'B'#180'('#3#240#153#4'h'#223#144
+ +'C'#211#209#10'jB'#6#136#30'DJG'#16't'#20'A'#19#2#242#10#8#139#220#2'Dr'#130
+ +#217'y^'#164#249#225#143#239#219'm'#140#220'sN'#250#224#207#240#14#252'#?'
+ +#176#225#202#240#138#242' '#249#0'z;/'#210#133'9'#25#152#147'!3'#237'P'#212
+ +#21'x'#158#199#217#3'.'#224#233'X"'#221'vy'#150#29#167'@'#7#224#7#152'a'#223
+ +#143' '#229#165' '#135#215't|'#4#208'C'#210#3#244#240#230'c!'#2'^'#192#171'O'
+ +#199#211#11#224'?'#219#184' '#128'g'#27'%"@'#212#224#210#165'K>I'#164#144#30
+ +'D&'#3#180''''#4#168#145'a'#8'2'#192#2'2P'#152#202#220'Y'#132#8#140'i'#192
+ +#230#1'k'#5#30';'#14']B`2'#160'c'#1'b'#8#162#29'0'#17#152#22' '#24'y'#145#223
+ +#167'r'#183#11'`'#165#17#192#129'y'#9#151#254'J'#227#225'We'#253'_)'#227#164
+ +#211'h'#215'L$'#130']'#25#231#157#150#242#136#238#231'6Vo='#248#6#240'R'#142
+ +'k'#194'x'#0#255'd'#137#212#231'E'#18'vX'#189#23#21#127#14#208'c'#166']'#196
+ +#241'WVV2x'#245#137#148#243#11#224'?'#219#184' '#128#247'7l^-'#194#135#244#16
+ +'z'#198'<'#160#135#18#128'E'#143'B6'#17#224'/'#160'}'#16'B'#131#164#22#8#129
+ ,'5'#0#172'}'#157'Q'#216#144'F'#165'L'#4'R'#177#200#239#177'D'#160#29#136#161
+ +#199'A}'#144#129'v '#210#182#246#31'(]'#151' '#219#170#152'}'#132#165's'#209
+ +'4'#200#156#244'!, '#160'Vy^v'#3'j'#183#164'W'#184#253#10'U>7'#157't'#217#129
+ +''''#222'{'#165#165#188#5#190'S'#127#207'^|'#165#165'=/p'#236#161#209#6#253
+ +'~'#168#243#19#172'%'#166'?!'#160'c'#31#196'0C=>'#169#247' '#142#132#142'!y'
+ +#7#128#207#156'8'#190#156#253#5#232#159'e\'#16#192#7#27#150#8#240#0#186'Z'#1
+ +'I'#168'`gg'#7'R;'#132#137#0#243#20'd'#0'p'#139#218'_'#23#240'#'#215#192#128
+ +#159'5'#2'G30D`4'#3#215'g`'#9'Ai'#13#1'$'#16'pI?'#231#28's'#242#156'''`'#247
+ +#12#17'('#19';8D'#19'p'#192#207#0'/'#8'AK~'#165'{'#230#27#213'>'#173#0#222
+ +#196#233#141#138'o'#156'y'#0#191#241#228'O'#5#220'v'#27#199#1'~'#243#127#168
+ +#245'x}'#20'Es'#0#31#210#30#234'='#17'jz'#227#198#141#20#160#135#180'w'#242
+ +#245#249'|O'#251'a8'#143#227#130#0#158#223'8'#160#21#12#6#3#175#211#233#4#180
+ +#248#244#0#179#153#0'I'#14'S'#129#30#234#152#30'n'#164#31'C'#202#215#232'X'
+ +#141#142#25'S'#192#152#5#150#4#232#189#186'eY'#161#21#132'UBP'#154#20'x'#246
+ +'$!'#4#156#147'/'#224#247'DK'#176#219#149#243#182#170#188'2'#210#221#181#225
+ +'s''>/'#210']z'#234#25#208'/'#28#208'W'#213'|+'#245'E'#221#231#181#144#194#12
+ +'*=IwH'#249#5'@O@_'#200'g&'#0'=T|c'#219#11#232#205'y'#186#235#139#241'>'#198
+ +#5#1#28#207'Xj"'#208#218#7#25'@3'#160#7#157'M'#5','#4'nL'#127#142#233#206'"'
+ +#151#16'|'#157'?`4'#6#248#22'P'#189#24#11#17'D'#134#16'@*'#244#186'RD'#1'D@'
+ +#175'E'#196#194#19'2`"'#192#182#28#243#212#146'x`'#201#142'/'#0#159#27#21'_'
+ +#21'j=7'#212#196'B'#223#195#192#167#207#157#211#246#1#2#192'B'#191'k'#230#2
+ +#158#200#14#210#29#239'Y@'#194#131'H'#232'xj$'#189#1'=]'#175#188#162#226#187
+ +#235#139#241#1#199#5#1#28#239#176#215#215'8'#14#141'f'#0'3aoo'#143#9'!@i'#218
+ +'`'#16#192'l'#160#151#134' '#3#172'A'#8' '#7':'#206'k'#128#158'^'#202'k9'#30
+ +#154#227'J'#252#4#202'1'#13#180'I'#192'f'#128'oH'#0#231#148'!.X'#144'@q'#178
+ +#5#208'sQ'#237'-'#240#177#166#247'X'#201#175#196#161''''#4#176'0'#251#134#0
+ +'d!<'''#6#228#144#236#176#223#23'Fk'#0#224#137#3#210#181#181#181#148'~?'#212
+ +#250#140'L'#168#28#160#191'p'#232#157#204#184' '#128#147#27#165'D\'#233'Y'
+ +#168'@'#8#208#12'n'#222#188#233'-#'#4#12#2'M '#160#14#5#212'au'#219#172#149
+ +'&'#14#214#0'0'#0'v'#1'k6'#155#217't:'#205#232#156#243'e'#18'~'#9#224#171#219#23#227#152
+ +#199#5#1#156#141'Q'#186#15#198'\'#192#182'1'#25#8'H'#30'H'#129'H'#192'#py'
+ +#134#24#8#148#30#200#129#128#232#25'r'#160'}'#143'@j'#23':'#206#128#199'6>'
+ +#19#219#4'V'#187#141#181#207#253'L'#148'"'#0#27#192#243'>}/o'#155#133#190'?'
+ +#7#208#137'Dr'#128#156#190'+'#235#247#251'9'#129#222#2#29#146#189#221'n'#231
+ +#6#236#248#156#11#192#159#205'qA'#0'gsT'#239#139''''#192'Q.1`'#13'r'#184'u'
+ +#235#150'7'#28#14'-9'#224'8'#8#2'k'#179'O'#192#230'5'#8#3#235#245#245'u'#187
+ +'m'#6#128#140'5Iy'#11'J'#2';o'#3#220'X?~'#252'8'#199'6@'#142#253'e@'#199#250
+ +#16#176'/'#219#191#24#167'8.'#8#224'|'#141'e'#247#235#0'9`'#24#130'0'#3'D'
+ +#177#236#3#161'Y`]'#175#215#15#0#211#128#218#29#6#224#24#0'9'#214#135#0#253
+ +#176'c'#23#227#12#141#11#2'x1'#198#179#220#199#163#190#246#168#224#189#0#249
+ +'9'#30#23#4'p1.'#198#135'x'#252#127'p'#251'ut'#3#215#244'"'#0#0#0#0'IEND'#174
+ +'B`'#130'('#0#0#0#128#0#0#0#0#1#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0
+ +#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#1#0#0#0#1#0#0#0#2#128#128#128#2'UUU'#3'@@@'#4'333'#5'III'#7'@@@'#8
+ +'999'#9'999'#9'MMM'#10'FFF'#11'FFF'#11'FFF'#11'MMM'#10'999'#9'@@@'#8'@@@'#8
+ +'UUU'#6'333'#5'UUU'#3#128#128#128#2#0#0#0#2#0#0#0#1#0#0#0#1#0#0#0#1#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#1#0#0#0#1#128#128#128#2'UUU'#3'UUU'#6'@@@'#8'FFF'#11'III'#14'<<'
+ +'<'#17'III'#21'EEE'#26'DDD'#30'DDD"EEE%AAA''DDD)AAA+AAA+AAA+DDD)AAA''GGG$FFF'
+ +'!DDD'#30'==='#25'@@@'#20'@@@'#16';;;'#13'FFF'#11'@@@'#8'333'#5'UUU'#3#128
+ +#128#128#2#0#0#0#1#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0
+ +#2'UUU'#3'+++'#6'999'#9'NNN'#13'CCC'#19'BBB'#27'GGG$DDD-CCC5DDD'#211'SC6'#219'W@0'#227'[>+'#235']<('#238'^<'''#240
+ +'_<%'#243'`<#'#245'a;"'#247'a:!'#248'a;"'#246'`<$'#245'_<%'#242'^='''#240'\='
+ +')'#237'Z=,'#233'V@1'#225'RD8'#217'NG?'#210'JHD'#204'IHC'#204'HHD'#204'GEC'
+ +#203'FEC'#202'EED'#198'EED'#195'DDC'#190'DDC'#183'DDD'#172'DDD'#157'DDD'#138
+ +'DDDtCCC\DDDDCCC.@@@'#28'DDD'#15'III'#7'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'@@'
+ +'@'#8'KKK'#17'HHH CCC5CCCPDDDlCCC'#134'DDC'#156'EED'#172'FEC'#185'GFD'#193'G'
+ +'FC'#198'HFC'#202'IGD'#203'PE;'#213'VA0'#227']<('#239'a;#'#246'd9'#30#254'g:'
+ +#29#255'g:'#30#255'i<'#30#255'j='#31#255'j>'#30#255'k>'#30#255'l?'#31#255'l@'
+ +#31#255'mA'#31#255'nA'#31#255'm@'#31#255'l@'#31#255'l?'#31#255'k>'#30#255'j>'
+ +#30#255'j='#31#255'i<'#30#255'g:'#30#255'f:'#29#255'd9'#31#252'`<#'#245'[=*'
+ +#236'UA3'#223'MF?'#210'IHC'#204'HFD'#204'FFC'#203'FFE'#200'DDC'#197'EED'#191
+ +'DCC'#182'DDD'#170'CCC'#152'CCC'#129'DDDfDDDKDDD1FFF'#29'@@@'#16'III'#7'UUU'
+ +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#3'II'
+ +'I'#7'@@@'#16'@@@ FFF7DDDRCCCoCCC'#140'DDC'#163'EED'#180'EED'#191'FFC'#198'I'
+ +'GD'#201'ME?'#208'UA2'#224'\<('#238'b9 '#250'f:'#29#255'h;'#30#255'j>'#30#255
+ +'m@'#31#255'oB '#255'qD '#255'sF '#255'uH!'#255'|L#'#255#128'O$'#255#133'Q%'
+ +#255#136'S&'#255#139'V'''#255#143'X('#255#145'Y)'#255#142'W('#255#139'U'''
+ +#255#135'S&'#255#131'Q%'#255#128'O$'#255'yK"'#255'tG!'#255'rE '#255'pD '#255
+ +'nA '#255'l@'#31#255'j='#31#255'g;'#30#255'e9'#29#255'a;!'#247'Z=+'#234'RB5'
+ +#221'JGC'#207'HFD'#204'FEC'#203'FFE'#200'EED'#196'DDC'#189'DDD'#177'CCC'#159
+ +'DDD'#135'CCCjBBBMBBB2FFF'#29'III'#14'UUU'#6#128#128#128#2#0#0#0#1#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#2'333'#5';;;'#13'BBB'#27'AAA3BBBQDDDqDDD'#142'EED'#165
+ +'EDB'#183'FEC'#194'HFD'#200'IFB'#205'SA3'#223'^;&'#242'e8'#29#255'g;'#30#255
+ +'j>'#31#255'mA'#31#255'pD!'#255'tG!'#255'~M#'#255#141'W('#255#151']*'#255#160
+ +'c-'#255#169'i0'#255#178'n1'#255#181'q2'#255#182's3'#255#183't3'#255#184't3'
+ +#255#184'v3'#255#185'v4'#255#186'w3'#255#185'v3'#255#184'u3'#255#184't3'#255
+ +#183't3'#255#182'r3'#255#181'q2'#255#175'l1'#255#166'h/'#255#158'a,'#255#149
+ ,'\*'#255#138'U('#255'zK"'#255'sF '#255'pC '#255'l@'#31#255'i='#31#255'g;'#30
+ +#255'c8'#31#252'[<*'#237'RC8'#218'IGD'#205'HFD'#204'EED'#201'DDC'#198'EED'
+ +#191'DDD'#179'CCC'#161'DDD'#136'CCCkEEEJDDD-@@@'#24'FFF'#11'@@@'#4#0#0#0#1#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#1'UUU'#3'999'#9'FFF'#22'CCC*DDDGDDDiCCC'#138'EED'#165'FEC'#184'FEC'#194
+ +'HHD'#200'QC9'#216'[<*'#237'c8'#31#253'g;'#30#255'j>'#31#255'nA '#255'sF!'
+ +#255'|M#'#255#141'W('#255#158'a,'#255#173'k1'#255#181'r3'#255#185'v4'#255#187
+ +'y4'#255#189'{4'#255#191'~5'#255#193#129'5'#255#195#131'5'#255#196#132'6'#255
+ +#197#134'6'#255#198#134'6'#255#199#136'6'#255#200#136'6'#255#200#137'6'#255
+ +#199#136'6'#255#198#135'6'#255#198#134'6'#255#197#133'5'#255#196#132'6'#255
+ +#195#131'5'#255#193#128'5'#255#191'~4'#255#188'z4'#255#186'x4'#255#184'u3'
+ +#255#181'q2'#255#168'i/'#255#153'_+'#255#137'T'''#255'yJ"'#255'rE '#255'm@'
+ +#31#255'i<'#31#255'f:'#30#255'b9!'#249'X>.'#232'MD>'#212'HFD'#204'EED'#202'E'
+ +'ED'#198'EED'#192'CCC'#180'CCC'#160'DDD'#132'DDDbCCCACCC&CCC'#19'@@@'#8'UUU'
+ +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5
+ +'III'#14'>>>!DDD'#255
+ +#232#177'>'#255#234#179'?'#255#236#181'>'#255#236#182'?'#255#237#183'?'#255
+ ,#237#183'?'#255#238#183'@'#255#238#184'?'#255#238#185'?'#255#238#184'?'#255
+ +#238#183'@'#255#237#182'?'#255#237#183'?'#255#236#182'?'#255#236#181'>'#255
+ +#234#179'>'#255#232#176'>'#255#230#175'>'#255#229#172'='#255#227#169'='#255
+ +#224#167'='#255#220#161'<'#255#217#157'<'#255#213#153';'#255#209#148':'#255
+ +#204#142'9'#255#198#135'8'#255#193#129'7'#255#188'{6'#255#183't5'#255#171'k2'
+ +#255#142'W)'#255'tH"'#255'nA '#255'h<'#31#255'd7'#30#255'[:('#240'KD?'#211'G'
+ +'FD'#204'DDC'#201'EDD'#195'CCC'#182'CCC'#159'CCC}EEEUBBB2@@@'#24'999'#9'UUU'
+ +#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#1'333'#5'III'#14'BBB#EEECCCCkEEE'#145'DDC'#174'FFE'#192'KE@'#206'Z;)'
+ +#238'c8'#30#255'i<'#31#255'oB!'#255'|M%'#255#153'_-'#255#178'o4'#255#186'x6'
+ +#255#192#128'7'#255#198#135'9'#255#204#142':'#255#209#149';'#255#214#155'='
+ +#255#219#161'>'#255#223#167'>'#255#227#170'>'#255#230#174'?'#255#232#177'@'
+ +#255#235#181'A'#255#237#183'A'#255#238#185'A'#255#240#187'A'#255#241#188'A'
+ +#255#242#189'B'#255#243#190'A'#255#244#191'B'#255#244#192'B'#255#244#191'B'
+ +#255#244#192'B'#255#244#192'B'#255#245#193'A'#255#244#192'B'#255#244#192'B'
+ +#255#244#191'B'#255#244#192'B'#255#244#191'B'#255#243#190'A'#255#242#189'B'
+ +#255#240#187'A'#255#239#186'A'#255#238#184'@'#255#237#183'A'#255#235#179'@'
+ +#255#232#176'?'#255#229#173'?'#255#226#169'?'#255#223#165'>'#255#218#160'='
+ +#255#213#153'<'#255#208#147';'#255#202#140':'#255#196#133'9'#255#190'~7'#255
+ +#184'v6'#255#173'l3'#255#145'Y+'#255'uH$'#255'm@ '#255'g;'#31#255'b7'#31#253
+ +'U>/'#230'IEC'#206'FFE'#202'EED'#199'CCC'#189'DDD'#170'DDD'#139'BBBdCCC=BBB'
+ +#31'@@@'#12'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#1'UUU'#6'KKK'#17'DDD)EEENDDDxDCC'#157'DDC'#182'GGC'#197'T=1'#225'a7 '
+ +#252'g;'#31#255'l@ '#255'wI$'#255#154'^.'#255#179'o6'#255#186'x7'#255#193#128
+ +'9'#255#200#137':'#255#207#146'<'#255#212#153'>'#255#217#159'>'#255#222#166
+ +'?'#255#227#170'@'#255#231#175'A'#255#234#180'B'#255#236#182'B'#255#238#185
+ +'B'#255#240#187'B'#255#242#190'D'#255#243#191'C'#255#244#192'D'#255#245#193
+ +'C'#255#246#194'D'#255#247#194'D'#255#247#196'E'#255#247#196'D'#255#247#196
+ +'D'#255#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#197'D'#255#248#197
+ +'D'#255#248#197'D'#255#248#196'D'#255#247#196'D'#255#247#196'D'#255#247#195
+ +'E'#255#246#195'D'#255#245#193'D'#255#245#193'C'#255#244#192'D'#255#243#191
+ +'C'#255#242#189'C'#255#240#186'C'#255#238#184'C'#255#236#182'B'#255#233#179
+ +'B'#255#230#174'A'#255#226#169'@'#255#221#164'?'#255#216#157'>'#255#211#151
+ +'='#255#205#143'<'#255#198#135':'#255#191#127'8'#255#184'w7'#255#174'l4'#255
+ +#144'X+'#255'rE"'#255'j> '#255'e9'#30#255'_8"'#247'O@8'#219'GFD'#204'DDC'#201
+ +'CCC'#194'CCC'#178'DDD'#151'DDDqDDDGGGG$III'#14'@@@'#4#0#0#0#1#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#2'III'#7'@@@'#20'CCC.DDDVCCC'#130'EED'#165'DDC'#189
+ +'LB='#207']7$'#244'd7'#31#255'j> '#255'qE"'#255#140'W+'#255#174'l5'#255#186
+ +'x8'#255#193#129':'#255#200#138'<'#255#207#146'>'#255#213#155'?'#255#220#163
+ +'@'#255#225#169'A'#255#229#174'B'#255#233#179'D'#255#236#182'D'#255#239#185
+ +'D'#255#241#189'E'#255#242#190'E'#255#244#192'E'#255#245#194'E'#255#246#195
+ +'F'#255#247#195'F'#255#247#196'G'#255#247#197'F'#255#248#197'F'#255#248#197
+ +'F'#255#249#198'F'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198
+ +'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198'G'#255#249#198
+ +'G'#255#249#198'G'#255#249#198'G'#255#249#198'F'#255#248#197'F'#255#248#197
+ +'F'#255#247#196'F'#255#247#196'F'#255#247#195'F'#255#246#194'F'#255#244#193
+ +'F'#255#243#191'E'#255#242#190'E'#255#240#188'E'#255#238#185'D'#255#235#181
+ +'D'#255#232#178'C'#255#228#172'C'#255#223#167'B'#255#218#161'@'#255#212#153
+ +'?'#255#205#144'='#255#198#135';'#255#191#127'9'#255#183'u7'#255#167'g3'#255
+ +#130'P('#255'oB"'#255'h< '#255'c7'#30#255'X:*'#237'HFB'#207'EEE'#202'DCC'#197
+ +'DDD'#184'CCC'#160'CCCzEEENFFF(@@@'#16'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2
+ +'III'#7'FFF'#22'BBB2CCC\DDD'#136'DDC'#171'EED'#192'Q?5'#219'a6'#31#252'f:'#31
+ +#255'mA!'#255#127'N'''#255#164'f3'#255#182'u8'#255#190#127':'#255#199#138'='
+ +#255#207#147'?'#255#213#155'A'#255#220#163'B'#255#225#170'D'#255#230#177'E'
+ +#255#234#181'E'#255#237#184'F'#255#240#188'G'#255#242#189'G'#255#243#192'G'
+ +#255#244#193'H'#255#245#194'H'#255#246#195'H'#255#247#196'H'#255#247#197'H'
+ +#255#247#197'H'#255#248#198'H'#255#248#198'H'#255#248#197'H'#255#248#198'H'
+ +#255#248#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'
+ +#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'#255#249#198'I'
+ +#255#249#198'I'#255#249#198'I'#255#248#198'I'#255#248#198'H'#255#248#198'H'
+ +#255#248#198'H'#255#248#198'H'#255#247#197'H'#255#247#196'I'#255#247#195'H'
+ +#255#246#195'H'#255#245#195'H'#255#244#193'H'#255#243#191'G'#255#241#189'G'
+ +#255#239#186'G'#255#236#183'F'#255#233#180'F'#255#229#175'D'#255#224#168'D'
+ +#255#218#161'B'#255#211#153'@'#255#205#144'?'#255#196#134'='#255#188'{:'#255
+ +#180'r8'#255#155'_/'#255'wJ$'#255'j? '#255'e8'#30#255']8#'#246'LB<'#213'FEE'
+ +#203'EED'#199'DDD'#188'DDD'#165'DDD'#128'DDDSFFF,GGG'#18'+++'#6#0#0#0#1#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#2'III'#7'CCC'#23'BBB6DDDaCCC'#141'DDC'#174'GDB'#196'V:+'#233'c7'#30#255'h; '
+ +#255'pC#'#255#146'Z-'#255#179'p7'#255#187'{;'#255#196#133'='#255#204#144'?'
+ +#255#212#154'B'#255#219#163'E'#255#225#170'E'#255#230#176'G'#255#234#181'H'
+ +#255#238#185'I'#255#240#189'I'#255#242#190'J'#255#243#192'J'#255#244#193'J'
+ +#255#245#195'J'#255#246#195'J'#255#246#196'J'#255#247#196'K'#255#247#196'K'
+ +#255#247#197'K'#255#247#197'K'#255#247#197'K'#255#247#197'J'#255#247#197'J'
+ +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'
+ +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'
+ +#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#198'J'#255#247#197'J'
+ +#255#247#197'J'#255#247#197'J'#255#247#197'K'#255#247#197'K'#255#247#197'K'
+ +#255#247#196'K'#255#246#196'K'#255#246#196'J'#255#246#195'J'#255#245#195'J'
+ +#255#244#194'J'#255#243#191'I'#255#241#189'I'#255#239#188'I'#255#236#184'H'
+ +#255#233#180'H'#255#228#174'G'#255#223#168'E'#255#217#160'C'#255#210#151'B'
+ +#255#202#141'?'#255#193#130'<'#255#185'x:'#255#174'm6'#255#134'S*'#255'mA"'
+ +#255'f:'#31#255'a6'#30#253'R>4'#224'FFE'#203'EED'#200'CCC'#190'DDD'#169'CCC'
+ +#133'CCCXAAA/CCC'#19'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'CCC'#23'BBB6CCCcCCC'#144'EED'#177'JC>'#202
+ +'[6"'#244'c8'#31#255'j?!'#255'xI&'#255#162'd2'#255#183'u:'#255#192#129'='#255
+ +#200#140'@'#255#209#150'B'#255#217#160'E'#255#223#169'G'#255#229#176'H'#255
+ +#233#181'J'#255#236#185'J'#255#239#188'K'#255#241#190'K'#255#242#192'K'#255
+ +#243#193'L'#255#244#194'L'#255#245#195'L'#255#245#195'L'#255#245#195'L'#255
+ +#246#196'L'#255#246#196'L'#255#246#196'L'#255#246#196'L'#255#246#196'M'#255
+ +#246#196'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255
+ +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255
+ +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255
+ +#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#197'M'#255#246#196'M'#255
+ +#246#196'M'#255#246#196'M'#255#246#196'L'#255#246#196'L'#255#246#196'L'#255
+ +#246#196'L'#255#245#195'L'#255#245#196'L'#255#244#195'M'#255#244#194'L'#255
+ +#243#193'L'#255#242#192'L'#255#241#190'K'#255#238#188'K'#255#236#184'J'#255
+ +#232#179'I'#255#228#173'H'#255#222#166'F'#255#215#158'E'#255#207#148'B'#255
+ +#198#137'?'#255#190'~<'#255#180'r9'#255#150']/'#255'qE$'#255'h< '#255'b6'#30
+ +#255'W9*'#235'GED'#204'DDC'#201'DDD'#192'CCC'#172'CCC'#137'DDDZAAA/GGG'#18'3'
+ +'33'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'II'
+ +'I'#21'CCC5DDDbCCC'#145'DDC'#178'LB;'#206'^6 '#249'd8'#31#255'l@!'#255#131'Q'
+ +'*'#255#172'k7'#255#186'z;'#255#196#133'?'#255#205#146'C'#255#213#156'E'#255
+ +#220#165'G'#255#227#173'I'#255#232#180'K'#255#236#184'L'#255#238#187'L'#255
+ ,#240#189'N'#255#241#191'N'#255#242#192'N'#255#243#193'N'#255#244#194'N'#255
+ +#244#194'N'#255#244#194'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255
+ +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255
+ +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255
+ +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255
+ +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255
+ +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255
+ +#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255#244#195'O'#255
+ +#244#195'O'#255#244#195'O'#255#244#194'O'#255#244#195'N'#255#244#194'N'#255
+ +#243#193'N'#255#242#192'M'#255#241#190'N'#255#240#189'M'#255#237#186'M'#255
+ +#235#182'L'#255#230#178'K'#255#225#171'I'#255#219#163'G'#255#211#153'D'#255
+ +#202#143'B'#255#192#130'>'#255#183'u:'#255#164'f4'#255'yK&'#255'i=!'#255'c7'
+ +#30#255'Z8%'#241'GEC'#205'DDC'#201'CCC'#193'DDD'#173'DDD'#136'BBBYDDD-KKK'#17
+ +'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'CCC'#19'BBB2CCC_DD'
+ +'D'#143'DDC'#178'M@8'#211'_5'#31#251'e9'#31#255'lA"'#255#144'Y/'#255#179'r9'
+ +#255#188'}='#255#198#138'B'#255#208#149'D'#255#217#161'H'#255#223#170'K'#255
+ +#229#177'L'#255#234#181'M'#255#236#186'N'#255#239#188'O'#255#240#190'P'#255
+ +#241#191'P'#255#242#192'P'#255#242#192'P'#255#242#193'P'#255#243#193'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255
+ +#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#194'P'#255#243#193'P'#255
+ +#242#193'P'#255#242#192'O'#255#242#192'P'#255#241#192'P'#255#240#190'P'#255
+ +#238#188'O'#255#236#185'N'#255#232#180'M'#255#228#175'L'#255#222#167'I'#255
+ +#215#159'H'#255#205#147'D'#255#196#134'@'#255#186'y<'#255#173'm7'#255#130'O*'
+ +#255'j?!'#255'c8'#31#255'[7#'#245'HDA'#208'DDC'#201'CCC'#193'CCC'#172'CCC'
+ +#134'AAAVAAA+@@@'#16'@@@'#4#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'<<<'#17'CCC.CC'
+ +'C[CCC'#140'EED'#176'O>5'#213'_5'#30#253'e9'#31#255'nB#'#255#151'\1'#255#181
+ +'s:'#255#191#129'@'#255#201#142'C'#255#211#154'G'#255#219#164'K'#255#226#173
+ +'M'#255#231#179'O'#255#234#184'P'#255#237#187'Q'#255#239#189'Q'#255#240#190
+ +'R'#255#240#191'Q'#255#241#192'R'#255#241#192'R'#255#241#192'R'#255#242#192
+ +'R'#255#242#192'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193'R'#255#242#193
+ +'R'#255#242#192'R'#255#242#192'R'#255#241#192'R'#255#241#192'R'#255#241#192
+ +'R'#255#240#191'Q'#255#240#190'R'#255#238#189'Q'#255#236#186'P'#255#234#182
+ +'O'#255#230#177'N'#255#224#171'L'#255#217#162'J'#255#208#150'F'#255#198#138
+ +'C'#255#188'}>'#255#177'o:'#255#136'S,'#255'k?"'#255'c8'#31#255'\6!'#248'JC?'
+ +#211'DCC'#201'CCC'#193'CCC'#171'BBB'#131'DDDRAAA''777'#14'UUU'#3#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +'UUU'#3';;;'#13'AAA''CCCTBBB'#135'DDC'#174'N=5'#213'`4'#29#254'e9'#31#255'oC'
+ +'$'#255#156'`3'#255#181'u<'#255#193#131'A'#255#204#146'E'#255#213#157'I'#255
+ +#221#167'M'#255#227#175'O'#255#232#180'Q'#255#235#184'R'#255#237#187'S'#255
+ +#238#189'S'#255#239#190'S'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ ,#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#234#187'R'#255#202#161'G'#255#232#185'R'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255#240#191'T'#255
+ +#239#189'S'#255#238#188'R'#255#236#186'R'#255#234#184'Q'#255#231#179'Q'#255
+ +#226#173'O'#255#219#165'L'#255#211#154'H'#255#201#142'E'#255#190#128'@'#255
+ +#179'q:'#255#140'V.'#255'l@"'#255'c8'#31#255'\4'#31#250'JC>'#211'CCC'#201'DD'
+ +'D'#192'CCC'#168'CCC~DDDKFFF!MMM'#10#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'333'#10'@@@ EEE'
+ +'JCCC~EDD'#169'L?8'#208'^4'#30#253'd8 '#255'pD%'#255#159'b4'#255#182'v='#255
+ +#194#132'C'#255#205#147'H'#255#215#160'L'#255#222#169'O'#255#228#176'Q'#255
+ +#232#181'S'#255#235#185'T'#255#236#187'T'#255#237#188'U'#255#238#189'U'#255
+ +#238#190'U'#255#238#190'U'#255#238#191'U'#255#239#190'U'#255#239#190'U'#255
+ +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255
+ +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255
+ +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#181#144'@'#255
+ +';/'#21#255#21#16#7#255#9#7#3#255#2#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1
+ +#1#255#7#6#3#255#17#14#6#255#31#25#11#255'2'''#18#255'SB'#29#255#157'}8'#255
+ +#233#186'S'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255
+ +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255
+ +#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255
+ +#239#190'U'#255#239#190'U'#255#239#190'U'#255#238#190'U'#255#238#190'U'#255
+ +#238#190'U'#255#238#189'U'#255#237#188'U'#255#236#186'T'#255#234#184'T'#255
+ +#231#180'S'#255#226#175'Q'#255#220#166'N'#255#212#156'K'#255#202#143'F'#255
+ +#190#129'A'#255#179'r<'#255#145'Y0'#255'k?"'#255'c7'#31#255'[4 '#248'IC@'#209
+ +'DDD'#200'CCC'#190'CCC'#163'DDDtCCCAEEE'#26'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'==='#25'AAA?CCCsBBB'
+ +#162'K?;'#202'^4'#30#252'c8 '#255'oB%'#255#160'b5'#255#183'v>'#255#194#134'D'
+ +#255#205#148'J'#255#215#161'M'#255#223#171'Q'#255#228#177'T'#255#232#182'U'
+ +#255#234#185'V'#255#236#187'V'#255#236#187'V'#255#237#188'W'#255#237#189'W'
+ +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'
+ +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'
+ +#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'
+ +#255#237#188'W'#255#237#188'W'#255#159'~:'#255#16#13#6#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#16#13#6
+ +#255'9-'#21#255'y`,'#255#208#165'M'#255#237#188'W'#255#237#188'W'#255#237#188
+ +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188
+ +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#188
+ +'W'#255#237#188'W'#255#237#188'W'#255#237#188'W'#255#237#189'W'#255#237#188
+ +'W'#255#236#187'V'#255#235#186'V'#255#234#184'U'#255#231#180'U'#255#227#175
+ +'R'#255#221#169'Q'#255#213#157'L'#255#202#144'H'#255#191#129'C'#255#180's='
+ +#255#145'X0'#255'j>#'#255'b6'#31#255'Z5#'#245'GDB'#206'DDD'#200'CCC'#186'DDD'
+ +#154'EEEhBBB6@@@'#20'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#1'@@@'#4'GGG'#18'AAA3DDDfCCC'#152'IA>'#195'\4 '#250'c7'#31#255'm@#'#255
+ +#156'_5'#255#182'v?'#255#194#134'E'#255#206#148'K'#255#215#161'O'#255#223#171
+ +'S'#255#228#178'V'#255#232#182'V'#255#233#185'X'#255#234#186'X'#255#235#187
+ +'X'#255#236#187'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188
+ +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188
+ +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188
+ +'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255'9-'#21
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#6
+ +#5#2#255'$'#29#14#255'ZH"'#255#169#135'@'#255#234#186'X'#255#236#188'X'#255
+ ,#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255
+ +#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255
+ +#236#188'X'#255#236#187'X'#255#235#187'Y'#255#235#186'X'#255#234#186'X'#255
+ +#233#184'W'#255#231#180'W'#255#227#176'T'#255#221#169'R'#255#213#158'N'#255
+ +#203#145'J'#255#192#130'D'#255#179's='#255#139'U/'#255'i="'#255'a5'#30#255'X'
+ +'7%'#242'FDC'#204'CCC'#198'DDD'#180'CCC'#144'CCC[AAA+III'#14'UUU'#3#0#0#0#1#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'@@@'#12'AAA''CCCWCCC'#140'GB?'
+ +#185'Z4!'#247'a6'#30#255'j?"'#255#151']2'#255#181't>'#255#194#133'F'#255#206
+ +#149'M'#255#215#161'Q'#255#223#170'T'#255#228#178'W'#255#231#181'Y'#255#232
+ +#183'Y'#255#233#185'Z'#255#234#185'Y'#255#234#186'Y'#255#234#186'Y'#255#234
+ +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234
+ +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234
+ +#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234
+ +#186'Z'#255#234#186'Z'#255'C5'#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#1#1#1#255#20#16#8#255'K;'#29#255#189#150'I'#255#234#186'Z'#255#234#186
+ +'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186
+ +'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Z'#255#234#186'Y'#255#234#186
+ +'Y'#255#234#185'Y'#255#233#185'Z'#255#232#183'Y'#255#230#181'X'#255#226#176
+ +'W'#255#221#169'T'#255#213#159'O'#255#203#145'K'#255#190#129'D'#255#178'p='
+ +#255#134'Q-'#255'g;"'#255'`4'#29#255'U7('#238'CCC'#202'DDD'#195'DDD'#173'BBB'
+ +#131'CCCL@@@ 999'#9#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'BBB'#27'CC'
+ +'CEDDD|DDD'#170'V6%'#238'`5'#30#255'h<"'#255#145'Y1'#255#179's?'#255#192#132
+ +'F'#255#205#148'M'#255#215#161'R'#255#222#171'U'#255#227#176'X'#255#230#181
+ +'Z'#255#231#183'Z'#255#232#183'['#255#232#184'['#255#233#185'['#255#233#185
+ +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185
+ +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185
+ +'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185
+ +'['#255#233#185'['#255#233#185'['#255#127'd1'#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#11#5
+ +#255'N>'#31#255#193#153'L'#255#233#185'['#255#233#185'['#255#233#185'['#255
+ +#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255#233#185'['#255
+ +#233#185'['#255#233#184'['#255#232#184'['#255#232#183'Z'#255#231#182'Z'#255
+ +#229#180'Y'#255#226#175'X'#255#220#168'U'#255#213#158'R'#255#201#144'K'#255
+ +#189#127'D'#255#175'n<'#255#128'N+'#255'e9 '#255'_3'#29#255'Q;1'#227'CCC'#201
+ +'CCC'#191'CCC'#163'CCCrAAA;FFF'#22'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'<<<'
+ +#17'AAA3EEEhCCC'#156'R:/'#220'_3'#29#255'e: '#255#134'Q-'#255#178'p>'#255#190
+ +#130'F'#255#203#145'M'#255#213#161'S'#255#221#170'W'#255#226#176'Z'#255#229
+ +#180'Z'#255#230#182'\'#255#231#182'\'#255#231#183'\'#255#231#183'\'#255#231
+ +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231
+ +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231
+ +#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231
+ +#183'\'#255#231#183'\'#255#231#183'\'#255#180#142'G'#255#1#1#1#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#15#12#6#255'VE"'#255#215#171'V'#255
+ +#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255
+ +#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#182'\'#255
+ +#230#181'['#255#228#178'['#255#225#175'Y'#255#219#168'W'#255#211#156'Q'#255
+ +#200#142'K'#255#187'|D'#255#172'k<'#255'wF('#255'c7 '#255'^1'#30#254'K@:'#214
+ +'DDD'#199'CCC'#184'CCC'#148'AAA^GGG+NNN'#13'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'MMM'#10'@'
+ +'@@$DDDSDDD'#139'L?8'#197'^1'#29#254'c7 '#255'wG)'#255#173'l<'#255#188#127'E'
+ +#255#201#144'N'#255#212#158'T'#255#220#169'X'#255#225#175'['#255#228#179'\'
+ +#255#229#180'\'#255#230#181']'#255#230#181']'#255#230#182']'#255#230#182']'
+ +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'
+ +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'
+ +#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#182']'
+ +#255#230#182']'#255#230#182']'#255#221#175'Y'#255#10#8#4#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'4'
+ +')'#21#255#184#146'J'#255#230#182']'#255#230#182']'#255#230#182']'#255#230
+ +#182']'#255#230#182']'#255#230#182']'#255#230#182']'#255#230#181']'#255#229
+ +#182']'#255#228#180']'#255#227#178'\'#255#224#174'['#255#218#166'W'#255#209
+ +#155'R'#255#198#139'K'#255#184'zC'#255#162'd8'#255'l@$'#255'a5'#30#255'Z3 '
+ +#249'FBA'#206'DDD'#196'CCC'#174'CCC'#129'BBBIFFF'#29'@@@'#8#0#0#0#1#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'FF'
+ +'F'#22'BBB>CCCvFA?'#174'Z3'#31#248'`5'#30#255'l@$'#255#163'd9'#255#184'{D'
+ +#255#199#142'N'#255#210#156'T'#255#218#167'Y'#255#223#174'\'#255#226#177'^'
+ +#255#228#179'^'#255#228#179'^'#255#228#180'_'#255#228#180'_'#255#228#180'_'
+ +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'
+ +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'
+ +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'
+ +#255#228#180'_'#255#228#180'_'#255#228#180'_'#255'bM)'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#27#21#11#255#140'o;'#255#228#180'_'#255#228#180
+ +'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180
+ +'_'#255#228#179'^'#255#227#179'^'#255#226#176']'#255#222#172'['#255#216#164
+ +'X'#255#207#152'R'#255#195#137'K'#255#181'tA'#255#149'Z3'#255'g<"'#255'_3'#29
+ +#255'V6'''#239'CCC'#201'CCC'#190'CCC'#159'CCCkCCC5GGG'#18'@@@'#4#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'@@@'#12'CCC'
+ +'*DDD^DDD'#150'U6('#230'^2'#28#255'f:!'#255#149'Z3'#255#181'uB'#255#195#137
+ +'K'#255#208#154'T'#255#216#165'Y'#255#221#172']'#255#225#176'^'#255#226#178
+ +'_'#255#227#178'_'#255#227#178'_'#255#227#179'_'#255#227#179'_'#255#227#179
+ +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179
+ +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179
+ +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179
+ +'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#13#10#6#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'&'#30#16#255#208#164
+ +'W'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#178
+ +'_'#255#227#178'_'#255#226#179'`'#255#226#177'_'#255#224#176'^'#255#220#170
+ +'\'#255#214#162'X'#255#205#149'R'#255#191#131'I'#255#177'p?'#255#131'O.'#255
+ +'c7 '#255']1'#29#255'N;3'#222'DDD'#199'DDD'#181'CCC'#140'DDDSDDD"999'#9#0#0#0
+ +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'@@@'#24
+ +'EEECCCC~K=7'#193']0'#28#255'b6'#31#255#129'M,'#255#177'o@'#255#191#131'J'
+ +#255#204#149'S'#255#214#163'Z'#255#220#171']'#255#223#174'_'#255#225#176'`'
+ +#255#225#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'
+ +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'
+ +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'
+ ,#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'
+ +#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#161'~D'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2
+ +#255#134'i9'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255#226#177'`'#255
+ +#226#177'`'#255#225#178'`'#255#225#177'`'#255#224#176'_'#255#222#174'^'#255
+ +#219#169']'#255#212#159'X'#255#200#144'Q'#255#187'~G'#255#170'j<'#255'qB%'
+ +#255'`5'#30#255'Z2'#31#250'FBA'#205'CCC'#193'DDD'#166'CCCsCCC9CCC'#19'@@@'#4
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'@@@'#12'AAA+BBB'
+ +'aDBB'#155'Y3!'#244'_3'#29#255'l?$'#255#167'f;'#255#186'}H'#255#200#144'R'
+ +#255#211#158'Y'#255#218#168']'#255#221#172'`'#255#223#174'a'#255#223#176'a'
+ +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'
+ +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'
+ +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'
+ +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176'b'
+ +#255#224#176'b'#255#224#176'b'#255#224#176'b'#255'hR.'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255'qY2'#255#224#176'b'#255#224#176'b'#255#224#176'b'#255#224#176
+ +'b'#255#224#176'b'#255#224#176'b'#255#223#176'a'#255#223#174'`'#255#221#172
+ +'_'#255#217#166']'#255#208#155'W'#255#196#139'O'#255#182'wE'#255#152'\5'#255
+ +'e9!'#255'^2'#29#255'S7*'#233'DDD'#200'CCC'#183'DDD'#143'EEEUDDD"UUU'#9#0#0#0
+ +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'@@@'#24'DDDDCCC~P8-'
+ +#211']0'#29#255'c8!'#255#144'V2'#255#180'uD'#255#196#138'P'#255#207#155'X'
+ +#255#215#165']'#255#220#171'`'#255#221#173'b'#255#222#174'a'#255#222#175'b'
+ +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'
+ +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'
+ +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'
+ +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'
+ +#255#222#175'b'#255#222#175'b'#255#222#175'b'#255'VD&'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#1#1#0#255#166#132'J'#255#222#175'b'#255#222#175'b'#255#222#175
+ +'b'#255#222#175'b'#255#222#175'b'#255#222#175'b'#255#222#174'a'#255#221#173
+ +'a'#255#219#170'`'#255#213#163'\'#255#205#150'V'#255#192#132'M'#255#176'oA'
+ +#255'}K,'#255'a5'#31#255'\0'#28#254'I?;'#212'CCC'#194'DDD'#166'CCCrDDD8GGG'
+ +#18'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11'DDD)BBB`G@<'
+ +#164'[1'#29#252'_3'#29#255'uD)'#255#174'l?'#255#189#130'L'#255#204#150'V'#255
+ +#213#162'^'#255#217#168'`'#255#220#172'b'#255#221#173'b'#255#221#173'c'#255
+ +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255
+ +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255
+ +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255
+ +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255
+ +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255'gQ.'#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ ,#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#207#163']'#255#221#173'c'#255
+ +#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255#221#173'c'#255
+ +#221#172'b'#255#219#171'b'#255#217#167'`'#255#211#159'['#255#200#145'T'#255
+ +#185'{H'#255#164'd;'#255'h<#'#255'^1'#29#255'X3#'#244'DDD'#200'CCC'#183'DDD'
+ +#142'DDDSFFF!@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'III'#21'EEE?DD'
+ +'D|S5'''#222'\1'#28#255'c8!'#255#158'_8'#255#183'yH'#255#198#142'S'#255#209
+ +#158'\'#255#215#166'`'#255#218#170'b'#255#219#171'c'#255#219#171'd'#255#219
+ +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219
+ +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219
+ +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219
+ +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219
+ +#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#213
+ +#168'b'#255#3#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'M<#'#255#219#172
+ +'d'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172'd'#255#219#172
+ +'d'#255#219#171'd'#255#219#170'c'#255#217#168'b'#255#214#164'`'#255#207#153
+ +'Z'#255#194#136'P'#255#178'rD'#255#139'R1'#255'a4'#31#255'\0'#28#255'L<5'#219
+ +'CCC'#193'DDD'#164'CCCoCCC5@@@'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#8
+ +'BBB#CCCWHA='#158'\0'#28#253'_3'#29#255'~I+'#255#175'nB'#255#191#133'O'#255
+ +#205#151'Z'#255#213#163'a'#255#216#167'c'#255#217#169'c'#255#218#170'd'#255
+ +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255
+ +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255
+ +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255
+ +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255
+ +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255
+ +#218#170'd'#255#218#170'd'#255'YF)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#15#12#7#255#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#170'd'#255
+ +#218#170'd'#255#218#170'd'#255#218#170'd'#255#218#169'c'#255#217#168'c'#255
+ +#215#166'b'#255#211#160'_'#255#201#147'W'#255#187#127'L'#255#169'h>'#255'l=$'
+ +#255'^1'#29#255'W3"'#244'DDD'#199'DDD'#180'DDD'#136'DDDKBBB'#27'UUU'#6#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0'UUU'#3'DDD'#15'EEE4BBBpS6)'#215'\1'#28#255'b7!'#255#158'_9'
+ +#255#184'{J'#255#199#144'W'#255#209#158'_'#255#214#165'c'#255#216#168'd'#255
+ +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255
+ +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255
+ +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255
+ +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255
+ +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255
+ +#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255
+ +'YD)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#189#147'W'#255#217#168'd'
+ +#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'#255#217#168'd'
+ +#255#217#168'd'#255#216#168'd'#255#215#167'c'#255#213#164'a'#255#207#154']'
+ +#255#195#138'S'#255#179'tF'#255#139'R1'#255'`5'#30#255'\0'#28#255'K=7'#216'D'
+ +'DD'#191'DDD'#157'CCCcAAA+FFF'#11#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'EEE'#26'BBBIE?='
+ +#144'Z0'#28#252'^2'#29#255'zF*'#255#174'mB'#255#192#135'R'#255#205#152'\'#255
+ +#211#161'b'#255#214#165'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255
+ +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255
+ +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255
+ +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255
+ +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255
+ +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255
+ +#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255'jR1'#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255'fN/'#255#215#166'd'#255#215#166'd'#255#215#166'd'
+ +#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'#255#215#166'd'
+ +#255#215#167'e'#255#214#164'c'#255#210#159'a'#255#202#148'Z'#255#187#128'N'
+ +#255#168'f='#255'i;#'#255'\1'#28#255'V3#'#242'CCC'#197'DDD'#173'BBB{FFF>@@@'
+ +#20'@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'FFF(CCC_R6*'#206'\0'#28#255'`5'#31#255#154'\8'
+ +#255#182'yJ'#255#199#144'Y'#255#208#156'`'#255#212#163'd'#255#213#165'd'#255
+ +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255
+ +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255
+ +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255
+ +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255
+ +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255
+ +#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255
+ +#214#165'e'#255#214#165'e'#255#214#165'e'#255#135'h@'#255#2#1#1#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'b'
+ +'L/'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#214#165
+ +'e'#255#214#165'e'#255#214#165'e'#255#214#165'e'#255#213#165'e'#255#213#164
+ +'d'#255#211#161'c'#255#206#154'^'#255#194#139'U'#255#177'sF'#255#135'P/'#255
+ +'^3'#29#255'[/'#27#255'J>9'#213'DDD'#185'CCC'#144'DDDSHHH III'#7#0#0#0#1#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3
+ +'<<<'#17'DDD8DBAyZ0'#29#248'\1'#28#255'uB'''#255#172'lA'#255#190#132'Q'#255
+ +#203#151'^'#255#209#160'c'#255#211#162'e'#255#212#163'e'#255#212#163'e'#255
+ +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255
+ +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255
+ +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255
+ +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255
+ +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255
+ +#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255
+ +#212#163'e'#255#212#163'e'#255#212#163'e'#255#156'xK'#255#1#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'jQ2'#255#212
+ +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212
+ +#163'e'#255#212#163'e'#255#212#163'e'#255#212#163'e'#255#212#162'e'#255#211
+ +#162'd'#255#208#158'b'#255#200#147'['#255#186'~M'#255#165'd<'#255'd8!'#255'\'
+ +'0'#28#255'T5'''#237'CCC'#193'DDD'#162'CCCjCCC.@@@'#12#0#0#0#2#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'333'#5'GGG'#25'BB'
+ +'BIN:1'#174'[/'#27#255'^2'#29#255#145'T3'#255#180'vI'#255#196#142'Y'#255#206
+ +#155'a'#255#209#161'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ ,#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255'O=&'#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'sX7'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#210
+ +#161'f'#255#209#159'd'#255#204#153'`'#255#192#135'U'#255#175'pE'#255'~H+'#255
+ +']0'#29#255'Z0'#28#253'FBA'#201'DDD'#176'CCC~FFF>CCC'#19'@@@'#4#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%CCC[V3'
+ +'$'#222'\0'#27#255'f7!'#255#167'd>'#255#187#128'Q'#255#200#148'^'#255#207#156
+ +'d'#255#209#159'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160
+ +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160
+ +'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160
+ +'e'#255#209#160'e'#255#209#160'e'#255#151'tI'#255'2&'#25#255#27#21#13#255#15
+ +#12#7#255#7#5#3#255#7#5#3#255' '#25#16#255'P='''#255#151'tI'#255#209#160'e'
+ +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'
+ +#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'
+ +#255#209#160'e'#255#209#160'e'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#146'pF'#255#209#160'e'#255#209#160'e'#255
+ +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255
+ +#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#160'e'#255#209#159'e'#255
+ +#206#155'c'#255#198#143'['#255#182'zM'#255#151'Y6'#255'^3'#29#255'[/'#27#255
+ +'N:1'#222'DDD'#185'DDD'#142'DDDOIII'#28'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2';;;'#13'DDD1F@=x[/'#28#253'\1'#28
+ +#255'~G+'#255#174'oE'#255#193#137'X'#255#203#151'b'#255#207#156'e'#255#207
+ +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208
+ +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208
+ +#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'x[;'
+ +#255#15#12#8#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255'bJ0'#255#208#158'f'#255#208#158'f'
+ +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'
+ +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255'3'''#25#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#208#158'f'
+ +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'
+ +#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'#255#208#158'f'
+ +#255#208#158'f'#255#207#158'e'#255#206#156'd'#255#201#149'_'#255#189#131'T'
+ +#255#169'h@'#255'j:#'#255'\0'#28#255'V3#'#242'DDD'#191'CCC'#156'BBB`AAA''333'
+ +#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'C'
+ +'CC'#19'EEE?Q7+'#179'[/'#27#255'^1'#29#255#152'X6'#255#181'yM'#255#197#144']'
+ +#255#204#153'c'#255#206#155'f'#255#206#156'e'#255#206#156'e'#255#206#156'e'
+ +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'
+ +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'
+ +#255#202#154'c'#255'6)'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#14#10#7#255#178#135'W'#255#206#156'e'#255#206#156'e'#255#206#156'e'
+ +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'
+ +#255#206#156'e'#255'WB+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ ,#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#29#22#14#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'
+ +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'
+ +#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#206#156'e'#255#205#156'e'
+ +#255#203#151'c'#255#194#139'Z'#255#176'qH'#255#131'K-'#255'\1'#28#255'[/'#27
+ +#255'HA='#204'DDD'#169'DDDqEEE4III'#14#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'+++'#6'BBB'#27'EEENW2!'#228'[/'#27#255'i9!'
+ +#255#168'e?'#255#187#130'T'#255#200#147'`'#255#203#153'e'#255#205#154'e'#255
+ +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255
+ +#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255
+ +#205#154'e'#255#205#154'e'#255#199#150'a'#255#19#14#9#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#6#4#255#178#133'W'
+ +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'
+ +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255'S>)'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128'a?'#255#205#154'e'#255#205#154'e'
+ +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'
+ +#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'#255#205#154'e'
+ +#255#205#154'e'#255#204#154'e'#255#203#152'd'#255#197#145'^'#255#182'zO'#255
+ +#157'Z8'#255']1'#29#255'[/'#27#255'P9.'#226'CCC'#179'CCC'#129'CCCA@@@'#20'@@'
+ +'@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'EEE%EA?'
+ +'b[/'#27#253'\0'#27#255#127'F*'#255#173'nG'#255#191#136'Z'#255#200#149'c'#255
+ +#202#152'e'#255#202#152'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255
+ +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255
+ +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#31#24#16#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#11#8#6#255#200#151'e'#255#202#153'e'#255#202#153'e'#255#202
+ +#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255'O;'''
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255''''#29#19#255#202#153'e'#255
+ +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255
+ +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#153'e'#255
+ +#202#153'e'#255#202#153'e'#255#202#153'e'#255#202#152'e'#255#202#151'd'#255
+ +#199#147'b'#255#188#130'U'#255#168'e@'#255'k:"'#255'[/'#27#255'V3$'#241'CCC'
+ +#186'BBB'#142'EEENBBB'#27'+++'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#2'@@@'#12'DDD-O:0'#146'[/'#27#255'\0'#28#255#145'R2'#255#179'wM'
+ +#255#194#141'^'#255#200#148'c'#255#201#150'e'#255#201#150'e'#255#201#150'e'
+ +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'
+ +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'
+ +#255';,'#30#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'S>*'#255#201#150'e'
+ +#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'
+ +#255#201#150'e'#255'K8&'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#29#22#14#255
+ +#184#138']'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255
+ ,#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255
+ +#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255#201#150'e'#255
+ +#201#150'e'#255#200#149'd'#255#199#148'c'#255#191#136'['#255#173'mG'#255'}D('
+ +#255'\0'#27#255'Z0'#28#253'DBB'#192'CCC'#152'DDDZBBB#@@@'#8#0#0#0#1#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'III'#14'CCC5T5'''#190'[/'#27#255
+ +'_2'#29#255#162'^:'#255#184'}S'#255#195#142'`'#255#198#147'd'#255#199#148'd'
+ +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'
+ +#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'
+ +#255#199#148'd'#255#147'mJ'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#3#2#1#255#195#144'b'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255
+ +#199#148'd'#255#199#148'd'#255#199#148'd'#255'H6$'#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#1#255#23#17#12
+ +#255'qT8'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199
+ +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199
+ +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#199
+ +#148'd'#255#199#148'd'#255#199#148'd'#255#199#148'd'#255#198#146'c'#255#193
+ +#140'^'#255#178'uN'#255#143'O1'#255'\0'#28#255'[/'#27#255'J=7'#208'CCC'#161
+ +'DDDfAAA+FFF'#11#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'<<<'
+ +#17'CCC=X1 '#227'[/'#27#255'm:"'#255#167'eA'#255#187#130'X'#255#195#143'a'
+ +#255#196#144'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'
+ +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'
+ +#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#19#14#10#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'cD'#255#197#145'c'#255#197
+ +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255'I5$'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#19#14#10#255'4&'#26#255'cI2'#255
+ +#161'vP'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197
+ +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197
+ +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197
+ +#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197#145'c'#255#197
+ +#145'c'#255#197#145'b'#255#196#144'c'#255#194#140'`'#255#182'|S'#255#159'\:'
+ +#255']2'#28#255'[/'#27#255'Q8-'#226'DDD'#168'DDDqAAA3NNN'#13#128#128#128#2#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4':::'#22'G@/[/'#27
+ +#254'[/'#27#255'}A&'#255#167'gD'#255#180'zW'#255#181'|Y'#255#181'|Y'#255#181
+ +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'
+ +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#136']C'#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#19#13#9#255#151'gJ'#255#181'|Y'#255#181'|Y'#255#181
+ +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'
+ +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#171'vU'#255'1"'#24#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'}V>'#255
+ +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181
+ +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'
+ +#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255
+ +#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181
+ +'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'#255#181'|Y'
+ +#255#181'|Y'#255#181'|Y'#255#178'wT'#255#161'];'#255'k8 '#255'[/'#27#255'V3#'
+ +#238'DDD'#151'CCCWFFF!@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#11
+ +'K:3?[/'#27#255'[/'#27#255#131'F*'#255#169'iH'#255#179'xV'#255#180'zW'#255
+ +#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180
+ +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255'<)'#29#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#1#1#1#255'O6&'#255#180'{W'#255#180'{W'#255#180'{W'#255#180
+ +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'
+ +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255
+ +#180'{W'#255#142'aE'#255#27#19#13#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255
+ ,#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#5#4#255
+ +#135']A'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180
+ +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255'pL6'#255'+'#29#20#255'('#28#19
+ +#255'*'#28#20#255'+'#29#21#255'-'#30#21#255'fF2'#255#180'{W'#255#180'{W'#255
+ +#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180
+ +'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'#255#180'{W'
+ +#255#180'{W'#255#180'{W'#255#180'{W'#255#180'zX'#255#178'vU'#255#163'_>'#255
+ +'r<"'#255'[/'#27#255'X2!'#243'CCC'#152'BBBYDDD"@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#2'FFF'#11'N8.J[/'#27#255'[/'#27#255#135'H,'#255#170'kI'#255
+ +#178'wV'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179
+ +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'
+ +#255#16#11#8#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#19#13#10#255#150'fJ'#255#179'yX'#255#179
+ +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'
+ +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255
+ +#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179
+ +'yX'#255'~V>'#255'=)'#30#255#19#13#9#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255'$'#24#17#255#172'uT'#255#179'yX'#255#179'yX'#255#179'yX'
+ +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#158'kN'#255'=)'#30#255#6
+ +#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#6#4#3#255'?+'#31#255#164'oP'#255#179'yX'#255#179'yX'#255#179'yX'#255#179
+ +'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'
+ +#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255#179'yX'#255
+ +#177'uU'#255#164'b@'#255'v?%'#255'[/'#27#255'Y1'#31#246'CCC'#152'BBBYDDD"@@@'
+ +#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'FFF'#11'Q7+U[/'#27#255'\0'#28#255
+ +#139'J-'#255#171'lL'#255#177'wW'#255#178'wV'#255#178'wV'#255#178'wV'#255#178
+ +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'
+ +#255#178'wV'#255#172'sT'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255'O5&'#255#178'wV'#255#178'wV'
+ +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255
+ +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178
+ +'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'
+ +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#176'wV'#255
+ +'vO9'#255'7%'#27#255#16#10#8#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#11#8#6#255'9&'#28#255#137'\C'#255#178'wV'#255#178'wV'#255
+ +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255'M3%'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'4"'#25#255#178'wV'
+ +#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255
+ +#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178'wV'#255#178
+ +'wV'#255#178'wV'#255#176'tT'#255#165'cC'#255'yA'''#255'[/'#27#255'Z0'#29#250
+ +'DDD'#150'CCCWFFF!III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'MMM'#10'R4'
+ +'''^[/'#27#255'\0'#28#255#142'M.'#255#171'nN'#255#177'uV'#255#177'wX'#255#177
+ +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'
+ +#255#177'wX'#255#177'wX'#255#177'wX'#255'gF3'#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#23#16#12#255#152'fK'#255#177
+ +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'
+ +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255
+ +#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177
+ +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'
+ +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#173'uV'#255
+ +#136'\D'#255#133'YB'#255#131'XA'#255#128'V@'#255#153'gL'#255#177'wX'#255#177
+ +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'
+ +#255#177'wX'#255#177'wX'#255'S8)'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255'"'#23#17#255#175'wX'#255#177'wX'#255#177
+ +'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'
+ +#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#177'wX'#255#175'tU'#255
+ +#166'eE'#255'}B)'#255'\0'#28#255'[/'#28#253'CCC'#148'CCCTBBB'#31'III'#7#0#0#0
+ ,#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'V4%h[/'#27#255'\0'#28#255#145'O0'
+ +#255#171'mN'#255#175'sU'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255
+ +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175
+ +'uW'#255'*'#29#21#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2
+ +#1#1#255'X;,'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255
+ +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175
+ +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'
+ +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255
+ +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175
+ +'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'
+ +#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255
+ +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255'^?/'#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255'$'#24#18#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255
+ +#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175'uW'#255#175
+ +'uW'#255#175'uW'#255#175'uW'#255#175'sT'#255#166'eE'#255#128'D*'#255'\0'#28
+ +#255'[/'#27#255'ECB'#149'CCCP@@@'#28'UUU'#6#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#1'@@@'#8'W3#q[/'#27#255'\1'#29#255#150'Q1'#255#171'mN'#255#174'sU'#255
+ +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175
+ +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#15#10#8#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#4#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#29#19#14#255#156'iM'#255#175'uV'#255
+ +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175
+ +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'
+ +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255
+ +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175
+ +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'
+ +#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255
+ +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175
+ +'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#11#7#6#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255'sM9'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255
+ +#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175'uV'#255#175
+ +'tV'#255#174'rS'#255#167'fG'#255#131'G,'#255'\0'#28#255'[/'#27#255'GA?'#150
+ +'CCCLGGG'#25'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'W3#k[/'#27
+ +#255'\1'#29#255#149'P2'#255#169'lM'#255#174'qT'#255#175'tV'#255#175'tV'#255
+ +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175
+ +'tV'#255#175'tV'#255#175'tV'#255#9#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255#136
+ +'ZC'#255'T8*'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#3#255
+ +'bA0'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'
+ +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255
+ +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175
+ +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'
+ +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255
+ +#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175
+ +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'
+ +#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255
+ +#165'nR'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#10#7#5#255#175'tV'#255#175
+ +'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'#255#175'tV'
+ +#255#175'tV'#255#175'tV'#255#175'tV'#255#174'sU'#255#173'qR'#255#166'eG'#255
+ +#131'F,'#255'\0'#28#255'[/'#27#255'EA?'#145'DDDGFFF'#22'@@@'#4#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#1'333'#5'W3#\[/'#27#255'\1'#29#255#146'P3'#255#168
+ +'jM'#255#173'pT'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'
+ +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255
+ +#4#3#2#255#0#0#0#255#0#0#0#255#21#14#10#255#173'rU'#255#173'rU'#255#152'dK'
+ +#255'dB1'#255'A+ '#255'D-!'#255#141']E'#255#173'rU'#255#173'rU'#255#173'rU'
+ +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255
+ +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173
+ +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'
+ ,#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255
+ +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173
+ +'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'
+ +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255
+ +#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#169'pS'#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#139'\D'#255#173'rU'#255#173'rU'
+ +#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255#173'rU'#255
+ +#173'rU'#255#173'rU'#255#173'qT'#255#172'oR'#255#165'cF'#255#128'E+'#255'\0'
+ +#28#255'[/'#27#255'CBA'#132'DDD@CCC'#19'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0'@@@'#4'U2"L[/'#27#255'\1'#29#255#143'N3'#255#168'hK'#255#172'oT'
+ +#255#173'qU'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255
+ +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#1#1#1#255#0#0#0
+ +#255#0#0#0#255'nI7'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173
+ +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'
+ +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255
+ +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173
+ +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'
+ +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255
+ +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173
+ +'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'
+ +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255
+ +#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#2#1#1#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255'H0$'#255#173'rV'#255#173'rV'#255#173'rV'
+ +#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255#173'rV'#255
+ +#173'rV'#255#173'qU'#255#171'nQ'#255#165'dF'#255'~D+'#255'\1'#29#255'Z0'#28
+ +#252'CCCzCCC9@@@'#16#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U'
+ +'UU'#3'T2#=[/'#27#255'\1'#29#255#140'N1'#255#166'gI'#255#171'oR'#255#173'qU'
+ +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255
+ +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#1#1#1#255#27#18#13#255'a@0'
+ +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255
+ +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173
+ +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'
+ +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255
+ +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173
+ +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'
+ +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255
+ +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173
+ +'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'
+ +#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255'$'#24#18#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#31#20#15#255#173'qU'#255#173'qU'#255#173'qU'#255
+ +#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173'qU'#255#173
+ +'qU'#255#172'pT'#255#169'lP'#255#164'aD'#255'{C*'#255'\1'#29#255'Y0'#30#247
+ +'CCCoBBB2;;;'#13#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128
+ +#2'V6''-[/'#27#255'\1'#29#255#137'L0'#255#165'fH'#255#170'mQ'#255#172'pT'#255
+ +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172
+ +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#166'lS'#255#172'pU'#255#172'pU'
+ +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255
+ +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172
+ +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'
+ +#255#172'pU'#255#172'pU'#255#172'pU'#255#168'nS'#255#134'WB'#255'b@0'#255'tK'
+ +'9'#255#166'lS'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'
+ +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255
+ +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172
+ +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'
+ +#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255
+ +#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#129'T@'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ ,#255#0#0#0#255#0#0#0#255#22#14#11#255#172'pU'#255#172'pU'#255#172'pU'#255#172
+ +'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'#255#172'pU'
+ +#255#172'oT'#255#170'mP'#255#163'`C'#255'xB*'#255'\1'#29#255'Y1'#31#241'BBBd'
+ +'CCC*MMM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'T7*'#29
+ +'[/'#27#255'\1'#29#255#134'J0'#255#165'dG'#255#169'lQ'#255#171'pU'#255#172'q'
+ +'W'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'
+ +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255
+ +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172
+ +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'
+ +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255
+ +#135'YD'#255'$'#24#18#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#8#5#4#255#30#20#16#255'xO='#255#172'qW'#255#172'qW'#255#172'qW'#255
+ +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172
+ +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'
+ +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255
+ +#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172
+ +'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#14#9#7#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#20#13#10#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'
+ +#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#172'qW'#255#171'oT'#255
+ +#169'jM'#255#162'_A'#255's>'''#255'\1'#29#255'X2 '#234'CCCXDDD"@@@'#8#0#0#0#1
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'C><'#9'[/'#27#247'\1'#29#255
+ +'}F-'#255#164'bE'#255#169'lO'#255#171'pT'#255#172'qV'#255#172'qV'#255#172'qV'
+ +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255
+ +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172
+ +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'
+ +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255
+ +#172'qV'#255#172'qV'#255#154'eM'#255#22#15#11#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#25#17#13#255#136'ZE'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'
+ +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255
+ +#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172
+ +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'
+ +#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255
+ +#172'qV'#255'U7*'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#17#11#9#255#172'qV'#255#172
+ +'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'#255#172'qV'
+ +#255#172'qV'#255#172'qV'#255#171'oT'#255#168'jM'#255#161'^@'#255'k;%'#255'\0'
+ +#28#255'V3#'#220'CCCLEEE'#26'333'#5#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0'+++'#6'[/'#28#214'\1'#29#255't@)'#255#162'`B'#255#168'jO'#255
+ +#172'pV'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173
+ +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'
+ +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255
+ +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173
+ +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#144'_I'#255#6#4#3
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'Z;-'#255
+ +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173
+ +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'
+ +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255
+ +#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173
+ +'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#171'pV'#255#3#2#1#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255'!'#22#17#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'
+ +#255#173'rX'#255#173'rX'#255#173'rX'#255#173'rX'#255#172'qX'#255#171'oU'#255
+ +#167'hM'#255#160'[>'#255'b5!'#255'\0'#28#255'S5'''#196'EEE?CCC'#19'@@@'#4#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'Z0'#29#176'\1'#29
+ +#255'k:%'#255#162'^A'#255#169'jN'#255#173'qV'#255#174'sY'#255#174'sY'#255#174
+ +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'
+ +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255
+ +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174
+ ,'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'
+ +#255#151'dM'#255#4#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#1#1#1#255#136'YF'#255#174'sY'#255#174'sY'#255#174's'
+ +'Y'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'
+ +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255
+ +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174
+ +'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'
+ +#255#174'sY'#255'5#'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'G.$'#255#174'sY'#255#174'sY'#255
+ +#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174
+ +'sY'#255#174'sY'#255#172'pV'#255#167'gK'#255#153'X:'#255'^3'#31#255'\0'#28
+ +#255'Q7+'#166'BBB2777'#14#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#2'Z0'#29#137'\0'#28#255'a5!'#255#160']>'#255#168'jN'#255
+ +#173'sY'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175
+ +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'
+ +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255
+ +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175
+ +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#29#20#15#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8
+ +#5#4#255#169'rX'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'
+ +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255
+ +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175
+ +'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'
+ +#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#156'jR'#255#1#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255'yQ?'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255
+ +#175'v\'#255#175'v\'#255#175'v\'#255#175'v\'#255#174'u['#255#172'qV'#255#166
+ +'gJ'#255#143'S6'#255'^2'#31#255'[/'#27#255'O;2'#130'CCC&999'#9#0#0#0#1#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'Z0'#29'a\0'#28#255
+ +'^3'#31#255#153'W;'#255#168'jN'#255#174'tZ'#255#176'x_'#255#176'y_'#255#176
+ +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'
+ +#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255
+ +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176
+ +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255'oL='#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255']@2'#255#176'y_'#255#176'y_'#255#176
+ +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255'Z=1'#255')'#28#22#255#26#18#14
+ +#255#14#10#8#255#10#7#5#255#23#16#12#255'+'#30#23#255'E0&'#255#138'_J'#255
+ +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176
+ +'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'
+ +#255#176'y_'#255'#'#24#19#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#172'w]'#255#176'y_'#255#176'y_'#255
+ +#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176'y_'#255#176
+ +'y_'#255#175'w^'#255#172'rW'#255#165'fI'#255#134'K2'#255']1'#30#255'[/'#27
+ +#255'H?:ZBBB'#27'+++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0'X/'#29'7[/'#27#255'^2'#31#255#141'P5'#255#167'hK'#255#174
+ +'sY'#255#177'x_'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'
+ +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255
+ +#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177
+ +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'
+ +#255#177'za'#255#177'za'#255#9#6#5#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255'%'#25#20#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255'bD6'#255#8
+ +#6#4#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255'>+"'#255#175'za'#255#177'za'#255#177'za'#255#177'za'
+ +#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255
+ +#177'za'#255#177'za'#255#177'za'#255#136'^K'#255#0#0#0#255#0#0#0#255#0#0#0
+ ,#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#11#9#255#177'za'#255#177
+ +'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'#255#177'za'
+ +#255#177'za'#255#177'za'#255#176'x^'#255#172'qV'#255#164'cF'#255'{E,'#255']1'
+ +#30#255'Z0'#29#245'DDD'#255
+ +'`5!'#255'\0'#28#255'T5'''#155'DDD'#30'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#28'w\0'#28#255
+ +'`5!'#255#157'\?'#255#172'pU'#255#179'}d'#255#181#129'i'#255#182#129'j'#255
+ +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255
+ +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255
+ +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255
+ +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255
+ +#182#129'j'#255#182#129'j'#255#182#129'j'#255'.!'#27#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#2#1#1#255#166'va'#255#182#129'j'#255#182#129'j'#255'A.&'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#9#6#5#255#170'yd'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182
+ +#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182
+ +#129'j'#255#182#129'j'#255#182#129'j'#255#8#6#5#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#135'`O'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255
+ +#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255#182#129'j'#255
+ +#182#129'j'#255#182#129'j'#255#181#128'h'#255#177'za'#255#169'kP'#255#139'Q7'
+ +#255'^3'#31#255'\0'#28#255'N9/\GGG'#18'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X.'#26'4\0'#28#255
+ ,'^3'#31#255#141'S8'#255#170'mQ'#255#179'|c'#255#182#130'k'#255#184#132'm'#255
+ +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255
+ +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255
+ +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255
+ +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255
+ +#184#132'm'#255#184#132'm'#255#184#132'm'#255#20#15#12#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255'N8.'#255#184#132'm'#255#184#132'm'#255#184#132'm'
+ +#255#22#16#13#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#21#15#13#255#182#130'm'#255#184#132'm'#255#184#132
+ +'m'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132
+ +'m'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255'N8.'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#23#17#13#255#184#132'm'#255#184#132'm'#255#184#132'm'#255
+ +#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255#184#132'm'#255
+ +#184#132'm'#255#184#132'm'#255#183#131'l'#255#182#129'j'#255#177'x_'#255#167
+ +'hK'#255'zG/'#255']1'#30#255'Z0'#28#241'@@@(MMM'#10#0#0#0#1#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'='#31
+ +#18#3'[/'#27#238']1'#30#255'{G/'#255#167'hL'#255#177'za'#255#183#131'l'#255
+ +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255
+ +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255
+ +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255
+ +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255
+ +#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#26#19#16#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#12#9#7#255#185#134'p'#255#185#134'p'#255#185#134'p'
+ +#255#185#134'p'#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'U>4'#255#185#134'p'#255#185
+ +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185
+ +#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#25#18
+ +#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255'xWI'#255#185#134'p'#255#185#134'p'#255#185#134
+ +'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134'p'#255#185#134
+ +'p'#255#185#134'p'#255#185#134'p'#255#184#134'o'#255#182#129'j'#255#175'v\'
+ +#255#165'dG'#255'h;&'#255'\1'#29#255'X2 '#193'==='#25'+++'#6#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0'[/'#27#170'\1'#29#255'f9%'#255#164'bG'#255#175'v]'#255#183#131
+ +'l'#255#186#135'r'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137
+ +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137
+ +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137
+ +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137
+ +'s'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255'$'#27#23
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#129'_P'#255#186#137's'#255#186#137's'#255
+ +#186#137's'#255#186#137's'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255' '#23#19#255#186
+ +#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186
+ +#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186
+ +#137's'#255#172#127'j'#255#7#5#4#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255#186#137's'#255#186#137's'
+ +#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'
+ +#255#186#137's'#255#186#137's'#255#186#137's'#255#186#137's'#255#185#135'q'
+ +#255#181#129'i'#255#173'qW'#255#149'X='#255'`5!'#255'\0'#28#255'V4%'#127'333'
+ +#15#0#0#0#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27'O\0'#28#255'_4 '#255#144'U:'
+ +#255#172'qV'#255#182#130'k'#255#187#137't'#255#188#139'u'#255#188#140'v'#255
+ +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ ,#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ +#188#140'v'#255'1$'#31#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255':+$'#255#188#140'v'#255#188#140
+ +'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#1#1#1#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#4#3#3#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255'}]N'#255'6("'
+ +#255#14#11#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'S>5'#255
+ +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ +#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255#188#140'v'#255
+ +#188#139'u'#255#186#136'r'#255#180'~f'#255#169'kP'#255'|H1'#255'^2'#31#255'['
+ +'/'#27#249'L=6+III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/'#27#235
+ +']1'#30#255'wD/'#255#169'jO'#255#180#127'g'#255#187#137'u'#255#189#141'x'#255
+ +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255
+ +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255
+ +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255
+ +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255
+ +#189#142'y'#255#189#142'y'#255'J7/'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#16#12#11#255#187#140'y'#255
+ +#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#1
+ +#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#181#136'u'#255#189#142'y'#255#189#142
+ +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142
+ +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142
+ +'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#11#8#7#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#1#1#1#255#181#136's'#255#189#142'y'#255#189#142'y'#255#189
+ +#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189#142'y'#255#189
+ +#142'y'#255#189#142'y'#255#189#142'y'#255#189#141'x'#255#186#136'q'#255#177
+ +'za'#255#164'dG'#255'f:&'#255'\1'#29#255'Y1'#31#186'@@@'#16'UUU'#3#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27#147'\1'#29#255'b8$'#255#160'bF'#255
+ +#177'y`'#255#186#137's'#255#190#143'z'#255#191#145'|'#255#191#145'|'#255#191
+ +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191
+ +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191
+ +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191
+ +#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#162
+ +'{i'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#1#1#1#255#162'{i'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255
+ +#191#145'|'#255#191#145'|'#255#191#145'|'#255#2#1#1#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1
+ +#1#1#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145
+ +'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145
+ +'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145
+ +'|'#255#191#145'|'#255#5#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255'&'#29#25#255
+ +#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255
+ +#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255#191#145'|'#255
+ +#191#145'|'#255#189#142'y'#255#184#134'o'#255#174'sY'#255#143'U;'#255'`5!'
+ +#255'\0'#28#255'U3$`@@@'#8#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0'Z.'#27'5\0'#28#255'_4 '#255#137'Q8'#255#173'rX'#255#184#134'o'#255#190#144
+ +'{'#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192
+ +#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255
+ +#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127
+ +#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147
+ +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#14
+ ,#11#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255' '
+ +#24#21#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255
+ +#192#147#127#255#192#147#127#255#192#147#127#255#4#3#3#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#8#6#5#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127
+ +#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147
+ +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192
+ +#147#127#255#192#147#127#255#192#147#127#255#1#1#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#137'iZ'#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147
+ +#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192#147#127#255#192
+ +#147#127#255#192#147#127#255#192#146'~'#255#189#142'y'#255#182#129'j'#255#169
+ +'lP'#255'uD.'#255'^2'#31#255'[/'#28#237'NFB'#21'UUU'#3#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#211']1'#30#255'l>)'#255#167'iM'
+ +#255#181#127'g'#255#190#143'z'#255#193#148#128#255#194#149#130#255#194#149
+ +#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194
+ +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255
+ +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130
+ +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149
+ +#130#255#194#149#130#255'G60'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255'ZE<'#255#194#149#130#255#194#149#130#255#194#149#130#255
+ +#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#7#6#5#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#23#17#15#255#194#149#130#255#194#149#130#255#194#149#130
+ +#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149
+ +#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194
+ +#149#130#255#194#149#130#255#194#149#130#255#179#137'x'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255'-#'#30#255#194#149#130#255#194#149#130#255#194#149#130#255#194
+ +#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255#194#149#130#255
+ +#194#149#130#255#194#149#130#255#194#149#130#255#192#147#127#255#188#140'v'
+ +#255#177'za'#255#156'_D'#255'a6#'#255'\1'#29#255'Y1'#31#153'@@@'#8#0#0#0#1#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z/'#27']\0'#28#255
+ +'`5!'#255#143'V='#255#175'v]'#255#187#138'u'#255#193#149#129#255#195#152#132
+ +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152
+ +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195
+ +#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255
+ +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133
+ +#255#195#152#133#255#195#152#133#255#170#133't'#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#172#133'u'#255#195#152#133#255#195#152
+ +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#146
+ +'rd'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'_JA'#255#195#152#133#255#195#152#133
+ +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152
+ +#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195
+ +#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#140'm`'#255#0#0
+ +#0#255#0#0#0#255#6#5#4#255#186#145#127#255#195#152#133#255#195#152#133#255
+ +#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#133
+ +#255#195#152#133#255#195#152#133#255#195#152#133#255#195#152#132#255#192#147
+ +#127#255#185#134'p'#255#172'pU'#255'|I2'#255'^3'#31#255'\0'#28#250'R5()UUU'#3
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3
+ +'[/'#27#221']1'#30#255'oA,'#255#169'lP'#255#183#131'l'#255#192#147#127#255
+ +#196#154#135#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136
+ +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155
+ +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197
+ +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255
+ +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#26#20#18#255
+ ,#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#5#255#197#155#136#255#197
+ +#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255
+ +#197#155#136#255#28#22#19#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3#255#193#153#134#255
+ +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136
+ +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155
+ +#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197
+ +#155#136#255#182#143'~'#255'=0*'#255#7#5#5#255#130'fY'#255#197#155#136#255
+ +#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136
+ +#255#197#155#136#255#197#155#136#255#197#155#136#255#197#155#136#255#196#154
+ +#136#255#195#152#133#255#190#144'{'#255#180'~f'#255#159'bG'#255'c8%'#255'\1'
+ +#29#255'Z0'#30#163'III'#7#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'g\0'#28#255'a6#'#255#147'Y@'#255#177
+ +'za'#255#190#143'z'#255#196#154#135#255#198#157#139#255#198#157#139#255#198
+ +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255
+ +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139
+ +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157
+ +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198
+ +#157#139#255'<0+'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'*!'#29#255
+ +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139
+ +#255#198#157#139#255#164#130's'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'?2,'#255#198
+ +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255
+ +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139
+ +#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157
+ +#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198
+ +#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255
+ +#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139#255#198#157#139
+ +#255#198#157#139#255#198#156#138#255#195#152#132#255#187#138't'#255#173'sY'
+ +#255#127'L5'#255'^3'#31#255'\0'#28#252'U3$,'#128#128#128#2#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#7
+ +'[/'#27#229'^2'#31#255'qB.'#255#171'nS'#255#185#134'p'#255#194#151#131#255
+ +#198#158#140#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142
+ +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160
+ +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200
+ +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255
+ +#200#160#142#255#200#160#142#255#200#160#142#255'9.)'#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255'hSJ'#255#200#160#142#255#200#160#142#255#200#160#142
+ +#255#200#160#142#255#200#160#142#255#200#160#142#255'6+'''#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#6#5#5#255#184#148#131#255#200#160#142#255#200#160#142#255#200#160#142
+ +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160
+ +#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200
+ +#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255
+ +#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142
+ +#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160#142#255#200#160
+ +#142#255#200#160#142#255#200#160#142#255#199#159#141#255#198#157#139#255#192
+ +#147#127#255#181#127'g'#255#161'dI'#255'd:&'#255'\1'#29#255'Z0'#29#171'@@@'#4
+ +#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'q\1'#29#255'a6#'#255#143'W?'#255#177'za'#255
+ +#191#144'|'#255#198#157#139#255#200#161#144#255#201#162#145#255#201#163#145
+ +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163
+ +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201
+ +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255
+ +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255'=2,'#255#0#0
+ ,#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255'!'#27#24#255#197#161#143#255#201#163#145#255
+ +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#197#161#143
+ +#255#3#2#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#1#1#1#255#149'zl'#255#201#163#145#255#201#163#145
+ +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163
+ +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201
+ +#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255
+ +#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145
+ +#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#163
+ +#145#255#201#163#145#255#201#163#145#255#201#163#145#255#201#162#145#255#200
+ +#161#143#255#197#155#136#255#187#138'u'#255#173'rX'#255'|I3'#255'_4 '#255'\0'
+ +#28#253'W1 2'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#6'\0'#28#216'^2'#31#255
+ +'i=)'#255#165'jP'#255#184#133'n'#255#196#152#134#255#201#162#145#255#202#164
+ +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202
+ +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255
+ +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148
+ +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165
+ +#148#255'E82'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#2#255#1#1#1#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.&"'#255#202#165#148#255#202#165#148
+ +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165
+ +#148#255#146'wk'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'eRI'#255#202#165#148#255#202#165#148
+ +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165
+ +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202
+ +#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255
+ +#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148
+ +#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165
+ +#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202#165#148#255#202
+ +#164#147#255#200#160#143#255#193#148#128#255#180'~f'#255#151'^D'#255'a7$'#255
+ +'\1'#29#255'Z0'#28#156'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27
+ +'D\0'#28#255'`5!'#255#128'N8'#255#175'v]'#255#190#143'{'#255#200#159#142#255
+ +#203#165#150#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151
+ +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167
+ +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204
+ +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255
+ +#204#167#151#255'N?9'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'vaW'#255
+ +#204#167#151#255#160#131'w'#255'cRI'#255'WG@'#255#168#137'|'#255#204#167#151
+ +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167
+ +#151#255#204#167#151#255#204#167#151#255#145'wk'#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'G:4'#255#204#167
+ +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204
+ +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255
+ +#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151
+ +#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167
+ +#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204
+ +#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255#204#167#151#255
+ +#204#167#151#255#204#167#150#255#202#165#148#255#198#155#138#255#186#137's'
+ +#255#171'nU'#255'oB.'#255'^2'#31#255'\0'#28#235'V2"'#21#0#0#0#1#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#169'\1'#29#255'c9&'#255#155'aH'#255
+ +#182#128'j'#255#195#152#133#255#202#164#148#255#205#169#154#255#206#169#155
+ +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169
+ +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206
+ +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255
+ +#206#169#155#255#206#169#155#255#206#169#155#255'VGA'#255#0#0#0#255#0#0#0#255
+ ,#0#0#0#255#5#4#4#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169
+ +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206
+ +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255
+ +#206#169#155#255#152'}r'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#2#1#1#255'vaY'#255#206#169#155#255#206#169#155#255#206#169
+ +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206
+ +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255
+ +#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155
+ +#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169
+ +#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206
+ +#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255#206#169#155#255
+ +#205#167#152#255#201#162#145#255#192#147#127#255#177'za'#255#138'T='#255'`6"'
+ +#255'\1'#29#255'[0'#29'e'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0'[/'#27#27'\0'#28#243'^3'#31#255'pC/'#255#171'oU'#255#188#138'u'
+ +#255#199#158#141#255#205#169#154#255#207#171#157#255#207#172#158#255#207#172
+ +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207
+ +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255
+ +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158
+ +#255#207#172#158#255'~i`'#255#0#0#0#255#0#0#0#255#0#0#0#255#22#18#16#255#207
+ +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255
+ +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158
+ +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172
+ +#158#255'/''$'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#9#7#7#255
+ +#164#136'~'#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158
+ +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172
+ +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207
+ +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255
+ +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158
+ +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172
+ +#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#171#157#255#204
+ +#167#151#255#196#153#136#255#183#131'l'#255#160'fK'#255'f;('#255']1'#30#255
+ +'[/'#27#199'te^'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0'[/'#27'q\0'#28#255'`6"'#255#130'P9'#255#177'x`'#255#192#146
+ +#127#255#203#164#149#255#208#173#159#255#209#175#161#255#209#175#161#255#209
+ +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255
+ +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161
+ +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175
+ +#161#255#199#167#153#255#0#0#0#255#0#0#0#255#0#0#0#255'.'#255#209#175#161
+ +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175
+ +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209
+ +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255
+ +#209#175#161#255'*$!'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'"'#28#26#255#197#165#153#255
+ +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161
+ +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175
+ +#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209
+ +#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255
+ +#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161
+ +#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175#161#255#209#175
+ +#161#255#209#175#161#255#209#175#161#255#209#174#160#255#207#171#157#255#200
+ +#160#144#255#188#139'w'#255#171'pV'#255'rD0'#255'^3'#31#255'\0'#28#250'\2'#30
+ +'1'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0'[/'#27#1'[/'#27#184']1'#30#255'c9&'#255#148'^E'#255#182#128'j'#255#197
+ +#154#136#255#206#170#155#255#210#176#163#255#211#178#164#255#211#178#165#255
+ +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165
+ +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178
+ ,#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211
+ +#178#165#255#12#10#9#255#0#0#0#255#0#0#0#255'MA<'#255#211#178#165#255#211#178
+ +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211
+ +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255
+ +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165
+ +#255#211#178#165#255#178#150#139#255'D95'#255#9#7#7#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'VIC'#255#211#178#165#255#211#178#165
+ +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178
+ +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211
+ +#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255
+ +#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165
+ +#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178
+ +#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211#178#165#255#211
+ +#178#165#255#211#178#165#255#211#178#164#255#209#176#162#255#204#167#151#255
+ +#193#148#129#255#177'x`'#255#129'P9'#255'`6"'#255'\0'#28#255'[0'#28't'#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0'[/'#27#21'\0'#28#229'^2'#31#255'i?+'#255#163'jP'#255#186#136
+ +'s'#255#200#160#144#255#209#174#160#255#212#180#167#255#213#181#169#255#213
+ +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255
+ +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169
+ +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181
+ +#169#255'.''%'#255#0#0#0#255',%#'#255#200#170#159#255#213#181#169#255#213#181
+ +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213
+ +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255
+ +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169
+ +#255#213#181#169#255#213#181#169#255#213#181#169#255#139'vo'#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'.''$'#255#213#181#169#255#213#181#169
+ +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181
+ +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213
+ +#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255
+ +#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169
+ +#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181
+ +#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213#181#169#255#213
+ +#181#169#255#213#181#169#255#212#180#168#255#211#178#165#255#207#171#157#255
+ +#197#155#137#255#182#128'j'#255#148']E'#255'c9&'#255']1'#30#255'[/'#27#179#0
+ +#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'?\0'#28#252'_4 '#255'tF1'#255#172
+ +'sY'#255#190#142'z'#255#203#165#150#255#211#178#164#255#213#183#170#255#214
+ +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255
+ +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172
+ +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184
+ +#172#255#127'ng'#255'{ib'#255#214#184#172#255#214#184#172#255#214#184#172#255
+ +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172
+ +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184
+ +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214
+ +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255' '#28#26#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#14#12#11#255#209#180#168#255#214#184#172
+ +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184
+ +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214
+ +#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255
+ +#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172
+ +#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184
+ +#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214#184#172#255#214
+ +#184#172#255#214#184#172#255#214#184#172#255#213#182#169#255#209#176#161#255
+ +#200#161#143#255#186#135'q'#255#161'gO'#255'h=*'#255'^2'#31#255'\0'#28#226'W'
+ +'-'#26#19#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'}\1'#29#255'`6"'
+ +#255'|M8'#255#175'x^'#255#192#147#127#255#205#170#154#255#213#181#169#255#215
+ ,#185#173#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255
+ +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175
+ +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187
+ +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216
+ +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255
+ +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175
+ +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187
+ +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#187#162#151#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#2#255#180#156#146#255#216#187#175
+ +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187
+ +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216
+ +#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255
+ +#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175
+ +#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187
+ +#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216#187#175#255#216
+ +#187#175#255#216#187#175#255#216#187#175#255#215#185#173#255#211#179#166#255
+ +#202#165#148#255#188#139'w'#255#167'mU'#255'nC/'#255'^3'#31#255'\0'#28#251'Z'
+ +'.'#27';'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'[/'#27
+ +#170'\1'#29#255'a7$'#255#130'Q<'#255#178'{c'#255#195#151#132#255#208#173#159
+ +#255#215#185#173#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189
+ +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217
+ +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255
+ +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178
+ +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189
+ +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217
+ +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255
+ +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255'.(&'#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#128'oi'#255#217#189#178#255#217#189#178
+ +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189
+ +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217
+ +#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255
+ +#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178
+ +#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189
+ +#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217#189#178#255#217
+ +#189#178#255#217#189#178#255#217#188#177#255#213#183#170#255#205#168#153#255
+ +#191#144'|'#255#170'rZ'#255'sF2'#255'`5!'#255'\0'#28#255'Z/'#27'g'#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#6'[/'#27
+ +#188']1'#30#255'c9&'#255#136'V?'#255#180'~g'#255#197#154#136#255#209#176#162
+ +#255#216#187#176#255#219#192#181#255#219#192#182#255#219#193#183#255#219#193
+ +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219
+ +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255
+ +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183
+ +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193
+ +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219
+ +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255
+ +#219#193#183#255#219#193#183#255#158#138#131#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#1#1#1#255#131'sm'#255#219#193#183#255#219#193#183#255#219#193#183#255
+ +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183
+ +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193
+ +#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219
+ +#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255
+ +#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183
+ +#255#219#193#183#255#219#193#183#255#219#193#183#255#219#193#183#255#219#192
+ +#182#255#218#191#180#255#215#185#173#255#207#172#156#255#193#147#128#255#174
+ +'v^'#255'wJ6'#255'`6"'#255'\1'#29#255'[/'#27'~'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#12'[/'#27#203
+ +']1'#30#255'c:'''#255#141'YC'#255#181#128'h'#255#198#155#138#255#210#177#164
+ +#255#217#190#178#255#220#194#184#255#221#195#185#255#221#196#186#255#221#196
+ +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221
+ +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255
+ +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186
+ +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196
+ +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221
+ +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255
+ +#221#196#186#255're_'#255#0#0#0#255#0#0#0#255#4#4#4#255#160#142#134#255#221
+ +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255
+ +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186
+ +#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196
+ +#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221
+ +#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255
+ +#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186#255#221#196#186
+ +#255#221#196#186#255#221#196#186#255#221#195#185#255#219#193#183#255#216#187
+ +#175#255#207#172#158#255#194#148#130#255#176'x_'#255'{M8'#255'a6#'#255'\1'#29
+ +#255'[/'#27#148#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#21'\0'#28#217']1'#30#255'c:'''
+ +#255#138'XB'#255#181#127'h'#255#197#156#137#255#211#178#164#255#218#191#180
+ +#255#221#196#187#255#222#198#188#255#223#198#189#255#223#198#189#255#223#198
+ +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223
+ +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255
+ +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189
+ +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198
+ +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223
+ +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#221#196#187#255
+ +#6#6#5#255#10#9#8#255#188#167#159#255#223#198#189#255#223#198#189#255#223#198
+ +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223
+ +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255
+ +#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189
+ +#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198
+ +#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223
+ +#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255#223#198#189#255
+ +#222#198#188#255#221#196#186#255#217#188#177#255#208#173#159#255#193#149#129
+ +#255#174'w^'#255'zM8'#255'a7$'#255'\1'#29#255'[/'#27#170'[/'#27#2#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0'[/'#27' \0'#28#223']1'#30#255'c:'''#255#132'T?'#255#180
+ +'~g'#255#197#155#136#255#211#178#164#255#219#193#181#255#223#198#189#255#224
+ +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255
+ +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192
+ +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201
+ +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224
+ +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255
+ +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192
+ +#255#224#201#192#255#224#201#192#255#134'xr'#255#205#184#176#255#224#201#192
+ +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201
+ +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224
+ +#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255
+ +#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192
+ +#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201
+ +#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224#201#192#255#224
+ +#201#192#255#224#201#192#255#223#200#191#255#222#197#187#255#217#189#178#255
+ +#207#172#158#255#192#147#127#255#171'u\'#255'vI6'#255'a6#'#255'\1'#29#255'[/'
+ +#27#179'[/'#27#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#25'\'
+ +'0'#28#209']1'#30#255'c9&'#255#128'Q='#255#177'{c'#255#195#151#133#255#209
+ +#176#162#255#219#192#181#255#223#200#191#255#225#203#194#255#226#204#196#255
+ +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196
+ +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204
+ +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226
+ +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255
+ +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196
+ +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204
+ +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226
+ +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255
+ +#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196
+ +#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204
+ +#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226
+ +#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255#226#204#196#255
+ +#226#204#196#255#226#204#196#255#226#203#195#255#225#202#193#255#222#198#188
+ +#255#217#188#177#255#206#169#155#255#191#144'|'#255#168'qY'#255'rG3'#255'`6"'
+ +#255'\1'#29#255'[/'#27#159'[/'#27#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#15'\0'#28#193']1'#30#255'b8%'#255'yM8'#255#170
+ +'u\'#255#192#146'~'#255#207#171#156#255#217#189#178#255#223#200#191#255#226
+ +#205#197#255#227#206#198#255#228#207#199#255#228#207#199#255#228#207#199#255
+ +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199
+ +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207
+ +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228
+ +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255
+ +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199
+ +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207
+ +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228
+ +#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255
+ +#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199
+ +#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207
+ +#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228#207#199#255#228
+ +#207#199#255#228#207#199#255#227#206#198#255#226#204#196#255#222#198#188#255
+ +#215#185#173#255#202#165#148#255#187#137'u'#255#159'jR'#255'nD0'#255'`6"'#255
+ +'\1'#29#255'[/'#27#137#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'[/'#27#175'\1'#29#255'`6"'#255'n'
+ +'D0'#255#158'iR'#255#187#137'u'#255#202#165#148#255#215#186#174#255#223#199
+ +#190#255#227#205#198#255#229#208#201#255#229#209#202#255#229#210#202#255#229
+ +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255
+ +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202
+ +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210
+ +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229
+ +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255
+ +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202
+ +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210
+ +#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229
+ +#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255
+ +#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202
+ +#255#229#210#202#255#229#210#202#255#229#210#202#255#229#210#202#255#229#209
+ +#202#255#228#207#201#255#226#204#197#255#221#196#187#255#212#180#168#255#198
+ +#157#140#255#183#130'l'#255#143'^G'#255'g>+'#255'_4 '#255'\1'#29#254'[/'#27
+ +'q'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27#132'\1'#29#254'_4 '#255'g>+'
+ +#255#140'[F'#255#181#129'j'#255#198#155#138#255#211#178#165#255#221#195#185
+ +#255#227#204#197#255#230#209#203#255#230#212#205#255#231#212#206#255#231#212
+ +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231
+ +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255
+ +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206
+ +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212
+ +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231
+ +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255
+ +#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206
+ +#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212
+ +#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231
+ +#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255#231#212#206#255
+ +#231#212#206#255#231#211#206#255#230#211#205#255#229#209#201#255#225#203#194
+ +#255#219#191#181#255#208#173#159#255#193#149#129#255#173'w`'#255'~Q='#255'c:'
+ +''''#255'^2'#31#255'\0'#28#238'[/'#27'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0'[/'#27'F\0'#28#234'^2'#31#255'c:'''#255'zN:'#255#168's['#255
+ +#190#143'{'#255#205#167#152#255#217#187#177#255#225#201#193#255#229#209#202
+ +#255#232#213#207#255#232#214#209#255#233#215#210#255#233#215#210#255#233#215
+ +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233
+ +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255
+ +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210
+ +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215
+ +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233
+ +#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255
+ +#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210
+ +#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215
+ +#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233#215#210#255#233
+ +#215#210#255#232#215#209#255#232#214#208#255#231#212#206#255#228#207#201#255
+ +#223#198#189#255#213#182#170#255#200#160#144#255#186#136'r'#255#158'iR'#255
+ +'pE2'#255'a7$'#255']1'#30#255'\0'#28#201'[/'#27#31#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#26'\0'#28#193']1'#30#255'`'
+ +'6"'#255'iA.'#255#142']H'#255#179#128'h'#255#196#153#135#255#210#176#163#255
+ +#220#194#184#255#227#205#198#255#231#212#206#255#233#216#211#255#234#217#212
+ +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218
+ +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234
+ +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255
+ +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213
+ +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218
+ +#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234
+ +#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255
+ +#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213
+ +#255#234#218#213#255#234#218#213#255#234#218#213#255#234#218#213#255#234#217
+ +#212#255#234#216#211#255#233#215#210#255#230#211#205#255#226#203#195#255#218
+ +#190#179#255#206#170#155#255#192#146#127#255#172'v`'#255#129'S?'#255'e<)'#255
+ +'_4 '#255'\1'#29#255'[/'#27#143'[/'#27#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'#27#127'\0'#28
+ +#248'^3'#31#255'c:'''#255'sI6'#255#158'kT'#255#186#136's'#255#200#160#143#255
+ ,#213#180#169#255#222#197#187#255#229#208#201#255#232#214#209#255#234#218#213
+ +#255#235#219#215#255#236#220#215#255#236#220#216#255#236#220#216#255#236#220
+ +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236
+ +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255
+ +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216
+ +#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220
+ +#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236
+ +#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255
+ +#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216#255#236#220#216
+ +#255#236#220#216#255#236#220#215#255#235#219#215#255#234#217#212#255#232#213
+ +#207#255#227#205#198#255#219#193#183#255#209#176#162#255#196#153#136#255#181
+ +#129'l'#255#145'`K'#255'lB0'#255'a7$'#255']1'#30#255'\0'#28#231'[/'#27'O'#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27'$\0'#28#185'\1'#29#255'`5!'#255
+ +'f=*'#255#128'S>'#255#166'r['#255#188#139'v'#255#201#161#145#255#213#181#169
+ +#255#223#197#189#255#229#209#202#255#233#216#210#255#235#219#215#255#236#221
+ +#217#255#237#222#219#255#238#223#220#255#238#223#220#255#238#223#220#255#238
+ +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255
+ +#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220
+ +#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223
+ +#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238
+ +#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255
+ +#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220#255#238#223#220
+ +#255#237#222#219#255#237#222#218#255#236#221#217#255#235#218#214#255#232#214
+ +#208#255#228#206#199#255#220#193#184#255#210#176#163#255#197#155#137#255#184
+ +#134'o'#255#155'iR'#255'uI7'#255'c:'''#255'^3'#31#255'\1'#29#252'[/'#27#144
+ +'[/'#27#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'['
+ +'/'#27'U\0'#28#228']1'#30#255'`6"'#255'g>,'#255#127'R?'#255#164'qZ'#255#188
+ +#139'v'#255#200#159#144#255#211#179#166#255#220#194#184#255#228#206#199#255
+ +#232#214#209#255#235#219#215#255#237#222#219#255#238#225#221#255#239#225#222
+ +#255#239#225#222#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226
+ +#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239
+ +#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255
+ +#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223
+ +#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226#223#255#239#226
+ +#223#255#239#226#223#255#239#226#223#255#239#225#222#255#238#225#221#255#238
+ +#224#220#255#237#222#218#255#235#218#214#255#231#212#206#255#226#203#195#255
+ +#218#191#180#255#209#174#160#255#197#154#136#255#184#132'o'#255#154'hR'#255
+ +'uK8'#255'e;('#255'_4 '#255'\1'#29#255'\0'#28#197'[/'#27'/'#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27
+ +#12'[/'#27#134'\0'#28#242'^2'#31#255'a5#'#255'g>+'#255'|Q='#255#160'lV'#255
+ +#184#133'p'#255#196#152#134#255#207#170#156#255#216#187#175#255#224#200#192
+ +#255#230#210#203#255#234#216#211#255#236#220#216#255#238#224#220#255#239#226
+ +#223#255#240#227#225#255#240#228#225#255#240#228#225#255#241#229#226#255#241
+ +#229#226#255#241#229#226#255#241#229#226#255#241#229#227#255#241#229#227#255
+ +#241#229#227#255#241#229#227#255#241#229#227#255#241#229#227#255#241#229#227
+ +#255#241#229#227#255#241#229#227#255#241#229#226#255#241#229#226#255#241#229
+ ,#226#255#241#229#226#255#240#228#225#255#240#228#225#255#240#227#224#255#239
+ +#225#222#255#238#223#220#255#236#220#215#255#233#215#210#255#228#207#201#255
+ +#222#196#187#255#213#183#170#255#204#166#150#255#192#147#127#255#179#127'i'
+ +#255#150'fO'#255'tI7'#255'e;('#255'`5!'#255']1'#30#255'\0'#28#223'[/'#27'`[/'
+ +#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#17'[/'#27#127'\0'#28#238']1'
+ +#30#255'`6"'#255'e<)'#255'rI6'#255#142'_J'#255#170'wa'#255#188#140'w'#255#199
+ +#158#141#255#208#173#159#255#216#186#175#255#222#196#187#255#227#206#198#255
+ +#232#213#208#255#235#219#214#255#237#222#218#255#238#224#220#255#239#226#223
+ +#255#240#227#225#255#241#229#226#255#242#230#228#255#242#230#228#255#242#231
+ +#229#255#242#231#229#255#242#231#229#255#242#231#229#255#242#231#229#255#242
+ +#231#229#255#242#231#229#255#242#230#228#255#241#229#227#255#241#229#226#255
+ +#240#227#225#255#239#225#222#255#238#224#220#255#236#221#217#255#234#218#213
+ +#255#231#211#206#255#226#204#196#255#220#194#184#255#214#183#171#255#206#169
+ +#155#255#196#153#135#255#185#135'r'#255#162'q['#255#134'XD'#255'lC1'#255'c:'
+ +''''#255'_4 '#255']0'#30#255'\0'#28#217'[/'#27'`[/'#27#4#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#13'[/'#27'w\0'#28#233
+ +']1'#30#255'_4 '#255'b8%'#255'h?-'#255'zN;'#255#149'dP'#255#170'xa'#255#187
+ +#137't'#255#194#150#131#255#202#164#148#255#210#176#163#255#216#187#175#255
+ +#220#194#184#255#224#200#192#255#228#207#199#255#231#212#206#255#234#217#211
+ +#255#236#220#215#255#236#222#217#255#237#222#219#255#238#223#220#255#238#223
+ +#220#255#238#224#220#255#238#223#220#255#237#223#219#255#237#223#218#255#236
+ +#221#217#255#235#219#215#255#233#216#210#255#230#211#204#255#227#204#197#255
+ +#223#199#190#255#219#192#183#255#215#185#173#255#208#173#159#255#200#160#144
+ +#255#192#146#127#255#183#133'o'#255#164's\'#255#142']J'#255'rI7'#255'f=*'#255
+ +'a6#'#255'^3'#31#255'\1'#29#255'\0'#28#210'[/'#27'X[/'#27#2#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0'[/'#27#5'[/'#27'P\0'#28#173'\1'#29#249']1'#30#255'`5!'#255'c9&'#255'g'
+ +'>,'#255'qH6'#255#133'YE'#255#153'iT'#255#172'yd'#255#186#136'q'#255#191#144
+ +'}'#255#196#153#136#255#202#162#146#255#207#171#156#255#211#178#165#255#214
+ +#183#171#255#216#186#175#255#217#188#177#255#218#190#179#255#219#191#182#255
+ +#219#192#182#255#219#192#181#255#218#189#179#255#217#187#177#255#215#185#173
+ +#255#213#182#169#255#210#176#163#255#205#169#154#255#200#160#144#255#195#151
+ +#133#255#190#142'z'#255#183#132'o'#255#167'u_'#255#148'eP'#255#127'S@'#255'm'
+ +'E2'#255'f=*'#255'b7%'#255'_4 '#255']1'#30#255'\0'#28#235'[/'#27#147'[/'#27
+ +'5'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'['
+ ,'/'#27#18'[/'#27'i\0'#28#199'\1'#29#254']1'#30#255'_4 '#255'a6#'#255'd9('#255
+ +'g>,'#255'oF3'#255'}Q>'#255#138'[G'#255#149'fQ'#255#160'oZ'#255#170'xa'#255
+ +#176'}h'#255#180#128'l'#255#183#133'p'#255#186#136's'#255#188#138'u'#255#188
+ +#139'v'#255#187#138'u'#255#186#135'r'#255#183#132'n'#255#178#128'j'#255#174
+ +'|e'#255#168'v`'#255#158'mW'#255#146'bN'#255#133'YE'#255'yM;'#255'mC1'#255'g'
+ +'>+'#255'c9&'#255'`6"'#255'^3'#31#255']1'#30#255'\0'#28#248'\0'#28#173'[/'#27
+ +'O[/'#27#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#20'[/'#27'V\0'#28#153
+ +'\0'#28#220'\1'#29#255']1'#30#255'^3'#31#255'`5!'#255'a7$'#255'c9&'#255'e;('
+ +#255'f=*'#255'g>,'#255'i@.'#255'jB0'#255'mE2'#255'qH5'#255'tJ7'#255'qG5'#255
+ +'lC1'#255'jA0'#255'h?-'#255'g>+'#255'e<)'#255'd:('#255'c9&'#255'a6#'#255'`5!'
+ +#255'^2'#31#255']1'#30#255'\1'#29#252'\0'#28#201'[/'#27#134'[/'#27'C[/'#27#8
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0'[/'#27#31'[/'#27'_[/'#27#138'\0'#28#176'\0'#28#213'\0'#28
+ +#248'\1'#29#255'\1'#29#255'\1'#29#255']1'#30#255'^2'#31#255'^2'#31#255'^3'#31
+ +#255'^3'#31#255'^3'#31#255'^2'#31#255']1'#30#255']1'#30#255'\1'#29#255'\1'#29
+ +#255'\1'#29#255'\0'#28#241'\0'#28#203'\0'#28#165'[/'#27#127'[/'#27'N[/'#27#15
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0'[/'#27#2'[/'#27'![/'#27'E[/'#27'U[/'#27'a[/'#27'm[/'#27'y[/'#27
+ +#134'\0'#29#141'[/'#27#130'[/'#27'v[/'#27'j[/'#27'^[/'#27'Q[/'#27'=[/'#27#23
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#128#0#255#255
+ +#255#255#255#255#255#255#255#255#255#255#255#224#0#0#3#255#255#255#255#255
+ +#255#255#255#255#255#255#254#0#0#0#0'?'#255#255#255#255#255#255#255#255#255
+ +#255#240#0#0#0#0#7#255#255#255#255#255#255#255#255#255#255#128#0#0#0#0#0#255
+ +#255#255#255#255#255#255#255#255#254#0#0#0#0#0#0'?'#255#255#255#255#255#255
+ +#255#255#248#0#0#0#0#0#0#15#255#255#255#255#255#255#255#255#224#0#0#0#0#0#0#3
+ +#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0#0#255#255#255#255#255#255
+ +#255#254#0#0#0#0#0#0#0#0'?'#255#255#255#255#255#255#252#0#0#0#0#0#0#0#0#31
+ +#255#255#255#255#255#255#240#0#0#0#0#0#0#0#0#7#255#255#255#255#255#255#224#0
+ +#0#0#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#1#255#255#255
+ +#255#255#255#0#0#0#0#0#0#0#0#0#0#127#255#255#255#255#254#0#0#0#0#0#0#0#0#0#0
+ +'?'#255#255#255#255#252#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#248#0#0#0#0#0
+ +#0#0#0#0#0#15#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#7#255#255#255#255#224#0
+ +#0#0#0#0#0#0#0#0#0#3#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#1#255#255#255
+ +#255#128#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#127
+ +#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0#127#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0
+ +'?'#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0#0#0#0#0
+ +#0#15#255#255#240#0#0#0#0#0#0#0#0#0#0#0#0#7#255#255#240#0#0#0#0#0#0#0#0#0#0#0
+ +#0#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0
+ +#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0
+ +#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#127#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#127#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'
+ +#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#31#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3
+ +#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#1#192#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#192#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0#0#0#0#0#0#0#0#0#0#0#3#224#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#3#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7#240#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15
+ +#248#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#31#252#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0#0#0#0#0#0#0#0'?'#254#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#127#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#127#255#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#128#0#0#0#0#0#0#0#0
+ +#0#0#0#0#1#255#255#128#0#0#0#0#0#0#0#0#0#0#0#0#1#255#255#192#0#0#0#0#0#0#0#0
+ +#0#0#0#0#3#255#255#192#0#0#0#0#0#0#0#0#0#0#0#0#3#255#255#224#0#0#0#0#0#0#0#0
+ +#0#0#0#0#7#255#255#224#0#0#0#0#0#0#0#0#0#0#0#0#15#255#255#240#0#0#0#0#0#0#0#0
+ +#0#0#0#0#15#255#255#248#0#0#0#0#0#0#0#0#0#0#0#0#31#255#255#248#0#0#0#0#0#0#0
+ +#0#0#0#0#0'?'#255#255#252#0#0#0#0#0#0#0#0#0#0#0#0#127#255#255#252#0#0#0#0#0#0
+ +#0#0#0#0#0#0#255#255#255#254#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#0#0#0
+ +#0#0#0#0#0#0#0#1#255#255#255#255#128#0#0#0#0#0#0#0#0#0#0#3#255#255#255#255
+ +#128#0#0#0#0#0#0#0#0#0#0#7#255#255#255#255#192#0#0#0#0#0#0#0#0#0#0#15#255#255
+ +#255#255#224#0#0#0#0#0#0#0#0#0#0#31#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0
+ +#31#255#255#255#255#248#0#0#0#0#0#0#0#0#0#0'?'#255#255#255#255#252#0#0#0#0#0
+ +#0#0#0#0#0#127#255#255#255#255#254#0#0#0#0#0#0#0#0#0#1#255#255#255#255#255
+ +#255#0#0#0#0#0#0#0#0#0#3#255#255#255#255#255#255#128#0#0#0#0#0#0#0#0#7#255
+ +#255#255#255#255#255#224#0#0#0#0#0#0#0#0#15#255#255#255#255#255#255#240#0#0#0
+ +#0#0#0#0#0#31#255#255#255#255#255#255#248#0#0#0#0#0#0#0#0#127#255#255#255#255
+ +#255#255#254#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#128#0#0#0#0#0#0
+ +#3#255#255#255#255#255#255#255#255#192#0#0#0#0#0#0#7#255#255#255#255#255#255
+ +#255#255#240#0#0#0#0#0#0#31#255#255#255#255#255#255#255#255#252#0#0#0#0#0#0
+ +#127#255#255#255#255#255#255#255#255#255#0#0#0#0#0#3#255#255#255#255#255#255
+ +#255#255#255#255#224#0#0#0#0#15#255#255#255#255#255#255#255#255#255#255#252#0
+ +#0#0#0#127#255#255#255#255#255#255#255#255#255#255#255#192#0#0#7#255#255#255
+ +#255#255#255#255#255#255#255#255#255#254#0#1#255#255#255#255#255#255#255#255
+ +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255
+ +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255
+ +#255#255#255#255#255#255#255#255#255'('#0#0#0'@'#0#0#0#128#0#0#0#1#0' '#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'#4'III'#7'III'#7
+ +'333'#5#128#128#128#2#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'UUU'#6'DDD'
+ +#15'FFF'#22'EEE'#26'DDD'#30'III#GGG/DDD'#30#255'j>'#31#253'g>#'#249'[>+'#235'PB8'#218'HE'
+ +'C'#203'FEC'#195'EED'#184'DDD'#166'DDDqEEE4@@@'#20'@@@'#4#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1
+ +'999'#9'BBB'#31'CCCPEDD'#143'FFE'#182'NB:'#211'Z?-'#231'g>#'#249'l?'#31#255
+ +'zK$'#253#150']*'#255#165'h.'#255#172'm0'#255#180's2'#255#186'x4'#255#189'{4'
+ +#255#192#127'5'#255#190'|4'#255#187'x4'#255#182'u3'#255#175'p1'#255#167'j/'
+ +#255#156'b+'#255#131'R&'#254'oB '#255'i>!'#253'_>)'#238'S@6'#222'FEB'#203'DD'
+ +'C'#190'DDD'#164'CCCkCCC.PPP'#16'UUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#128#128#128#2'CCC'#19'BBBBDDD'#136'EED'#179'LA9'
+ +#209'`=&'#243'k?'#31#255#127'N&'#254#154'`,'#255#176'q1'#255#191'~5'#255#200
+ +#138'7'#255#207#145'8'#255#210#149'9'#255#213#153'9'#255#217#157':'#255#219
+ +#160';'#255#221#162';'#255#220#162':'#255#217#158':'#255#215#155':'#255#211
+ +#151'9'#255#208#146'8'#255#203#141'8'#255#194#129'6'#255#183'v4'#255#163'f.'
+ +#255#137'U('#254'qC"'#254'f'
+ +'>>!+++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'BBB'#27'CC'
+ +'C[CCB'#165'LD='#203']<('#238'j> '#255#135'R('#254#176'p3'#255#193#128'7'#255
+ +#202#139'9'#255#211#151';'#255#220#162'<'#255#227#170'>'#255#232#176'?'#255
+ +#234#180'?'#255#237#182'?'#255#239#185'@'#255#241#187'@'#255#242#188'A'#255
+ +#241#187'@'#255#240#185'A'#255#238#183'@'#255#235#180'@'#255#233#178'?'#255
+ +#229#173'>'#255#222#165'='#255#215#156'<'#255#205#144':'#255#196#133'8'#255
+ +#185'x5'#255#152'^-'#255'oC"'#254'd<#'#247'QA7'#220'FFE'#200'CCC'#180'CCC}AA'
+ +'A/UUU'#9#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'III'#7'CCC&DDDpECC'#180'X<,'#232'i='
+ +'!'#254#128'O('#254#170'l3'#255#194#130':'#255#210#150'>'#255#220#163'?'#255
+ +#227#171'A'#255#234#180'B'#255#240#187'D'#255#242#190'D'#255#244#193'E'#255
+ +#246#194'D'#255#247#195'E'#255#248#197'E'#255#249#197'E'#255#249#198'E'#255
+ +#249#197'E'#255#248#196'E'#255#247#195'E'#255#246#195'E'#255#245#194'D'#255
+ +#243#191'D'#255#240#188'C'#255#236#183'C'#255#230#174'B'#255#223#165'@'#255
+ +#215#156'?'#255#200#137';'#255#182'u6'#255#146'[,'#255'm@!'#254'`:%'#244'KA;'
+ +#211'CCC'#189'CCC'#144'BBB>PPP'#16#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'999'#9'@@@4CCC'#133
+ +'HD@'#192'_9$'#244'rE%'#254#164'h3'#255#191#127';'#255#206#146'?'#255#219#163
+ +'C'#255#232#178'F'#255#238#185'G'#255#241#189'H'#255#244#193'H'#255#246#195
+ +'I'#255#247#196'I'#255#247#197'J'#255#247#197'I'#255#247#198'I'#255#248#198
+ +'I'#255#248#198'I'#255#248#197'I'#255#248#198'I'#255#248#198'I'#255#248#198
+ +'I'#255#247#197'I'#255#247#197'I'#255#247#196'I'#255#246#196'I'#255#245#194
+ +'H'#255#242#190'H'#255#239#187'H'#255#235#182'G'#255#224#168'D'#255#211#153
+ +'A'#255#196#134'='#255#177'q7'#255#133'Q)'#254'e: '#253'N?7'#218'DDC'#195'CC'
+ +'C'#160'FFFP@@@'#20#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0'III'#7'FFF3CCC'#145'LB;'#204'd:"'#250'|L('#254#180's9'#255
+ +#202#143'A'#255#216#159'F'#255#228#174'I'#255#236#184'K'#255#241#191'L'#255
+ +#243#193'M'#255#244#194'M'#255#244#195'M'#255#245#196'M'#255#245#195'M'#255
+ +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255
+ +#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255#245#195'M'#255
+ +#245#195'M'#255#245#195'M'#255#245#196'M'#255#245#195'M'#255#244#194'M'#255
+ +#243#194'M'#255#242#192'M'#255#238#186'L'#255#232#179'J'#255#220#165'F'#255
+ +#208#150'C'#255#190#127'<'#255#147'[.'#255'h< '#255'S=1'#228'EED'#199'DDD'
+ +#168'BBBUGGG'#18#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +'@@@'#4'FFF(EEE'#134'P?5'#212'e:!'#254#137'U,'#254#186'z='#255#208#150'E'#255
+ +#224#171'L'#255#233#181'O'#255#238#187'P'#255#240#191'P'#255#242#192'Q'#255
+ +#242#193'Q'#255#242#193'Q'#255#242#193'P'#255#242#193'Q'#255#242#193'Q'#255
+ +#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255
+ ,#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255
+ +#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255#242#193'Q'#255
+ +#242#193'Q'#255#242#193'Q'#255#241#192'Q'#255#239#189'P'#255#234#184'O'#255
+ +#228#175'M'#255#215#159'I'#255#194#132'@'#255#160'd3'#255'k?"'#254'X:*'#236
+ +'FDC'#201'CCC'#164'AAAG;;;'#13#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U'
+ +'UU'#3'BBB'#31'CCCvO=3'#211'f:'#31#255#150']2'#255#190#128'A'#255#211#155'I'
+ +#255#226#175'Q'#255#234#185'S'#255#237#188'T'#255#238#190'T'#255#239#191'U'
+ +#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'
+ +#255#239#191'U'#255#239#191'U'#255#235#189'S'#255'|d,'#255'N>'#28#255'4*'#19
+ +#255'=1'#22#255'WE'#31#255'w_*'#255#173#139'='#255#239#191'U'#255#239#191'U'
+ +#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'#255#239#191'U'
+ +#255#239#191'U'#255#239#191'U'#255#239#190'T'#255#238#189'U'#255#236#187'S'
+ +#255#230#179'R'#255#217#162'L'#255#198#138'D'#255#170'l8'#255'pC$'#254'Z8'''
+ +#240'DBB'#197'CCC'#153'FFF:@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF'#22
+ +'BBBeJ?9'#195'b8 '#254#150']2'#255#194#133'E'#255#213#158'N'#255#226#176'T'
+ +#255#233#185'W'#255#236#187'W'#255#236#188'X'#255#236#188'X'#255#236#188'X'
+ +#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'
+ +#255#236#188'X'#255'cO%'#255#4#3#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#18#14#7#255'A4'#24#255#134'k2'
+ +#255#218#174'R'#255#236#188'X'#255#236#188'X'#255#236#188'X'#255#236#188'X'
+ +#255#236#188'X'#255#236#188'X'#255#236#187'W'#255#234#186'W'#255#229#180'U'
+ +#255#218#165'P'#255#201#143'H'#255#173'o<'#255'k>#'#254'S;-'#231'CCC'#193'CC'
+ +'C'#141'DDD-fff'#5#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#12'DDDKFA='#179'`7 '#251#137'S-'
+ +#255#192#131'E'#255#214#161'Q'#255#226#176'W'#255#231#183'Y'#255#233#185'['
+ +#255#233#186'['#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'
+ +#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255'L<'#29#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#7#3#255'P'
+ +'?'#31#255#203#161'N'#255#234#185'Z'#255#234#185'Z'#255#234#185'Z'#255#234
+ +#185'Z'#255#233#186'['#255#232#183'Z'#255#228#178'Y'#255#219#167'T'#255#201
+ +#143'K'#255#163'g8'#255'f: '#255'O=4'#222'DDD'#188'CCCzBBB'#27#0#0#0#1#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U'
+ +'UU'#3'GGG$D@@'#147'\6#'#245'{I*'#254#185'{C'#255#211#157'R'#255#225#175'Z'
+ +#255#229#181'\'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']'
+ +#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']'#255#230#183']'
+ +#255#230#183']'#255#138'm8'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#24#20#10#255'x_0'
+ +#255#226#181'['#255#230#183']'#255#230#183']'#255#230#183']'#255#230#181'\'
+ +#255#227#177'['#255#217#165'V'#255#196#136'J'#255#151']4'#255'b8 '#254'K@9'
+ +#214'CCC'#175'AAAJ...'#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#16'CCC\V6'''#228'nA&'#254#178'tA'#255#205
+ +#151'R'#255#221#172'\'#255#226#179'_'#255#228#180'_'#255#228#180'_'#255#228
+ +#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#228
+ +#180'_'#255#228#180'_'#255#228#180'_'#255#228#180'_'#255#17#13#7#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255'H9'#30#255#224#178']'
+ +#255#228#180'_'#255#228#180'_'#255#227#179'^'#255#224#175']'#255#213#160'W'
+ +#255#190#129'H'#255#137'T/'#255'^4 '#252'FB?'#201'CCC'#140'DDD"'#0#0#0#3#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#4'FFF,J=7'
+ +#175'`4'#30#255#165'g;'#255#200#144'Q'#255#217#166'\'#255#223#176'`'#255#225
+ +#177'`'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225
+ +#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225#177'a'#255#225
+ +#177'a'#255#218#171'^'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#11#9#5#255#196#154'U'#255#225#177'a'#255#225#177
+ +'`'#255#224#177'a'#255#220#171'^'#255#208#154'W'#255#184'{F'#255'nA%'#254'T8'
+ +'*'#233'DDD'#180'CCCX333'#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0'CCC'#19'CCCjY5#'#239'~J,'#254#191#132'M'#255#213#162']'#255
+ ,#220#171'a'#255#221#173'c'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255
+ +#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255#222#174'b'#255
+ +#222#174'b'#255#222#174'b'#255#222#174'b'#255#154'yC'#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#15#11#6
+ +#255#218#172'`'#255#222#174'b'#255#222#174'b'#255#221#173'b'#255#217#167'_'
+ +#255#202#146'T'#255#156'a9'#255'^4'#30#254'G@='#206'DDD'#151'>>>)@@@'#4#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA+L;4'#188'b6 '#254#170
+ +'l@'#255#206#152'Z'#255#217#168'b'#255#219#171'd'#255#219#171'd'#255#219#171
+ +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171
+ +'d'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171
+ +'d'#255#219#171'd'#255#26#20#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'oW3'#255#219#171'd'#255#219
+ +#171'd'#255#219#171'd'#255#218#169'c'#255#212#161'_'#255#187#127'L'#255'uD)'
+ +#254'W6('#238'CCC'#182'CCC[III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0'@@@'#12'EBBS[3'#31#244#134'O/'#255#192#134'Q'#255#212#162'b'#255#215
+ +#167'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216
+ +#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216
+ +#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#216#168'd'#255#198
+ +#154'\'#255#5#4#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255'!'#25#15#255#216#168'd'#255#216#168'd'#255#216#168
+ +'d'#255#216#168'd'#255#214#166'd'#255#202#147'Y'#255#161'e='#255'^2'#29#255
+ +'J?:'#208'CCC'#137'EEE'#26#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'C'
+ +'CC'#23'O9/'#171'`3'#31#254#174'pD'#255#203#150']'#255#212#163'e'#255#213#164
+ +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164
+ +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164
+ +'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164'e'#255#213#164
+ +'e'#255#173#133'R'#255#3#2#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#22#17#11#255#213#164'e'#255#213#164'e'#255#213#164
+ +'e'#255#213#164'e'#255#213#164'f'#255#209#158'a'#255#187#128'O'#255'yD)'#254
+ +'W4$'#241'BBB'#169'DDD1@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'FFF(W4'
+ +'$'#229'{E)'#255#191#134'T'#255#207#157'c'#255#210#160'f'#255#210#160'f'#255
+ +#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255
+ +#210#160'f'#255#152'tJ'#255'[E,'#255'K9$'#255'{]<'#255#196#149'_'#255#210#160
+ +'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#159'yM'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'"'
+ +#26#17#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210#160'f'#255#210
+ +#160'f'#255#209#160'e'#255#199#146']'#255#156'_;'#255'\1'#28#254'FBA'#188'FF'
+ +'FXNNN'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'F@=T\/'#28#253#151'\9'#255
+ +#200#147'_'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255
+ +#207#156'e'#255#207#156'e'#255#207#156'e'#255#178#135'W'#255'$'#27#17#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'N:&'#255#207#156'e'#255#207
+ +#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#3#2#1#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'uX9'#255#207#156'e'#255#207
+ +#156'e'#255#207#156'e'#255#207#156'e'#255#207#156'e'#255#207#157'e'#255#204
+ +#153'b'#255#180'wK'#255'a4'#30#254'M;3'#216'DDD'#132'==='#25#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0'CCC'#19'N9.'#159'^2'#30#254#176'rI'#255#202#150'c'#255#203
+ +#153'e'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203
+ +#153'f'#255#163'zQ'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#29#22#15#255#203#153'f'#255#203#153'f'#255#203#153
+ +'f'#255#203#153'f'#255#14#10#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ ,#0#0#255#4#3#2#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#153'f'
+ +#255#203#153'f'#255#203#153'f'#255#203#153'f'#255#203#152'e'#255#190#134'X'
+ +#255'yC)'#254'V5&'#239'DDD'#165'FFF('#128#128#128#2#0#0#0#0#0#0#0#0#0#0#0#0
+ +'GGG'#25'V4%'#212's@&'#254#186#128'U'#255#199#148'd'#255#200#148'd'#255#200
+ +#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#198#146'd'#255#12#9
+ +#6#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#138'fE'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255
+ +#15#11#7#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'&'#28#19#255#145'kH'#255
+ +#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255#200#148'd'#255
+ +#200#148'd'#255#200#148'd'#255#200#148'd'#255#194#141'^'#255#146'W6'#255'[0'
+ +#28#254'EBB'#178'CCC9UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'JAA'#31'\1'#29#249#140'P'
+ +'2'#255#190#135'\'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143
+ +'c'#255#196#143'c'#255#196#143'c'#255'>-'#31#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'&'
+ +#28#19#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#25#18#12#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1
+ +#255'*'#31#21#255'kM6'#255#187#137'_'#255#196#143'c'#255#196#143'c'#255#196
+ +#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196#143'c'#255#196
+ +#143'c'#255#196#143'c'#255#196#143'c'#255#194#141'b'#255#170'kF'#255'\0'#28
+ +#254'L<5'#203'CCCH333'#10#0#0#0#0#0#0#0#0#0#0#0#1'K3+@[/'#27#255#160'`>'#255
+ +#190#136'_'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255
+ +#191#137'`'#255#189#135'`'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#30#21#15#255
+ +#191#137'`'#255#191#137'`'#255#191#137'`'#255'aF1'#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#5#3#2#255#165'vS'#255#191#137'`'
+ +#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'
+ +#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'#255#191#137'`'
+ +#255#191#137'`'#255#191#137'`'#255#191#136'`'#255#178'vQ'#255'h7 '#253'Q8,'
+ +#220'DDDV;;;'#13#0#0#0#0#0#0#0#0'UUU'#3'R4''^[/'#27#255#169'hF'#255#187#131
+ +']'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132
+ +'^'#255'uS;'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'{W>'#255#187#132'^'#255
+ +#187#132'^'#255#187#132'^'#255#185#130'^'#255#19#14#10#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#158'oO'#255#187#132'^'#255#187#132'^'
+ +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'
+ +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#187#132'^'
+ +#255#187#132'^'#255#187#132'^'#255#187#132'^'#255#181'{V'#255'r<"'#255'T6'''
+ +#228'BBBd@@@'#16#0#0#0#0#0#0#0#0'UUU'#6'T5''}_2'#30#253#171'kI'#255#183'}Z'
+ +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255'. '#23#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#1#1#0#255'S9)'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'
+ +#255#183'~Z'#255#173'xV'#255#31#21#15#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'b'
+ +'C0'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'
+ +#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255
+ +#183'~Z'#255#183'~Z'#255#183'~Z'#255#183'~Z'#255#181'zV'#255'zA%'#255'X4$'
+ +#237'DDDqCCC'#19#0#0#0#0#0#0#0#0'@@@'#8'U4%'#149'f5'#31#252#172'mK'#255#180
+ +'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#6#4#3
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#19#13#9#255#153'gK'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'
+ +#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255'{S<'#255'+'#29#21#255#7
+ +#4#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1
+ +#255'gF3'#255#180'yX'#255#180'yX'#255#180'yX'#255#139']D'#255'+'#29#21#255#8
+ +#6#4#255#8#6#4#255#16#11#8#255'W:*'#255#178'wV'#255#180'yX'#255#180'yX'#255
+ +#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#180'yX'#255#179'yV'#255#131
+ +'F+'#255'[3!'#245'CCCyIII'#21#0#0#0#0#0#0#0#0'UUU'#6'X3"'#165'n:"'#253#172'p'
+ +'O'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#173'uU'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1
+ +#0#0#255'P6'''#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'
+ ,#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255
+ +#177'wW'#255#177'wW'#255#158'jM'#255'W;+'#255''''#26#19#255'"'#23#17#255'%'
+ +#25#18#255'W:+'#255#167'qS'#255#177'wW'#255#177'wW'#255#177'wW'#255'@+'#31
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#2#1#255
+ +#149'dI'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177'wW'#255#177
+ +'wW'#255#177'vV'#255#139'M0'#255'[1'#30#250'DDDpCCC'#19#0#0#0#0#0#0#0#0'UUU'
+ +#3'Y1'#31#182'v>%'#255#172'oQ'#255#175'tW'#255#175'tW'#255#175'tW'#255#175't'
+ +'W'#255#175'tW'#255'}S?'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#26#17#13#255#150'cK'#255#175'tW'#255#175'tW'#255#175'tW'#255
+ +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175
+ +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'
+ +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255
+ +#175'tW'#255'dC2'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#9#6#4#255#169'pU'#255#175'tW'#255#175'tW'#255#175't'
+ +'W'#255#175'tW'#255#175'tW'#255#174'sU'#255#145'S6'#255']0'#28#254'DBBd@@@'
+ +#16#0#0#0#0#0#0#0#0#0#0#0#0'Z0'#30#175'v=%'#255#171'nP'#255#174'rV'#255#174
+ +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255'L2&'#255#0#0#0#255'/'#31#23#255
+ +'}R>'#255' '#21#16#255'!'#22#17#255#139'[E'#255#174'rV'#255#174'rV'#255#174
+ +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'
+ +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255
+ +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174
+ +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255'?*'#31#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'6#'#27
+ +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#173'qT'#255
+ +#145'S7'#255'\1'#29#254'AAAV;;;'#13#0#0#0#0#0#0#0#0#0#0#0#0'Z1'#30#150'n;$'
+ +#252#169'jM'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255
+ +#149'bI'#255'@* '#255#170'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'
+ +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255
+ +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172
+ +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'
+ +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255
+ +'G/#'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#24#16#12#255#172'qU'#255#172'qU'#255#172'qU'#255#172
+ +'qU'#255#172'qU'#255#171'oS'#255#138'N3'#255'\2'#31#249'DDDG999'#9#0#0#0#0#0
+ +#0#0#0#0#0#0#0'X1!|g7#'#250#167'gI'#255#172'pT'#255#172'qU'#255#172'qU'#255
+ +#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172
+ +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'
+ +#255#172'qU'#255'P5('#255')'#27#20#255#27#18#13#255'5#'#26#255'pJ8'#255#172
+ +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'
+ +#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255
+ +#172'qU'#255#172'qU'#255#162'jO'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#9#6#4#255#172'qU'#255#172
+ +'qU'#255#172'qU'#255#172'qU'#255#172'qU'#255#170'mR'#255#131'I.'#255'[4"'#241
+ +'FFF7UUU'#6#0#0#0#0#0#0#0#0#0#0#0#0'Y1!`b5 '#251#164'cG'#255#172'pU'#255#173
+ +'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'
+ +#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255
+ +#173'rW'#255'}S?'#255#9#6#5#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#16#11#8#255#152'dM'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255
+ +#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#173
+ +'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255'$'#24#18#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#2#255#173'r'
+ +'W'#255#173'rW'#255#173'rW'#255#173'rW'#255#173'rW'#255#170'mQ'#255'|C*'#255
+ +'W4$'#229'CCC&'#0#0#0#2#0#0#0#0#0#0#0#0#0#0#0#0'X5!A^2'#31#254#162'bE'#255
+ +#173'rV'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175
+ +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'
+ +#255#175'tY'#255'{Q?'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#14#9#7#255#173'tY'#255#175'tY'#255#175'tY'#255
+ +#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175
+ +'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#132'XC'#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#21
+ +#14#11#255#175'tY'#255#175'tY'#255#175'tY'#255#175'tY'#255#174'tY'#255#170'm'
+ +'P'#255't?('#254'U5&'#203'@@@'#24#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X0'#24' ^2'
+ +#31#255#156'\A'#255#175'v\'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'
+ +#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255
+ ,#177'y`'#255#177'y`'#255#177'y`'#255#11#8#6#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#136']J'#255#177
+ +'y`'#255#177'y`'#255'7%'#30#255#9#6#5#255#13#9#7#255#16#11#9#255#26#18#14#255
+ +#139'_K'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#177
+ +'y`'#255#18#12#9#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255'<)!'#255#177'y`'#255#177'y`'#255#177'y`'#255#177'y`'#255#176
+ +'x^'#255#169'kP'#255'j<&'#253'U4%'#168';;;'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0'^2'#29#234#136'O4'#255#176'x^'#255#180'~f'#255#180'~f'#255#180'~f'
+ +#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255
+ +#180'~f'#255#180'~f'#255#180'~f'#255#146'gS'#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#139'bO'#255#170'x`'#255#20#14#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255']A4'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255
+ +#180'~f'#255'qO@'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#1#1#0#255#165't^'#255#180'~f'#255#180'~f'#255#180'~f'#255#180'~f'#255
+ +#178'zb'#255#162'dH'#255'_3'#31#254'R6)c@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0'[/'#29#153'r?)'#252#174'sZ'#255#182#129'j'#255#183#131'l'#255#183
+ +#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183
+ +#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255'ZA5'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#5#3#3#255#179#127'j'#255'uTE'#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'{XI'#255#183#131'l'
+ +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#20#15#12#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255':)"'#255#183#131'l'#255
+ +#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#179'|c'#255#140
+ +'R9'#255'\2'#31#248'@@6'#28#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +'[/'#29'E`5 '#252#166'iO'#255#183#131'l'#255#186#136'q'#255#186#136'q'#255
+ +#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255
+ +#186#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255'\D8'#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255'oQC'#255#186#136'q'#255'X@6'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#12#9#7#255#186#136'q'#255#186
+ +#136'q'#255#186#136'q'#255#186#136'q'#255#186#136'q'#255#148'lZ'#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#169'|g'#255#186#136'q'#255#186
+ +#136'q'#255#186#136'q'#255#186#136'q'#255#185#134'q'#255#177'y`'#255'tB+'#254
+ +'W2!'#194'III'#14#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@'#0#4'^3'
+ +#30#245#144'W='#255#184#134'o'#255#189#141'x'#255#189#141'x'#255#189#141'x'
+ +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'
+ +#255#189#141'x'#255#189#141'x'#255#189#141'x'#255'tWJ'#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'('#30#26#255
+ +#189#141'x'#255#189#141'x'#255'?/('#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#187#139'v'#255#189#141
+ +'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#189#141'x'#255#172#128
+ +'m'#255'_G<'#255#1#0#0#255#0#0#0#255'-"'#28#255#189#141'x'#255#189#141'x'#255
+ +#189#141'x'#255#189#141'x'#255#189#141'x'#255#186#137's'#255#171'oU'#255'a6"'
+ +#253'T5$jUUU'#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\/'
+ +#27#170'vD,'#252#181#128'h'#255#190#144'{'#255#192#146'~'#255#192#146'~'#255
+ +#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255
+ +#192#146'~'#255#192#146'~'#255#192#146'~'#255#186#142'z'#255#1#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1#1#255#186#142'z'
+ +#255#192#146'~'#255#192#146'~'#255'=.('#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#192#146'~'#255#192
+ +#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192#146'~'#255#192
+ +#146'~'#255#192#146'~'#255#0#0#0#255#0#0#0#255#167#127'n'#255#192#146'~'#255
+ +#192#146'~'#255#192#146'~'#255#192#146'~'#255#191#145'}'#255#186#137's'#255
+ +#149'[A'#255'^1'#31#250'F:.'#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0'\.'#28'H`5 '#252#164'jP'#255#190#143'z'#255#194#151#131
+ +#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151
+ +#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131#255#194
+ +#151#131#255#27#21#18#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255' '#25#21#255#194#151#131#255#194#151#131#255#194#151#131#255'7*%'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#12#9#8#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151
+ +#131#255#194#151#131#255#194#151#131#255#194#151#131#255#190#149#129#255#0#0
+ ,#0#255'0% '#255#194#151#131#255#194#151#131#255#194#151#131#255#194#151#131
+ +#255#194#151#131#255#192#147#127#255#180'~f'#255'q@+'#252'Z0'#29#180#0#0#0#2
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0']0'
+ +#28#199'{H2'#252#184#134'o'#255#196#153#134#255#197#156#137#255#197#156#137
+ +#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156
+ +#137#255#197#156#137#255#197#156#137#255#197#156#137#255'G81'#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255'WE='#255#197#156#137#255#197
+ +#156#137#255#191#152#133#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#135'k^'#255#197#156#137#255#197
+ +#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255#197#156#137#255
+ +#197#156#137#255#197#156#137#255#16#12#11#255#174#138'y'#255#197#156#137#255
+ +#197#156#137#255#197#156#137#255#197#156#137#255#197#155#136#255#191#145'|'
+ +#255#151'_F'#255'^3'#31#253'T2!-'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[0'#29'5_4 '#254#161'hP'#255#195#152#132
+ +#255#200#161#143#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161
+ +#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200
+ +#161#144#255'xaW'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1
+ +#255#171#138'{'#255#200#161#144#255#200#161#144#255#127'f\'#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255')!'#30#255
+ +#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144
+ +#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#153'{n'
+ +#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161#144#255#200#161
+ +#144#255#198#156#138#255#181#128'h'#255'l>*'#252'Z1'#30#159#0#0#0#1#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0'^0'#27#173'uE/'#249#186#136'r'#255#201#162#145#255#203#165#150#255#203#165
+ +#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203
+ +#165#150#255#203#165#150#255#203#165#150#255#163#132'x'#255#0#0#0#255#0#0#0
+ +#255#26#21#19#255',$!'#255'-%!'#255#156'~s'#255#203#165#150#255#203#165#150
+ +#255#203#165#150#255'@4/'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#4#3#3#255#186#151#138#255#203#165#150#255#203#165
+ +#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203
+ +#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255#203#165#150#255
+ +#203#165#150#255#203#165#150#255#203#165#150#255#203#164#149#255#195#152#132
+ +#255#146'\D'#255'_3'#31#247'R3'#30#25#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z-'#30'"^4 '#252#155
+ +'cK'#255#196#153#136#255#206#169#155#255#207#171#156#255#207#171#156#255#207
+ +#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255
+ +#207#171#156#255#203#167#152#255#0#0#0#255#0#0#0#255#193#159#145#255#207#171
+ +#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207
+ +#171#156#255'E94'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#15#12#11#255#182#150#137#255#207#171#156#255#207#171#156#255#207#171#156
+ +#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171
+ +#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207#171#156#255#207
+ +#171#156#255#207#171#156#255#206#170#155#255#201#162#145#255#178'}f'#255'h<('
+ +#250'[0'#28#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0']1'#29#130'f:&'#250#171'u'
+ +'^'#255#202#164#148#255#210#176#163#255#210#177#164#255#210#177#164#255#210
+ +#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255
+ +#210#177#164#255#2#1#1#255#27#22#21#255#210#177#164#255#210#177#164#255#210
+ +#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255
+ +#210#177#164#255'I=8'#255#6#5#4#255#0#0#0#255#0#0#0#255#0#0#0#255'''!'#31#255
+ +#206#175#162#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164
+ +#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177
+ +#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210#177#164#255#210
+ +#177#164#255#210#176#163#255#206#170#155#255#188#139'w'#255'zI4'#252'^2'#29
+ +#222']/'#23#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'^1'#29#181'oA-'
+ +#249#182#132'n'#255#208#173#159#255#213#182#169#255#213#183#170#255#213#183
+ +#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213
+ +#183#170#255#12#10#9#255#159#136#127#255#213#183#170#255#213#183#170#255#213
+ +#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255
+ +#213#183#170#255#213#183#170#255#139'xo'#255#0#0#0#255#0#0#0#255'% '#30#255
+ +#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170
+ +#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183
+ ,#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213#183#170#255#213
+ +#183#170#255#213#183#170#255#211#178#165#255#196#152#134#255#136'T?'#254'`1 '
+ +#243'U+'#28'$'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U+'#21#12
+ +']2'#30#218'zK5'#251#192#146#127#255#212#180#168#255#216#187#176#255#217#188
+ +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217
+ +#188#177#255'o`Z'#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188
+ +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217
+ +#188#177#255#217#188#177#255#27#24#22#255#0#0#0#255#9#8#7#255#209#180#171#255
+ +#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177
+ +#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188
+ +#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217#188#177#255#217
+ +#188#177#255#215#185#173#255#202#163#147#255#152'cM'#255'`5 '#252'X.'#27'B'#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23'!_'
+ +'3 '#241#135'V@'#254#197#155#137#255#215#185#173#255#219#193#183#255#220#194
+ +#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220
+ +#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255
+ +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184
+ +#255#220#194#184#255#4#4#4#255#13#11#11#255#197#173#164#255#220#194#184#255
+ +#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184
+ +#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194
+ +#184#255#220#194#184#255#220#194#184#255#220#194#184#255#220#194#183#255#218
+ +#190#179#255#205#169#154#255#165'pY'#255'b8$'#252'[/'#27'h'#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Y1'#28'?_'
+ +'3!'#249#132'T?'#252#193#148#130#255#215#186#174#255#223#198#189#255#223#200
+ +#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223
+ +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255
+ +#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191
+ +#255#199#179#171#255#215#192#183#255#223#200#191#255#223#200#191#255#223#200
+ +#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223
+ +#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255#223#200#191#255
+ +#223#200#191#255#223#200#191#255#223#199#190#255#219#192#183#255#203#165#150
+ +#255#158'kS'#255'c9%'#251']0'#30#147#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Z-'#25'3_3'#30
+ +#234'wI5'#250#185#138'v'#255#215#186#174#255#225#203#194#255#227#205#197#255
+ +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197
+ +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205
+ +#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227
+ +#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255
+ +#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197
+ +#255#227#205#197#255#227#205#197#255#227#205#197#255#227#205#197#255#226#204
+ +#196#255#220#194#183#255#200#159#143#255#144'_H'#254'a6"'#253'\1'#30'y'#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\3'#31#25'^2'#29#207'nB.'#249#175'~i'#255
+ +#213#182#169#255#225#202#193#255#230#209#203#255#230#211#205#255#230#211#205
+ +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211
+ +#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230
+ +#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255
+ +#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205
+ +#255#230#211#205#255#230#211#205#255#230#211#205#255#230#211#205#255#230#210
+ +#204#255#227#205#198#255#219#191#181#255#193#149#131#255#131'R='#251'_4 '#247
+ +'Z0'#26'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'` '#8']0'
+ +#28#169'e:'''#250#148'aL'#255#196#153#136#255#220#193#183#255#229#209#202#255
+ +#233#216#210#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211
+ +#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216
+ +#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234
+ +#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255#234#216#211#255
+ +#234#216#211#255#234#216#211#255#234#216#211#255#233#216#211#255#231#212#206
+ ,#255#224#200#192#255#207#171#156#255#168'va'#255'rE1'#249'^3'#31#230'Y,'#28
+ +'.'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0'^1'#29'h`3'#31#237'nA/'#249#158'mW'#255#203#165#150#255#224#201#192
+ +#255#232#213#208#255#235#219#215#255#237#222#218#255#237#222#218#255#237#222
+ +#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237
+ +#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255
+ +#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218#255#237#222#218
+ +#255#236#220#216#255#233#216#211#255#228#206#200#255#213#182#170#255#177#131
+ +'n'#255'}M:'#250'a6"'#253']1'#29#155'U1'#24#21#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23#11
+ +']1'#29'~`5!'#246'tF5'#249#166'u`'#255#202#164#148#255#221#195#186#255#230
+ +#210#203#255#234#218#213#255#238#224#220#255#240#227#224#255#240#227#225#255
+ +#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225
+ +#255#240#227#225#255#240#227#225#255#240#227#225#255#240#227#225#255#239#225
+ +#222#255#236#220#215#255#232#213#207#255#225#203#194#255#210#176#164#255#183
+ +#138'u'#255#133'UA'#252'c9&'#254'^2'#30#178'\.'#26''''#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U1'#24#21']0'#30#147'`7"'#251'jA-'#249#133'UA'
+ +#253#169'zf'#255#201#162#146#255#220#194#184#255#230#211#205#255#233#215#210
+ +#255#234#217#212#255#236#220#215#255#237#222#218#255#238#223#220#255#237#222
+ +#219#255#236#220#216#255#234#219#213#255#233#216#211#255#231#213#206#255#225
+ +#203#194#255#209#174#160#255#181#136'u'#255#145'`L'#255'sG4'#249'c9&'#255'_2'
+ +#30#198'].'#28'7'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0'U+'#28#18'\.'#27'^_1'#30#179'c7$'#248'h?,'#251#127
+ +'Q;'#251#148'dN'#255#163't_'#255#175#129'n'#255#186#143'~'#255#198#157#141
+ +#255#204#167#151#255#201#161#145#255#191#149#132#255#179#135'u'#255#167'ye'
+ +#255#153'iT'#255#136'WC'#254'pE2'#249'c9&'#255'_3'#31#212'Z/'#27'|].'#29','#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'U9'#28#9'\.'#26'N^0'#29#157'`'
+ +'4 '#203'c6#'#230'c7%'#249'd:('#255'f=*'#255'i?-'#252'g>+'#255'e;('#255'd9&'
+ +#253'b7$'#237'a5!'#214'_1'#30#180'\/'#26'lX,'#26#29#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0'`0 '#16'[1'#24'*].'#27'B]1'#29'4\3'#31#25'UU'#0#3#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#248#15#255
+ +#255#255#255#255#254#0#0#127#255#255#255#255#240#0#0#7#255#255#255#255#192#0
+ +#0#1#255#255#255#255#0#0#0#0#255#255#255#252#0#0#0#0'?'#255#255#248#0#0#0#0
+ +#31#255#255#240#0#0#0#0#7#255#255#192#0#0#0#0#3#255#255#128#0#0#0#0#1#255#255
+ +#128#0#0#0#0#0#255#255#0#0#0#0#0#0#127#254#0#0#0#0#0#0#127#252#0#0#0#0#0#0'?'
+ +#252#0#0#0#0#0#0#31#248#0#0#0#0#0#0#31#248#0#0#0#0#0#0#15#240#0#0#0#0#0#0#15
+ ,#240#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#3#192
+ +#0#0#0#0#0#0#3#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0
+ +#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0
+ +#0#0#1#128#0#0#0#0#0#0#1#128#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0
+ +#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#1#192#0#0#0#0#0#0#3#192#0#0#0#0#0#0#3
+ +#224#0#0#0#0#0#0#3#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#224#0#0#0#0#0#0#7#240
+ +#0#0#0#0#0#0#15#240#0#0#0#0#0#0#15#248#0#0#0#0#0#0#31#248#0#0#0#0#0#0#31#252
+ +#0#0#0#0#0#0'?'#252#0#0#0#0#0#0#127#254#0#0#0#0#0#0#127#254#0#0#0#0#0#0#255
+ +#255#0#0#0#0#0#1#255#255#128#0#0#0#0#3#255#255#192#0#0#0#0#7#255#255#224#0#0
+ +#0#0#15#255#255#240#0#0#0#0#31#255#255#248#0#0#0#0'?'#255#255#254#0#0#0#0#127
+ +#255#255#255#0#0#0#1#255#255#255#255#192#0#0#7#255#255#255#255#240#0#0#31#255
+ +#255#255#255#254#0#0#255#255#255#255#255#255#248#31#255#255#255#255#255#255
+ +#255#255#255#255#255'('#0#0#0'0'#0#0#0'`'#0#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'333'#5'UUU'#6'III'#7'@@@'#8'@@@'#8'III'#7
+ +'UUU'#6'333'#5'UUU'#3#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'@@@'
+ +#4'@@@'#8'@@@'#16'DDD1BBBMCCC_FCCrDBB'#129'FDD'#133'CCCvCCCcDDDRDDD('#240'l@!'#252'qE!'
+ +#253'yJ$'#252#129'R&'#252#138'X)'#253#134'T('#253'}N%'#252'uG#'#252'oC"'#253
+ +'h=#'#248'Z>.'#230'OC;'#211'FEC'#198'DDC'#187'BBB|CCC&999'#9#0#0#0#1#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#2'<<<'#17'CCCWEED'#170'OB9'#211'd=&'#244'qE"'#253#137'V)'#253
+ +#164'h.'#255#186'y3'#255#194#130'5'#255#198#135'6'#255#203#140'7'#255#207#145
+ +'8'#255#205#143'7'#255#201#137'7'#255#196#132'6'#255#192#127'5'#255#177'r1'
+ +#255#152'_+'#254'{L%'#252'k?"'#251'[>-'#233'IEA'#203'EDD'#184'DDDq<<<'#30'@@'
+ +'@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0'@@@'#4'BBB#EDD'#146'KB<'#205'a='''#242'yK&'#252#166'i/'#255#192#128'6'
+ +#255#205#143'9'#255#217#159'<'#255#226#169'>'#255#230#173'>'#255#232#176'>'
+ +#255#235#180'?'#255#237#182'@'#255#236#181'?'#255#234#178'>'#255#231#175'>'
+ +#255#228#171'>'#255#223#165'<'#255#211#150':'#255#199#136'8'#255#182'v5'#255
+ +#146'\,'#253'k@"'#252'W?1'#227'GFE'#199'CCC'#171'???=@@@'#8#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'DDD8ECB'#170'[>,'#234'sF$'
+ +#252#160'e0'#255#196#133';'#255#216#158'@'#255#227#170'A'#255#234#180'C'#255
+ +#241#189'D'#255#245#193'E'#255#246#195'F'#255#247#195'F'#255#247#196'E'#255
+ +#248#197'F'#255#248#197'E'#255#247#195'F'#255#247#194'F'#255#246#194'E'#255
+ +#244#192'E'#255#238#184'C'#255#230#176'C'#255#223#166'A'#255#207#147'='#255
+ +#182'w7'#255#138'V+'#253'h>#'#250'NA9'#215'CCC'#186'@@@[;;;'#13#0#0#0#1#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#8'EEENGC?'#189'b;%'#245#139'W-'#253#190
+ +#127';'#255#212#153'B'#255#227#172'F'#255#239#186'I'#255#242#191'J'#255#244
+ +#193'K'#255#246#195'K'#255#247#196'K'#255#247#196'K'#255#247#196'L'#255#247
+ +#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'L'#255#247#196'K'#255#247
+ +#196'K'#255#246#196'K'#255#245#195'J'#255#243#193'J'#255#242#190'J'#255#234
+ +#180'H'#255#221#165'E'#255#202#142'@'#255#173'o5'#255'oC$'#252'T?3'#225'CCC'
+ +#193'AAAy@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'+++'#6'DDD@K@<'#198'g<"'#250#154
+ +'a2'#254#200#141'B'#255#222#168'J'#255#234#183'N'#255#239#189'P'#255#242#192
+ +'P'#255#242#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193
+ +'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193
+ ,'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#243#193'P'#255#242#193
+ +'P'#255#242#193'P'#255#241#191'P'#255#238#187'N'#255#229#176'L'#255#214#158
+ +'G'#255#183'y;'#255'yJ)'#252'[=,'#236'CCB'#195'EEEoFFF'#11#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3
+ +'CCC.J?;'#190'g=#'#252#167'k7'#255#205#147'H'#255#226#173'P'#255#235#186'T'
+ +#255#238#189'T'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'
+ +#255#239#190'U'#255#239#190'U'#255#191#152'D'#255'A4'#23#255'>1'#22#255'D6'
+ +#24#255'H9'#26#255'RA'#29#255#146's4'#255#228#182'Q'#255#239#190'U'#255#239
+ +#190'U'#255#239#190'U'#255#239#190'U'#255#239#190'U'#255#238#190'U'#255#237
+ +#187'T'#255#232#182'S'#255#217#162'M'#255#191#129'B'#255#132'R-'#253'[9('#240
+ +'DDD'#191'CCCW@@@'#8#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#1'>>>'#29'F@='#169'd9#'#250#165'i8'#255#208#151'L'#255
+ +#226#174'U'#255#233#184'Y'#255#235#186'Y'#255#235#187'Y'#255#235#187'Y'#255
+ +#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255#235#187'Y'#255'<0'#23#255#1#1#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#0#0#0#255#6
+ +#5#2#255'*!'#16#255'w^-'#255#227#181'W'#255#235#187'Y'#255#235#187'Y'#255#235
+ +#186'Y'#255#234#186'Y'#255#231#181'X'#255#218#164'Q'#255#194#133'E'#255'{J*'
+ +#252'U=/'#230'CCC'#186'EEE?@@@'#4#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0'333'#10'DAAw_9%'#244#150'^4'#254#204#148'N'#255#225#175
+ +'Y'#255#230#181'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255#231#183
+ +'\'#255#231#183'\'#255#231#183'\'#255#231#183'\'#255'hR*'#255#1#1#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#1#1#0#255#1#1#0#255'*!'#17#255#164#130'B'#255#231#183'\'
+ +#255#231#183'\'#255#231#182']'#255#228#179'['#255#217#165'V'#255#185'|C'#255
+ +'nA'''#252'N>5'#219'CCC'#163'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#128#128#128#2'@@@,W8*'#227#132'P/'#253#196#139'M'#255#220
+ +#170'['#255#226#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227
+ +#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#227#179'_'#255#4#3#2
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0
+ +#255#7#6#3#255#178#141'J'#255#227#179'_'#255#227#179'_'#255#225#176'^'#255
+ +#211#158'U'#255#174'q?'#255'c9"'#252'GA>'#203'BBB]III'#7#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FFF'#11'H>:'#150'e:#'#252#186'~H'#255#214#164'\'
+ +#255#222#174'a'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b'
+ +#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#223#175'b'#255#188#148'S'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#1#1#1#255#154'yC'#255#223#175'b'#255#223#175'a'#255
+ +#220#171'`'#255#204#150'U'#255#145'Y5'#254'Y8('#238'CCC'#175'FFF'#29#0#0#0#1
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'UUU'#3'AAA3Z7'''#236#148'\6'#255#207#154'Z'
+ +#255#218#170'b'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'
+ +#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'#255#219#171'd'
+ +#255#211#165'`'#255#6#5#3#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#219#171'd'#255#219
+ +#171'd'#255#219#171'd'#255#215#166'`'#255#189#129'M'#255'h=$'#252'H>;'#207'E'
+ +'EEhIII'#7#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#7'K<5'#137'h;$'#252#188#130
+ +'O'#255#213#164'b'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167
+ +'d'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167'd'#255#215#167
+ +'d'#255#215#167'd'#255#215#167'd'#255#168#130'N'#255#1#1#1#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#200#155']'#255#215#167'd'#255#215#167'd'#255#215#166'd'#255#205#153']'
+ +#255#153'`:'#255'[6$'#243'CCC'#164';;;'#13#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'7'
+ +'77'#14'Z5%'#229#150'[8'#255#203#150'^'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211#162'e'#255#211
+ +#162'e'#255#142'mD'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#145'pF'#255#211#162'e'#255#211#162
+ +'e'#255#211#162'e'#255#210#159'd'#255#189#131'R'#255'f9#'#252'I@;'#202'===.'
+ +#128#128#128#2#0#0#0#0#0#0#0#0#128#128#128#2'D??4]3'#30#252#181'yM'#255#206
+ +#155'd'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#205
+ +#155'f'#255'S?('#255#1#1#1#255#1#0#0#255#3#2#1#255#15#11#7#255#169#128'S'#255
+ ,#207#157'f'#255#207#157'f'#255#207#157'f'#255#16#12#8#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#186#141'\'
+ +#255#207#157'f'#255#207#157'f'#255#207#157'f'#255#207#157'e'#255#201#148'`'
+ +#255#135'O0'#254'R9-'#226'BBBeIII'#7#0#0#0#0#0#0#0#0'UUU'#6'O8/'#141'o>'''
+ +#251#193#139'['#255#203#151'e'#255#203#152'e'#255#203#152'e'#255#203#152'e'
+ +#255#203#152'e'#255#23#17#11#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#1#1#1#255#153'rL'#255#203#152'e'#255#203#152'e'#255',!'#22#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255' '#24#16
+ +#255#203#152'e'#255#203#152'e'#255#203#152'e'#255#203#152'e'#255#203#152'e'
+ +#255#202#150'd'#255#165'jC'#255'\3!'#247'DDD'#151'MMM'#10#0#0#0#0#0#0#0#0'@@'
+ +'@'#8'Z6%'#206#142'T5'#255#195#142'a'#255#198#145'c'#255#198#145'c'#255#198
+ +#145'c'#255#198#145'c'#255'W@,'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255'%'#27#19#255#198#145'c'#255#198#145'c'#255'U>+'
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#1#1#1#255#27#20#13#255'vW;'
+ +#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198#145'c'#255#198#145'c'
+ +#255#198#145'c'#255#198#145'c'#255#184'}S'#255'`4 '#252'FA>'#183'@@@'#12#0#0
+ +#0#0#0#0#0#0'999'#9']2'#30#243#166'gD'#255#192#138'`'#255#192#139'a'#255#192
+ +#139'a'#255#192#139'a'#255#190#137'a'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#8#6#4#255#192#139'a'#255#192#139
+ +'a'#255#129']B'#255#1#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'Q;)'#255#192#139'a'
+ +#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'
+ +#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#192#139'a'#255#188#132'['
+ +#255'u@'''#252'M;3'#212'999'#18#0#0#0#0#0#0#0#0'FFF'#11'^1'#29#250#174'oK'
+ +#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255'vS:'#255#1#1
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255
+ +'S:)'#255#186#131'\'#255#186#131'\'#255#184#129'\'#255'('#28#20#255#1#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255'Q9('#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186
+ +#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186#131'\'#255#186
+ +#131'\'#255#186#131'\'#255#186#130'['#255#131'I-'#255'Q9-'#221'FFF!'#0#0#0#1
+ +#0#0#0#0'M33'#20'_2'#30#251#173'pN'#255#180'{X'#255#180'{X'#255#180'{X'#255
+ +#180'{X'#255'-'#30#22#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#2#1#1#255'dE1'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255
+ +#180'{X'#255'O6&'#255#2#1#1#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255'G0#'#255#180'{X'#255#180'{X'#255#178'{X'#255'hH3'#255'U:)'#255
+ +'mK5'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'#255#180'{X'
+ +#255#180'{X'#255#139'P3'#255'U7)'#231'BBB2UUU'#3#0#0#0#0'T1&,c5 '#249#174'rQ'
+ +#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#8#5#4#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#1#0#0#255#27#18#13#255#164'nQ'#255#178'wW'#255#178
+ +'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'
+ +#255#142'_F'#255'H0#'#255#20#13#10#255#25#16#12#255'9'''#28#255'lI5'#255#178
+ +'wW'#255#178'wW'#255'kG4'#255#1#1#1#255#1#1#0#255#1#0#0#255#1#0#0#255#3#2#1
+ +#255'zQ<'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#178'wW'#255#149
+ +'W9'#255'Z5%'#238'DDD-'#128#128#128#2#0#0#0#0'Y3 Bj8#'#248#173'qS'#255#175't'
+ +'W'#255#175'tW'#255#175'tW'#255#175'tW'#255#1#0#0#255#1#1#1#255#0#0#0#255#0#0
+ +#0#255#5#3#3#255'cB2'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175
+ +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'
+ +#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255
+ +#173'rU'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#2#1
+ +#1#255#152'eL'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#155'[>'
+ +#255'\4"'#244'@@@'#28#0#0#0#1#0#0#0#0'X0!3g7"'#246#172'oR'#255#174'rV'#255
+ +#174'rV'#255#174'rV'#255#166'lR'#255#7#5#3#255#131'VA'#255#155'fM'#255'oI7'
+ +#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255
+ +#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174
+ +'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'#255#174'rV'
+ +#255#153'dL'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255'<'''#29#255#174'rV'#255#174'rV'#255#174'rV'#255#173'qU'#255#151'Y'
+ +'='#255']6%'#239'333'#15#0#0#0#0#0#0#0#0'O1'''#25'b3'#31#247#168'jN'#255#172
+ +'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'
+ +#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#136'XD'#255
+ ,'U7*'#255'^=/'#255'kE5'#255#170'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255
+ +#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oU'#255#172
+ +'oU'#255#172'oU'#255#5#3#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255'!'#21#16#255#172'oU'#255#172'oU'#255#172'oU'#255#172'oT'#255
+ +#143'R7'#255'Y6('#225'@@@'#12#0#0#0#0#0#0#0#0'333'#5'_2'#31#248#167'hL'#255
+ +#172'qW'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172
+ +'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255':&'#30#255#1#0#0#255
+ +#1#1#0#255#1#1#1#255#1#1#0#255#4#2#2#255#133'WD'#255#172'qX'#255#172'qX'#255
+ +#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172'qX'#255#172
+ +'qX'#255#172'qX'#255'E.$'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#30#20#15#255#172'qX'#255#172'qX'#255#172'qX'#255#172'pV'#255
+ +#134'K2'#255'V8)'#199'999'#9#0#0#0#0#0#0#0#0#0#0#0#1'_3'#30#239#164'fJ'#255
+ +#175'w]'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255#175
+ +'w^'#255#175'w^'#255#175'w^'#255#175'w^'#255'hF7'#255#1#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#4#255#175'w^'#255#175'w^'#255'{TB'
+ +#255'X;/'#255']?2'#255#127'VD'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'w'
+ +'^'#255#165'qY'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1
+ +#255'fF7'#255#175'w^'#255#175'w^'#255#175'w^'#255#175'v\'#255'{D-'#253'S5('
+ +#154'333'#5#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#200#149'Z?'#255#179'|c'#255#179'}'
+ +'e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'
+ +#255#179'}e'#255#179'}e'#255#19#13#11#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#2#1#1#255#179'}e'#255'E0'''#255#1#0#0#255#1#1#0#255
+ +#1#1#0#255#0#0#0#255'R:/'#255#179'}e'#255#179'}e'#255#179'}e'#255#179'}e'#255
+ +'.!'#26#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#1#255#177'}e'#255#179
+ +'}e'#255#179'}e'#255#179'}e'#255#175'v\'#255'g8$'#251'W7*O'#0#0#0#1#0#0#0#0#0
+ +#0#0#0#0#0#0#0'[0'#29'lyD-'#249#181#128'i'#255#183#131'l'#255#183#131'l'#255
+ +#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255
+ +#183#131'l'#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255'"'#25#20#255#183#131'l'#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255'B/'''#255#183#131'l'#255#183#131'l'#255
+ +#183#131'l'#255#169'yd'#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255'#'#25#21
+ +#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#183#131'l'#255#167'lQ'#255
+ +'^3'#31#248'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'Y1'#30#26'b5 '#244#178'z'
+ +'c'#255#187#138't'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138
+ +'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#2#2#1#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#170'~j'#255#177
+ +#130'o'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#4#3#3
+ +#255#187#138'u'#255#187#138'u'#255#187#138'u'#255#187#138'u'#255'jNB'#255#11
+ +#8#7#255#0#0#0#255#0#0#0#255#152'p`'#255#187#138'u'#255#187#138'u'#255#187
+ +#138'u'#255#186#136'r'#255#144'W?'#255']6#'#193'333'#5#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0'`4'#31#217#160'gN'#255#190#143'{'#255#191#145'}'#255#191
+ +#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191
+ +#145'}'#255#191#145'}'#255#19#14#12#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255'7*$'#255#191#145'}'#255#164'|k'#255#1#1#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#2#2#1#255#191#145'}'#255#191#145'}'#255
+ +#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#0#0#0#255#30#23
+ +#20#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#191#145'}'#255#187#138
+ +'t'#255'p>('#249'Y2#U'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27
+ +'huB+'#244#190#142'z'#255#195#152#132#255#195#152#132#255#195#152#132#255#195
+ +#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255#195#152#132#255
+ +'A3,'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255#183#142'|'#255
+ +#195#152#132#255#138'k]'#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#9#7#6#255#195#152#132#255#195#152#132#255#195#152#132#255#195
+ +#152#132#255#195#152#132#255#195#152#132#255#1#1#1#255#160'}m'#255#195#152
+ +#132#255#195#152#132#255#195#152#132#255#194#150#131#255#167'pW'#255'`4 '#240
+ +'M33'#10#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@'#0#4'`3'#30#229
+ +#164'nU'#255#197#156#137#255#199#159#141#255#199#159#141#255#199#159#141#255
+ +#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255'x`U'#255#1#1
+ +#1#255#0#0#0#255#0#0#0#255#0#0#0#255#18#14#13#255#199#159#141#255#199#159#141
+ +#255' '#26#23#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255
+ +#139'oc'#255#199#159#141#255#199#159#141#255#199#159#141#255#199#159#141#255
+ +#199#159#141#255#199#159#141#255'^KC'#255#199#159#141#255#199#159#141#255#199
+ +#159#141#255#199#159#141#255#192#147#127#255'rB-'#249'\1 k'#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\.'#28'Sn>('#243#194#149#131
+ ,#255#202#165#148#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165
+ +#149#255#203#165#149#255#203#165#149#255#169#138'|'#255#0#0#0#255#1#1#1#255
+ +#16#13#11#255#23#19#17#255#171#139'~'#255#203#165#149#255#203#165#149#255#3#3
+ +#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'*"'#31#255#203#165
+ +#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203
+ +#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255#203#165#149#255
+ +#203#165#149#255#201#162#145#255#163'mU'#255'_3'#31#227'U'#0#0#3#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'a3'#30#213#153
+ +'eM'#254#204#167#151#255#207#172#158#255#207#172#158#255#207#172#158#255#207
+ +#172#158#255#207#172#158#255#207#172#158#255#205#170#156#255#0#0#0#255'<1.'
+ +#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172
+ +#158#255#20#16#15#255#1#0#0#255#0#0#0#255#0#0#0#255#1#0#0#255'?40'#255#207
+ +#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255
+ +#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158#255#207#172#158
+ +#255#207#172#158#255#207#171#156#255#192#147#127#255'k<'''#244'Z.'#29'L'#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +'^/'#27'&b5!'#240#174'{f'#255#209#176#162#255#212#180#167#255#212#180#167#255
+ +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#6#5#5#255
+ +#179#151#140#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167
+ +#255#212#180#167#255#212#180#167#255'gXR'#255#0#0#0#255#0#0#0#255'gXR'#255
+ +#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167
+ +#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180#167#255#212#180
+ +#167#255#212#180#167#255#211#179#166#255#202#162#146#255#127'M7'#248'`2'#31
+ +#169#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0'[/'#26'Fg:#'#242#190#145#127#255#214#184#172#255#216
+ +#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255
+ +'k]X'#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216
+ +#187#176#255#216#187#176#255#216#187#176#255'E<8'#255#0#0#0#255'>63'#255#216
+ +#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255
+ +#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176#255#216#187#176
+ +#255#216#187#176#255#216#187#175#255#210#176#163#255#147'_H'#252'`4'#31#210
+ +'U++'#6#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\0'#29'trB-'#242#198#157#140#255#218#191
+ +#180#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221
+ +#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255
+ +#221#195#185#255#221#195#185#255#221#195#185#255',''%'#255'920'#255#221#195
+ +#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221
+ +#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255#221#195#185#255
+ +#221#195#185#255#220#194#184#255#213#183#170#255#162'oW'#255'b5 '#232'].'#23
+ +#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'_1'#30#138'l>)'#242#187#143'|'
+ +#255#221#196#186#255#225#202#193#255#225#203#194#255#225#203#194#255#225#203
+ +#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225
+ +#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255
+ +#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194
+ +#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203#194#255#225#203
+ +#194#255#224#201#192#255#212#180#168#255#149'aK'#252'a5!'#230']2'#25')'#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#28'\d9$'#241#172
+ +'|h'#255#222#197#187#255#228#206#200#255#230#209#203#255#230#209#203#255#230
+ +#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255
+ +#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203
+ +#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209#203#255#230#209
+ +#203#255#230#209#203#255#230#209#203#255#229#209#202#255#226#204#197#255#208
+ +#173#159#255#131'R;'#245'a3'#31#207'Y3'#26#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#28'7a5!'#236#137'WB'#248#201
+ +#163#148#255#229#210#202#255#233#215#210#255#234#217#212#255#234#217#212#255
+ +#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212
+ +#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#217
+ +#212#255#234#217#212#255#234#217#212#255#234#217#212#255#234#216#211#255#231
+ +#212#206#255#221#195#185#255#174#128'm'#255'm>*'#242'`1'#29#163'f33'#5#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0'b'''#20#13'`2'#29#140'd8$'#241#151'hR'#251#211#179#167#255#233#215
+ +#210#255#236#220#215#255#237#222#219#255#238#225#221#255#238#225#221#255#238
+ +#225#221#255#238#225#221#255#238#225#221#255#238#225#221#255#238#225#221#255
+ +#238#225#221#255#238#225#221#255#238#223#220#255#236#221#217#255#234#219#213
+ +#255#227#205#198#255#188#146#128#255'wH2'#242'b5 '#219'].'#27'B'#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'X1'#29#26'a3'#30#168'f:$'#242#134'T?'
+ +#246#179#136'v'#255#214#183#172#255#235#218#214#255#238#225#221#255#239#226
+ +#223#255#240#227#224#255#240#227#225#255#240#227#225#255#239#226#223#255#239
+ +#225#222#255#238#224#220#255#226#204#196#255#199#161#145#255#158'o['#254'rD-'
+ +#239'b4"'#232'^2'#30'\'#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0'`+ '#24']/'#30'fd6#'#197'c8#'#243'vE0'#240#140'ZF'
+ +#247#156'mY'#255#171#127'm'#255#184#143#127#255#178#136'v'#255#164'wd'#255
+ +#148'dP'#252#130'Q;'#243'l<('#239'b6"'#234'b5!'#151'Z-'#29'>UU'#0#3#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0'].'#23#11'Z/'#29'G^4 fa4!'#130'd6!'#166'd7#'#194
+ +'d7"'#182'c6"'#150'_3'#31's\0'#29'YY/'#30'+'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#224#3#255#255#255
+ +#255#255#254#0#0#127#255#255#255#255#248#0#0#31#255#255#255#255#224#0#0#7#255
+ +#255#255#255#192#0#0#3#255#255#255#255#128#0#0#1#255#255#255#255#0#0#0#0#127
+ +#255#255#254#0#0#0#0#127#255#255#252#0#0#0#0'?'#255#255#248#0#0#0#0#31#255
+ +#255#240#0#0#0#0#15#255#255#240#0#0#0#0#15#255#255#224#0#0#0#0#7#255#255#224
+ +#0#0#0#0#3#255#255#192#0#0#0#0#3#255#255#192#0#0#0#0#3#255#255#192#0#0#0#0#1
+ +#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255
+ +#128#0#0#0#0#1#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#0#255#255#128#0#0#0
+ +#0#0#255#255#128#0#0#0#0#0#255#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255
+ +#255#128#0#0#0#0#1#255#255#128#0#0#0#0#1#255#255#192#0#0#0#0#1#255#255#192#0
+ +#0#0#0#3#255#255#192#0#0#0#0#3#255#255#224#0#0#0#0#7#255#255#224#0#0#0#0#7
+ +#255#255#224#0#0#0#0#15#255#255#240#0#0#0#0#15#255#255#248#0#0#0#0#31#255#255
+ +#248#0#0#0#0'?'#255#255#252#0#0#0#0'?'#255#255#254#0#0#0#0#127#255#255#255#0
+ +#0#0#0#255#255#255#255#128#0#0#1#255#255#255#255#192#0#0#3#255#255#255#255
+ +#224#0#0#15#255#255#255#255#248#0#0#31#255#255#255#255#254#0#0#127#255#255
+ +#255#255#255#192#7#255#255#255#255#255#255#255#255#255#255#255#255'('#0#0#0
+ +' '#0#0#0'@'#0#0#0#1#0' '#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2'CCC'#19'FFF'#22'UUU'#3#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0'@@@'#12'EAAGDDB'#133'DDC'#181'HC?'#205'LA;'#213
+ +'JB='#212'FC@'#204'EED'#185'DDC'#145'DDDSFFF'#22#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'III'#14'EEBoLA;'#208'eE-'#235'xK('
+ +#246#131'R)'#250#139'W*'#251#149'_,'#252#145'\+'#252#136'V*'#250#128'Q('#249
+ +'rI)'#244'\D2'#227'FB?'#207'CCC'#134'DDD'#30#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0'EEENMA9'#206'oF)'#245#147']-'#252#187'}4'#255#211#150'9'#255#224
+ +#167';'#255#230#174'='#255#234#179'>'#255#233#178'>'#255#228#171'='#255#221
+ +#163'<'#255#205#143'8'#255#175'r2'#255#131'R*'#250'eC,'#238'FB?'#205'CCCoUUU'
+ +#3#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0'@@@'#4'GEA|dB+'#239#142'[.'#252#198#137'<'#255#227#172'C'#255
+ +#236#183'E'#255#242#190'F'#255#246#195'G'#255#248#198'G'#255#249#199'H'#255
+ +#249#198'H'#255#247#196'G'#255#245#193'G'#255#240#188'F'#255#234#180'D'#255
+ +#220#163'A'#255#183'y8'#255'}O*'#250'WA4'#225'CCC'#152'<<<'#17#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1'G@='#148
+ +'lD*'#245#175'u8'#254#221#166'I'#255#234#182'M'#255#242#193'P'#255#243#194'O'
+ +#255#244#195'O'#255#244#195'P'#255#244#195'P'#255#244#195'P'#255#244#195'P'
+ +#255#244#195'P'#255#244#195'P'#255#243#194'O'#255#243#194'O'#255#240#190'O'
+ +#255#230#179'L'#255#212#155'F'#255#148'^1'#252'`A.'#234'CCC'#171'@@@'#12#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FA>vmB)'#247#189
+ +#130'A'#255#224#172'P'#255#236#187'U'#255#238#189'W'#255#238#190'V'#255#238
+ +#190'V'#255#238#190'V'#255'fQ%'#255#17#14#6#255#17#13#6#255#16#13#6#255',#'
+ +#16#255#155'|8'#255#238#190'V'#255#238#190'V'#255#238#189'V'#255#238#189'W'
+ +#255#233#184'U'#255#217#163'M'#255#164'l8'#254'_>+'#238'DDD'#147#128#128#128
+ +#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'FDD=e?*'#243#183'}B'#255
+ +#223#171'W'#255#232#183'['#255#232#183'\'#255#232#183'\'#255#232#183'\'#255
+ +#232#183'\'#255'>1'#25#255#1#1#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255
+ +#1#1#1#255#5#4#2#255#22#17#9#255'pX,'#255#218#171'V'#255#232#183'\'#255#230
+ +#182'['#255#217#164'T'#255#152'a7'#252'V=1'#228'DDDb'#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#128#128#128#2'Z<-'#215#163'k='#254#217#166'['#255#226#178'`'
+ +#255#226#179'a'#255#226#179'a'#255#226#179'a'#255#226#179'a'#255#226#179'a'
+ +#255#5#4#2#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#3#3#1#255',#'#19#255#226#179'a'#255#225#177'_'
+ +#255#208#154'T'#255#129'O1'#251'H?;'#205'@@@'#20#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0'J@<[vF,'#249#206#153'Y'#255#220#172'b'#255#220#172'c'#255#220#172'c'#255
+ +#220#172'c'#255#220#172'c'#255#220#172'c'#255#205#160']'#255#4#3#2#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#1#0#0#255'.$'#21#255#220#172'c'#255#218#170'a'#255#190#132
+ +'N'#255'c=)'#242'CCCz'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'\9('#218#177'vG'#255
+ +#213#164'c'#255#214#166'e'#255#214#166'e'#255#214#166'e'#255#214#166'e'#255
+ +#214#166'e'#255#214#166'e'#255#214#166'e'#255'v\8'#255#2#2#1#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#11#9#5#255#214#166'e'#255#214#166'e'#255#209#159'a'#255#139'Y'
+ +'6'#252'K>7'#206'333'#5#0#0#0#0#0#0#0#0'?;9'#19'mA+'#247#201#148'^'#255#209
+ +#159'e'#255#209#159'e'#255#209#159'e'#255#146'oF'#255#18#14#9#255#21#16#10
+ +#255'O<&'#255#209#159'e'#255#209#159'e'#255'$'#27#17#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#11#8#5#255#209#159'e'#255#209#159'e'#255#208#158'e'#255#185#128'Q'#255
+ +'^9)'#240'BBB6'#0#0#0#0#0#0#0#0'P8-q'#144'Z:'#252#201#150'd'#255#202#151'd'
+ +#255#202#151'd'#255'uW:'#255#2#1#1#255#0#0#0#255#0#0#0#255#1#0#0#255'-!'#22
+ +#255#202#151'd'#255'ZC-'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#5#4#3#255'gM3'#255#202#151'd'
+ +#255#202#151'd'#255#202#151'd'#255#197#145'`'#255'l@*'#248'CCBo'#0#0#0#0#0#0
+ +#0#0'^7$'#194#171'pK'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255#6#4#3
+ +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#7#5#4#255#194#140'a'#255#139'eE'
+ +#255#1#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13
+ +#9#6#255'wV<'#255#192#138'a'#255#194#140'a'#255#194#140'a'#255#194#140'a'#255
+ +#194#140'a'#255#193#140'a'#255#137'T7'#252'K=6'#158#0#0#0#0#0#0#0#0'a6#'#220
+ +#177'uQ'#255#185#129'['#255#185#129'['#255#127'Y>'#255#1#1#0#255#0#0#0#255#0
+ +#0#0#255#0#0#0#255#2#1#1#255'8'''#27#255#185#129'['#255#185#129'['#255'+'#30
+ +#21#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#13#9#6#255#179'}Y'
+ +#255#185#129'['#255#185#129'['#255#185#129'['#255#185#129'['#255#185#129'['
+ +#255#185#129'['#255#185#129'['#255#152'^>'#255'P:1'#190#0#0#0#0#0#0#0#0'c7#'
+ +#227#175'sS'#255#178'xW'#255#178'xW'#255','#30#21#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255#5#4#3#255'uO:'#255#178'xW'#255#178'xW'#255#178'xW'#255#178'xW'#255'xP'
+ +':'#255'('#26#19#255#10#7#5#255#10#7#5#255#28#19#13#255#168'rS'#255#163'nO'
+ +#255#25#17#12#255#6#4#3#255#17#11#8#255'bB/'#255#178'xW'#255#178'xW'#255#178
+ +'xW'#255#158'aB'#255'V9,'#210#0#0#0#0#0#0#0#0'f7"'#227#173'sT'#255#175'tW'
+ +#255#175'tW'#255#15#10#7#255#13#8#6#255#5#4#3#255'+'#29#21#255#169'pU'#255
+ +#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175
+ +'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#175'tW'#255#17#11#8#255#0#0#0
+ +#255#0#0#0#255#0#0#0#255#2#2#1#255#136'ZD'#255#175'tW'#255#175'tW'#255#161'd'
+ +'G'#255'[8('#211#0#0#0#0#0#0#0#0'e6"'#218#171'nR'#255#173'qV'#255#173'qV'#255
+ +#136'YC'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255'sK9'
+ +#255'uM:'#255#159'gN'#255#173'qV'#255#173'qV'#255#173'qV'#255#173'qV'#255#173
+ +'qV'#255#173'qV'#255#173'qV'#255'5"'#27#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0
+ +#0#255'H/$'#255#173'qV'#255#173'qV'#255#153'^D'#255'Y8*'#188#0#0#0#0#0#0#0#0
+ +'c5 '#203#170'kQ'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'
+ ,#255#174'sY'#255#164'mU'#255#11#7#6#255#1#1#1#255#1#1#1#255#5#3#2#255#127'TA'
+ +#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255#174'sY'#255
+ +#128'UA'#255#2#1#1#255#0#0#0#255#0#0#0#255#0#0#0#255'J1&'#255#174'sY'#255#174
+ +'sY'#255#147'X?'#255'S8,'#140#0#0#0#0#0#0#0#0'd4'#30#153#162'gM'#255#178'{c'
+ +#255#178'{c'#255#178'{c'#255#178'{c'#255#178'{c'#255#178'{c'#255'A-$'#255#0#0
+ +#0#255#0#0#0#255#0#0#0#255#0#0#0#255#20#14#11#255'xSB'#255#6#4#3#255#5#4#3
+ +#255#18#12#10#255#170'u_'#255#178'{c'#255#178'{c'#255#9#6#5#255#0#0#0#255#0#0
+ +#0#255#3#2#2#255#166's]'#255#178'{c'#255#178'{c'#255#131'P8'#252'S3$>'#0#0#0
+ +#0#0#0#0#0'[/'#27'3'#137'T='#247#184#134'o'#255#184#134'o'#255#184#134'o'#255
+ +#184#134'o'#255#184#134'o'#255#184#134'o'#255#14#10#9#255#0#0#0#255#0#0#0#255
+ +#0#0#0#255#1#1#1#255'\C7'#255#14#10#8#255#0#0#0#255#0#0#0#255#0#0#0#255#14#10
+ +#8#255#184#134'o'#255#184#134'o'#255'xWI'#255#2#1#1#255#0#0#0#255#18#14#11
+ +#255#184#134'o'#255#184#134'o'#255#183#131'l'#255'h:&'#240#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0'n<%'#218#189#140'x'#255#190#143'z'#255#190#143'z'#255#190#143
+ +'z'#255#190#143'z'#255#190#143'z'#255',!'#28#255#0#0#0#255#0#0#0#255#0#0#0
+ +#255#9#7#6#255#190#143'z'#255#9#7#6#255#0#0#0#255#0#0#0#255#0#0#0#255#5#4#3
+ +#255#190#143'z'#255#190#143'z'#255#190#143'z'#255#159'xe'#255#0#0#0#255#140
+ +'jZ'#255#190#143'z'#255#190#143'z'#255#175'yc'#255'b6"'#193#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0'd4'#30#151#167's\'#254#196#154#135#255#196#154#135#255#196#154
+ +#135#255#196#154#135#255#196#154#135#255'qYN'#255#0#0#0#255#0#0#0#255#1#1#1
+ +#255'v]R'#255#194#152#133#255#5#4#4#255#0#0#0#255#0#0#0#255#0#0#0#255#10#8#7
+ +#255#196#154#135#255#196#154#135#255#196#154#135#255#196#154#135#255'"'#27#24
+ +#255#196#154#135#255#196#154#135#255#196#154#135#255#131'R<'#248'^1'#28'1'#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#14'o>('#224#198#157#140#255#202#163#146
+ +#255#202#163#146#255#202#163#146#255#202#163#146#255#170#138'{'#255#0#0#0#255
+ +#8#6#6#255#26#21#19#255#202#163#146#255#143'th'#255#1#1#1#255#0#0#0#255#0#0#0
+ +#255#2#2#2#255#143'sg'#255#202#163#146#255#202#163#146#255#202#163#146#255
+ +#202#163#146#255#191#155#138#255#202#163#146#255#202#163#146#255#183#135'r'
+ +#255'd5 '#193#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd3'#30'{'#156
+ +'jS'#248#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209
+ +#174#160#255#2#2#2#255#205#172#158#255#209#174#160#255#209#174#160#255#169
+ +#140#129#255#11#9#9#255#1#1#0#255#4#3#3#255#132'oe'#255#209#174#160#255#209
+ +#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255#209#174#160#255
+ +#209#174#160#255#205#167#152#255'yG3'#235'[/'#27'"'#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'd4'#30#181#179#134'r'#254#215#185#173#255#215
+ +#185#173#255#215#185#173#255#215#185#173#255'm^X'#255#215#185#173#255#215#185
+ +#173#255#215#185#173#255#215#185#173#255#133'sk'#255#0#0#0#255#156#134'}'#255
+ +#215#185#173#255#215#185#173#255#215#185#173#255#215#185#173#255#215#185#173
+ +#255#215#185#173#255#215#185#173#255#214#183#172#255#143'^I'#243'b3'#29'`'#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#8'f6 '
+ +#205#189#148#131#254#222#197#187#255#222#197#187#255#222#197#187#255#222#197
+ +#187#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197#187#255#127
+ +'qk'#255#134'wq'#255#222#197#187#255#222#197#187#255#222#197#187#255#222#197
+ +#187#255#222#197#187#255#222#197#187#255#222#197#187#255#220#193#183#255#159
+ +'o['#247'd3'#30#147#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0'[/'#27#15'c3'#30#193#176#132'q'#248#228#206#199#255
+ +#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201
+ +#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208
+ +#201#255#228#208#201#255#228#208#201#255#228#208#201#255#228#208#201#255#221
+ +#196#186#255#141']I'#237'c3'#29#129#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#2'c3'#29#150
+ +#135'XD'#231#208#176#164#255#235#219#215#255#235#219#215#255#235#219#215#255
+ +#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215#255#235#219#215
+ +#255#235#219#215#255#235#219#215#255#235#219#215#255#232#214#209#255#189#149
+ +#133#253'qA+'#220'a2'#29'O'#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27
+ +'"e4'#30#185#144'cO'#235#195#158#144#254#230#209#203#255#242#231#229#255#242
+ +#231#229#255#242#231#229#255#242#231#229#255#242#231#229#255#241#230#226#255
+ +#220#193#184#255#180#141'|'#251'zK6'#226'd3'#30#142'[/'#27#10#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#28'b3'#29'{g5'#30
+ +#198'xH2'#218#137']J'#229#156'r`'#236#151'mZ'#234#132'VB'#227'q?)'#213'f4'#30
+ +#182'_1'#28'W[/'#27#11#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ ,#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#5'[/'
+ +#27#30'[/'#27#22'[/'#27#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#252'?'#255
+ +#255#192#3#255#255#0#0#255#254#0#0'?'#248#0#0#31#240#0#0#15#240#0#0#7#224#0#0
+ +#7#192#0#0#3#192#0#0#3#192#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128
+ +#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#1#128#0#0#3#192#0#0#3#192#0#0#3
+ +#192#0#0#7#224#0#0#7#240#0#0#15#240#0#0#31#248#0#0'?'#252#0#0#127#255#0#0#255
+ +#255#192#3#255#255#252'?'#255'('#0#0#0#16#0#0#0' '#0#0#0#1#0' '#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +';;;'#13'ICB7M=4zL>6xFBA;@@@'#16#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0'III'#7'W;,'#171'nC('#245#145'`+'#250#181#127'2'#253#175
+ +'z1'#253#139'\*'#250'h?&'#244'P=3'#159'@@@'#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0'K921d;'''#235#191#137'7'#254#249#198'E'#255#251#199'F'#255#251#200
+ +'F'#255#251#200'F'#255#251#199'F'#255#246#194'E'#255#173'y3'#253'\9)'#229'E>'
+ +';2'#0#0#0#0#0#0#0#0#0#0#0#0'>2,'#7'nC'''#238#223#171'N'#255#239#191'U'#255
+ +#240#192'U'#255#164#131':'#255'@3'#23#255'J;'#26#255'~e-'#255#196#157'E'#255
+ +#239#191'U'#255#212#159'J'#255'a<('#231'MMM'#10#0#0#0#0#0#0#0#0'[7('#183#195
+ +#145'N'#254#228#180'_'#255#228#180'_'#255#228#180'_'#255''#25#255#0#0#0#255
+ +#0#0#0#255#0#0#0#255#4#3#1#255'9-'#24#255#205#163'U'#255#175'~E'#253'Q:0'#168
+ +#0#0#0#0'[/'#27#10#143'd@'#248#219#174'l'#255#219#173'l'#255#159'~N'#255#206
+ +#163'f'#255'qY7'#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#1#1#0#255#152'x'
+ +'K'#255#218#172'k'#255'zQ5'#246'UUU'#3'W4$H'#178#134'_'#254#213#169'x'#255'Y'
+ +'F2'#255#0#0#0#255'L<+'#255#200#158'p'#255#8#6#4#255#0#0#0#255#0#0#0#255#18
+ +#15#10#255'pY?'#255#213#169'x'#255#213#169'x'#255#157'tR'#251'M=74^6$'#154
+ +#193#151'x'#255#179#144's'#255#6#5#4#255#27#21#17#255#155'|c'#255#206#165#132
+ +#255#130'hS'#255'=1'''#255':/%'#255#170#137'm'#255#141'q['#255#166#133'j'#255
+ +#206#165#132#255#178#135'l'#253'Q8,{c5 '#167#195#154#133#255#163#130'q'#255
+ +#153'zj'#255#192#152#132#255#199#159#138#255#200#159#138#255#201#160#139#255
+ +#201#160#139#255#201#160#139#255#154'zj'#255#1#1#1#255#29#23#20#255#197#157
+ +#136#255#181#139'v'#255'X5%|_1'#28'V'#176#132'r'#254#199#159#141#255#199#159
+ +#141#255#184#147#130#255'#'#28#25#255#27#22#19#255#167#133'v'#255#127'fZ'#255
+ +#172#137'z'#255#197#157#139#255' '#26#23#255#15#12#11#255#187#150#133#255#156
+ +'tb'#251'W1 0[/'#27#30#160'zk'#246#210#176#163#255#210#176#163#255#154#129'x'
+ +#255#0#0#0#255' '#27#25#255#152#128'v'#255#4#3#3#255'>40'#255#210#176#163#255
+ +#148'|s'#255'RD?'#255#210#176#163#255#140'fW'#243'[/'#27#2#0#0#0#0'tI6'#209
+ +#216#188#178#255#221#195#185#255#213#188#178#255'$'#31#30#255#131'sn'#255'sf'
+ +'`'#255#0#0#0#255'eYU'#255#221#195#185#255#221#195#185#255#204#180#170#255
+ +#207#178#166#255'k>+'#182#0#0#0#0#0#0#0#0'[/'#27#31#156'xi'#240#232#213#207
+ +#255#232#213#207#255#180#165#161#255#232#213#207#255#182#167#162#255'ICA'#255
+ +#226#207#201#255#232#213#207#255#232#213#207#255#231#213#206#255#134'_O'#233
+ +'[/'#27#12#0#0#0#0#0#0#0#0#0#0#0#0'd3'#30'e'#171#139'~'#240#239#226#224#255
+ +#242#231#229#255#242#231#229#255#240#229#227#255#242#231#229#255#242#231#229
+ +#255#242#231#229#255#235#221#216#255#153'uh'#236'a2'#29'?'#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#0#0#0#0'\0'#27'*'#131'\I'#215#212#191#183#252#239#229#226#255
+ +#253#250#252#255#253#249#250#255#236#223#220#255#204#180#172#250'yM;'#196'[/'
+ +#27#23#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0'[/'#27#3'[/'
+ +#27'>c3'#29#131'uI4'#190'oA-'#183'b2'#29'v[/'#27'4'#0#0#0#0#0#0#0#0#0#0#0#0#0
+ +#0#0#0#0#0#0#0#248#31#172'A'#224#7#172'A'#192#3#172'A'#128#1#172'A'#128#1#172
+ +'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#0#0#172'A'#128#1
+ +#172'A'#128#1#172'A'#192#3#172'A'#224#7#172'A'#240#31#172'A'
+]);
+
diff --git a/applications/lazstats/source_orig/LazStats.manifest b/applications/lazstats/source_orig/LazStats.manifest
new file mode 100644
index 000000000..515fedeef
--- /dev/null
+++ b/applications/lazstats/source_orig/LazStats.manifest
@@ -0,0 +1,17 @@
+
+
+
+ Your application description here.
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/applications/lazstats/source_orig/LazStats.res b/applications/lazstats/source_orig/LazStats.res
new file mode 100644
index 000000000..7c6cf3e4b
Binary files /dev/null and b/applications/lazstats/source_orig/LazStats.res differ
diff --git a/applications/lazstats/source_orig/kaplanmeierunit.lfm b/applications/lazstats/source_orig/kaplanmeierunit.lfm
new file mode 100644
index 000000000..61b3d4ab7
--- /dev/null
+++ b/applications/lazstats/source_orig/kaplanmeierunit.lfm
@@ -0,0 +1,433 @@
+object KaplanMeierFrm: TKaplanMeierFrm
+ Left = 306
+ Height = 366
+ Top = 147
+ Width = 493
+ Caption = 'Kaplan-Meier Survival Analysis'
+ ClientHeight = 366
+ ClientWidth = 493
+ OnShow = FormShow
+ LCLVersion = '0.9.28.2'
+ object Label1: TLabel
+ Left = 8
+ Height = 14
+ Top = 7
+ Width = 90
+ Caption = 'Available Variables'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 217
+ Height = 14
+ Top = 24
+ Width = 64
+ Caption = 'Time Variable'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 216
+ Height = 14
+ Top = 112
+ Width = 133
+ Caption = 'Event vs Censored Variable'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 217
+ Height = 14
+ Top = 128
+ Width = 122
+ Caption = 'Event = 1, Censored = 2'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 224
+ Height = 14
+ Top = 202
+ Width = 133
+ Caption = 'Group Variable (if 2 groups)'
+ ParentColor = False
+ end
+ object Label6: TLabel
+ Left = 217
+ Height = 14
+ Top = 220
+ Width = 153
+ Caption = '(Experimental = 1, Control = 2)'
+ ParentColor = False
+ end
+ object VarList: TListBox
+ Left = 6
+ Height = 332
+ Top = 23
+ Width = 163
+ ItemHeight = 0
+ TabOrder = 0
+ end
+ object TimeInBtn: TBitBtn
+ Left = 176
+ Height = 27
+ Top = 23
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = TimeInBtnClick
+ TabOrder = 1
+ end
+ object TimeOutBtn: TBitBtn
+ Left = 177
+ Height = 27
+ Top = 56
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = TimeOutBtnClick
+ TabOrder = 2
+ end
+ object EventInBtn: TBitBtn
+ Left = 177
+ Height = 27
+ Top = 112
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = EventInBtnClick
+ TabOrder = 3
+ end
+ object EventOutBtn: TBitBtn
+ Left = 177
+ Height = 27
+ Top = 144
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = EventOutBtnClick
+ TabOrder = 4
+ end
+ object GroupInBtn: TBitBtn
+ Left = 177
+ Height = 27
+ Top = 200
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = GroupInBtnClick
+ TabOrder = 5
+ end
+ object GroupOutBtn: TBitBtn
+ Left = 177
+ Height = 27
+ Top = 232
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = GroupOutBtnClick
+ TabOrder = 6
+ end
+ object TimeEdit: TEdit
+ Left = 216
+ Height = 21
+ Top = 41
+ Width = 143
+ TabOrder = 7
+ Text = 'TimeEdit'
+ end
+ object EventEdit: TEdit
+ Left = 217
+ Height = 21
+ Top = 144
+ Width = 143
+ TabOrder = 8
+ Text = 'TimeEdit'
+ end
+ object GroupEdit: TEdit
+ Left = 217
+ Height = 21
+ Top = 238
+ Width = 143
+ TabOrder = 9
+ Text = 'TimeEdit'
+ end
+ object GroupBox1: TGroupBox
+ Left = 175
+ Height = 83
+ Top = 273
+ Width = 185
+ Caption = 'Options:'
+ ClientHeight = 65
+ ClientWidth = 181
+ TabOrder = 10
+ object PlotChk: TCheckBox
+ Left = 7
+ Height = 17
+ Top = 6
+ Width = 172
+ Caption = 'Graph Survival Probabilities (%)'
+ TabOrder = 0
+ end
+ object PrintChk: TCheckBox
+ Left = 7
+ Height = 17
+ Top = 34
+ Width = 144
+ Caption = 'Print Computation Results'
+ TabOrder = 1
+ end
+ end
+ object ResetBtn: TButton
+ Left = 392
+ Height = 32
+ Top = 72
+ Width = 83
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 11
+ end
+ object CancelBtn: TButton
+ Left = 392
+ Height = 32
+ Top = 128
+ Width = 83
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 12
+ end
+ object ComputeBtn: TButton
+ Left = 392
+ Height = 32
+ Top = 184
+ Width = 83
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 13
+ end
+ object ReturnBtn: TButton
+ Left = 392
+ Height = 32
+ Top = 240
+ Width = 83
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 14
+ end
+ object HelpBtn: TButton
+ Tag = 127
+ Left = 392
+ Height = 33
+ Top = 16
+ Width = 86
+ Caption = 'Help'
+ OnClick = HelpBtnClick
+ TabOrder = 15
+ end
+end
diff --git a/applications/lazstats/source_orig/kaplanmeierunit.lrs b/applications/lazstats/source_orig/kaplanmeierunit.lrs
new file mode 100644
index 000000000..5351e5582
--- /dev/null
+++ b/applications/lazstats/source_orig/kaplanmeierunit.lrs
@@ -0,0 +1,352 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TKaplanMeierFrm','FORMDATA',[
+ 'TPF0'#15'TKaplanMeierFrm'#14'KaplanMeierFrm'#4'Left'#3'2'#1#6'Height'#3'n'#1
+ +#3'Top'#3#147#0#5'Width'#3#237#1#7'Caption'#6#30'Kaplan-Meier Survival Analy'
+ +'sis'#12'ClientHeight'#3'n'#1#11'ClientWidth'#3#237#1#6'OnShow'#7#8'FormShow'
+ +#10'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2
+ +#14#3'Top'#2#7#5'Width'#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentC'
+ +'olor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#217#0#6'Height'#2#14#3'Top'#2#24#5
+ +'Width'#2'@'#7'Caption'#6#13'Time Variable'#11'ParentColor'#8#0#0#6'TLabel'#6
+ +'Label3'#4'Left'#3#216#0#6'Height'#2#14#3'Top'#2'p'#5'Width'#3#133#0#7'Capti'
+ +'on'#6#26'Event vs Censored Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Labe'
+ +'l4'#4'Left'#3#217#0#6'Height'#2#14#3'Top'#3#128#0#5'Width'#2'z'#7'Caption'#6
+ +#23'Event = 1, Censored = 2'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Lef'
+ +'t'#3#224#0#6'Height'#2#14#3'Top'#3#202#0#5'Width'#3#133#0#7'Caption'#6#28'G'
+ +'roup Variable (if 2 groups)'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Le'
+ +'ft'#3#217#0#6'Height'#2#14#3'Top'#3#220#0#5'Width'#3#153#0#7'Caption'#6#31
+ +'(Experimental = 1, Control = 2)'#11'ParentColor'#8#0#0#8'TListBox'#7'VarLis'
+ +'t'#4'Left'#2#6#6'Height'#3'L'#1#3'Top'#2#23#5'Width'#3#163#0#10'ItemHeight'
+ +#2#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#9'TimeInBtn'#4'Left'#3#176#0#6'Height'#2
+ +#27#3'Top'#2#23#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0
+ +#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0
+ +#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'
+ +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'
+ +#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0
+ +'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157
+ +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195
+ +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0
+ +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255
+ +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144
+ +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201
+ +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#9'NumGlyphs'#2#0#7'OnClick'#7#14'TimeInBtnClick'#8'TabOrder'#2#1#0#0#7'TBit'
+ +'Btn'#10'TimeOutBtn'#4'Left'#3#177#0#6'Height'#2#27#3'Top'#2'8'#5'Width'#2' '
+ +#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16
+ +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255
+ +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%'
+ +'i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200
+ +#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139
+ +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'
+ +#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201
+ +#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159
+ +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197
+ +#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'
+ +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'
+ +#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15
+ +'TimeOutBtnClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#10'EventInBtn'#4'Left'#3#177
+ +#0#6'Height'#2#27#3'Top'#2'p'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0
+ +#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0
+ +#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'
+ +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'
+ +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0
+ +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255
+ +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137
+ +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255
+ +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158
+ +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255
+ +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255
+ +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'
+ +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'
+ +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15'EventInBtnClick'#8'TabOrder'
+ +#2#3#0#0#7'TBitBtn'#11'EventOutBtn'#4'Left'#3#177#0#6'Height'#2#27#3'Top'#3
+ +#144#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0
+ +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0
+ +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'
+ +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161
+ +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131
+ +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/'
+ +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'
+ +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255
+ +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132
+ +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255
+ +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154
+ +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255
+ +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255
+ +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201
+ +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'
+ +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num'
+ +'Glyphs'#2#0#7'OnClick'#7#16'EventOutBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'
+ +#10'GroupInBtn'#4'Left'#3#177#0#6'Height'#2#27#3'Top'#3#200#0#5'Width'#2' '
+ +#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16
+ +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'
+ +#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'
+ +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'
+ +#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!'
+ +'c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169
+ +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203
+ +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190
+ +'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165
+ +#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255
+ +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135
+ +#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199
+ +'t'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255
+ +'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157
+ +'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15
+ +'GroupInBtnClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#11'GroupOutBtn'#4'Left'#3
+ +#177#0#6'Height'#2#27#3'Top'#3#232#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0
+ +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0
+ +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'
+ +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255
+ +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152
+ +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255
+ +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!'
+ +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216
+ +#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142
+ +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255
+ +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255
+ +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'
+ +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199
+ +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#16'GroupOutBtnClick'#8'Ta'
+ +'bOrder'#2#6#0#0#5'TEdit'#8'TimeEdit'#4'Left'#3#216#0#6'Height'#2#21#3'Top'#2
+ +')'#5'Width'#3#143#0#8'TabOrder'#2#7#4'Text'#6#8'TimeEdit'#0#0#5'TEdit'#9'Ev'
+ +'entEdit'#4'Left'#3#217#0#6'Height'#2#21#3'Top'#3#144#0#5'Width'#3#143#0#8'T'
+ +'abOrder'#2#8#4'Text'#6#8'TimeEdit'#0#0#5'TEdit'#9'GroupEdit'#4'Left'#3#217#0
+ +#6'Height'#2#21#3'Top'#3#238#0#5'Width'#3#143#0#8'TabOrder'#2#9#4'Text'#6#8
+ +'TimeEdit'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3#175#0#6'Height'#2'S'#3'To'
+ +'p'#3#17#1#5'Width'#3#185#0#7'Caption'#6#8'Options:'#12'ClientHeight'#2'A'#11
+ +'ClientWidth'#3#181#0#8'TabOrder'#2#10#0#9'TCheckBox'#7'PlotChk'#4'Left'#2#7
+ +#6'Height'#2#17#3'Top'#2#6#5'Width'#3#172#0#7'Caption'#6' Graph Survival Pro'
+ +'babilities (%)'#8'TabOrder'#2#0#0#0#9'TCheckBox'#8'PrintChk'#4'Left'#2#7#6
+ +'Height'#2#17#3'Top'#2'"'#5'Width'#3#144#0#7'Caption'#6#25'Print Computation'
+ +' Results'#8'TabOrder'#2#1#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#136#1#6'He'
+ +'ight'#2' '#3'Top'#2'H'#5'Width'#2'S'#7'Caption'#6#5'Reset'#7'OnClick'#7#13
+ +'ResetBtnClick'#8'TabOrder'#2#11#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#136#1
+ +#6'Height'#2' '#3'Top'#3#128#0#5'Width'#2'S'#7'Caption'#6#6'Cancel'#11'Modal'
+ +'Result'#2#2#8'TabOrder'#2#12#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#136#1#6
+ +'Height'#2' '#3'Top'#3#184#0#5'Width'#2'S'#7'Caption'#6#7'Compute'#7'OnClick'
+ +#7#15'ComputeBtnClick'#8'TabOrder'#2#13#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3
+ +#136#1#6'Height'#2' '#3'Top'#3#240#0#5'Width'#2'S'#7'Caption'#6#6'Return'#11
+ +'ModalResult'#2#1#8'TabOrder'#2#14#0#0#7'TButton'#7'HelpBtn'#3'Tag'#2#127#4
+ +'Left'#3#136#1#6'Height'#2'!'#3'Top'#2#16#5'Width'#2'V'#7'Caption'#6#4'Help'
+ +#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#15#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/kaplanmeierunit.pas b/applications/lazstats/source_orig/kaplanmeierunit.pas
new file mode 100644
index 000000000..4276c8a05
--- /dev/null
+++ b/applications/lazstats/source_orig/kaplanmeierunit.pas
@@ -0,0 +1,1069 @@
+unit KaplanMeierUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, MainUnit, Globals, functionsLib, OutPutUnit, DataProcs,
+ DictionaryUnit, Math, Clipbrd, contexthelpunit;
+
+type
+
+ { TKaplanMeierFrm }
+
+ TKaplanMeierFrm = class(TForm)
+ HelpBtn: TButton;
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ PlotChk: TCheckBox;
+ PrintChk: TCheckBox;
+ GroupBox1: TGroupBox;
+ TimeInBtn: TBitBtn;
+ TimeOutBtn: TBitBtn;
+ EventInBtn: TBitBtn;
+ EventOutBtn: TBitBtn;
+ GroupInBtn: TBitBtn;
+ GroupOutBtn: TBitBtn;
+ TimeEdit: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ Label5: TLabel;
+ Label6: TLabel;
+ EventEdit: TEdit;
+ GroupEdit: TEdit;
+ VarList: TListBox;
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure EventInBtnClick(Sender: TObject);
+ procedure EventOutBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure GroupInBtnClick(Sender: TObject);
+ procedure GroupOutBtnClick(Sender: TObject);
+ procedure HelpBtnClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure TimeInBtnClick(Sender: TObject);
+ procedure TimeOutBtnClick(Sender: TObject);
+ private
+ { private declarations }
+ procedure plotxy(var Xpoints : IntDyneVec;
+ var Ypoints : DblDyneVec;
+ var Dropped : IntDyneVec;
+ var Dropped2 : IntDyneVec;
+ Xmax, Xmin, Ymax, Ymin : double;
+ N : integer;
+ XEdit : string;
+ YEdit : string;
+ curveno : integer);
+ public
+ { public declarations }
+ end;
+
+var
+ KaplanMeierFrm: TKaplanMeierFrm;
+
+implementation
+uses BlankFrmUnit;
+
+{ TKaplanMeierFrm }
+
+procedure TKaplanMeierFrm.ResetBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ VarList.Clear;
+ for i := 1 to NoVariables do
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+ TimeEdit.Text := '';
+ EventEdit.Text := '';
+ GroupEdit.Text := '';
+ PlotChk.Checked := false;
+ PrintChk.Checked := false;
+ TimeInBtn.Visible := true;
+ EventInBtn.Visible := true;
+ GroupInBtn.Visible := true;
+ TimeOutBtn.Visible := false;
+ EventOutBtn.Visible := false;
+ GroupOutBtn.Visible := false;
+end;
+
+procedure TKaplanMeierFrm.TimeInBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ i := VarList.ItemIndex;
+ TimeEdit.Text := VarList.Items.Strings[i];
+ VarList.Items.Delete(i);
+ TimeInBtn.Visible := false;
+ TimeOutBtn.Visible := true;
+end;
+
+procedure TKaplanMeierFrm.TimeOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(TimeEdit.Text);
+ TimeEdit.Text := '';
+ TimeInBtn.Visible := true;
+ TimeOutBtn.Visible := false;
+end;
+
+procedure TKaplanMeierFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(self);
+end;
+
+procedure TKaplanMeierFrm.GroupInBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ i := VarList.ItemIndex;
+ GroupEdit.Text := VarList.Items.Strings[i];
+ VarList.Items.Delete(i);
+ GroupInBtn.Visible := false;
+ GroupOutBtn.Visible := true;
+end;
+
+procedure TKaplanMeierFrm.GroupOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(GroupEdit.Text);
+ GroupEdit.Text := '';
+ GroupInBtn.Visible := true;
+ GroupOutBtn.Visible := false;
+end;
+
+procedure TKaplanMeierFrm.HelpBtnClick(Sender: TObject);
+begin
+ ContextHelpForm.HelpMessage((Sender as TButton).tag);
+end;
+
+procedure TKaplanMeierFrm.EventInBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ i := VarList.ItemIndex;
+ EventEdit.Text := VarList.Items.Strings[i];
+ VarList.Items.Delete(i);
+ EventInBtn.Visible := false;
+ EventOutBtn.Visible := true;
+end;
+
+procedure TKaplanMeierFrm.ComputeBtnClick(Sender: TObject);
+var
+ outline, astring : string;
+ PrintIt, Graph1, TwoGroups : boolean;
+ Size1, Size2, TotalSize, NoDeaths, ThisTime, FoundIn, GraphType : integer;
+ mintime, maxtime, tempint, nopoints, noprobs, tempvalue : integer;
+ NoCensored, nocats, i, j, k, icase, oldtime, pos, first, last : integer;
+ noinexp, noincntrl, count, TimeCol, DeathsCol, CensoredCol : integer;
+ GroupCol : integer;
+ minprob, maxprob, cumprop, proportion, term1, term2, term3 : double;
+ E1, E2, O1, O2, Chisquare, ProbChi, Risk, LogRisk, SELogRisk : double;
+ HiConf, LowConf, HiLogLevel, LowLogLevel, lastexp, lastctr : double;
+ TimePlot, Dropped, Dropped2, Time, AtRisk, Dead, SurvivalTimes : IntDyneVec;
+ ExpCnt, CntrlCnt, TotalatRisk, ExpatRisk, CntrlatRisk : IntDyneVec;
+ Deaths, Group, Censored : IntDyneVec;
+ ProbPlot, ProbPlot2, CondProb, ExpProp, CntrlProp : DblDyneVec;
+ CumPropExp, CumPropCntrl : DblDyneVec;
+ TimeLabel, GroupLabel, DeathsLabel : string;
+begin
+ PrintIt := false;
+ // get options
+ if (PlotChk.Checked = true) then Graph1 := true
+ else Graph1 := false;
+ if (PrintChk.Checked) then PrintIt := true else PrintIt := false;
+
+ // get variable columns and labels
+ TimeLabel := TimeEdit.Text;
+ GroupLabel := GroupEdit.Text;
+ DeathsLabel := EventEdit.Text;
+ TimeCol := 0;
+ DeathsCol := 0;
+ CensoredCol := 0;
+ GroupCol := 0;
+ for i := 1 to NoVariables do
+ begin
+ if (TimeLabel = OS3MainFrm.DataGrid.Cells[i,0]) then TimeCol := i;
+ if (DeathsLabel = OS3MainFrm.DataGrid.Cells[i,0]) then DeathsCol := i;
+ if (GroupLabel = OS3MainFrm.DataGrid.Cells[i,0]) then GroupCol := i;
+ end;
+ if ((TimeCol = 0) or (DeathsCol = 0)) then
+ begin
+ ShowMessage('ERROR! One or more variables not selected.');
+ exit;
+ end;
+ if (GroupEdit.Text = '') then
+ begin
+ TwoGroups := false;
+ Size1 := NoCases;
+ Size2 := 0;
+ end
+ else
+ begin
+ Size1 := 0;
+ Size2 := 0;
+ TwoGroups := true;
+ for i := 1 to NoCases do
+ begin
+ if (StrToInt(OS3MainFrm.DataGrid.Cells[GroupCol,i]) = 1) then
+ Size1 := Size1 + 1
+ else Size2 := Size2 + 1;
+ end;
+ end;
+
+ // allocate space for the data
+ SetLength(SurvivalTimes,NoCases+2);
+ SetLength(ExpCnt,NoCases+2);
+ SetLength(CntrlCnt,NoCases+2);
+ SetLength(TotalatRisk,NoCases+2);
+ SetLength(ExpatRisk,NoCases+2);
+ SetLength(CntrlatRisk,NoCases+2);
+ SetLength(ExpProp,NoCases+2);
+ SetLength(CntrlProp,NoCases+2);
+ SetLength(Deaths,NoCases+2);
+ SetLength(Group,NoCases+2);
+ SetLength(Censored,NoCases+2);
+ SetLength(CumPropExp,NoCases+2);
+ SetLength(CumPropCntrl,NoCases+2);
+
+ // initialize arrays
+ for i := 0 to NoCases+1 do
+ begin
+ SurvivalTimes[i] := 0;
+ ExpCnt[i] := 0;
+ CntrlCnt[i] := 0;
+ TotalatRisk[i] := 0;
+ ExpatRisk[i] := 0;
+ CntrlatRisk[i] := 0;
+ ExpProp[i] := 0.0;
+ CntrlProp[i] := 0.0;
+ Deaths[i] := 0;
+ Group[i] := 0;
+ Censored[i] := 0;
+ CumPropExp[i] := 0.0;
+ CumPropCntrl[i] := 0.0;
+ end;
+ mintime := 0;
+ maxtime := 0;
+
+ // Get Data
+ if (not TwoGroups) then
+ begin
+ for i := 1 to NoCases do
+ begin
+ SurvivalTimes[i] := StrToInt(OS3MainFrm.DataGrid.Cells[TimeCol,i]);
+ if (SurvivalTimes[i] > maxtime) then maxtime := SurvivalTimes[i];
+ tempvalue := StrToInt(OS3MainFrm.DataGrid.Cells[DeathsCol,i]);
+ if (tempvalue = 1) then Deaths[i] := 1 else Deaths[i] := 0;
+ if (tempvalue = 2) then Censored[i] := 1 else Censored[i] := 0;
+ end;
+
+ // sort cases by time
+ for i := 0 to NoCases - 1 do
+ begin
+ for j := i + 1 to NoCases do
+ begin
+ if (SurvivalTimes[i] > SurvivalTimes[j]) then
+ begin
+ tempint := SurvivalTimes[i];
+ SurvivalTimes[i] := SurvivalTimes[j];
+ SurvivalTimes[j] := tempint;
+ tempint := Censored[i];
+ Censored[i] := Censored[j];
+ Censored[j] := tempint;
+ tempint := Deaths[i];
+ Deaths[i] := Deaths[j];
+ Deaths[j] := tempint;
+ end;
+ end;
+ end;
+
+ // get number censored in each time slot
+ nopoints := maxtime + 1;
+ SetLength(Dropped,nopoints+2);
+ SetLength(Dropped2,nopoints+2);
+ for j := 0 to nopoints do
+ begin
+ Dropped[j] := 0;
+ Dropped2[j] := 0;
+ end;
+ ThisTime := SurvivalTimes[0];
+ for i := 0 to NoCases do
+ begin
+ if (ThisTime = SurvivalTimes[i]) then
+ begin
+ if(Censored[i] > 0) then
+ begin
+ tempint := SurvivalTimes[i] - mintime;
+ Dropped[tempint] := Dropped[tempint] + Censored[i];
+ end;
+ end
+ else // new time
+ begin
+ ThisTime := SurvivalTimes[i];
+ if(Censored[i] > 0) then
+ begin
+ tempint := SurvivalTimes[i] - mintime;
+ Dropped[tempint] := Dropped[tempint] + Censored[i];
+ end;
+ end;
+ end;
+
+ // calculate expected proportions and adjust survival counts
+ cumprop := 1.0;
+ ExpCnt[0] := NoCases;
+ ExpProp[0] := 1.0;
+ CumPropExp[0] := 1.0;
+
+ // collapse deaths and censored into first time occurance
+ icase := 0;
+ oldtime := SurvivalTimes[0];
+ for i := 1 to NoCases do
+ begin
+ if (SurvivalTimes[i] <> oldtime) then
+ begin
+ oldtime := SurvivalTimes[i];
+ icase := i;
+ end;
+
+ // find no. of deaths at this time
+ NoDeaths := Deaths[i];
+ for j := i+1 to NoCases do
+ begin
+ ThisTime := SurvivalTimes[j];
+ if ((Deaths[j] > 0) and (oldtime = ThisTime)) then
+ begin
+ NoDeaths := NoDeaths + Deaths[j];
+ Deaths[icase] := Deaths[icase] + Deaths[j];
+ Deaths[j] := 0;
+ end;
+ end;
+ // find no. of censored at this time
+ NoCensored := Censored[i];
+ for j := i+1 to NoCases do
+ begin
+ ThisTime := SurvivalTimes[j];
+ if((Censored[j] > 0) and (oldtime = ThisTime)) then
+ begin
+ NoCensored := NoCensored + Censored[j];
+ Censored[icase] := Censored[icase] + Censored[j];
+ Censored[j] := 0;
+ end;
+ end;
+ end;
+{
+ // debug check
+ FrmOutPut.RichOutPut.Clear();
+ for (int i := 0; i <= NoCases; i++)
+ begin
+ sprintf(outline,'case %d Day %d Deaths %d Censored %d',
+ i,SurvivalTimes[i], Deaths[i],Censored[i]);
+ FrmOutPut.RichOutPut.Lines.Add(outline);
+ end;
+ FrmOutPut.ShowModal();
+}
+ // get no. of categories
+ for i := 0 to NoCases do
+ if ((Deaths[i] > 0) or (Censored[i] > 0)) then nocats := nocats + 1;
+ SetLength(Time,nocats+2);
+ SetLength(AtRisk,nocats+2);
+ SetLength(Dead,nocats+2);
+ SetLength(CondProb,nocats+2);
+ for i := 0 to nocats do
+ begin
+ Time[i] := 0;
+ AtRisk[i] := 0;
+ Dead[i] := 0;
+ CondProb[i] := 0.0;
+ end;
+ pos := 0;
+ for i := 0 to NoCases do
+ begin
+ if ((Deaths[i] > 0) or (Censored[i] > 0)) then
+ begin
+ pos := pos + 1;
+ Time[pos] := SurvivalTimes[i];
+ Dead[pos] := Deaths[i];
+ Dropped[pos] := Censored[i];
+ end;
+ end;
+ Time[0] := 0;
+ AtRisk[0] := NoCases;
+ Dead[0] := 0;
+ Dropped[0] := 0;
+ CondProb[0] := 0.0;
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add(' Time Censored Dead At Risk Probability');
+ for i := 1 to nocats do
+ begin
+ AtRisk[i] := AtRisk[i-1] - Dead[i-1] - Dropped[i-1];
+ CondProb[i-1] := 1.0 - Dead[i-1] / AtRisk[i-1];
+ end;
+ for i := 0 to nocats do
+ begin
+ outline := format(' %3d %3d %3d %3d %6.3f',
+ [Time[i],Dropped[i],Dead[i],AtRisk[i],CondProb[i]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.ShowModal;
+
+ // Get cumulative proportions
+ for i := 0 to nocats do
+ begin
+ if (AtRisk[i] > 0) then
+ begin
+ CumPropExp[i] := cumprop * CondProb[i];
+ cumprop := CumPropExp[i];
+ end;
+ end;
+ cumprop := 1.0;
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Kaplan-Meier Survival Test');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('No Control Group Method');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('TIME NO.ALIVE CENSORED DEATHS COND. PROB. CUM.PROP.SURVIVING');
+ for i := 0 to nocats do
+ begin
+ outline := format(' %4d %4d %4d %4d %7.4f %7.4f',
+ [Time[i],
+ AtRisk[i],Dropped[i],Deaths[i],CondProb[i],CumPropExp[i]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.ShowModal;
+ if (Graph1) then // plot Y := cumulative proportion surviving, x := time
+ begin
+ // Get points to plot
+ nopoints := maxtime + 1;
+ SetLength(TimePlot,nocats+2);
+ SetLength(ProbPlot,nocats+2);
+ ProbPlot[0] := 1.0;
+ for j := 0 to nocats do
+ begin
+ TimePlot[j] := Time[j];
+ ProbPlot[j] := CumPropExp[j];
+ end;
+ BlankFrm.Show;
+ plotxy(TimePlot, ProbPlot, Dropped, Dropped2,
+ maxtime,0,1.0, 0.0, nocats,'TIME','PROBABILITY',1);
+ end; // end if graph1
+ ProbPlot := nil;
+ TimePlot := nil;
+ CondProb := nil;
+ Dead := nil;
+ AtRisk := nil;
+ Time := nil;
+ end // end if not two groups
+//============================================================================//
+ else // Experimental and control groups
+ begin
+ // obtain no. in experimental and control groups
+ ExpCnt[0] := Size1;
+ CntrlCnt[0] := Size2;
+ TotalSize := Size1 + Size2;
+ CumPropExp[0] := 1.0;
+ CumPropCntrl[0] := 1.0;
+ TotalatRisk[0] := TotalSize;
+ O1 := 0;
+ O2 := 0;
+ outline := format('Total Group 1 := %d, Total Group 2 := %d, Grand Total := %d',
+ [ExpCnt[0], CntrlCnt[0], TotalSize]);
+ ShowMessage(outline);
+
+ // Now read values. Note storage starts in 1, not 0!
+ for i := 1 to NoCases do
+ begin
+ SurvivalTimes[i] := StrToInt(OS3MainFrm.DataGrid.Cells[TimeCol,i]);
+ if (SurvivalTimes[i] > maxtime) then maxtime := SurvivalTimes[i];
+ tempvalue := StrToInt(OS3MainFrm.DataGrid.Cells[DeathsCol,i]);
+ if (tempvalue = 1) then Deaths[i] := 1 else Deaths[i] := 0;
+ if (tempvalue = 2) then Censored[i] := 1 else Censored[i] := 0;
+ Group[i] := StrToInt(OS3MainFrm.DataGrid.Cells[GroupCol,i]);
+ end;
+
+ // sort cases by time
+ for i := 1 to NoCases - 1 do
+ begin
+ for j := i + 1 to NoCases do
+ begin
+ if (SurvivalTimes[i] > SurvivalTimes[j]) then
+ begin
+ tempint := SurvivalTimes[i];
+ SurvivalTimes[i] := SurvivalTimes[j];
+ SurvivalTimes[j] := tempint;
+ tempint := Censored[i];
+ Censored[i] := Censored[j];
+ Censored[j] := tempint;
+ tempint := Deaths[i];
+ Deaths[i] := Deaths[j];
+ Deaths[j] := tempint;
+ tempint := Group[i];
+ Group[i] := Group[j];
+ Group[j] := tempint;
+ end;
+ end;
+ end;
+
+ // sort cases within each time slot by deaths first then censored
+ ThisTime := SurvivalTimes[1];
+ first := 1;
+ last := 1;
+ for i := 1 to NoCases do
+ begin
+ if (ThisTime = SurvivalTimes[i]) then
+ begin
+ last := i;
+ continue;
+ end
+ else // sort the cases from first to last on event (descending)
+ begin
+ if (last > first) then // more than 1 to sort
+ begin
+ for j := first to last - 1 do
+ begin
+ for k := j + 1 to last do
+ begin
+ if (Deaths[j] < Deaths[k] ) then // swap
+ begin
+ tempint := Censored[j];
+ Censored[j] := Censored[k];
+ Censored[k] := tempint;
+ tempint := Deaths[j];
+ Deaths[j] := Deaths[k];
+ Deaths[k] := tempint;
+ tempint := Group[j];
+ Group[j] := Group[k];
+ Group[k] := tempint;
+ end;
+ end; // next k
+ end; // next j
+ end; // if last > first
+ end; // end else sort
+ first := last + 1;
+ ThisTime := SurvivalTimes[first];
+ last := first;
+ end; // next i
+
+ // get number censored in each time slot
+ nopoints := maxtime + 1;
+ SetLength(Dropped,nopoints+2);
+ SetLength(Dropped2,nopoints+2);
+ for j := 0 to nopoints do
+ begin
+ Dropped[j] := 0;
+ Dropped2[j] := 0;
+ end;
+ ThisTime := SurvivalTimes[1];
+ for i := 1 to NoCases do
+ begin
+ if (ThisTime = SurvivalTimes[i]) then
+ begin
+ if(Censored[i] > 0) then
+ begin
+ tempint := SurvivalTimes[i] - mintime;
+ if (Group[i] = 1) then
+ Dropped[tempint] := Dropped[tempint] + Censored[i]
+ else Dropped2[tempint] := Dropped2[tempint] + Censored[i];
+ end;
+ end
+ else // new time
+ begin
+ ThisTime := SurvivalTimes[i];
+ if(Censored[i] > 0) then
+ begin
+ tempint := SurvivalTimes[i] - mintime;
+ if (Group[i] = 1) then
+ Dropped[tempint] := Dropped[tempint] + Censored[i]
+ else Dropped2[tempint] := Dropped2[tempint] + Censored[i];
+ end;
+ end;
+ end;
+
+ for i := 0 to NoCases do
+ begin
+ noinexp := 0;
+ noincntrl := 0;
+ if (Deaths[i] > 0) then
+ begin
+ // find no. of deaths at this time
+ NoDeaths := Deaths[i];
+ ThisTime := SurvivalTimes[i];
+ for j := i+1 to NoCases do
+ begin
+ if ((Deaths[j] > 0) and (SurvivalTimes[j] = ThisTime)) then
+ begin
+ NoDeaths := NoDeaths + Deaths[j];
+ Deaths[i] := Deaths[i] + Deaths[j];
+ Deaths[j] := 0;
+ end;
+ end;
+ if (TotalatRisk[i] > 0) then
+ begin
+ term1 := ExpCnt[i];
+ term2 := TotalatRisk[i];
+ term3 := NoDeaths;
+ ExpatRisk[i] := ceil((term1 / term2) * term3);
+// ExpatRisk[i] := (ExpCnt[i]) / TotalatRisk[i]) * NoDeaths;
+ term1 := CntrlCnt[i];
+ CntrlatRisk[i] := ceil((term1 / term2) * term3);
+// CntrlatRisk[i] := (CntrlCnt[i] / TotalatRisk[i]) * NoDeaths;
+ end;
+ if (i < NoCases-1) then TotalatRisk[i+1] := TotalatRisk[i] - Deaths[i];
+ // find no. in exp. or control groups and decrement their counts
+ for j := 1 to NoCases do
+ begin
+ if ( (ThisTime = SurvivalTimes[j]) and (Censored[j] = 0)) then
+ begin
+ if (Group[j] = 1) then
+ begin
+ noinexp := noinexp + 1;
+ O1 := O1 + 1;
+ end;
+ if (Group[j] = 2) then
+ begin
+ noincntrl := noincntrl + 1;
+ O2 := O2 + 1;
+ end;
+ end;
+ end;
+ if ( (i < NoCases) and (noinexp > 0) ) then
+ begin
+ term1 := ExpCnt[i];
+ term2 := noinexp;
+ term3 := ExpCnt[i];
+ ExpProp[i] := (term1 - term2) / term3;
+// ExpProp[i] := (ExpCnt[i] - noinexp) / ExpCnt[i];
+ if (i > 0) then CumPropExp[i] := CumPropExp[i-1] * ExpProp[i];
+ ExpCnt[i+1] := ExpCnt[i] - noinexp;
+ CumPropExp[i+1] := CumPropExp[i];
+ end;
+ if ( (i < NoCases) and (noinexp = 0) ) then
+ begin
+ ExpCnt[i+1] := ExpCnt[i];
+ CumPropExp[i+1] := CumPropExp[i];
+ end;
+ if ( (i < NoCases) and (noincntrl > 0) ) then
+ begin
+ term1 := CntrlCnt[i];
+ term2 := noincntrl;
+ term3 := CntrlCnt[i];
+ CntrlProp[i] := (term1 - term2) / term3;
+// CntrlProp[i] := (CntrlCnt[i] - noincntrl) / CntrlCnt[i];
+ if (i > 0) then CumPropCntrl[i] := CumPropCntrl[i-1] * CntrlProp[i];
+ CntrlCnt[i+1] := CntrlCnt[i] - noincntrl;
+ CumPropCntrl[i+1] := CumPropCntrl[i];
+ end;
+ if ( (i < NoCases) and (noincntrl = 0) ) then
+ begin
+ CntrlCnt[i+1] := CntrlCnt[i];
+ CumPropCntrl[i+1] := CumPropCntrl[i];
+ end;
+ end; // end if deaths[i] > 0
+
+ if ( (Censored[i] > 0) and (i < NoCases) ) then
+ begin
+ if (Group[i] = 1) then
+ begin
+ ExpCnt[i+1] := ExpCnt[i] - 1;
+ CntrlCnt[i+1] := CntrlCnt[i];
+ ExpProp[i+1] := ExpProp[i];
+ CumPropExp[i+1] := CumPropExp[i];
+ CumPropCntrl[i+1] := CumPropCntrl[i];
+ end;
+ if (Group[i] = 2) then
+ begin
+ CntrlCnt[i+1] := CntrlCnt[i] - 1;
+ ExpCnt[i+1] := ExpCnt[i];
+ CntrlProp[i+1] := CntrlProp[i];
+ CumPropCntrl[i+1] := CumPropCntrl[i];
+ CumPropExp[i+1] := CumPropExp[i];
+ end;
+ TotalatRisk[i+1] := TotalatRisk[i] - 1;
+ end;
+ if ( (Deaths[i] = 0) and (Censored[i] = 0) and (i < NoCases) ) then
+ begin
+ ExpCnt[i+1] := ExpCnt[i];
+ CntrlCnt[i+1] := CntrlCnt[i];
+ CumPropExp[i+1] := CumPropExp[i];
+ CumPropCntrl[i+1] := CumPropCntrl[i];
+ TotalatRisk[i+1] := TotalatRisk[i];
+ end;
+ end; // next case i
+
+ // Now calculate chisquare, relative risk (r), logr, and S.E. of log risk
+ E1 := 0.0;
+ for i := 0 to NoCases do E1 := E1 + ExpatRisk[i];
+ E2 := (O1 + O2) - E1;
+ Chisquare := ((O1 - E1) * (O1 - E1)) / E1 + ((O2 - E2) * (O2 - E2)) / E2;
+ ProbChi := chisquaredprob(Chisquare,1);
+ Risk := (O1 / E1) / (O2 / E2);
+ LogRisk := ln(Risk);
+ SELogRisk := sqrt(1.0/E1 + 1.0/E2);
+ HiConf := LogRisk + (inversez(0.975) * SELogRisk);
+ LowConf := LogRisk - (inversez(0.975) * SELogRisk);
+ HiLogLevel := exp(HiConf);
+ LowLogLevel := exp(LowConf);
+ end;
+
+ // Print Results
+ if (TwoGroups and PrintIt) then // both experimental and control groups
+ begin
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Kaplan-Meier Survival Test');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Comparison of Two Groups Methd');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('TIME GROUP CENSORED TOTAL AT EVENTS AT RISK IN EXPECTED NO. AT RISK IN EXPECTED NO.');
+ OutPutFrm.RichEdit.Lines.Add(' RISK GROUP 1 EVENTS IN 1 GROUP 2 EVENTS IN 2');
+ for i := 1 to NoCases+1 do
+ begin
+ outline := format('%4d %4d %4d %4d %4d %4d %7d %4d %7d',
+ [SurvivalTimes[i-1],Group[i-1],Censored[i-1],TotalatRisk[i-1],
+ Deaths[i-1],ExpCnt[i-1],ExpatRisk[i-1],CntrlCnt[i-1],CntrlatRisk[i-1]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('TIME DEATHS GROUP AT RISK PROPORTION CUMULATIVE');
+ OutPutFrm.RichEdit.Lines.Add(' SURVIVING PROP.SURVIVING');
+
+ for i := 1 to NoCases do
+ begin
+ if (Group[i] = 1) then
+ begin
+ count := ExpCnt[i];
+ proportion := ExpProp[i];
+ cumprop := CumPropExp[i];
+ end
+ else
+ begin
+ count := CntrlCnt[i];
+ proportion := CntrlProp[i];
+ cumprop := CumPropCntrl[i];
+ end;
+ outline := format('%4d %4d %4d %4d %7.4f %7.4f',
+ [SurvivalTimes[i],Deaths[i],Group[i],count,proportion,cumprop]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('Total Expected Events for Experimental Group := %8.3f',[E1]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Observed Events for Experimental Group := %8.3f',[O1]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Total Expected Events for Control Group := %8.3f',[E2]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Observed Events for Control Group := %8.3f',[O2]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Chisquare = %8.3f with probability = %5.3f',[Chisquare,ProbChi]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Risk := %8.3f, Log Risk := %8.3f, Std.Err. Log Risk := %8.3f',
+ [Risk, LogRisk, SELogRisk]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('95 Percent Confidence interval for Log Risk = (%5.3f,%5.3f)',
+ [LowConf,HiConf]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('95 Percent Confidence interval for Risk := (%5.3f,%5.3f)',
+ [LowLogLevel,HiLogLevel]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.ShowModal;
+
+ // Plot data output
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('EXPERIMENTAL GROUP CUMULATIVE PROBABILITY');
+ OutPutFrm.RichEdit.Lines.Add('CASE TIME DEATHS CENSORED CUM.PROB.');
+ for i := 1 to NoCases do
+ begin
+ if (Group[i] = 1) then
+ begin
+ outline := format('%3d %3d %3d %3d %5.3f',[i,
+ SurvivalTimes[i], Deaths[i], Censored[i], CumPropExp[i]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('CONTROL GROUP CUMULATIVE PROBABILITY');
+ OutPutFrm.RichEdit.Lines.Add('CASE TIME DEATHS CENSORED CUM.PROB.');
+ for i := 1 to NoCases do
+ begin
+ if (Group[i] = 2) then
+ begin
+ outline := format('%3d %3d %3d %3d %5.3f',[i,
+ SurvivalTimes[i], Deaths[i], Censored[i], CumPropCntrl[i]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.ShowModal;
+ end; // if 2 groups and printit
+
+ if (Graph1) then // plot cumulative proportion surviving (Y) against time (X)
+ begin
+ nopoints := maxtime + 1;
+ SetLength(TimePlot,nopoints+2);
+ SetLength(ProbPlot,nopoints+2);
+ SetLength(ProbPlot2,nopoints+2);
+ ProbPlot[0] := 1.0;
+ ProbPlot2[0] := 1.0;
+ lastexp := 1.0;
+ lastctr := 1.0;
+ for i := 0 to nopoints do
+ begin
+ TimePlot[i] := 0;
+ ProbPlot[i] := 1.0;
+ ProbPlot2[i] := 1.0;
+ end;
+ TimePlot[0] := 0;
+ mintime := 0;
+ for i := 1 to nopoints do
+ begin
+ TimePlot[i] := i;
+ for j := 1 to NoCases do
+ begin
+ if (SurvivalTimes[j] = i) then
+ begin
+ if (Group[j] = 1) then
+ begin
+ ProbPlot[i] := CumPropExp[j]; // ExpProp[j];
+ lastexp := CumPropExp[j]; // ExpProp[j];
+ end;
+ if (Group[j] = 2) then
+ begin
+ ProbPlot2[i] := CumPropCntrl[j]; //CntrlProp[j];
+ lastctr := CumPropCntrl[j]; // CntrlProp[j];
+ end;
+ end
+ else
+ begin
+ if (Group[j] = 1) then ProbPlot[i] := lastexp;
+ if (Group[j] = 2) then ProbPlot2[i] := lastctr;
+ end;
+ end;
+ end;
+ BlankFrm.Image1.Canvas.Clear;
+ BlankFrm.Show;
+ plotxy(TimePlot, ProbPlot, Dropped, Dropped2,
+ maxtime, 0, 1.0, 0.0, nopoints, 'TIME', 'PROBABILITY',1);
+
+ plotxy(TimePlot, ProbPlot2, Dropped, Dropped2,
+ maxtime, 0, 1.0, 0.0, nopoints, 'TIME', 'PROBABILITY',2);
+
+ ProbPlot2 := nil;
+ ProbPlot := nil;
+ TimePlot := nil;
+ end; // if graph plot := 1
+ Dropped2 := nil;
+ Dropped := nil;
+
+ // clean up memory
+ Dropped2 := nil;
+ Dropped := nil;
+ CumPropCntrl := nil;
+ CumPropExp := nil;
+ Censored := nil;
+ Group := nil;
+ Deaths := nil;
+ CntrlProp := nil;
+ ExpProp := nil;
+ CntrlatRisk := nil;
+ ExpatRisk := nil;
+ TotalatRisk := nil;
+ CntrlCnt := nil;
+ ExpCnt := nil;
+ SurvivalTimes := nil;
+end;
+
+procedure TKaplanMeierFrm.EventOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(EventEdit.Text);
+ EventEdit.Text := '';
+ EventInBtn.Visible := true;
+ EventOutBtn.Visible := false;
+end;
+
+procedure TKaplanMeierFrm.plotxy(var Xpoints: IntDyneVec;
+ var Ypoints: DblDyneVec; var Dropped: IntDyneVec; var Dropped2: IntDyneVec;
+ Xmax, Xmin, Ymax, Ymin: double; N: integer; XEdit: string; YEdit: string;
+ curveno: integer);
+var
+ i, xpos, ypos, hleft, hright, vtop, vbottom, imagewide : integer;
+ vhi, hwide, offset, strhi, imagehi : integer;
+ noxvalues, digitwidth, Xvalue, xvalincr, oldxpos : integer;
+ maxval, minval, valincr, Yvalue, value, oldypos, term1, term2, term3 : double;
+ Title, outline : string;
+label again, second;
+
+begin
+ if (curveno = 2) then goto second;
+ BlankFrm.Image1.Canvas.Font.Color := clBlack;
+ Title := 'SURVIVAL CURVE';
+ BlankFrm.Caption := Title;
+ imagewide := BlankFrm.Image1.Width;
+ imagehi := BlankFrm.Image1.Height;
+ BlankFrm.Image1.Canvas.FloodFill(0,0,clWhite,fsBorder);
+ vtop := 20;
+ vbottom := ceil(imagehi) - 130;
+ vhi := vbottom - vtop;
+ hleft := 100;
+ hright := imagewide - 80;
+ hwide := hright - hleft;
+ BlankFrm.Image1.Canvas.Pen.Color := clBlack;
+ BlankFrm.Image1.Canvas.Brush.Color := clWhite;
+
+ // Draw chart border
+// ImageFrm.Image.Canvas.Rectangle(0,0,imagewide,imagehi);
+
+ // draw horizontal axis
+ noxvalues := N;
+ xvalincr := 1;
+ digitwidth := BlankFrm.Image1.Canvas.TextWidth('9');
+again:
+ if ( (noxvalues * 4 * digitwidth) > hwide) then
+ begin
+ noxvalues := noxvalues div 2;
+ xvalincr := 2 * xvalincr;
+ goto again;
+ end;
+ BlankFrm.Image1.Canvas.Pen.Style := psSolid;
+ BlankFrm.Image1.Canvas.Pen.Color := clBlack;
+ BlankFrm.Image1.Canvas.MoveTo(hleft,vbottom);
+ BlankFrm.Image1.Canvas.LineTo(hright,vbottom);
+ for i := 1 to noxvalues do
+ begin
+ ypos := vbottom;
+ Xvalue := Xpoints[1] + xvalincr * (i - 1); // Xmin + xvalincr * (i - 1);
+ term1 := (Xvalue - Xmin) / (Xmax - Xmin);
+ term2 := hwide;
+ term3 := hleft;
+ xpos := floor((term1 * term2) + term3);
+ BlankFrm.Image1.Canvas.MoveTo(xpos,ypos);
+ ypos := ypos + 10;
+ BlankFrm.Image1.Canvas.LineTo(xpos,ypos);
+ outline := format('%d',[Xvalue]);
+ Title := outline;
+ offset := BlankFrm.Image1.Canvas.TextWidth(Title) div 2;
+ xpos := xpos - offset;
+ BlankFrm.Image1.Canvas.Pen.Color := clBlack;
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title);
+ end;
+ xpos := hleft + (hwide div 2) - (BlankFrm.Image1.Canvas.TextWidth(XEdit) div 2);
+ ypos := vbottom + 22;
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,XEdit);
+
+ // Draw vertical axis
+ Title := YEdit;
+ xpos := hleft - BlankFrm.Image1.Canvas.TextWidth(Title) div 2;
+ ypos := vtop - BlankFrm.Image1.Canvas.TextHeight(Title);
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,YEdit);
+ xpos := hleft;
+ ypos := vtop;
+ BlankFrm.Image1.Canvas.MoveTo(xpos,ypos);
+ ypos := vbottom;
+ BlankFrm.Image1.Canvas.LineTo(xpos,ypos);
+ valincr := (Ymax - Ymin) / 10.0;
+ for i := 1 to 11 do
+ begin
+ value := Ymax - ((i-1) * valincr);
+ outline := format('%8.2f',[value]);
+ Title := outline;
+ strhi := BlankFrm.Image1.Canvas.TextHeight(Title);
+ xpos := 10;
+ Yvalue := Ymax - (valincr * (i-1));
+ ypos := ceil(vhi * ( (Ymax - Yvalue) / (Ymax - Ymin)));
+ ypos := ypos + vtop - strhi div 2;
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title);
+ xpos := hleft;
+ ypos := ypos + strhi div 2;
+ BlankFrm.Image1.Canvas.MoveTo(xpos,ypos);
+ xpos := hleft - 10;
+ BlankFrm.Image1.Canvas.LineTo(xpos,ypos);
+ end;
+
+ // get xpos and ypos for first point to second point
+second: xpos := hleft;
+ ypos := vtop;
+ BlankFrm.Image1.Canvas.MoveTo(xpos,ypos); // Probability := 1 at time 0
+ if (curveno = 1) then BlankFrm.Image1.Canvas.Pen.Color := clNavy
+ else BlankFrm.Image1.Canvas.Pen.Color := clRed;
+ ypos := ceil(vhi * ( (Ymax - Ypoints[0]) / (Ymax - Ymin)));
+ ypos := ypos + vtop;
+ xpos := ceil(hwide * ( (Xpoints[1] - Xmin) / (Xmax - Xmin)));
+ xpos := xpos + hleft;
+ BlankFrm.Image1.Canvas.LineTo(xpos,ypos);
+
+ // draw points for x and y pairs
+ oldxpos := xpos;
+ oldypos := ypos;
+ for i := 1 to N - 1 do
+ begin
+ ypos := ceil(vhi * ( (Ymax - Ypoints[i]) / (Ymax - Ymin)));
+ ypos := ypos + vtop;
+ if (ypos <> oldypos) then // draw line down to new ypos using old xpos
+ begin
+ if (curveno = 1) then BlankFrm.Image1.Canvas.Pen.Style := psSolid
+ else BlankFrm.Image1.Canvas.Pen.Style := psDot;
+ BlankFrm.Image1.Canvas.LineTo(oldxpos,ypos);
+ end;
+ xpos := ceil(hwide * ( (Xpoints[i] - Xmin) / (Xmax - Xmin)));
+ xpos := xpos + hleft;
+ oldxpos := xpos;
+ oldypos := ypos;
+ BlankFrm.Image1.Canvas.Pen.Style := psSolid;
+ BlankFrm.Image1.Canvas.LineTo(xpos,ypos);
+ end;
+
+ // show censored
+ BlankFrm.Image1.Canvas.Pen.Style := psSolid;
+ BlankFrm.Image1.Canvas.Pen.Color := clBlack;
+ for i := 1 to N do
+ begin
+ if ((Dropped[i] = 0) and (curveno = 1)) then continue;
+ if ((Dropped2[i] = 0) and (curveno = 2)) then continue;
+ if (curveno = 1) then
+ begin
+ BlankFrm.Image1.Canvas.Font.Color := clNavy;
+ ypos := vbottom + 35;
+ xpos := ceil(hwide * ((Xpoints[i] - Xmin) / (Xmax - Xmin)));
+ xpos := xpos + hleft;
+ outline := format('%d',[Dropped[i]]);
+ Title := outline;
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title);
+ end
+ else
+ begin
+ BlankFrm.Image1.Canvas.Font.Color := clRed;
+ ypos := vbottom + 48;
+ xpos := ceil(hwide * ((Xpoints[i] - Xmin) / (Xmax - Xmin)));
+ xpos := xpos + hleft;
+ outline := format('%d',[Dropped2[i]]);
+ Title := outline;
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title);
+ end;
+ end;
+
+ BlankFrm.Image1.Canvas.Font.Color := clBlack;
+ ypos := vbottom + 60;
+ Title := 'NUMBER CENSORED';
+ xpos := hleft + (hwide div 2) - (BlankFrm.Image1.Canvas.TextWidth(Title) div 2);
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title);
+
+ BlankFrm.Image1.Canvas.Font.Color := clNavy;
+ Title := 'EXPERIMENTAL';
+ xpos := 5;
+ ypos := vbottom + 35;
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title);
+ if (curveno = 2) then
+ begin
+ BlankFrm.Image1.Canvas.Font.Color := clRed;
+ Title := 'CONTROL';
+ xpos := 5;
+ ypos := vbottom + 48;
+ BlankFrm.Image1.Canvas.TextOut(xpos,ypos,Title);
+ end;
+end;
+
+initialization
+ {$I kaplanmeierunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/kappaunit.lfm b/applications/lazstats/source_orig/kappaunit.lfm
new file mode 100644
index 000000000..8f6e580a8
--- /dev/null
+++ b/applications/lazstats/source_orig/kappaunit.lfm
@@ -0,0 +1,484 @@
+object WeightedKappaFrm: TWeightedKappaFrm
+ Left = 132
+ Height = 410
+ Top = 112
+ Width = 631
+ Caption = 'Kappa and Weighted Kappa'
+ ClientHeight = 410
+ ClientWidth = 631
+ OnShow = FormShow
+ LCLVersion = '0.9.28.2'
+ object Label1: TLabel
+ Left = 10
+ Height = 14
+ Top = 112
+ Width = 44
+ Caption = 'Variables'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 216
+ Height = 14
+ Top = 130
+ Width = 38
+ Caption = 'Rater A'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 216
+ Height = 14
+ Top = 209
+ Width = 37
+ Caption = 'Rater B'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 216
+ Height = 14
+ Top = 280
+ Width = 93
+ Caption = 'Variable to Analyze'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 376
+ Height = 14
+ Top = 112
+ Width = 114
+ Caption = 'Total Number of Cases:'
+ ParentColor = False
+ end
+ object InputGroup: TRadioGroup
+ Left = 9
+ Height = 90
+ Top = 8
+ Width = 610
+ AutoFill = True
+ Caption = 'Input Options:'
+ ChildSizing.LeftRightSpacing = 6
+ ChildSizing.TopBottomSpacing = 6
+ ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
+ ChildSizing.EnlargeVertical = crsHomogenousChildResize
+ ChildSizing.ShrinkHorizontal = crsScaleChilds
+ ChildSizing.ShrinkVertical = crsScaleChilds
+ ChildSizing.Layout = cclLeftToRightThenTopToBottom
+ ChildSizing.ControlsPerLine = 1
+ ClientHeight = 72
+ ClientWidth = 606
+ Items.Strings = (
+ 'Count cases classified by row and column variables in the data grid'
+ 'Use frequencies in a variable for a given row variable value and column variable value.'
+ 'Use proportions in a variable for a given row variable value and column variable value.'
+ )
+ OnClick = InputGroupClick
+ TabOrder = 0
+ end
+ object VarList: TListBox
+ Left = 9
+ Height = 212
+ Top = 128
+ Width = 160
+ ItemHeight = 0
+ TabOrder = 1
+ end
+ object RowIn: TBitBtn
+ Left = 176
+ Height = 32
+ Top = 130
+ Width = 27
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = RowInClick
+ TabOrder = 2
+ end
+ object RowOut: TBitBtn
+ Left = 176
+ Height = 22
+ Top = 168
+ Width = 27
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = RowOutClick
+ TabOrder = 3
+ end
+ object ColIn: TBitBtn
+ Left = 176
+ Height = 22
+ Top = 209
+ Width = 27
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = ColInClick
+ TabOrder = 4
+ end
+ object ColOut: TBitBtn
+ Left = 176
+ Height = 22
+ Top = 232
+ Width = 27
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = ColOutClick
+ TabOrder = 5
+ end
+ object DepIn: TBitBtn
+ Left = 176
+ Height = 22
+ Top = 280
+ Width = 27
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = DepInClick
+ TabOrder = 6
+ end
+ object DepOut: TBitBtn
+ Left = 176
+ Height = 20
+ Top = 308
+ Width = 27
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = DepOutClick
+ TabOrder = 7
+ end
+ object RaterAEdit: TEdit
+ Left = 216
+ Height = 21
+ Top = 144
+ Width = 120
+ TabOrder = 8
+ Text = 'RaterAEdit'
+ end
+ object RaterBEdit: TEdit
+ Left = 216
+ Height = 21
+ Top = 224
+ Width = 120
+ TabOrder = 9
+ Text = 'Edit1'
+ end
+ object DepEdit: TEdit
+ Left = 216
+ Height = 21
+ Top = 296
+ Width = 120
+ TabOrder = 10
+ Text = 'Edit1'
+ end
+ object NCasesEdit: TEdit
+ Left = 496
+ Height = 21
+ Top = 105
+ Width = 62
+ TabOrder = 11
+ Text = 'NCasesEdit'
+ end
+ object GroupBox1: TGroupBox
+ Left = 376
+ Height = 197
+ Top = 136
+ Width = 242
+ Caption = 'Options:'
+ ClientHeight = 179
+ ClientWidth = 238
+ TabOrder = 12
+ object ObsChk: TCheckBox
+ Left = 9
+ Height = 17
+ Top = 2
+ Width = 157
+ Caption = 'Show Observed Frequencies'
+ TabOrder = 0
+ end
+ object ExpChk: TCheckBox
+ Left = 9
+ Height = 17
+ Top = 25
+ Width = 155
+ Caption = 'Show Expected Frequencies'
+ TabOrder = 1
+ end
+ object PropChk: TCheckBox
+ Left = 9
+ Height = 17
+ Top = 50
+ Width = 187
+ Caption = 'Show Row and Column Proportions'
+ TabOrder = 2
+ end
+ object ChiChk: TCheckBox
+ Left = 9
+ Height = 17
+ Top = 77
+ Width = 155
+ Caption = 'Show Cell Chi Square Values'
+ TabOrder = 3
+ end
+ object YatesChk: TCheckBox
+ Left = 9
+ Height = 17
+ Top = 104
+ Width = 209
+ Caption = 'Use Yates'' Correction for a 2 by 2 table'
+ TabOrder = 4
+ end
+ object SaveChk: TCheckBox
+ Left = 9
+ Height = 17
+ Top = 130
+ Width = 179
+ Caption = 'Save as a File of Frequency Data'
+ TabOrder = 5
+ end
+ end
+ object ResetBtn: TButton
+ Left = 136
+ Height = 33
+ Top = 360
+ Width = 79
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 13
+ end
+ object Cancel: TButton
+ Left = 257
+ Height = 33
+ Top = 360
+ Width = 79
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 14
+ end
+ object ComputeBtn: TButton
+ Left = 376
+ Height = 33
+ Top = 360
+ Width = 79
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 15
+ end
+ object ReturnBtn: TButton
+ Left = 496
+ Height = 33
+ Top = 360
+ Width = 79
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 16
+ end
+ object HelpBtn: TButton
+ Tag = 128
+ Left = 10
+ Height = 33
+ Top = 360
+ Width = 86
+ Caption = 'Help'
+ OnClick = HelpBtnClick
+ TabOrder = 17
+ end
+end
diff --git a/applications/lazstats/source_orig/kappaunit.lrs b/applications/lazstats/source_orig/kappaunit.lrs
new file mode 100644
index 000000000..88fde99ed
--- /dev/null
+++ b/applications/lazstats/source_orig/kappaunit.lrs
@@ -0,0 +1,367 @@
+LazarusResources.Add('TWeightedKappaFrm','FORMDATA',[
+ 'TPF0'#17'TWeightedKappaFrm'#16'WeightedKappaFrm'#4'Left'#3#132#0#6'Height'#3
+ +#154#1#3'Top'#2'p'#5'Width'#3'w'#2#7'Caption'#6#24'Kappa and Weighted Kappa'
+ +#12'ClientHeight'#3#154#1#11'ClientWidth'#3'w'#2#6'OnShow'#7#8'FormShow'#10
+ +'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#10#6'Height'#2#14
+ +#3'Top'#2'p'#5'Width'#2','#7'Caption'#6#9'Variables'#11'ParentColor'#8#0#0#6
+ +'TLabel'#6'Label2'#4'Left'#3#216#0#6'Height'#2#14#3'Top'#3#130#0#5'Width'#2
+ +'&'#7'Caption'#6#7'Rater A'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'
+ +#3#216#0#6'Height'#2#14#3'Top'#3#209#0#5'Width'#2'%'#7'Caption'#6#7'Rater B'
+ +#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#216#0#6'Height'#2#14#3
+ +'Top'#3#24#1#5'Width'#2']'#7'Caption'#6#19'Variable to Analyze'#11'ParentCol'
+ +'or'#8#0#0#6'TLabel'#6'Label5'#4'Left'#3'x'#1#6'Height'#2#14#3'Top'#2'p'#5'W'
+ +'idth'#2'r'#7'Caption'#6#22'Total Number of Cases:'#11'ParentColor'#8#0#0#11
+ +'TRadioGroup'#10'InputGroup'#4'Left'#2#9#6'Height'#2'Z'#3'Top'#2#8#5'Width'#3
+ +'b'#2#8'AutoFill'#9#7'Caption'#6#14'Input Options:'#28'ChildSizing.LeftRight'
+ +'Spacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHor'
+ +'izontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24
+ +'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChi'
+ +'lds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Lay'
+ +'out'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1
+ +#12'ClientHeight'#2'H'#11'ClientWidth'#3'^'#2#13'Items.Strings'#1#6'CCount c'
+ +'ases classified by row and column variables in the data grid'#6'WUse freque'
+ +'ncies in a variable for a given row variable value and column variable valu'
+ +'e.'#6'WUse proportions in a variable for a given row variable value and col'
+ +'umn variable value.'#0#7'OnClick'#7#15'InputGroupClick'#8'TabOrder'#2#0#0#0
+ +#8'TListBox'#7'VarList'#4'Left'#2#9#6'Height'#3#212#0#3'Top'#3#128#0#5'Width'
+ +#3#160#0#10'ItemHeight'#2#0#8'TabOrder'#2#1#0#0#7'TBitBtn'#5'RowIn'#4'Left'#3
+ +#176#0#6'Height'#2' '#3'Top'#3#130#0#5'Width'#2#27#10'Glyph.Data'#10':'#4#0#0
+ +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0
+ +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'
+ +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255
+ +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211
+ +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130
+ +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'
+ +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'
+ +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255
+ +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161
+ +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255
+ ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#7'OnClick'#7#10'RowInClick'#8'TabOrder'#2#2#0#0#7'TBitB'
+ +'tn'#6'RowOut'#4'Left'#3#176#0#6'Height'#2#22#3'Top'#3#168#0#5'Width'#2#27#10
+ +'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0
+ +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'
+ +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'
+ +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134
+ +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203
+ +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190
+ +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127
+ +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255
+ +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135
+ +#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255
+ +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177
+ +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255
+ +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#11'RowOutClick'#8'Ta'
+ ,'bOrder'#2#3#0#0#7'TBitBtn'#5'ColIn'#4'Left'#3#176#0#6'Height'#2#22#3'Top'#3
+ +#209#0#5'Width'#2#27#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0
+ +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0
+ +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'
+ +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'
+ +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195
+ +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144
+ +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255
+ +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255
+ +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212
+ +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133
+ +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255
+ +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255
+ +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145
+ +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'
+ +#7#10'ColInClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#6'ColOut'#4'Left'#3#176#0#6
+ +'Height'#2#22#3'Top'#3#232#0#5'Width'#2#27#10'Glyph.Data'#10':'#4#0#0'6'#4#0
+ +#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0
+ +#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207
+ +'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'
+ +#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255
+ +#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211
+ +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130
+ +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'
+ +#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#7'OnClick'#7#11'ColOutClick'#8'TabOrder'#2#5#0#0#7'TBit'
+ +'Btn'#5'DepIn'#4'Left'#3#176#0#6'Height'#2#22#3'Top'#3#24#1#5'Width'#2#27#10
+ +'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0
+ +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184
+ +'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'
+ +#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255
+ +#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147
+ ,#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'
+ +#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218
+ +#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147
+ +#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255
+ +'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'
+ +#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'
+ +#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#7'OnClick'#7#10'DepInClick'#8'TabOrder'#2
+ +#6#0#0#7'TBitBtn'#6'DepOut'#4'Left'#3#176#0#6'Height'#2#20#3'Top'#3'4'#1#5'W'
+ +'idth'#2#27#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0
+ +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0
+ +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'
+ +#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'
+ +#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255
+ +'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'
+ +#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195
+ +'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144
+ +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255
+ +'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255
+ +#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212
+ +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133
+ +#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255
+ +#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135
+ +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#7'OnClick'
+ +#7#11'DepOutClick'#8'TabOrder'#2#7#0#0#5'TEdit'#10'RaterAEdit'#4'Left'#3#216
+ +#0#6'Height'#2#21#3'Top'#3#144#0#5'Width'#2'x'#8'TabOrder'#2#8#4'Text'#6#10
+ +'RaterAEdit'#0#0#5'TEdit'#10'RaterBEdit'#4'Left'#3#216#0#6'Height'#2#21#3'To'
+ +'p'#3#224#0#5'Width'#2'x'#8'TabOrder'#2#9#4'Text'#6#5'Edit1'#0#0#5'TEdit'#7
+ +'DepEdit'#4'Left'#3#216#0#6'Height'#2#21#3'Top'#3'('#1#5'Width'#2'x'#8'TabOr'
+ +'der'#2#10#4'Text'#6#5'Edit1'#0#0#5'TEdit'#10'NCasesEdit'#4'Left'#3#240#1#6
+ +'Height'#2#21#3'Top'#2'i'#5'Width'#2'>'#8'TabOrder'#2#11#4'Text'#6#10'NCases'
+ +'Edit'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3'x'#1#6'Height'#3#197#0#3'Top'
+ +#3#136#0#5'Width'#3#242#0#7'Caption'#6#8'Options:'#12'ClientHeight'#3#179#0
+ +#11'ClientWidth'#3#238#0#8'TabOrder'#2#12#0#9'TCheckBox'#6'ObsChk'#4'Left'#2
+ +#9#6'Height'#2#17#3'Top'#2#2#5'Width'#3#157#0#7'Caption'#6#25'Show Observed '
+ +'Frequencies'#8'TabOrder'#2#0#0#0#9'TCheckBox'#6'ExpChk'#4'Left'#2#9#6'Heigh'
+ +'t'#2#17#3'Top'#2#25#5'Width'#3#155#0#7'Caption'#6#25'Show Expected Frequenc'
+ +'ies'#8'TabOrder'#2#1#0#0#9'TCheckBox'#7'PropChk'#4'Left'#2#9#6'Height'#2#17
+ +#3'Top'#2'2'#5'Width'#3#187#0#7'Caption'#6#31'Show Row and Column Proportion'
+ +'s'#8'TabOrder'#2#2#0#0#9'TCheckBox'#6'ChiChk'#4'Left'#2#9#6'Height'#2#17#3
+ +'Top'#2'M'#5'Width'#3#155#0#7'Caption'#6#27'Show Cell Chi Square Values'#8'T'
+ +'abOrder'#2#3#0#0#9'TCheckBox'#8'YatesChk'#4'Left'#2#9#6'Height'#2#17#3'Top'
+ +#2'h'#5'Width'#3#209#0#7'Caption'#6'(Use Yates'' Correction for a 2 by 2 tab'
+ +'le'#8'TabOrder'#2#4#0#0#9'TCheckBox'#7'SaveChk'#4'Left'#2#9#6'Height'#2#17#3
+ +'Top'#3#130#0#5'Width'#3#179#0#7'Caption'#6' Save as a File of Frequency Dat'
+ +'a'#8'TabOrder'#2#5#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#136#0#6'Height'#2
+ +'!'#3'Top'#3'h'#1#5'Width'#2'O'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetB'
+ +'tnClick'#8'TabOrder'#2#13#0#0#7'TButton'#6'Cancel'#4'Left'#3#1#1#6'Height'#2
+ +'!'#3'Top'#3'h'#1#5'Width'#2'O'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8
+ +'TabOrder'#2#14#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3'x'#1#6'Height'#2'!'#3
+ +'Top'#3'h'#1#5'Width'#2'O'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBt'
+ +'nClick'#8'TabOrder'#2#15#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#240#1#6'Heig'
+ +'ht'#2'!'#3'Top'#3'h'#1#5'Width'#2'O'#7'Caption'#6#6'Return'#11'ModalResult'
+ +#2#1#8'TabOrder'#2#16#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#128#0#4'Left'#2#10#6
+ +'Height'#2'!'#3'Top'#3'h'#1#5'Width'#2'V'#7'Caption'#6#4'Help'#7'OnClick'#7
+ +#12'HelpBtnClick'#8'TabOrder'#2#17#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/kappaunit.pas b/applications/lazstats/source_orig/kappaunit.pas
new file mode 100644
index 000000000..14f34a9a6
--- /dev/null
+++ b/applications/lazstats/source_orig/kappaunit.pas
@@ -0,0 +1,670 @@
+unit KappaUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, ExtCtrls, Buttons, MainUnit, Globals, OutPutUnit, FunctionsLib,
+ Math, DictionaryUnit, DataProcs, MatrixLib, contexthelpunit;
+
+type
+
+ { TWeightedKappaFrm }
+
+ TWeightedKappaFrm = class(TForm)
+ HelpBtn: TButton;
+ ResetBtn: TButton;
+ Cancel: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ ObsChk: TCheckBox;
+ ExpChk: TCheckBox;
+ PropChk: TCheckBox;
+ ChiChk: TCheckBox;
+ YatesChk: TCheckBox;
+ SaveChk: TCheckBox;
+ GroupBox1: TGroupBox;
+ NCasesEdit: TEdit;
+ Label5: TLabel;
+ RowIn: TBitBtn;
+ RowOut: TBitBtn;
+ ColIn: TBitBtn;
+ ColOut: TBitBtn;
+ DepIn: TBitBtn;
+ DepOut: TBitBtn;
+ RaterAEdit: TEdit;
+ RaterBEdit: TEdit;
+ DepEdit: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ VarList: TListBox;
+ InputGroup: TRadioGroup;
+ procedure ColInClick(Sender: TObject);
+ procedure ColOutClick(Sender: TObject);
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure DepInClick(Sender: TObject);
+ procedure DepOutClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure HelpBtnClick(Sender: TObject);
+ procedure InputGroupClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure RowInClick(Sender: TObject);
+ procedure RowOutClick(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ WeightedKappaFrm: TWeightedKappaFrm;
+
+implementation
+
+{ TWeightedKappaFrm }
+
+procedure TWeightedKappaFrm.ResetBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ VarList.Clear;
+ RaterAEdit.Text := '';
+ RaterBEdit.Text := '';
+ DepEdit.Text := '';
+ DepEdit.Visible := false;
+ RowIn.Visible := true;
+ RowOut.Visible := false;
+ ColIn.Visible := true;
+ ColOut.Visible := false;
+ DepIn.Visible := false;
+ DepOut.Visible := false;
+ NCasesEdit.Text := '';
+ NCasesEdit.Visible := false;
+ Label4.Visible := false;
+ Label5.Visible := false;
+ InputGroup.ItemIndex := 0;
+ for i := 1 to NoVariables do
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+end;
+
+procedure TWeightedKappaFrm.RowInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ RaterAEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ RowIn.Visible := false;
+ RowOut.Visible := true;
+end;
+
+procedure TWeightedKappaFrm.RowOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(RaterAEdit.Text);
+ RaterAEdit.Text := '';
+ RowIn.Visible := true;
+ RowOut.Visible := false;
+end;
+
+procedure TWeightedKappaFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(self);
+end;
+
+procedure TWeightedKappaFrm.HelpBtnClick(Sender: TObject);
+begin
+ ContextHelpForm.HelpMessage((Sender as TButton).tag);
+end;
+
+procedure TWeightedKappaFrm.InputGroupClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := InputGroup.ItemIndex;
+ if (index = 2) then // only proportions available - get N size
+ begin
+ Label4.Visible := true;
+ NCasesEdit.Visible := true;
+ NCasesEdit.SetFocus;
+ DepIn.Visible := true;
+ DepOut.Visible := false;
+ DepEdit.Visible := true;
+ Label5.Visible := true;
+ end;
+ if (index = 1) then // frequencies available for each row and column combo
+ begin
+ Label4.Visible := true;
+ NCasesEdit.Visible := false;
+ DepIn.Visible := true;
+ DepOut.Visible := false;
+ DepEdit.Visible := true;
+ Label5.Visible := false;
+ end;
+ if (index = 0) then // have to count cases in each row and col. combination
+ begin
+ NCasesEdit.Visible := false;
+ DepIn.Visible := false;
+ DepOut.Visible := false;
+ DepEdit.Visible := false;
+ Label4.Visible := false;
+ Label5.Visible := false;
+ end;
+end;
+
+procedure TWeightedKappaFrm.ColInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ RaterBEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ ColIn.Visible := false;
+ ColOut.Visible := true;
+end;
+
+procedure TWeightedKappaFrm.ColOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(RaterBEdit.Text);
+ RaterBEdit.Text := '';
+ ColIn.Visible := true;
+ ColOut.Visible := false;
+end;
+
+procedure TWeightedKappaFrm.ComputeBtnClick(Sender: TObject);
+VAR
+ i, j, k, RowNo, ColNo, DepNo, MinRow, MaxRow, MinCol, MaxCol : integer;
+ Row, Col, NoSelected, Ncases, Nrows, Ncols, FObs, df : integer;
+ RowLabels, ColLabels : StrDyneVec;
+ ColNoSelected : IntDyneVec;
+ cellstring : string;
+ outline : string;
+ Freq : IntDyneMat;
+ Prop, Expected, CellChi : DblDyneMat;
+ PObs, ChiSquare, ProbChi, liklihood, Fval, phi : double;
+ yates, aresult : boolean;
+ title : string;
+ filename : string;
+ Adjchisqr, Adjprobchi, probliklihood, pearsonr : double;
+ pobserved, SumX, SumY, VarX, VarY, obsdiag, expdiag, expnondiag : double;
+ pexpected, MantelHaenszel, MHprob, CoefCont, CramerV, Kappa : double;
+ Frq : integer;
+ weights, quadweights : DblDyneMat;
+begin
+ SetLength(ColNoSelected,NoVariables);
+ yates := false;
+ RowNo := 0;
+ ColNo := 0;
+ DepNo := 0;
+ pobserved := 0.0;
+ pexpected := 0.0;
+
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = RaterAEdit.Text) then RowNo := i;
+ if (cellstring = RaterBEdit.Text) then ColNo := i;
+ if (cellstring = DepEdit.Text) then DepNo := i;
+ end;
+ if ((InputGroup.ItemIndex > 0) and (DepNo = 0)) then
+ begin
+ ShowMessage('ERROR! You must select a dependent variable.');
+ ColNoSelected := nil;
+ exit;
+ end;
+ if ((RowNo = 0) or (ColNo = 0)) then // || (DepNo == 0))
+ begin
+ ShowMessage('ERROR! A required variable has not been selected.');
+ ColNoSelected := nil;
+ exit;
+ end;
+
+ aresult := ValidValue(RowNo,1);
+ if (aresult = false) then
+ begin
+ ColNoSelected := nil;
+ exit;
+ end;
+ aresult := ValidValue(ColNo,1);
+ if (aresult = false) then
+ begin
+ ColNoSelected := nil;
+ exit;
+ end;
+
+ ColNoSelected[0] := RowNo;
+ ColNoSelected[1] := ColNo;
+ NoSelected := 2;
+ if (InputGroup.ItemIndex > 0) then // for reading proportions or frequencies
+ begin
+ NoSelected := 3;
+ ColNoSelected[2] := DepNo;
+ end;
+ if (InputGroup.ItemIndex = 1) then
+ begin
+ aresult := ValidValue(DepNo,1);
+ if (aresult = false) then
+ begin
+ ColNoSelected := nil;
+ exit;
+ end;
+ end;
+ if (InputGroup.ItemIndex = 2) then
+ begin
+ aresult := ValidValue(DepNo,0);
+ if (aresult = false) then
+ begin
+ ColNoSelected := nil;
+ exit;
+ end;
+ end;
+
+ // get min and max of row and col numbers
+ MinRow := 1000;
+ MaxRow := 0;
+ MinCol := 1000;
+ MaxCol := 0;
+ for i := 1 to NoCases do
+ begin
+ if (NOT GoodRecord(i,NoSelected,ColNoSelected)) then continue;
+ Row := StrToInt(OS3MainFrm.DataGrid.Cells[RowNo,i]);
+ Col := StrToInt(OS3MainFrm.DataGrid.Cells[ColNo,i]);
+ if (Row > MaxRow) then MaxRow := Row;
+ if (Row < MinRow) then MinRow := Row;
+ if (Col > MaxCol) then MaxCol := Col;
+ if (Col < MinCol) then MinCol := Col;
+ end;
+ Nrows := MaxRow - MinRow + 1;
+ Ncols := MaxCol - MinCol + 1;
+
+ // allocate and initialize
+ SetLength(Freq,Nrows+1,Ncols+1);
+ SetLength(Prop,Nrows+1,Ncols+1);
+ SetLength(Expected,Nrows,Ncols);
+ SetLength(CellChi,Nrows,Ncols);
+ SetLength(RowLabels,Nrows+1);
+ SetLength(ColLabels,Ncols+1);
+ for i := 1 to Nrows + 1 do
+ for j := 1 to Ncols + 1 do Freq[i-1,j-1] := 0;
+ for i := 1 to Nrows do
+ begin
+ outline := format('Row %d',[i]);
+ cellstring := outline;
+ RowLabels[i-1] := cellstring;
+ end;
+ RowLabels[Nrows] := 'Total';
+ for j := 1 to Ncols do
+ begin
+ outline := format('COL. %d',[j]);
+ cellstring := outline;
+ ColLabels[j-1] := cellstring;
+ end;
+ ColLabels[Ncols] := 'Total';
+
+ // get cell data
+ Ncases := 0;
+ if (InputGroup.ItemIndex = 0) then
+ begin // count number of cases in each row and column combination
+ for i := 1 to NoCases do
+ begin
+ if (NOT GoodRecord(i,NoSelected,ColNoSelected)) then continue;
+ Ncases := Ncases + 1;
+ Row := StrToInt(OS3MainFrm.DataGrid.Cells[RowNo,i]);
+ Col := StrToInt(OS3MainFrm.DataGrid.Cells[ColNo,i]);
+ Row := Row - MinRow + 1;
+ Col := Col - MinCol + 1;
+ Freq[Row-1,Col-1] := Freq[Row-1,Col-1] + 1;
+ end;
+ end;
+
+ if (InputGroup.ItemIndex = 1) then // read frequencies data from grid
+ begin
+ for i := 1 to NoCases do
+ begin
+ if (NOT GoodRecord(i,NoSelected,ColNoSelected)) then continue;
+ Row := StrToInt(OS3MainFrm.DataGrid.Cells[RowNo,i]);
+ Col := StrToInt(OS3MainFrm.DataGrid.Cells[ColNo,i]);
+ Row := Row - MinRow + 1;
+ Col := Col - MinCol + 1;
+ FObs := StrToInt(OS3MainFrm.DataGrid.Cells[DepNo,i]);
+ Freq[Row-1,Col-1] := Freq[Row-1,Col-1] + FObs;
+ Ncases := Ncases + FObs;
+ end;
+ end;
+ if (InputGroup.ItemIndex = 2) then // get no. of cases and proportions for each cell
+ begin
+ Ncases := StrToInt(NCasesEdit.Text);
+ for i := 1 to NoCases do
+ begin
+ if (NOT GoodRecord(i,NoSelected,ColNoSelected)) then continue;
+ Row := StrToInt(OS3MainFrm.DataGrid.Cells[RowNo,i]);
+ Col := StrToInt(OS3MainFrm.DataGrid.Cells[ColNo,i]);
+ Row := Row - MinRow + 1;
+ Col := Col - MinCol + 1;
+ PObs := StrToInt(OS3MainFrm.DataGrid.Cells[DepNo,i]);
+ Frq := round(PObs * Ncases);
+ Fval := PObs * Ncases;
+ if (Fval - Frq < 0.5) then Frq := round(Fval)
+ else Frq := ceil(Fval);
+ Freq[Row-1,Col-1] := Freq[Row-1,Col-1] + Frq;
+ end;
+ end;
+ Freq[Nrows,Ncols] := Ncases;
+
+ // Now, calculate expected values
+ // Get row totals first
+ for i := 1 to Nrows do
+ begin
+ for j := 1 to Ncols do
+ begin
+ Freq[i-1,Ncols] := Freq[i-1,Ncols] + Freq[i-1,j-1];
+ end;
+ end;
+ // Get col totals next
+ for j := 1 to Ncols do
+ begin
+ for i := 1 to Nrows do
+ begin
+ Freq[Nrows,j-1] := Freq[Nrows,j-1] + Freq[i-1,j-1];
+ end;
+ end;
+ // Then get expected values and cell chi-squares
+ ChiSquare := 0.0;
+ Adjchisqr := 0.0;
+ if ((YatesChk.Checked) and (Nrows = 2) and (Ncols = 2)) then yates := true;
+ for i := 1 to Nrows do
+ begin
+ for j := 1 to Ncols do
+ begin
+ Expected[i-1,j-1] := Freq[Nrows,j-1] * Freq[i-1,Ncols] / Ncases;
+ if (Expected[i-1,j-1] > 0.0) then
+ CellChi[i-1,j-1] := sqr(Freq[i-1,j-1] - Expected[i-1,j-1])
+ / Expected[i-1,j-1]
+ else
+ begin
+ ShowMessage('ERROR! Zero expected value found.');
+ CellChi[i-1,j-1] := 0.0;
+ end;
+ ChiSquare := ChiSquare + CellChi[i-1,j-1];
+ end;
+ end;
+ df := (Nrows - 1) * (Ncols - 1);
+ if (yates = true) then // 2 x 2 corrected chi-square
+ begin
+ Adjchisqr := abs((Freq[0,0] * Freq[1,1]) - (Freq[0,1] * Freq[1,0]));
+ Adjchisqr := sqr(Adjchisqr - Ncases / 2.0) * Ncases; // numerator
+ Adjchisqr := Adjchisqr / (Freq[0,2] * Freq[1,2] * Freq[2,0] * Freq[2,1]);
+ Adjprobchi := 1.0 - chisquaredprob(Adjchisqr,df);
+ end;
+ ProbChi := 1.0 - chisquaredprob(ChiSquare,df); // prob. larger chi
+
+ //Print results to output form
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Chi-square Analysis Results for ' + RaterAEdit.Text + ' and ' + RaterBEdit.Text);
+ outline := format('No. of Cases = %d',[Ncases]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ // print tables requested by use
+ if (ObsChk.Checked) then
+ begin
+ IntArrayPrint(Freq, Nrows+1, Ncols+1,'Frequencies',
+ RowLabels, ColLabels,'OBSERVED FREQUENCIES');
+ end;
+
+ if (ExpChk.Checked) then
+ begin
+ outline := 'EXPECTED FREQUENCIES';
+ MAT_PRINT(Expected, Nrows, Ncols, outline, RowLabels, ColLabels,
+ NoCases);
+ end;
+
+ if (PropChk.Checked) then
+ begin
+ outline := 'ROW PROPORTIONS';
+ for i := 1 to Nrows + 1 do
+ begin
+ for j := 1 to Ncols do
+ begin
+ if (Freq[i-1,Ncols] > 0.0) then
+ Prop[i-1,j-1] := Freq[i-1,j-1] / Freq[i-1,Ncols]
+ else Prop[i-1,j-1] := 0.0;
+ end;
+ if (Freq[i-1,Ncols] > 0.0) then Prop[i-1,Ncols] := 1.0
+ else Prop[i-1][Ncols] := 0.0;
+ end;
+ MAT_PRINT(Prop, Nrows+1, Ncols+1, outline, RowLabels, ColLabels,
+ NoCases);
+ outline := 'COLUMN PROPORTIONS';
+ for j := 1 to Ncols + 1 do
+ begin
+ for i := 1 to Nrows do
+ begin
+ if (Freq[Nrows,j-1] > 0.0) then
+ Prop[i-1,j-1] := Freq[i-1,j-1] / Freq[Nrows,j-1]
+ else Prop[i-1,j-1] := 0.0;
+ end;
+ if (Freq[Nrows,j-1] > 0.0) then Prop[Nrows][j-1] := 1.0
+ else Prop[Nrows,j-1] := 0.0;
+ end;
+ MAT_PRINT(Prop, Nrows+1, Ncols+1, outline, RowLabels, ColLabels,
+ NoCases);
+ outline := 'PROPORTIONS OF TOTAL N';
+ for i := 1 to Nrows + 1 do
+ for j := 1 to Ncols + 1 do Prop[i-1,j-1] := Freq[i-1,j-1] / Ncases;
+ Prop[Nrows,Ncols] := 1.0;
+ MAT_PRINT(Prop, Nrows+1, Ncols+1, outline, RowLabels, ColLabels,
+ NoCases);
+ end;
+
+ if (ChiChk.Checked) then
+ begin
+ outline := 'CHI-SQUARED VALUE FOR CELLS';
+ MAT_PRINT(CellChi, Nrows, Ncols, outline, RowLabels, ColLabels,
+ NoCases);
+ end;
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('Chi-square = %8.3f with D.F. = %d. Prob. > value = %8.3f',
+ [ChiSquare,df,ProbChi]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+ if (yates = true) then
+ begin
+ outline := format('Chi-square using Yates correction = %8.3f and Prob > value = %8.3f',
+ [Adjchisqr,Adjprobchi]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+
+ liklihood := 0.0;
+ for i := 0 to Nrows - 1 do
+ for j := 0 to Ncols - 1 do
+ liklihood := Liklihood + Freq[i,j] * (ln(Expected[i,j] / Freq[i,j]));
+ liklihood := -2.0 * liklihood;
+ probliklihood := 1.0 - chisquaredprob(liklihood,df);
+ outline := format('Liklihood Ratio = %8.3f with prob. > value = %6.4f',
+ [liklihood,probliklihood]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ phi := sqrt(ChiSquare / Ncases);
+ outline := format('phi correlation = %6.4f',[phi]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ pearsonr := 0.0;
+ SumX := 0.0;
+ SumY := 0.0;
+ VarX := 0.0;
+ VarY := 0.0;
+ for i := 0 to Nrows - 1 do SumX := SumX + ( (i+1) * Freq[i,Ncols] );
+ for j := 0 to Ncols - 1 do SumY := SumY + ( (j+1) * Freq[Nrows,j] );
+ for i := 0 to Nrows - 1 do VarX := VarX + ( ((i+1)*(i+1)) * Freq[i,Ncols] );
+ for j := 0 to Ncols - 1 do VarY := VarY + ( ((j+1)*(j+1)) * Freq[Nrows,j] );
+ VarX := VarX - ((SumX * SumX) / Ncases);
+ VarY := VarY - ((SumY * SumY) / Ncases);
+ for i := 0 to Nrows - 1 do
+ for j := 0 to Ncols - 1 do
+ pearsonr := pearsonr + ((i+1)*(j+1) * Freq[i,j]);
+ pearsonr := pearsonr - (SumX * SumY / Ncases);
+ pearsonr := pearsonr / sqrt(VarX * VarY);
+ outline := format('Pearson Correlation r = %6.4f',[pearsonr]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ MantelHaenszel := (Ncases-1) * (pearsonr * pearsonr);
+ MHprob := 1.0 - chisquaredprob(MantelHaenszel,1);
+ outline := format('Mantel-Haenszel Test of Linear Association = %8.3f with probability > value = %6.4f',
+ [MantelHaenszel, MHprob]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ CoefCont := sqrt(ChiSquare / (ChiSquare + Ncases));
+ outline := format('The coefficient of contingency = %8.3f',[CoefCont]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ if (Nrows < Ncols) then CramerV := sqrt(ChiSquare / (Ncases * ((Nrows-1))))
+ else CramerV := sqrt(ChiSquare / (Ncases * ((Ncols-1))));
+ outline := format('Cramers V = %8.3f',[CramerV]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+
+ // kappa
+ if (Nrows = Ncols) then
+ begin
+ obsdiag := 0.0;
+ expdiag := 0.0;
+ for i := 0 to Nrows - 1 do
+ begin
+ obsdiag := obsdiag + Freq[i,i];
+ expdiag := expdiag + Expected[i,i];
+ end;
+ expnondiag := Ncases - expdiag;
+ Kappa := (obsdiag - expdiag) / expnondiag;
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('Unweighted Kappa = %8.4f',[Kappa]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ // get linear weights
+ SetLength(weights,Nrows,Ncols);
+ SetLength(quadweights,Nrows,Ncols);
+ for i := 0 to Nrows - 1 do
+ begin
+ for j := 0 to Ncols - 1 do
+ begin
+ weights[i,j] := 0.0;
+ quadweights[i,j] := 0.0;
+ end;
+ end;
+ for i := 0 to Nrows - 1 do
+ begin
+ for j := 0 to Ncols - 1 do
+ begin
+ weights[i,j] := 1.0 - (abs((i-j)) / (Nrows-1));
+ quadweights[i,j] := 1.0 - ( abs((i-j)*(i-j)) / ((Nrows-1)*(Nrows-1)) );
+ end;
+ end;
+ outline := 'Observed Linear Weights';
+ MAT_PRINT(weights, Nrows, Ncols, outline, RowLabels, ColLabels, NoCases);
+ outline := 'Observed Quadratic Weights';
+ MAT_PRINT(quadweights, Nrows, Ncols, outline, RowLabels, ColLabels, NoCases);
+ OutPutFrm.RichEdit.Lines.Add('');
+ for i := 0 to Nrows - 1 do
+ begin
+ for j := 0 to Ncols - 1 do
+ begin
+ pobserved := pobserved + (Freq[i][j] / Ncases) * weights[i,j];
+ pexpected := pexpected + (Expected[i,j] / Ncases) * weights[i,j];
+ end;
+ end;
+ Kappa := (pobserved - pexpected) / (1.0 - pexpected);
+ outline := format('Linear Weighted Kappa = %8.4f',[Kappa]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ pobserved := 0.0;
+ pexpected := 0.0;
+ for i := 0 to Nrows - 1 do
+ begin
+ for j := 0 to Ncols - 1 do
+ begin
+ pobserved := pobserved + (Freq[i,j] / Ncases) * quadweights[i,j];
+ pexpected := pexpected + (Expected[i,j] / Ncases) * quadweights[i,j];
+ end;
+ end;
+ Kappa := (pobserved - pexpected) / (1.0 - pexpected);
+ outline := format('Quadratic Weighted Kappa = %8.4f',[Kappa]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ quadweights := nil;
+ weights := nil;
+ end;
+
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ // save frequency data file if elected
+ if ((SaveChk.Checked) and (InputGroup.ItemIndex = 0)) then
+ begin
+ ClearGrid;
+ for i := 1 to 3 do DictionaryFrm.NewVar(i);
+ DictionaryFrm.DictGrid.Cells[1,1] := 'ROW';
+ DictionaryFrm.DictGrid.Cells[1,2] := 'COL';
+ DictionaryFrm.DictGrid.Cells[1,3] := 'FREQ.';
+ OS3MainFrm.DataGrid.Cells[1,0] := 'ROW';
+ OS3MainFrm.DataGrid.Cells[2,0] := 'COL';
+ OS3MainFrm.DataGrid.Cells[3,0] := 'Freq.';
+ k := 1;
+ for i := 1 to Nrows do
+ begin
+ for j := 1 to Ncols do
+ begin
+ OS3MainFrm.DataGrid.RowCount := k + 1;
+ OS3MainFrm.DataGrid.Cells[1,k] := IntToStr(i);
+ OS3MainFrm.DataGrid.Cells[2,k] := IntToStr(j);
+ OS3MainFrm.DataGrid.Cells[3,k] := IntToStr(Freq[i-1,j-1]);
+ k := k + 1;
+ end;
+ end;
+ for i := 1 to k - 1 do
+ begin
+ title := 'CASE ' + IntToStr(i);
+ OS3MainFrm.DataGrid.Cells[0,i] := title;
+ end;
+ title := InputBox('FILE:','File Name:','Frequencies.LAZ');
+ OS3MainFrm.FileNameEdit.Text := title;
+ OS3MainFrm.NoVarsEdit.Text := IntToStr(3);
+ OS3MainFrm.NoCasesEdit.Text := IntToStr(k-1);
+ NoVariables := 3;
+ NoCases := k-1;
+ SaveOS2File;
+ end;
+
+ //clean up
+ ColLabels := nil;
+ RowLabels := nil;
+ CellChi := nil;
+ Expected := nil;
+ Prop := nil;
+ Freq := nil;
+ ColNoSelected := nil;
+end;
+
+procedure TWeightedKappaFrm.DepInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ DepEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ DepIn.Visible := false;
+ DepOut.Visible := true;
+end;
+
+procedure TWeightedKappaFrm.DepOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(DepEdit.Text);
+ DepEdit.Text := '';
+ DepIn.Visible := true;
+ DepOut.Visible := false;
+end;
+
+initialization
+ {$I kappaunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/kendalltauunit.lfm b/applications/lazstats/source_orig/kendalltauunit.lfm
new file mode 100644
index 000000000..189763d52
--- /dev/null
+++ b/applications/lazstats/source_orig/kendalltauunit.lfm
@@ -0,0 +1,398 @@
+object KendallTauFrm: TKendallTauFrm
+ Left = 132
+ Height = 348
+ Top = 97
+ Width = 352
+ Caption = 'Kendall Rank Correlation Tau and Partial Tau'
+ ClientHeight = 348
+ ClientWidth = 352
+ OnShow = FormShow
+ LCLVersion = '0.9.26.2'
+ object Label1: TLabel
+ Left = 5
+ Height = 14
+ Top = 5
+ Width = 90
+ Caption = 'Variables Available'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 214
+ Height = 14
+ Top = 25
+ Width = 48
+ Caption = 'X Variable'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 217
+ Height = 14
+ Top = 105
+ Width = 48
+ Caption = 'Y Variable'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 216
+ Height = 14
+ Top = 184
+ Width = 48
+ Caption = 'Z Variable'
+ ParentColor = False
+ end
+ object VarList: TListBox
+ Left = 6
+ Height = 254
+ Top = 21
+ Width = 160
+ TabOrder = 0
+ end
+ object XIn: TBitBtn
+ Left = 176
+ Height = 28
+ Top = 22
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = XInClick
+ TabOrder = 1
+ end
+ object XOut: TBitBtn
+ Left = 176
+ Height = 28
+ Top = 56
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = XOutClick
+ TabOrder = 2
+ end
+ object YIn: TBitBtn
+ Left = 176
+ Height = 28
+ Top = 104
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = YInClick
+ TabOrder = 3
+ end
+ object YOut: TBitBtn
+ Left = 175
+ Height = 28
+ Top = 136
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = YOutClick
+ TabOrder = 4
+ end
+ object ZIn: TBitBtn
+ Left = 176
+ Height = 28
+ Top = 184
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = ZInClick
+ TabOrder = 5
+ end
+ object ZOut: TBitBtn
+ Left = 176
+ Height = 28
+ Top = 216
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = ZOutClick
+ TabOrder = 6
+ end
+ object XEdit: TEdit
+ Left = 213
+ Height = 18
+ Top = 39
+ Width = 120
+ TabOrder = 7
+ Text = 'XEdit'
+ end
+ object YEdit: TEdit
+ Left = 217
+ Height = 18
+ Top = 120
+ Width = 120
+ TabOrder = 8
+ Text = 'Edit1'
+ end
+ object ZEdit: TEdit
+ Left = 216
+ Height = 18
+ Top = 200
+ Width = 120
+ TabOrder = 9
+ Text = 'Edit1'
+ end
+ object GroupBox1: TGroupBox
+ Left = 6
+ Height = 46
+ Top = 287
+ Width = 161
+ Caption = 'Options:'
+ ClientHeight = 28
+ ClientWidth = 157
+ TabOrder = 10
+ object RanksChk: TCheckBox
+ Left = 8
+ Height = 17
+ Top = 3
+ Width = 124
+ Caption = 'Show Ranked Scores'
+ TabOrder = 0
+ end
+ end
+ object ResetBtn: TButton
+ Left = 174
+ Height = 26
+ Top = 254
+ Width = 65
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 11
+ end
+ object CancelBtn: TButton
+ Left = 268
+ Height = 26
+ Top = 254
+ Width = 65
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 12
+ end
+ object ComputeBtn: TButton
+ Left = 176
+ Height = 26
+ Top = 307
+ Width = 65
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 13
+ end
+ object ReturnBtn: TButton
+ Left = 268
+ Height = 26
+ Top = 307
+ Width = 65
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 14
+ end
+end
diff --git a/applications/lazstats/source_orig/kendalltauunit.lrs b/applications/lazstats/source_orig/kendalltauunit.lrs
new file mode 100644
index 000000000..56187060b
--- /dev/null
+++ b/applications/lazstats/source_orig/kendalltauunit.lrs
@@ -0,0 +1,341 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TKendallTauFrm','FORMDATA',[
+ 'TPF0'#14'TKendallTauFrm'#13'KendallTauFrm'#4'Left'#3#132#0#6'Height'#3'\'#1#3
+ +'Top'#2'a'#5'Width'#3'`'#1#7'Caption'#6',Kendall Rank Correlation Tau and Pa'
+ +'rtial Tau'#12'ClientHeight'#3'\'#1#11'ClientWidth'#3'`'#1#6'OnShow'#7#8'For'
+ +'mShow'#10'LCLVersion'#6#8'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#5#6'Hei'
+ +'ght'#2#14#3'Top'#2#5#5'Width'#2'Z'#7'Caption'#6#19'Variables Available'#11
+ +'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#214#0#6'Height'#2#14#3'Top'
+ +#2#25#5'Width'#2'0'#7'Caption'#6#10'X Variable'#11'ParentColor'#8#0#0#6'TLab'
+ +'el'#6'Label3'#4'Left'#3#217#0#6'Height'#2#14#3'Top'#2'i'#5'Width'#2'0'#7'Ca'
+ +'ption'#6#10'Y Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3
+ +#216#0#6'Height'#2#14#3'Top'#3#184#0#5'Width'#2'0'#7'Caption'#6#10'Z Variabl'
+ +'e'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#6#6'Height'#3#254
+ +#0#3'Top'#2#21#5'Width'#3#160#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#3'XIn'#4'Left'
+ +#3#176#0#6'Height'#2#28#3'Top'#2#22#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0
+ +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0
+ +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'
+ +#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255
+ +#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211
+ +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130
+ +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'
+ +#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'
+ +#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255
+ +'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161
+ +'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#8'XInClick'#8'TabOrder'#2
+ +#1#0#0#7'TBitBtn'#4'XOut'#4'Left'#3#176#0#6'Height'#2#28#3'Top'#2'8'#5'Width'
+ ,#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0
+ +#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255
+ +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%'
+ +'i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200
+ +#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139
+ +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'
+ +#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201
+ +''#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159
+ +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197
+ +#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'
+ +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'
+ +#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#9'X'
+ +'OutClick'#8'TabOrder'#2#2#0#0#7'TBitBtn'#3'YIn'#4'Left'#3#176#0#6'Height'#2
+ +#28#3'Top'#2'h'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0
+ +#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0
+ +#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'
+ +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'
+ +#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0
+ +'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157
+ +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195
+ +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0
+ +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255
+ +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144
+ +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201
+ +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#9'NumGlyphs'#2#0#7'OnClick'#7#8'YInClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#4
+ +'YOut'#4'Left'#3#175#0#6'Height'#2#28#3'Top'#3#136#0#5'Width'#2' '#10'Glyph.'
+ +'Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16
+ +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255
+ +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'
+ +#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156
+ +#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255
+ +#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255
+ ,'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138
+ +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207
+ +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'
+ +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'
+ +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#9'YOutClick'#8'Ta'
+ +'bOrder'#2#4#0#0#7'TBitBtn'#3'ZIn'#4'Left'#3#176#0#6'Height'#2#28#3'Top'#3
+ +#184#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0
+ +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0
+ +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'
+ +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'
+ +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195
+ +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144
+ +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255
+ +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255
+ +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212
+ +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133
+ +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255
+ +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255
+ +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145
+ +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp'
+ +'hs'#2#0#7'OnClick'#7#8'ZInClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#4'ZOut'#4'L'
+ +'eft'#3#176#0#6'Height'#2#28#3'Top'#3#216#0#5'Width'#2' '#10'Glyph.Data'#10
+ +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0
+ +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255
+ +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213
+ +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135
+ +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'
+ +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255
+ +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154
+ +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194
+ +#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'
+ +#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169
+ +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255
+ +'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'
+ +#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199
+ +'t'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#9'ZOutClick'#8'TabOrd'
+ ,'er'#2#6#0#0#5'TEdit'#5'XEdit'#4'Left'#3#213#0#6'Height'#2#18#3'Top'#2''''#5
+ +'Width'#2'x'#8'TabOrder'#2#7#4'Text'#6#5'XEdit'#0#0#5'TEdit'#5'YEdit'#4'Left'
+ +#3#217#0#6'Height'#2#18#3'Top'#2'x'#5'Width'#2'x'#8'TabOrder'#2#8#4'Text'#6#5
+ +'Edit1'#0#0#5'TEdit'#5'ZEdit'#4'Left'#3#216#0#6'Height'#2#18#3'Top'#3#200#0#5
+ +'Width'#2'x'#8'TabOrder'#2#9#4'Text'#6#5'Edit1'#0#0#9'TGroupBox'#9'GroupBox1'
+ +#4'Left'#2#6#6'Height'#2'.'#3'Top'#3#31#1#5'Width'#3#161#0#7'Caption'#6#8'Op'
+ +'tions:'#12'ClientHeight'#2#28#11'ClientWidth'#3#157#0#8'TabOrder'#2#10#0#9
+ +'TCheckBox'#8'RanksChk'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#3#5'Width'#2'|'#7
+ +'Caption'#6#18'Show Ranked Scores'#8'TabOrder'#2#0#0#0#0#7'TButton'#8'ResetB'
+ +'tn'#4'Left'#3#174#0#6'Height'#2#26#3'Top'#3#254#0#5'Width'#2'A'#7'Caption'#6
+ +#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#11#0#0#7'TButton'#9'C'
+ +'ancelBtn'#4'Left'#3#12#1#6'Height'#2#26#3'Top'#3#254#0#5'Width'#2'A'#7'Capt'
+ +'ion'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#12#0#0#7'TButton'#10'Com'
+ +'puteBtn'#4'Left'#3#176#0#6'Height'#2#26#3'Top'#3'3'#1#5'Width'#2'A'#7'Capti'
+ +'on'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#13#0#0#7'TB'
+ +'utton'#9'ReturnBtn'#4'Left'#3#12#1#6'Height'#2#26#3'Top'#3'3'#1#5'Width'#2
+ +'A'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#14#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/kendalltauunit.pas b/applications/lazstats/source_orig/kendalltauunit.pas
new file mode 100644
index 000000000..0f33d0464
--- /dev/null
+++ b/applications/lazstats/source_orig/kendalltauunit.pas
@@ -0,0 +1,554 @@
+unit KendallTauUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, MainUnit, OutPutUnit, FunctionsLib, Globals,
+ DataProcs, Math, MatrixLib;
+
+type
+
+ { TKendallTauFrm }
+
+ TKendallTauFrm = class(TForm)
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ RanksChk: TCheckBox;
+ GroupBox1: TGroupBox;
+ XEdit: TEdit;
+ YEdit: TEdit;
+ ZEdit: TEdit;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ XIn: TBitBtn;
+ XOut: TBitBtn;
+ YIn: TBitBtn;
+ YOut: TBitBtn;
+ ZIn: TBitBtn;
+ ZOut: TBitBtn;
+ Label1: TLabel;
+ VarList: TListBox;
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure XInClick(Sender: TObject);
+ procedure XOutClick(Sender: TObject);
+ procedure YInClick(Sender: TObject);
+ procedure YOutClick(Sender: TObject);
+ procedure ZInClick(Sender: TObject);
+ procedure ZOutClick(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ KendallTauFrm: TKendallTauFrm;
+
+implementation
+
+{ TKendallTauFrm }
+
+procedure TKendallTauFrm.ResetBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ XEdit.Text := '';
+ YEdit.Text := '';
+ ZEdit.Text := '';
+ Xin.Visible := true;
+ Xout.Visible := false;
+ Yin.Visible := true;
+ Yout.Visible := false;
+ Zin.Visible := true;
+ Zout.Visible := false;
+ RanksChk.Checked := false;
+ VarList.Items.Clear;
+ for i := 1 to NoVariables do
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+end;
+
+procedure TKendallTauFrm.XInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ XEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ Xin.Visible := false;
+ Xout.Visible := true;
+end;
+
+procedure TKendallTauFrm.XOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(XEdit.Text);
+ XEdit.Text := '';
+ Xin.Visible := true;
+ Xout.Visible := false;
+end;
+
+procedure TKendallTauFrm.YInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ YEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ Yin.Visible := false;
+ Yout.Visible := true;
+end;
+
+procedure TKendallTauFrm.YOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(YEdit.Text);
+ YEdit.Text := '';
+ Yin.Visible := true;
+ Yout.Visible := false;
+end;
+
+procedure TKendallTauFrm.ZInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ ZEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ Zin.Visible := false;
+ Zout.Visible := true;
+end;
+
+procedure TKendallTauFrm.ZOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(YEdit.Text);
+ ZEdit.Text := '';
+ Zin.Visible := true;
+ Zout.Visible := false;
+end;
+
+procedure TKendallTauFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(self);
+end;
+
+procedure TKendallTauFrm.ComputeBtnClick(Sender: TObject);
+label Check1, Check2, Check3;
+var
+ i, j, k, itemp, NoTies, NoTieGroups, NoSelected : integer;
+ col1, col2, col3, NCases : integer;
+ index : IntDyneMat;
+ Probability, Temp, TieSum, Avg, t, SumT, r : double;
+ z, denominator, df, stddev : double;
+ Ranks, X : DblDyneMat;
+ cellstring, outline : string;
+ ColNoSelected : IntdyneVec;
+ ColLabels : StrDyneVec;
+ RowLabels : StrDyneVec;
+ TauXY, TauXZ, TauYZ : double;
+ TiesX, TiesY, TiesZ : integer;
+ Tx, Ty, Tz : double;
+ Term1, Term2 : double;
+ PartialTau : double;
+ title : string;
+begin
+ // Allocate memory
+ SetLength(index,NoCases,3);
+ SetLength(Ranks,NoCases,3);
+ SetLength(X,NoCases,3);
+ SetLength(ColLabels,3);
+ SetLength(RowLabels,NoCases);
+ SetLength(ColNoSelected,NoVariables);
+ Tx := 0.0;
+ Ty := 0.0;
+ Tz := 0.0;
+
+ // Get column numbers and labels of variables selected
+ NoSelected := 0;
+ for j := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[j,0];
+ if cellstring = Xedit.Text then
+ begin
+ ColNoSelected[0] := j;
+ ColLabels[0] := cellstring;
+ NoSelected := NoSelected + 1;
+ end;
+ if cellstring = Yedit.Text then
+ begin
+ ColNoSelected[1] := j;
+ ColLabels[1] := cellstring;
+ NoSelected := NoSelected + 1;
+ end;
+ if cellstring = Zedit.Text then
+ begin
+ ColNoSelected[2] := j;
+ ColLabels[2] := cellstring;
+ NoSelected := NoSelected + 1;
+ end;
+ end;
+
+ // Get scores
+ NCases := 0;
+ for i := 1 to NoCases do
+ begin
+ if ( not GoodRecord(i,NoSelected,ColNoSelected)) then continue;
+ NCases := NCases + 1;
+ col1 := ColNoSelected[0];
+ col2 := ColNoSelected[1];
+ if NoSelected = 3 then col3 := ColNoSelected[2];
+ X[NCases-1,0] := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col1,i]));
+ Ranks[NCases-1,0] := X[NCases-1,0];
+ X[NCases-1,1] := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col2,i]));
+ Ranks[NCases-1,1] := X[NCases-1,1];
+ if NoSelected = 3 then
+ begin
+ X[NCases-1,2] := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col3,i]));
+ Ranks[NCases-1,2] := X[NCases-1,2];
+ end;
+ index[NCases-1,0] := NCases;
+ index[NCases-1,1] := NCases;
+ if NoSelected = 3 then index[NCases-1,2] := NCases;
+ end;
+
+ for i := 0 to NCases - 1 do RowLabels[i] := IntToStr(i+1);
+ // Rank the first variable (X)
+ for i := 0 to NCases - 2 do
+ begin
+ for j := i + 1 to NCases-1 do
+ begin
+ if (Ranks[i,0] > Ranks[j,0]) then // swap
+ begin
+ Temp := Ranks[i,0];
+ Ranks[i,0] := Ranks[j,0];
+ Ranks[j,0] := Temp;
+ itemp := index[i,0];
+ index[i,0] := index[j,0];
+ index[j,0] := itemp;
+ end;
+ end;
+ end;
+
+ // Assign ranks
+ for i := 0 to NCases-1 do Ranks[i,0] := i+1;
+
+ // Check for ties in each
+ i := 1;
+ while (i < NCases) do
+ begin
+ j := i+1;
+ TieSum := 0.0;
+ NoTies := 0;
+ while (j <= NCases) do
+ begin
+ if (X[j-1,0] > X[i-1,0]) then goto Check1;
+ if (X[j-1,0] = X[i-1,0]) then
+ begin
+ TieSum := TieSum + Ranks[j-1,0];
+ NoTies := NoTies + 1;
+ end;
+ j := j + 1;
+ end;
+Check1:
+ if (NoTies > 0) then // at least one tie found
+ begin
+ TieSum := TieSum + Ranks[i-1,0];
+ NoTies := NoTies + 1;
+ Avg := TieSum / NoTies;
+ for j := i to i + NoTies - 1 do Ranks[j-1,0] := Avg;
+ i := i + (NoTies-1);
+ Tx := Tx + NoTies *(NoTies-1);
+ end;
+ i := i + 1;
+ end;
+ Tx := Tx / 2.0;
+
+ // Repeat sort for second variable Y
+ for i := 0 to NCases - 2 do
+ begin
+ for j := i + 1 to NCases-1 do
+ begin
+ if (Ranks[i,1] > Ranks[j,1]) then // swap
+ begin
+ Temp := Ranks[i,1];
+ Ranks[i,1] := Ranks[j,1];
+ Ranks[j,1] := Temp;
+ itemp := index[i,1];
+ index[i,1] := index[j,1];
+ index[j,1] := itemp;
+ end;
+ end;
+ end;
+
+ // Assign ranks
+ for i := 0 to NCases-1 do Ranks[i,1] := i+1;
+
+ // Check for ties in each
+ i := 1;
+ while (i < NCases) do
+ begin
+ j := i+1;
+ TieSum := 0.0;
+ NoTies := 0;
+ while (j <= NoCases) do
+ begin
+ if (X[j-1,1] > X[i-1,1]) then goto Check2;
+ if (X[j-1,1] = X[i-1,1]) then
+ begin
+ TieSum := TieSum + Ranks[j-1,1];
+ NoTies := NoTies + 1;
+ end;
+ j := j + 1;
+ end;
+Check2:
+ if (NoTies > 0) then // at least one tie found
+ begin
+ TieSum := TieSum + Ranks[i-1,1];
+ NoTies := NoTies + 1;
+ Avg := TieSum / NoTies;
+ for j := i to i + NoTies - 1 do Ranks[j-1,1] := Avg;
+ i := i + (NoTies-1);
+ Ty := Ty + NoTies * (NoTies - 1);
+ end;
+ i := i + 1;
+ end;
+ Ty := Ty / 2.0;
+
+ // Repeat for z variable
+ if NoSelected > 2 then // z was entered
+ begin
+ for i := 0 to NCases - 2 do
+ begin
+ for j := i + 1 to NCases-1 do
+ begin
+ if (Ranks[i,2] > Ranks[j,2]) then // swap
+ begin
+ Temp := Ranks[i,2];
+ Ranks[i,2] := Ranks[j,2];
+ Ranks[j,2] := Temp;
+ itemp := index[i,2];
+ index[i,2] := index[j,2];
+ index[j,2] := itemp;
+ end;
+ end;
+ end;
+
+ // Assign ranks
+ for i := 0 to NCases-1 do Ranks[i,2] := i+1;
+
+ // Check for ties in each
+ i := 1;
+ while (i < NCases) do
+ begin
+ j := i+1;
+ TieSum := 0.0;
+ NoTies := 0;
+ while (j <= NoCases) do
+ begin
+ if (X[j-1,2] > X[i-1,2]) then goto Check3;
+ if (X[j-1,2] = X[i-1,2]) then
+ begin
+ TieSum := TieSum + Ranks[j-1,2];
+ NoTies := NoTies + 1;
+ end;
+ j := j + 1;
+ end;
+Check3:
+ if (NoTies > 0) then // at least one tie found
+ begin
+ TieSum := TieSum + Ranks[i-1,2];
+ NoTies := NoTies + 1;
+ Avg := TieSum / NoTies;
+ for j := i to i + NoTies - 1 do Ranks[j-1,2] := Avg;
+ i := i + (NoTies-1);
+ Tz := Tz + NoTies * (NoTies - 1);
+ end;
+ i := i + 1;
+ end;
+ Tz := Tz / 2.0;
+ end;
+
+ // Rearrange ranks into original score order
+ for k := 1 to 3 do
+ begin
+ for i := 1 to NCases - 1 do
+ begin
+ for j := i + 1 to NCases do
+ begin
+ if (index[i-1,k-1] > index[j-1,k-1]) then // swap
+ begin
+ itemp := index[i-1,k-1];
+ index[i-1,k-1] := index[j-1,k-1];
+ index[j-1,k-1] := itemp;
+ Temp := Ranks[i-1,k-1];
+ Ranks[i-1,k-1] := Ranks[j-1,k-1];
+ Ranks[j-1,k-1] := Temp;
+ end;
+ end;
+ end;
+ end;
+
+ // print data matrix if option is elected
+ if RanksChk.Checked then
+ begin
+ title := 'Ranks';
+ if NoSelected = 2 then
+ MAT_PRINT(Ranks,NCases,2,title,RowLabels,ColLabels,NCases)
+ else
+ MAT_PRINT(Ranks,NCases,3,title,RowLabels,ColLabels,NCases);
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+ end;
+
+ // compute Tau for X and Y
+ // sort on X and obtain SumT for Y ranks
+ SumT := 0.0;
+ for i := 0 to NCases - 2 do
+ begin
+ for j := i + 1 to NCases-1 do
+ begin
+ if (Ranks[i,0] > Ranks[j,0]) then // swap
+ begin
+ Temp := Ranks[i,0];
+ Ranks[i,0] := Ranks[j,0];
+ Ranks[j,0] := Temp;
+ Temp := Ranks[i,1];
+ Ranks[i,1] := Ranks[j,1];
+ Ranks[j,1] := Temp;
+ if NoSelected = 3 then
+ begin
+ Temp := Ranks[i,2];
+ Ranks[i,2] := Ranks[j,2];
+ Ranks[j,2] := Temp;
+ end;
+ itemp := index[i,0];
+ index[i,0] := index[j,0];
+ index[j,0] := itemp;
+ end;
+ end;
+ end;
+ for i := 0 to NCases - 2 do
+ for j := i + 1 to NCases - 1 do
+ if Ranks[i,1] < Ranks[j,1] then SumT := SumT + 1.0
+ else if Ranks[i,1] > Ranks[j,1] then SumT := SumT - 1.0;
+ Term1 := sqrt((NCases * (NCases-1)) / 2.0 - Tx);
+ Term2 := sqrt((NCases * (Ncases-1)) / 2.0 - Ty);
+ denominator := Term1 * Term2;
+ TauXY := SumT / denominator;
+
+ if NoSelected > 2 then // get tau values for partial
+ begin
+ // Get TauXZ
+ SumT := 0.0;
+ for i := 0 to NCases - 2 do
+ for j := i + 1 to NCases - 1 do
+ if Ranks[i,2] < Ranks[j,2] then SumT := SumT + 1.0
+ else if Ranks[i,2] > Ranks[j,2] then SumT := SumT - 1.0;
+ Term1 := sqrt((NCases * (NCases-1)) / 2.0 - Tx);
+ Term2 := sqrt((NCases * (Ncases-1)) / 2.0 - Tz);
+ denominator := Term1 * Term2;
+ TauXZ := SumT / denominator;
+
+ // get back to original order then sort on Y
+ for i := 0 to NCases - 2 do
+ begin
+ for j := i + 1 to NCases - 1 do
+ begin
+ if index[i,0] > index[j,0] then // swap
+ begin
+ Temp := Ranks[i,0];
+ Ranks[i,0] := Ranks[j,0];
+ Ranks[j,0] := temp;
+ Temp := Ranks[i,1];
+ Ranks[i,1] := Ranks[j,1];
+ Ranks[j,1] := Temp;
+ Temp := Ranks[i,2];
+ Ranks[i,2] := Ranks[j,2];
+ Ranks[j,2] := Temp;
+ itemp := index[i,0];
+ index[i,0] := index[j,0];
+ index[j,0] := itemp;
+ end;
+ end;
+ end;
+
+ // Get TauYZ
+ for i := 0 to NCases - 2 do // sort on Y variable
+ begin
+ for j := i + 1 to NCases-1 do
+ begin
+ if (Ranks[i,1] > Ranks[j,1]) then // swap
+ begin
+ Temp := Ranks[i,1];
+ Ranks[i,1] := Ranks[j,1];
+ Ranks[j,1] := Temp;
+ Temp := Ranks[i,2];
+ Ranks[i,2] := Ranks[j,2];
+ Ranks[j,2] := Temp;
+ itemp := index[i,1];
+ index[i,1] := index[j,1];
+ index[j,1] := itemp;
+ end;
+ end;
+ end;
+
+ SumT := 0.0;
+ for i := 0 to NCases - 2 do
+ for j := i + 1 to NCases - 1 do
+ if Ranks[i,2] < Ranks[j,2] then SumT := SumT + 1.0
+ else if Ranks[i,2] > Ranks[j,2] then SumT := SumT - 1.0;
+ Term1 := sqrt((NCases * (NCases-1)) / 2.0 - Ty);
+ Term2 := sqrt((NCases * (Ncases-1)) / 2.0 - Tz);
+ denominator := Term1 * Term2;
+ TauYZ := SumT / denominator;
+ PartialTau := (TauXY - TauXZ * TauYZ) /
+ (sqrt(1.0 - sqr(TauXZ)) * sqrt(1.0 - sqr(TauYZ)));
+ end;
+
+ // do significance tests
+ stddev := sqrt( (2.0 * ( 2.0 * NCases + 5)) / (9.0 * NCases * (NCases - 1.0)));
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Kendall Tau for File: ' + OS3MainFrm.FileNameEdit.Text);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Kendall Tau for variables ' + ColLabels[0] + ' and ' + ColLabels[1]);
+ z := abs(TauXY / stddev);
+ probability := 1.0 - probz(z);
+ outline := format('Tau = %8.4f z = %8.3f probability > |z| = %4.3f',[TauXY,z,probability]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ if NoSelected > 2 then
+ begin
+ OutPutFrm.RichEdit.Lines.Add('');
+ z := abs(TauXZ / stddev);
+ probability := 1.0 - probz(z);
+ OutPutFrm.RichEdit.Lines.Add('Kendall Tau for variables ' + ColLabels[0] + ' and ' + ColLabels[2]);
+ outline := format('Tau = %8.4f z = %8.3f probability > |z| = %4.3f',[TauXZ,z,probability]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ z := abs(TauYZ / stddev);
+ probability := 1.0 - probz(z);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Kendall Tau for variables ' + ColLabels[1] + ' and ' + ColLabels[2]);
+ outline := format('Tau = %8.4f z = %8.3f probability > |z| = %4.3f',[TauYZ,z,probability]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('Partial Tau = %8.4f',[PartialTau]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('NOTE: Probabilities are for large N (>10)');
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ ColNoSelected := nil;
+ RowLabels := nil;
+ ColLabels := nil;
+ X := nil;
+ Ranks := nil;
+ index := nil;
+end;
+
+initialization
+ {$I kendalltauunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/kmeansunit.lfm b/applications/lazstats/source_orig/kmeansunit.lfm
new file mode 100644
index 000000000..d3b49a77f
--- /dev/null
+++ b/applications/lazstats/source_orig/kmeansunit.lfm
@@ -0,0 +1,253 @@
+object kmeansfrm: Tkmeansfrm
+ Left = 157
+ Height = 398
+ Top = 115
+ Width = 443
+ Caption = 'k Means Clustering '
+ ClientHeight = 398
+ ClientWidth = 443
+ OnShow = FormShow
+ LCLVersion = '0.9.28.2'
+ object Label1: TLabel
+ Left = 9
+ Height = 14
+ Top = 8
+ Width = 112
+ Caption = 'No. of Desired Clusters'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 9
+ Height = 14
+ Top = 40
+ Width = 81
+ Caption = 'No. of Iterations'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 9
+ Height = 14
+ Top = 112
+ Width = 90
+ Caption = 'Available Variables'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 249
+ Height = 14
+ Top = 112
+ Width = 88
+ Caption = 'Selected Variables'
+ ParentColor = False
+ end
+ object NoClustersEdit: TEdit
+ Left = 130
+ Height = 21
+ Top = 1
+ Width = 54
+ TabOrder = 0
+ Text = 'NoClustersEdit'
+ end
+ object ItersEdit: TEdit
+ Left = 129
+ Height = 21
+ Top = 33
+ Width = 55
+ TabOrder = 1
+ Text = 'ItersEdit'
+ end
+ object GroupBox1: TGroupBox
+ Left = 262
+ Height = 101
+ Top = 1
+ Width = 160
+ Caption = 'Analysis Optons'
+ ClientHeight = 83
+ ClientWidth = 156
+ TabOrder = 2
+ object StdChkBox: TCheckBox
+ Left = 7
+ Height = 17
+ Top = 5
+ Width = 123
+ Caption = 'Standardize Variables'
+ TabOrder = 0
+ end
+ object RepChkBox: TCheckBox
+ Left = 25
+ Height = 17
+ Top = 31
+ Width = 114
+ Caption = 'Replace Grid Values'
+ TabOrder = 1
+ end
+ object DescChkBox: TCheckBox
+ Left = 10
+ Height = 17
+ Top = 57
+ Width = 119
+ Caption = 'Descriptive Statistics'
+ TabOrder = 2
+ end
+ end
+ object VarList: TListBox
+ Left = 7
+ Height = 208
+ Top = 128
+ Width = 176
+ ItemHeight = 0
+ MultiSelect = True
+ TabOrder = 3
+ end
+ object VarInBtn: TBitBtn
+ Left = 192
+ Height = 34
+ Top = 128
+ Width = 45
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = VarInBtnClick
+ TabOrder = 4
+ end
+ object VarOutBtn: TBitBtn
+ Left = 192
+ Height = 34
+ Top = 168
+ Width = 45
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ OnClick = VarOutBtnClick
+ TabOrder = 5
+ end
+ object AllBtn: TBitBtn
+ Left = 192
+ Height = 34
+ Top = 224
+ Width = 45
+ Caption = 'ALL'
+ OnClick = AllBtnClick
+ TabOrder = 6
+ end
+ object ListBox1: TListBox
+ Left = 248
+ Height = 208
+ Top = 128
+ Width = 174
+ ItemHeight = 0
+ TabOrder = 7
+ end
+ object ResetBtn: TButton
+ Left = 96
+ Height = 28
+ Top = 352
+ Width = 75
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 8
+ end
+ object CancelBtn: TButton
+ Left = 184
+ Height = 28
+ Top = 352
+ Width = 75
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 9
+ end
+ object ComputeBtn: TButton
+ Left = 264
+ Height = 28
+ Top = 352
+ Width = 75
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 10
+ end
+ object ReturnBtn: TButton
+ Left = 347
+ Height = 28
+ Top = 352
+ Width = 75
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 11
+ end
+ object HelpBtn: TButton
+ Tag = 129
+ Left = 9
+ Height = 28
+ Top = 352
+ Width = 81
+ Caption = 'Help'
+ OnClick = HelpBtnClick
+ TabOrder = 12
+ end
+end
diff --git a/applications/lazstats/source_orig/kmeansunit.lrs b/applications/lazstats/source_orig/kmeansunit.lrs
new file mode 100644
index 000000000..6b1e4344b
--- /dev/null
+++ b/applications/lazstats/source_orig/kmeansunit.lrs
@@ -0,0 +1,144 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('Tkmeansfrm','FORMDATA',[
+ 'TPF0'#10'Tkmeansfrm'#9'kmeansfrm'#4'Left'#3#157#0#6'Height'#3#142#1#3'Top'#2
+ +'s'#5'Width'#3#187#1#7'Caption'#6#19'k Means Clustering '#12'ClientHeight'#3
+ +#142#1#11'ClientWidth'#3#187#1#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.'
+ +'9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Height'#2#14#3'Top'#2#8#5'Width'
+ +#2'p'#7'Caption'#6#23'No. of Desired Clusters'#11'ParentColor'#8#0#0#6'TLabe'
+ +'l'#6'Label2'#4'Left'#2#9#6'Height'#2#14#3'Top'#2'('#5'Width'#2'Q'#7'Caption'
+ +#6#17'No. of Iterations'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2
+ +#9#6'Height'#2#14#3'Top'#2'p'#5'Width'#2'Z'#7'Caption'#6#19'Available Variab'
+ +'les'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#249#0#6'Height'#2
+ +#14#3'Top'#2'p'#5'Width'#2'X'#7'Caption'#6#18'Selected Variables'#11'ParentC'
+ +'olor'#8#0#0#5'TEdit'#14'NoClustersEdit'#4'Left'#3#130#0#6'Height'#2#21#3'To'
+ +'p'#2#1#5'Width'#2'6'#8'TabOrder'#2#0#4'Text'#6#14'NoClustersEdit'#0#0#5'TEd'
+ +'it'#9'ItersEdit'#4'Left'#3#129#0#6'Height'#2#21#3'Top'#2'!'#5'Width'#2'7'#8
+ +'TabOrder'#2#1#4'Text'#6#9'ItersEdit'#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3
+ +#6#1#6'Height'#2'e'#3'Top'#2#1#5'Width'#3#160#0#7'Caption'#6#15'Analysis Opt'
+ +'ons'#12'ClientHeight'#2'S'#11'ClientWidth'#3#156#0#8'TabOrder'#2#2#0#9'TChe'
+ +'ckBox'#9'StdChkBox'#4'Left'#2#7#6'Height'#2#17#3'Top'#2#5#5'Width'#2'{'#7'C'
+ +'aption'#6#21'Standardize Variables'#8'TabOrder'#2#0#0#0#9'TCheckBox'#9'RepC'
+ +'hkBox'#4'Left'#2#25#6'Height'#2#17#3'Top'#2#31#5'Width'#2'r'#7'Caption'#6#19
+ +'Replace Grid Values'#8'TabOrder'#2#1#0#0#9'TCheckBox'#10'DescChkBox'#4'Left'
+ +#2#10#6'Height'#2#17#3'Top'#2'9'#5'Width'#2'w'#7'Caption'#6#22'Descriptive S'
+ +'tatistics'#8'TabOrder'#2#2#0#0#0#8'TListBox'#7'VarList'#4'Left'#2#7#6'Heigh'
+ +'t'#3#208#0#3'Top'#3#128#0#5'Width'#3#176#0#10'ItemHeight'#2#0#11'MultiSelec'
+ +'t'#9#8'TabOrder'#2#3#0#0#7'TBitBtn'#8'VarInBtn'#4'Left'#3#192#0#6'Height'#2
+ +'"'#3'Top'#3#128#0#5'Width'#2'-'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0
+ +#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0
+ +#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161
+ +'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255
+ +'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255
+ +#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157
+ +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195
+ +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0
+ +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255
+ +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144
+ +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201
+ +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#7'OnClick'#7#13'VarInBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#9'VarOutBtn'#4
+ +'Left'#3#192#0#6'Height'#2'"'#3'Top'#3#168#0#5'Width'#2'-'#10'Glyph.Data'#10
+ +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0
+ +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255
+ +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213
+ +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135
+ +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'
+ +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138
+ +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207
+ +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'
+ +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'
+ +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#7'OnClick'#7#14'VarOutBtnClick'#8'TabOrder'#2#5
+ +#0#0#7'TBitBtn'#6'AllBtn'#4'Left'#3#192#0#6'Height'#2'"'#3'Top'#3#224#0#5'Wi'
+ +'dth'#2'-'#7'Caption'#6#3'ALL'#7'OnClick'#7#11'AllBtnClick'#8'TabOrder'#2#6#0
+ ,#0#8'TListBox'#8'ListBox1'#4'Left'#3#248#0#6'Height'#3#208#0#3'Top'#3#128#0#5
+ +'Width'#3#174#0#10'ItemHeight'#2#0#8'TabOrder'#2#7#0#0#7'TButton'#8'ResetBtn'
+ +#4'Left'#2'`'#6'Height'#2#28#3'Top'#3'`'#1#5'Width'#2'K'#7'Caption'#6#5'Rese'
+ +'t'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#8#0#0#7'TButton'#9'CancelBt'
+ +'n'#4'Left'#3#184#0#6'Height'#2#28#3'Top'#3'`'#1#5'Width'#2'K'#7'Caption'#6#6
+ +'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#9#0#0#7'TButton'#10'ComputeBtn'#4
+ +'Left'#3#8#1#6'Height'#2#28#3'Top'#3'`'#1#5'Width'#2'K'#7'Caption'#6#7'Compu'
+ +'te'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#10#0#0#7'TButton'#9'Retu'
+ +'rnBtn'#4'Left'#3'['#1#6'Height'#2#28#3'Top'#3'`'#1#5'Width'#2'K'#7'Caption'
+ +#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#11#0#0#7'TButton'#7'HelpBtn'#3
+ +'Tag'#3#129#0#4'Left'#2#9#6'Height'#2#28#3'Top'#3'`'#1#5'Width'#2'Q'#7'Capti'
+ +'on'#6#4'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#12#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/kmeansunit.pas b/applications/lazstats/source_orig/kmeansunit.pas
new file mode 100644
index 000000000..e9f5a97bc
--- /dev/null
+++ b/applications/lazstats/source_orig/kmeansunit.pas
@@ -0,0 +1,867 @@
+unit kmeansunit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, MainUnit, functionslib, Globals, matrixlib, dataprocs,
+ outputunit, contexthelpunit;
+
+type
+
+ { Tkmeansfrm }
+
+ Tkmeansfrm = class(TForm)
+ DescChkBox: TCheckBox;
+ HelpBtn: TButton;
+ VarInBtn: TBitBtn;
+ VarOutBtn: TBitBtn;
+ AllBtn: TBitBtn;
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ StdChkBox: TCheckBox;
+ RepChkBox: TCheckBox;
+ GroupBox1: TGroupBox;
+ ItersEdit: TEdit;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ ListBox1: TListBox;
+ VarList: TListBox;
+ NoClustersEdit: TEdit;
+ Label1: TLabel;
+ procedure AllBtnClick(Sender: TObject);
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure HelpBtnClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure VarInBtnClick(Sender: TObject);
+ procedure VarOutBtnClick(Sender: TObject);
+ private
+ { private declarations }
+ procedure KMNS(VAR A : DblDyneMat; M, N : integer;
+ VAR C : DblDyneMat; K : integer; VAR IC1 : IntDyneVec;
+ VAR IC2 : IntDyneVec; VAR NC : IntDyneVec;
+ VAR AN1 : DblDyneVec; VAR AN2 : DblDyneVec;
+ VAR NCP : IntDyneVec; VAR D : DblDyneVec;
+ VAR ITRAN : IntDyneVec; VAR LIVE : IntDyneVec;
+ ITER : integer; VAR WSS : DblDyneVec; IFAULT : integer);
+ procedure OPTRA(VAR A : DblDyneMat; M, N : integer;
+ VAR C : DblDyneMat; K : integer;
+ VAR IC1 : IntDyneVec; VAR IC2 : IntDyneVec;
+ VAR NC : IntDyneVec; VAR AN1 : DblDyneVec;
+ VAR AN2 : DblDyneVec; VAR NCP : IntDyneVec;
+ VAR D : DblDyneVec; VAR ITRAN : IntDyneVec;
+ VAR LIVE : IntDyneVec; INDX : integer);
+ procedure QTRAN(VAR A : DblDyneMat; M, N : integer;
+ VAR C : DblDyneMat; K : integer;
+ VAR IC1 : IntDyneVec; VAR IC2 : IntDyneVec;
+ VAR NC : IntDyneVec; VAR AN1 : DblDyneVec;
+ VAR AN2 : DblDyneVec; VAR NCP : IntDyneVec;
+ VAR D : DblDyneVec; VAR ITRAN : IntDyneVec;
+ INDX : integer);
+
+ public
+ { public declarations }
+ end;
+
+var
+ kmeansfrm: Tkmeansfrm;
+
+implementation
+
+{ Tkmeansfrm }
+
+procedure Tkmeansfrm.ResetBtnClick(Sender: TObject);
+VAR cellstring : string;
+ i : integer;
+begin
+ VarList.Clear;
+ ListBox1.Clear;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ VarList.Items.Add(cellstring);
+ end;
+ RepChkBox.Checked := false;
+ StdChkBox.Checked := true;
+ VarOutBtn.Enabled := false;
+ DescChkBox.Checked := false;
+ NoClustersEdit.Text := '';
+ ItersEdit.Text := '100';
+end;
+
+procedure Tkmeansfrm.VarInBtnClick(Sender: TObject);
+VAR
+ index, count, i : integer;
+ cellstring : string;
+begin
+ count := 0;
+ index := ListBox1.Items.Count;
+ for i := 0 to index - 1 do
+ begin
+ if (VarList.Selected[i]) then
+ begin
+ cellstring := VarList.Items.strings[i];
+ ListBox1.Items.Add(cellstring);
+ count := count + 1;
+ end;
+ end;
+
+ while (count > 0) do
+ begin
+ for i := 0 to VarList.Items.Count - 1 do
+ begin
+ if (VarList.Selected[i]) then
+ begin
+ VarList.Items.Delete(i);
+ count := count - 1;
+ end;
+ end;
+ end;
+ VarOutBtn.Enabled := true;
+end;
+
+procedure Tkmeansfrm.VarOutBtnClick(Sender: TObject);
+VAR index : integer;
+ cellstring : string;
+begin
+ index := ListBox1.ItemIndex;
+ cellstring := ListBox1.Items.Strings[index];
+ VarList.Items.Add(cellstring);
+ ListBox1.Items.Delete(index);
+end;
+
+procedure Tkmeansfrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(self);
+end;
+
+procedure Tkmeansfrm.HelpBtnClick(Sender: TObject);
+begin
+ ContextHelpForm.HelpMessage((Sender as TButton).tag);
+end;
+
+procedure Tkmeansfrm.AllBtnClick(Sender: TObject);
+VAR
+ index, noitems : integer;
+ cellstring : string;
+begin
+ noitems := VarList.Items.Count;
+ for index := 0 to noitems - 1 do
+ begin
+ cellstring := VarList.Items.Strings[index];
+ ListBox1.Items.Add(cellstring);
+ end;
+ VarList.Clear;
+ VarOutBtn.Enabled := true;
+end;
+
+procedure Tkmeansfrm.ComputeBtnClick(Sender: TObject);
+VAR
+ i, j, L, Ncols, N, M, K,IFAULT, ITER, result, intvalue, col : integer;
+ center, itemp : integer;
+ IC1, IC2, NC, NCP, ITRAN, LIVE, ColSelected : IntDyneVec;
+ A, C : DblDyneMat;
+ D, AN1, AN2, WSS, DT : DblDyneVec;
+ cellstring, strvalue : string;
+ outline : string;
+ strval : string;
+ varlabels, rowlabels : StrDyneVec;
+ dblvalue, Mean, stddev : double;
+label cleanup;
+
+begin
+ Ncols := ListBox1.Items.Count;
+ if (Ncols <= 0) then
+ begin
+ ShowMessage('ERROR! No variables selected to cluster.');
+ exit;
+ end;
+
+ N := Ncols;
+ M := NoCases;
+ K := StrToInt(NoClustersEdit.Text);
+ IFAULT := 0;
+ ITER := StrToInt(ItersEdit.Text);
+
+ SetLength(varlabels,Ncols);
+ SetLength(rowlabels,NoCases);
+ SetLength(ColSelected,Ncols);
+ SetLength(A,M+1,N+1);
+ SetLength(C,K+1,N+1);
+ SetLength(D,M+1);
+ SetLength(AN1,K+1);
+ SetLength(AN2,K+1);
+ SetLength(WSS,K+1);
+ SetLength(DT,3);
+ SetLength(IC1,M+1);
+ SetLength(IC2,M+1);
+ SetLength(NC,K+1);
+ SetLength(NCP,K+1);
+ SetLength(ITRAN,K+1);
+ SetLength(LIVE,K+1);
+
+ if (K <= 0) then
+ begin
+ ShowMessage('ERROR! You must enter the desired number of clusters.');
+ goto cleanup;
+ end;
+
+ // initialize arrays
+ for i := 1 to K do
+ begin
+ AN1[i] := 0.0;
+ AN2[i] := 0.0;
+ WSS[i] := 0.0;
+ NC[i] := 0;
+ NCP[i] := 0;
+ ITRAN[i] := 0;
+ LIVE[i] := 0;
+ for j := 1 to N do C[i,j] := 0.0;
+ end;
+ for i := 1 to M do
+ begin
+ IC1[i] := 0;
+ IC2[i] := 0;
+ D[i] := 0.0;
+ end;
+
+ //Get labels and columns of selected variables
+ for i := 0 to Ncols - 1 do
+ begin
+ cellstring := ListBox1.Items.Strings[i];
+ for j := 0 to NoVariables - 1 do
+ begin
+ if (cellstring = OS3MainFrm.DataGrid.Cells[j+1,0]) then
+ begin
+ varlabels[i] := cellstring;
+ ColSelected[i] := j+1;
+ end;
+ end;
+ end;
+
+ // Get labels of rows
+ for i := 0 to NoCases - 1 do rowlabels[i] := OS3MainFrm.DataGrid.Cells[0,i+1];
+
+ // read the data
+ for i := 1 to M do
+ begin
+ if (NOT GoodRecord(i,N,ColSelected)) then continue;
+ for j := 1 to N do
+ begin
+ col := ColSelected[j-1];
+ A[i,j] := StrToFloat(OS3MainFrm.DataGrid.Cells[col,i]);
+ end;
+ end;
+
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('K-Means Clustering. Adapted from AS 136 APPL. STATIST. (1979) VOL.28, NO.1');
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('File := %s',[OS3MainFrm.FileNameEdit.Text]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('No. Cases := %d, No. Variables := %d, No. Clusters := %d',[M,N,K]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ // transform to z scores if needed
+ if (StdChkBox.Checked = true) then
+ begin
+ for j := 1 to N do
+ begin
+ Mean := 0.0;
+ stddev := 0.0;
+ for i := 1 to M do
+ begin
+ Mean := Mean + A[i,j];
+ stddev := stddev + (A[i,j] * A[i,j]);
+ end;
+ stddev := stddev - Mean * Mean / M;
+ stddev := stddev / (M - 1);
+ Mean := Mean / M;
+ if (DescChkBox.Checked) then
+ begin
+ outline := format('Mean := %8.3f, Std.Dev. := %8.3f for %s',[Mean,stddev,varlabels[j-1]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ for i := 1 to M do
+ begin
+ A[i,j] := (A[i,j] - Mean) / stddev;
+ if (RepChkBox.Checked = true) then
+ begin
+ col := ColSelected[j-1];
+ outline := format('%8.5f',[A[i,j]]);
+ OS3MainFrm.DataGrid.Cells[col,i] := outline;
+ end;
+ end;
+ end;
+ end;
+
+ // Now enter initial points
+ for L := 1 to K do
+ begin
+ center := 1 + (L-1) * (M div K); // initial cluster center
+ for j := 1 to N do C[L,j] := A[center,j];
+ end;
+
+ // do analysis
+ KMNS(A,M,N,C,K,IC1,IC2,NC,AN1,AN2,NCP,D,ITRAN,LIVE,ITER,WSS,IFAULT);
+
+ // show results
+
+ // sort subjects by cluster
+ for i := 1 to M do IC2[i] := i; // store ids in here
+ for i := 1 to M - 1 do
+ begin
+ for j := i+1 to M do
+ begin
+ if (IC1[i] > IC1[j]) then // swap these clusters and ids
+ begin
+ itemp := IC1[i];
+ IC1[i] := IC1[j];
+ IC1[j] := itemp;
+ itemp := IC2[i];
+ IC2[i] := IC2[j];
+ IC2[j] := itemp;
+ end;
+ end;
+ end;
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('NUMBER OF SUBJECTS IN EACH CLUSTER');
+ for i := 1 to K do
+ begin
+ outline := format('Cluster := %d with %d cases.',[i,NC[i]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('PLACEMENT OF SUBJECTS IN CLUSTERS');
+ OutPutFrm.RichEdit.Lines.Add('CLUSTER SUBJECT');
+ for i := 1 to M do
+ begin
+ outline := format(' %3d %3d',[IC1[i],IC2[i]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('AVERAGE VARIABLE VALUES BY CLUSTER');
+ outline := ' VARIABLES';
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := 'CLUSTER';
+ for j := 1 to N do
+ begin
+ strval := format(' %3d ',[j]);
+ outline := outline + strval;
+ end;
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add(' ');
+ for i := 1 to K do
+ begin
+ outline := format(' %3d ',[i]);
+ for j := 1 to N do
+ begin
+ strval := format('%5.2f ',[C[i,j]]);
+ outline := outline + strval;
+ end;
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('WITHIN CLUSTER SUMS OF SQUARES');
+ for i := 1 to K do
+ begin
+ outline := format('Cluster %d := %6.3f',[i,WSS[i]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+
+ OutPutFrm.ShowModal;
+
+ // cleanup
+cleanup:
+ LIVE := nil;
+ ITRAN := nil;
+ NCP := nil;
+ NC := nil;
+ IC2 := nil;
+ IC1 := nil;
+ DT := nil;
+ WSS := nil;
+ AN2 := nil;
+ AN1 := nil;
+ D := nil;
+ C := nil;
+ A := nil;
+ ColSelected := nil;
+ rowlabels := nil;
+ varlabels := nil;
+end;
+
+procedure Tkmeansfrm.KMNS(VAR A : DblDyneMat; M, N : integer;
+ VAR C : DblDyneMat; K : integer; VAR IC1 : IntDyneVec;
+ VAR IC2 : IntDyneVec; VAR NC : IntDyneVec;
+ VAR AN1 : DblDyneVec; VAR AN2 : DblDyneVec;
+ VAR NCP : IntDyneVec; VAR D : DblDyneVec;
+ VAR ITRAN : IntDyneVec; VAR LIVE : IntDyneVec;
+ ITER : integer; VAR WSS : DblDyneVec; IFAULT : integer);
+VAR
+ DT : array[0..2] of double;
+ BIG : double;
+ ZERO : double;
+ ONE : double;
+ DA, DB, DC, TEMP, AA : double;
+ L, II, INDX, I, J, IL, IJ : integer;
+label cont50, cont40, cont150;
+
+begin
+ // SUBROUTINE KMNS(A, M, N, C, K, IC1, IC2, NC, AN1, AN2, NCP, D,
+ // * ITRAN, LIVE, ITER, WSS, IFAULT)
+ //
+ // ALGORITHM AS 136 APPL. STATIST. (1979) VOL.28, NO.1
+ // Divide M points in N-dimensional space into K clusters so that
+ // the within cluster sum of squares is minimized.
+ //
+ // INTEGER IC1(M), IC2(M), NC(K), NCP(K), ITRAN(K), LIVE(K)
+ // REAL A(M,N), D(M), C(K,N), AN1(K), AN2(K), WSS(K), DT(2)
+ // REAL ZERO, ONE
+ //
+ // Define BIG to be a very large positive number
+ //
+ // DATA BIG /1.E30/, ZERO /0.0/, ONE /1.0/
+ //
+ BIG := 1.0e30;
+ ZERO := 0.0;
+ ONE := 1.0;
+ IFAULT := 3;
+ if ((K <= 1) or (K >= M)) then
+ begin
+ ShowMessage('The no. of clusters must be less than the no. of variables.');
+ exit;
+ end;
+
+ // For each point I, find its two closest centres, IC1(I) and
+ // IC2(I). Assign it to IC1(I).
+ //
+ for I := 1 to M do
+ begin
+ IC1[I] := 1;
+ IC2[I] := 2;
+ for IL := 1 to 2 do
+ begin
+ DT[IL] := ZERO;
+ for J := 1 to N do
+ begin
+ DA := A[I,J] - C[IL,J];
+ DT[IL] := DT[IL] + (DA * DA); //(squared difference for this comparison)
+ end; // 10 CONTINUE
+ end; // 10 CONTINUE
+ if (DT[1] > DT[2]) then // THEN swap
+ begin
+ IC1[I] := 2;
+ IC2[I] := 1;
+ TEMP := DT[1];
+ DT[1] := DT[2];
+ DT[2] := TEMP;
+ end; // END IF
+ for L := 3 to K do // (remaining clusters)
+ begin
+ DB := ZERO;
+ for J := 1 to N do // (variables)
+ begin
+ DC := A[I,J] - C[L,J];
+ DB := DB + DC * DC;
+ if (DB >= DT[2]) then goto cont50;
+ end;
+ if (DB < DT[1]) then goto cont40;
+ DT[2] := DB;
+ IC2[I] := L;
+ goto cont50;
+cont40: DT[2] := DT[1];
+ IC2[I] := IC1[I];
+ DT[1] := DB;
+ IC1[I] := L;
+cont50: end;
+ end; // 50 CONTINUE (next case)
+
+ // Update cluster centres to be the average of points contained
+ // within them.
+ //
+ for L := 1 to K do // (clusters)
+ begin
+ NC[L] := 0;
+ for J := 1 to N do C[L,J] := ZERO; //(initialize clusters)
+ end;
+ for I := 1 to M do // (subjects)
+ begin
+ L := IC1[I]; // which cluster the Ith case is in
+ NC[L] := NC[L] + 1; // no. in the cluster L
+ for J := 1 to N do C[L,J] := C[L,J] + A[I,J]; // sum of var. values in the cluster L
+ end;
+
+ // Check to see if there is any empty cluster at this stage
+ //
+ for L := 1 to K do
+ begin
+ if (NC[L] = 0) then
+ begin
+ IFAULT := 1;
+ exit;
+ end;
+ AA := NC[L];
+ for J := 1 to N do C[L,J] := C[L,J] / AA; // average the values in the cluster
+
+ // Initialize AN1, AN2, ITRAN & NCP
+ // AN1(L) := NC(L) / (NC(L) - 1)
+ // AN2(L) := NC(L) / (NC(L) + 1)
+ // ITRAN(L) := 1 if cluster L is updated in the quick-transfer stage,
+ // := 0 otherwise
+ // In the optimal-transfer stage, NCP(L) stores the step at which
+ // cluster L is last updated.
+ // In the quick-transfer stage, NCP(L) stores the step at which
+ // cluster L is last updated plus M.
+ //
+ AN2[L] := AA / (AA + ONE);
+ AN1[L] := BIG;
+ if (AA > ONE) then AN1[L] := AA / (AA - ONE);
+ ITRAN[L] := 1;
+ NCP[L] := -1;
+ end;
+ INDX := 0;
+ for IJ := 1 to ITER do
+ begin
+ //
+ // In this stage, there is only one pass through the data. Each
+ // point is re-allocated, if necessary, to the cluster that will
+ // induce the maximum reduction in within-cluster sum of squares.
+ //
+ OPTRA(A, M, N, C, K, IC1, IC2, NC, AN1, AN2, NCP, D, ITRAN, LIVE, INDX);
+ //
+ // Stop if no transfer took place in the last M optimal transfer
+ // steps.
+ //
+ if (INDX = M) then goto cont150;
+ //
+ // Each point is tested in turn to see if it should be re-allocated
+ // to the cluster to which it is most likely to be transferred,
+ // IC2(I), from its present cluster, IC1(I). Loop through the
+ // data until no further change is to take place.
+ //
+ QTRAN(A, M, N, C, K, IC1, IC2, NC, AN1, AN2, NCP, D, ITRAN, INDX);
+ //
+ // If there are only two clusters, there is no need to re-enter the
+ // optimal transfer stage.
+ //
+ if (K = 2) then goto cont150;
+ //
+ // NCP has to be set to 0 before entering OPTRA.
+ //
+ for L := 1 to K do NCP[L] := 0;
+ end;
+ //
+ // Since the specified number of iterations has been exceeded, set
+ // IFAULT := 2. This may indicate unforeseen looping.
+ //
+ IFAULT := 2;
+ //
+ // Compute within-cluster sum of squares for each cluster.
+ //
+cont150:
+ for L := 1 to K do
+ begin
+ WSS[L] := ZERO;
+ for J := 1 to N do C[L,J] := ZERO;
+ end;
+ for I := 1 to M do
+ begin
+ II := IC1[I];
+ for J := 1 to N do C[II,J] := C[II,J] + A[I,J];
+ end;
+ for J := 1 to N do
+ begin
+ for L := 1 to K do C[L,J] := C[L,J] / (NC[L]);
+ for I := 1 to M do
+ begin
+ II := IC1[I];
+ DA := A[I,J] - C[II,J];
+ WSS[II] := WSS[II] + DA * DA;
+ end;
+ end; // 190 CONTINUE
+end;
+
+
+procedure Tkmeansfrm.OPTRA(VAR A : DblDyneMat; M, N : integer;
+ VAR C : DblDyneMat; K : integer;
+ VAR IC1 : IntDyneVec; VAR IC2 : IntDyneVec;
+ VAR NC : IntDyneVec; VAR AN1 : DblDyneVec;
+ VAR AN2 : DblDyneVec; VAR NCP : IntDyneVec;
+ VAR D : DblDyneVec; VAR ITRAN : IntDyneVec;
+ VAR LIVE : IntDyneVec; INDX : integer);
+VAR
+ ZERO, ONE, BIG,DE, DF, DD, DC, DB, DA, R2, RR, AL1, AL2, ALT, ALW : double;
+ I, J, L, L1, L2, LL : integer;
+label cont30, cont60, cont70, cont90;
+
+begin
+ // SUBROUTINE OPTRA(A, M, N, C, K, IC1, IC2, NC, AN1, AN2, NCP, D,
+ // * ITRAN, LIVE, INDX)
+ //
+ // ALGORITHM AS 136.1 APPL. STATIST. (1979) VOL.28, NO.1
+ //
+ // This is the optimal transfer stage.
+ //
+ // Each point is re-allocated, if necessary, to the cluster that
+ // will induce a maximum reduction in the within-cluster sum of
+ // squares.
+ //
+ // INTEGER IC1(M), IC2(M), NC(K), NCP(K), ITRAN(K), LIVE(K)
+ // REAL A(M,N), D(M), C(K,N), AN1(K), AN2(K), ZERO, ONE
+ //
+ // Define BIG to be a very large positive number.
+ //
+ // DATA BIG /1.0E30/, ZERO /0.0/, ONE/1.0/
+ //
+ // If cluster L is updated in the last quick-transfer stage, it
+ // belongs to the live set throughout this stage. Otherwise, at
+ // each step, it is not in the live set if it has not been updated
+ // in the last M optimal transfer steps.
+ //
+
+ ZERO := 0.0;
+ ONE := 1.0;
+ BIG := 1.0e30;
+
+ for L := 1 to K do
+ begin
+ if (ITRAN[L] = 1) then LIVE[L] := M + 1;
+ end; // 10 CONTINUE
+
+ for I := 1 to M do
+ begin
+ INDX := INDX + 1;
+ L1 := IC1[I];
+ L2 := IC2[I];
+ LL := L2;
+ //
+ // If point I is the only member of cluster L1, no transfer.
+ //
+ if (NC[L1] = 1) then goto cont90; // GO TO 90
+ //
+ // If L1 has not yet been updated in this stage, no need to
+ // re-compute D(I).
+ //
+ if (NCP[L1] = 0) then goto cont30; // GO TO 30
+ DE := ZERO;
+ for J := 1 to N do
+ begin
+ DF := A[I,J] - C[L1,J];
+ DE := DE + DF * DF;
+ end;
+ D[I] := DE * AN1[L1];
+ //
+ // Find the cluster with minimum R2.
+ //
+cont30:
+ DA := ZERO;
+ for J := 1 to N do
+ begin
+ DB := A[I,J] - C[L2,J];
+ DA := DA + DB * DB;
+ end;
+ R2 := DA * AN2[L2];
+ for L := 1 to K do
+ begin
+ //
+ // If I >:= LIVE(L1), then L1 is not in the live set. If this is
+ // true, we only need to consider clusters that are in the live set
+ // for possible transfer of point I. Otherwise, we need to consider
+ // all possible clusters.
+ //
+ if ((I >= LIVE[L1]) and (I >= LIVE[L]) or (L = L1) or (L = LL)) then goto cont60;
+ RR := R2 / AN2[L];
+ DC := ZERO;
+ for J := 1 to N do
+ begin
+ DD := A[I,J] - C[L,J];
+ DC := DC + DD * DD;
+ if (DC >= RR) then goto cont60;
+ end;
+ R2 := DC * AN2[L];
+ L2 := L;
+cont60:
+ end; // 60 CONTINUE
+ if (R2 < D[I]) then goto cont70;
+ //
+ // If no transfer is necessary, L2 is the new IC2(I).
+ //
+ IC2[I] := L2;
+ goto cont90; // GO TO 90
+ //
+ // Update cluster centres, LIVE, NCP, AN1 & AN2 for clusters L1 and
+ // L2, and update IC1(I) & IC2(I).
+ //
+cont70:
+ INDX := 0;
+ LIVE[L1] := M + I;
+ LIVE[L2] := M + I;
+ NCP[L1] := I;
+ NCP[L2] := I;
+ AL1 := NC[L1];
+ ALW := AL1 - ONE;
+ AL2 := NC[L2];
+ ALT := AL2 + ONE;
+ for J := 1 to N do
+ begin
+ C[L1,J] := (C[L1,J] * AL1 - A[I,J]) / ALW;
+ C[L2,J] := (C[L2,J] * AL2 + A[I,J]) / ALT;
+ end;
+ NC[L1] := NC[L1] - 1;
+ NC[L2] := NC[L2] + 1;
+ AN2[L1] := ALW / AL1;
+ AN1[L1] := BIG;
+ if (ALW > ONE) then AN1[L1] := ALW / (ALW - ONE);
+ AN1[L2] := ALT / AL2;
+ AN2[L2] := ALT / (ALT + ONE);
+ IC1[I] := L2;
+ IC2[I] := L1;
+cont90:
+ // 90 CONTINUE
+ if (INDX = M) then exit;
+ end; // 100 CONTINUE
+ for L := 1 to K do
+ begin
+ //
+ // ITRAN(L) := 0 before entering QTRAN. Also, LIVE(L) has to be
+ // decreased by M before re-entering OPTRA.
+ //
+ ITRAN[L] := 0;
+ LIVE[L] := LIVE[L] - M;
+ end; // 110 CONTINUE
+end;
+
+procedure Tkmeansfrm.QTRAN(VAR A : DblDyneMat; M, N : integer;
+ VAR C : DblDyneMat; K : integer;
+ VAR IC1 : IntDyneVec; VAR IC2 : IntDyneVec;
+ VAR NC : IntDyneVec; VAR AN1 : DblDyneVec;
+ VAR AN2 : DblDyneVec; VAR NCP : IntDyneVec;
+ VAR D : DblDyneVec; VAR ITRAN : IntDyneVec;
+ INDX : integer);
+VAR
+ BIG, ZERO, ONE, DA, DB, DE, DD, R2, AL1, ALW, AL2, ALT : double;
+ I, J, L, ICOUN, ISTEP, L1, L2 : integer;
+label cont10, cont30, cont60;
+
+begin
+ // SUBROUTINE QTRAN(A, M, N, C, K, IC1, IC2, NC, AN1, AN2, NCP, D,
+ // * ITRAN, INDX)
+ //
+ // ALGORITHM AS 136.2 APPL. STATIST. (1979) VOL.28, NO.1
+ //
+ // This is the quick transfer stage.
+ // IC1(I) is the cluster which point I belongs to.
+ // IC2(I) is the cluster which point I is most likely to be
+ // transferred to.
+ // For each point I, IC1(I) & IC2(I) are switched, if necessary, to
+ // reduce within-cluster sum of squares. The cluster centres are
+ // updated after each step.
+ //
+ // INTEGER IC1(M), IC2(M), NC(K), NCP(K), ITRAN(K)
+ // REAL A(M,N), D(M), C(K,N), AN1(K), AN2(K), ZERO, ONE
+ //
+ // Define BIG to be a very large positive number
+ //
+ // DATA BIG /1.0E30/, ZERO /0.0/, ONE /1.0/
+ //
+ // In the optimal transfer stage, NCP(L) indicates the step at which
+ // cluster L is last updated. In the quick transfer stage, NCP(L)
+ // is equal to the step at which cluster L is last updated plus M.
+ //
+ BIG := 1.0e30;
+ ZERO := 0.0;
+ ONE := 1.0;
+ ICOUN := 0;
+ ISTEP := 0;
+cont10:
+ for I := 1 to M do
+ begin
+ ICOUN := ICOUN + 1;
+ ISTEP := ISTEP + 1;
+ L1 := IC1[I];
+ L2 := IC2[I];
+ //
+ // If point I is the only member of cluster L1, no transfer.
+ //
+ if (NC[L1] = 1) then goto cont60;
+ //
+ // If ISTEP > NCP(L1), no need to re-compute distance from point I to
+ // cluster L1. Note that if cluster L1 is last updated exactly M
+ // steps ago, we still need to compute the distance from point I to
+ // cluster L1.
+ //
+ if (ISTEP > NCP[L1]) then goto cont30;
+ DA := ZERO;
+ for J := 1 to N do
+ begin
+ DB := A[I,J] - C[L1,J];
+ DA := DA + DB * DB;
+ end;
+ D[I] := DA * AN1[L1];
+ //
+ // If ISTEP >:= both NCP(L1) & NCP(L2) there will be no transfer of
+ // point I at this step.
+ //
+cont30:
+ if ((ISTEP >= NCP[L1]) and (ISTEP >= NCP[L2])) then goto cont60;
+ R2 := D[I] / AN2[L2];
+ DD := ZERO;
+ for J := 1 to N do
+ begin
+ DE := A[I,J] - C[L2,J];
+ DD := DD + DE * DE;
+ if (DD >= R2) then goto cont60;
+ end; // 40 CONTINUE
+ //
+ // Update cluster centres, NCP, NC, ITRAN, AN1 & AN2 for clusters
+ // L1 & L2. Also update IC1(I) & IC2(I). Note that if any
+ // updating occurs in this stage, INDX is set back to 0.
+ //
+ ICOUN := 0;
+ INDX := 0;
+ ITRAN[L1] := 1;
+ ITRAN[L2] := 1;
+ NCP[L1] := ISTEP + M;
+ NCP[L2] := ISTEP + M;
+ AL1 := NC[L1];
+ ALW := AL1 - ONE;
+ AL2 := NC[L2];
+ ALT := AL2 + ONE;
+ for J := 1 to N do
+ begin
+ C[L1,J] := (C[L1,J] * AL1 - A[I,J]) / ALW;
+ C[L2,J] := (C[L2,J] * AL2 + A[I,J]) / ALT;
+ end; // 50 CONTINUE
+ NC[L1] := NC[L1] - 1;
+ NC[L2] := NC[L2] + 1;
+ AN2[L1] := ALW / AL1;
+ AN1[L1] := BIG;
+ if (ALW > ONE) then AN1[L1] := ALW / (ALW - ONE);
+ AN1[L2] := ALT / AL2;
+ AN2[L2] := ALT / (ALT + ONE);
+ IC1[I] := L2;
+ IC2[I] := L1;
+ //
+ // If no re-allocation took place in the last M steps, return.
+ //
+cont60:
+ if (ICOUN = M) then exit;
+ end; // 70 CONTINUE
+ goto cont10;
+end;
+
+initialization
+ {$I kmeansunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/kr21unit.lfm b/applications/lazstats/source_orig/kr21unit.lfm
new file mode 100644
index 000000000..973090c2e
--- /dev/null
+++ b/applications/lazstats/source_orig/kr21unit.lfm
@@ -0,0 +1,111 @@
+object KR21Frm: TKR21Frm
+ Left = 151
+ Height = 227
+ Top = 98
+ Width = 204
+ Caption = 'Kuder-Richarson #21'
+ ClientHeight = 227
+ ClientWidth = 204
+ OnShow = FormShow
+ LCLVersion = '0.9.26.2'
+ object Label1: TLabel
+ Left = 7
+ Height = 14
+ Top = 16
+ Width = 120
+ Caption = 'Maximum Score Possible:'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 7
+ Height = 14
+ Top = 46
+ Width = 118
+ Caption = 'Mean of he Test Scores:'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 7
+ Height = 14
+ Top = 80
+ Width = 123
+ Caption = 'Std. Dev. of Test Scores:'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 6
+ Height = 14
+ Top = 112
+ Width = 130
+ Caption = 'KR#21 Reliability Estimate:'
+ ParentColor = False
+ end
+ object NoItemsEdit: TEdit
+ Left = 143
+ Height = 22
+ Top = 8
+ Width = 49
+ TabOrder = 0
+ Text = 'NoItemsEdit'
+ end
+ object MeanEdit: TEdit
+ Left = 143
+ Height = 22
+ Top = 38
+ Width = 49
+ TabOrder = 1
+ Text = 'Edit1'
+ end
+ object StdDevEdit: TEdit
+ Left = 143
+ Height = 22
+ Top = 72
+ Width = 49
+ TabOrder = 2
+ Text = 'Edit1'
+ end
+ object RelEdit: TEdit
+ Left = 143
+ Height = 22
+ Top = 104
+ Width = 49
+ TabOrder = 3
+ Text = 'Edit1'
+ end
+ object ResetBtn: TButton
+ Left = 6
+ Height = 32
+ Top = 137
+ Width = 69
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 4
+ end
+ object CancelBtn: TButton
+ Left = 123
+ Height = 32
+ Top = 137
+ Width = 69
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 5
+ end
+ object ComputeBtn: TButton
+ Left = 8
+ Height = 32
+ Top = 184
+ Width = 69
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 6
+ end
+ object ReturnBtn: TButton
+ Left = 123
+ Height = 32
+ Top = 184
+ Width = 69
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 7
+ end
+end
diff --git a/applications/lazstats/source_orig/kr21unit.lrs b/applications/lazstats/source_orig/kr21unit.lrs
new file mode 100644
index 000000000..4bb96633a
--- /dev/null
+++ b/applications/lazstats/source_orig/kr21unit.lrs
@@ -0,0 +1,29 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TKR21Frm','FORMDATA',[
+ 'TPF0'#8'TKR21Frm'#7'KR21Frm'#4'Left'#3#151#0#6'Height'#3#227#0#3'Top'#2'b'#5
+ +'Width'#3#204#0#7'Caption'#6#19'Kuder-Richarson #21'#12'ClientHeight'#3#227#0
+ +#11'ClientWidth'#3#204#0#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.26.2'
+ +#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2#14#3'Top'#2#16#5'Width'#2'x'#7
+ +'Caption'#6#23'Maximum Score Possible:'#11'ParentColor'#8#0#0#6'TLabel'#6'La'
+ +'bel2'#4'Left'#2#7#6'Height'#2#14#3'Top'#2'.'#5'Width'#2'v'#7'Caption'#6#23
+ +'Mean of he Test Scores:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2
+ +#7#6'Height'#2#14#3'Top'#2'P'#5'Width'#2'{'#7'Caption'#6#25'Std. Dev. of Tes'
+ +'t Scores:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#6#6'Height'#2
+ +#14#3'Top'#2'p'#5'Width'#3#130#0#7'Caption'#6#27'KR#21 Reliability Estimate:'
+ +#11'ParentColor'#8#0#0#5'TEdit'#11'NoItemsEdit'#4'Left'#3#143#0#6'Height'#2
+ +#22#3'Top'#2#8#5'Width'#2'1'#8'TabOrder'#2#0#4'Text'#6#11'NoItemsEdit'#0#0#5
+ +'TEdit'#8'MeanEdit'#4'Left'#3#143#0#6'Height'#2#22#3'Top'#2'&'#5'Width'#2'1'
+ +#8'TabOrder'#2#1#4'Text'#6#5'Edit1'#0#0#5'TEdit'#10'StdDevEdit'#4'Left'#3#143
+ +#0#6'Height'#2#22#3'Top'#2'H'#5'Width'#2'1'#8'TabOrder'#2#2#4'Text'#6#5'Edit'
+ +'1'#0#0#5'TEdit'#7'RelEdit'#4'Left'#3#143#0#6'Height'#2#22#3'Top'#2'h'#5'Wid'
+ +'th'#2'1'#8'TabOrder'#2#3#4'Text'#6#5'Edit1'#0#0#7'TButton'#8'ResetBtn'#4'Le'
+ +'ft'#2#6#6'Height'#2' '#3'Top'#3#137#0#5'Width'#2'E'#7'Caption'#6#5'Reset'#7
+ +'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#4#0#0#7'TButton'#9'CancelBtn'#4
+ +'Left'#2'{'#6'Height'#2' '#3'Top'#3#137#0#5'Width'#2'E'#7'Caption'#6#6'Cance'
+ +'l'#11'ModalResult'#2#2#8'TabOrder'#2#5#0#0#7'TButton'#10'ComputeBtn'#4'Left'
+ +#2#8#6'Height'#2' '#3'Top'#3#184#0#5'Width'#2'E'#7'Caption'#6#7'Compute'#7'O'
+ +'nClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#6#0#0#7'TButton'#9'ReturnBtn'#4
+ +'Left'#2'{'#6'Height'#2' '#3'Top'#3#184#0#5'Width'#2'E'#7'Caption'#6#6'Retur'
+ +'n'#11'ModalResult'#2#1#8'TabOrder'#2#7#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/kr21unit.pas b/applications/lazstats/source_orig/kr21unit.pas
new file mode 100644
index 000000000..d3ad96711
--- /dev/null
+++ b/applications/lazstats/source_orig/kr21unit.pas
@@ -0,0 +1,73 @@
+unit KR21Unit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls;
+
+type
+
+ { TKR21Frm }
+
+ TKR21Frm = class(TForm)
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ NoItemsEdit: TEdit;
+ MeanEdit: TEdit;
+ StdDevEdit: TEdit;
+ RelEdit: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ KR21Frm: TKR21Frm;
+
+implementation
+
+{ TKR21Frm }
+
+procedure TKR21Frm.ResetBtnClick(Sender: TObject);
+begin
+ NoItemsEdit.Text := '';
+ MeanEdit.Text := '';
+ StdDevEdit.Text := '';
+ RelEdit.Text := '';
+end;
+
+procedure TKR21Frm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(self);
+end;
+
+procedure TKR21Frm.ComputeBtnClick(Sender: TObject);
+var
+ items, mean, stddev, rel : double;
+begin
+ items := StrToFloat(NoItemsEdit.Text);
+ mean := StrToFloat(MeanEdit.Text);
+ stddev := StrToFloat(StdDevEdit.Text);
+ rel := (items / (items - 1.0)) * (1.0 - (mean * (items - mean))/
+ (items * sqr(stddev)));
+ RelEdit.Text := FloatToStr(rel);
+end;
+
+initialization
+ {$I kr21unit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/kwanovaunit.lfm b/applications/lazstats/source_orig/kwanovaunit.lfm
new file mode 100644
index 000000000..dee1341fb
--- /dev/null
+++ b/applications/lazstats/source_orig/kwanovaunit.lfm
@@ -0,0 +1,307 @@
+object KWAnovaFrm: TKWAnovaFrm
+ Left = 154
+ Height = 357
+ Top = 128
+ Width = 339
+ Caption = 'Kruskal-Wallis One Way ANOVA on Ranks'
+ ClientHeight = 357
+ ClientWidth = 339
+ OnShow = FormShow
+ LCLVersion = '0.9.30.4'
+ object Label1: TLabel
+ Left = 5
+ Height = 16
+ Top = 4
+ Width = 99
+ Caption = 'Variables Available'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 193
+ Height = 16
+ Top = 24
+ Width = 79
+ Caption = 'Group Variable'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 193
+ Height = 16
+ Top = 113
+ Width = 104
+ Caption = 'Dependent Variable'
+ ParentColor = False
+ end
+ object VarList: TListBox
+ Left = 6
+ Height = 265
+ Top = 20
+ Width = 140
+ ItemHeight = 0
+ TabOrder = 0
+ end
+ object GrpIn: TBitBtn
+ Left = 153
+ Height = 31
+ Top = 23
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = GrpInClick
+ TabOrder = 1
+ end
+ object GrpOut: TBitBtn
+ Left = 152
+ Height = 31
+ Top = 56
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = GrpOutClick
+ TabOrder = 2
+ end
+ object DepIn: TBitBtn
+ Left = 153
+ Height = 31
+ Top = 112
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DepInClick
+ TabOrder = 3
+ end
+ object DepOut: TBitBtn
+ Left = 153
+ Height = 31
+ Top = 144
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DepOutClick
+ TabOrder = 4
+ end
+ object GrpEdit: TEdit
+ Left = 191
+ Height = 23
+ Top = 39
+ Width = 120
+ TabOrder = 5
+ Text = 'GrpEdit'
+ end
+ object DepEdit: TEdit
+ Left = 193
+ Height = 23
+ Top = 136
+ Width = 120
+ TabOrder = 6
+ Text = 'Edit1'
+ end
+ object ResetBtn: TButton
+ Left = 153
+ Height = 32
+ Top = 248
+ Width = 63
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 7
+ end
+ object CancelBtn: TButton
+ Left = 248
+ Height = 32
+ Top = 248
+ Width = 63
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 8
+ end
+ object ComputeBtn: TButton
+ Left = 153
+ Height = 32
+ Top = 304
+ Width = 63
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 9
+ end
+ object ReturnBtn: TButton
+ Left = 248
+ Height = 32
+ Top = 304
+ Width = 63
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 10
+ end
+ object MWUChk: TCheckBox
+ Left = 161
+ Height = 19
+ Top = 206
+ Width = 141
+ Caption = 'Mann-Whitney U Tests'
+ TabOrder = 11
+ end
+ object Label4: TLabel
+ Left = 162
+ Height = 16
+ Top = 185
+ Width = 162
+ Caption = 'Post Hoc Comparisons Option'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 9
+ Height = 16
+ Top = 312
+ Width = 46
+ Caption = 'Alpha = '
+ ParentColor = False
+ end
+ object AlphaEdit: TEdit
+ Left = 57
+ Height = 23
+ Top = 303
+ Width = 41
+ TabOrder = 12
+ Text = 'AlphaEdit'
+ end
+end
diff --git a/applications/lazstats/source_orig/kwanovaunit.lrs b/applications/lazstats/source_orig/kwanovaunit.lrs
new file mode 100644
index 000000000..3de8006d3
--- /dev/null
+++ b/applications/lazstats/source_orig/kwanovaunit.lrs
@@ -0,0 +1,239 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TKWAnovaFrm','FORMDATA',[
+ 'TPF0'#11'TKWAnovaFrm'#10'KWAnovaFrm'#4'Left'#3#154#0#6'Height'#3'e'#1#3'Top'
+ +#3#128#0#5'Width'#3'S'#1#7'Caption'#6'%Kruskal-Wallis One Way ANOVA on Ranks'
+ +#12'ClientHeight'#3'e'#1#11'ClientWidth'#3'S'#1#6'OnShow'#7#8'FormShow'#10'L'
+ +'CLVersion'#6#8'0.9.30.4'#0#6'TLabel'#6'Label1'#4'Left'#2#5#6'Height'#2#16#3
+ +'Top'#2#4#5'Width'#2'c'#7'Caption'#6#19'Variables Available'#11'ParentColor'
+ +#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#193#0#6'Height'#2#16#3'Top'#2#24#5'Widt'
+ +'h'#2'O'#7'Caption'#6#14'Group Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'L'
+ +'abel3'#4'Left'#3#193#0#6'Height'#2#16#3'Top'#2'q'#5'Width'#2'h'#7'Caption'#6
+ +#18'Dependent Variable'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'
+ +#2#6#6'Height'#3#9#1#3'Top'#2#20#5'Width'#3#140#0#10'ItemHeight'#2#0#8'TabOr'
+ +'der'#2#0#0#0#7'TBitBtn'#5'GrpIn'#4'Left'#3#153#0#6'Height'#2#31#3'Top'#2#23
+ +#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0
+ +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0
+ +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'
+ +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139
+ +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160
+ +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255
+ +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128
+ +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199
+ +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150
+ +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255
+ +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255
+ +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255
+ +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163
+ +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247
+ +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187
+ +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl'
+ +'ick'#7#10'GrpInClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#6'GrpOut'#4'Left'#3#152
+ +#0#6'Height'#2#31#3'Top'#2'8'#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0
+ +#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0
+ ,#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207
+ +'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'
+ +#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255
+ +#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211
+ +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130
+ +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'
+ +#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'GrpOutClick'#8'TabOrde'
+ +'r'#2#2#0#0#7'TBitBtn'#5'DepIn'#4'Left'#3#153#0#6'Height'#2#31#3'Top'#2'p'#5
+ +'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0
+ +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0
+ +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'
+ +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139
+ +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160
+ +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255
+ +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128
+ +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199
+ +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150
+ +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255
+ +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255
+ +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255
+ +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163
+ +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247
+ +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187
+ +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl'
+ +'ick'#7#10'DepInClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6'DepOut'#4'Left'#3#153
+ +#0#6'Height'#2#31#3'Top'#3#144#0#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'
+ +#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0
+ +#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207
+ +'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'
+ +#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255
+ +#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211
+ +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130
+ +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'
+ +#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171
+ ,#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'DepOutClick'#8'TabOrde'
+ +'r'#2#4#0#0#5'TEdit'#7'GrpEdit'#4'Left'#3#191#0#6'Height'#2#23#3'Top'#2''''#5
+ +'Width'#2'x'#8'TabOrder'#2#5#4'Text'#6#7'GrpEdit'#0#0#5'TEdit'#7'DepEdit'#4
+ +'Left'#3#193#0#6'Height'#2#23#3'Top'#3#136#0#5'Width'#2'x'#8'TabOrder'#2#6#4
+ +'Text'#6#5'Edit1'#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#153#0#6'Height'#2' '#3
+ +'Top'#3#248#0#5'Width'#2'?'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnCl'
+ +'ick'#8'TabOrder'#2#7#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#248#0#6'Height'#2
+ +' '#3'Top'#3#248#0#5'Width'#2'?'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8
+ +'TabOrder'#2#8#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#153#0#6'Height'#2' '#3
+ +'Top'#3'0'#1#5'Width'#2'?'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBt'
+ +'nClick'#8'TabOrder'#2#9#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#248#0#6'Heigh'
+ +'t'#2' '#3'Top'#3'0'#1#5'Width'#2'?'#7'Caption'#6#6'Return'#11'ModalResult'#2
+ +#1#8'TabOrder'#2#10#0#0#9'TCheckBox'#6'MWUChk'#4'Left'#3#161#0#6'Height'#2#19
+ +#3'Top'#3#206#0#5'Width'#3#141#0#7'Caption'#6#20'Mann-Whitney U Tests'#8'Tab'
+ +'Order'#2#11#0#0#6'TLabel'#6'Label4'#4'Left'#3#162#0#6'Height'#2#16#3'Top'#3
+ +#185#0#5'Width'#3#162#0#7'Caption'#6#27'Post Hoc Comparisons Option'#11'Pare'
+ +'ntColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#9#6'Height'#2#16#3'Top'#3'8'#1
+ +#5'Width'#2'.'#7'Caption'#6#8'Alpha = '#11'ParentColor'#8#0#0#5'TEdit'#9'Alp'
+ +'haEdit'#4'Left'#2'9'#6'Height'#2#23#3'Top'#3'/'#1#5'Width'#2')'#8'TabOrder'
+ +#2#12#4'Text'#6#9'AlphaEdit'#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/kwanovaunit.pas b/applications/lazstats/source_orig/kwanovaunit.pas
new file mode 100644
index 000000000..85980e118
--- /dev/null
+++ b/applications/lazstats/source_orig/kwanovaunit.pas
@@ -0,0 +1,488 @@
+unit KWANOVAUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, MainUnit, OutPutUnit, FunctionsLib,
+ Globals, DataProcs, Math;
+
+type
+
+ { TKWAnovaFrm }
+
+ TKWAnovaFrm = class(TForm)
+ AlphaEdit: TEdit;
+ Label4: TLabel;
+ Label5: TLabel;
+ MWUChk: TCheckBox;
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ GrpEdit: TEdit;
+ DepEdit: TEdit;
+ GrpIn: TBitBtn;
+ GrpOut: TBitBtn;
+ DepIn: TBitBtn;
+ DepOut: TBitBtn;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ VarList: TListBox;
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure DepInClick(Sender: TObject);
+ procedure DepOutClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure GrpInClick(Sender: TObject);
+ procedure GrpOutClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ KWAnovaFrm: TKWAnovaFrm;
+
+implementation
+
+{ TKWAnovaFrm }
+
+procedure TKWAnovaFrm.ResetBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ GrpEdit.Text := '';
+ DepEdit.Text := '';
+ AlphaEdit.Text := '0.05';
+ GrpIn.Visible := true;
+ GrpOut.Visible := false;
+ DepIn.Visible := true;
+ DepOut.Visible := false;
+ MWUChk.Checked := false;
+ VarList.Items.Clear;
+ for i := 1 to NoVariables do
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+end;
+
+procedure TKWAnovaFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(self);
+end;
+
+procedure TKWAnovaFrm.DepInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ DepEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ DepIn.Visible := false;
+ DepOut.Visible := true;
+end;
+
+procedure TKWAnovaFrm.ComputeBtnClick(Sender: TObject);
+label cleanup, Check1, Check2;
+var
+ i, j, k, m, ind_var, dep_var, min_grp, max_grp, group, total_n : integer;
+ NoTies, NoTieGroups, nogroups, NoSelected, npairs, n1, n2 : integer;
+ largestn : integer;
+ ColNoSelected : IntdyneVec;
+ group_count : IntDyneVec;
+ score, t, SumT, Avg, Probchi, H, CorrectedH, value : double;
+ Correction, Temp, TieSum, alpha, U, U2, SD, z, prob : double;
+ Ranks, X : DblDyneMat;
+ RankSums : DblDyneVec;
+ cellstring, outline : string;
+begin
+ // Check for data
+ if (NoVariables < 1) then
+ begin
+ ShowMessage('ERROR! You must have grid data!');
+ exit;
+ end;
+
+ // allocate space
+ SetLength(ColNoSelected,NoVariables);
+ SetLength(Ranks,NoCases,2);
+ SetLength(X,NoCases,2);
+
+ // Get column numbers of the independent and dependent variables
+ ind_var := 0;
+ dep_var := 0;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := GrpEdit.Text;
+ if (cellstring = OS3MainFrm.DataGrid.Cells[i,0]) then ind_var := i;
+ cellstring := DepEdit.Text;
+ if (cellstring = OS3MainFrm.DataGrid.Cells[i,0]) then dep_var := i;
+ end;
+ ColNoSelected[0] := ind_var;
+ ColNoSelected[1] := dep_var;
+
+ //get minimum and maximum group codes
+ total_n := 0;
+ NoSelected := 2;
+ min_grp := 10000; //atoi(MainForm.Grid.Cells[ind_var,1].c_str);
+ max_grp := -10000;
+ for i := 1 to NoCases do
+ begin
+ if (not GoodRecord(i,NoSelected,ColNoSelected)) then continue;
+ group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ind_var,i])));
+ if (group < min_grp) then min_grp := group;
+ if (group > max_grp) then max_grp := group;
+ total_n := total_n + 1;
+ end;
+ nogroups := max_grp - min_grp + 1;
+ NoTieGroups := 0;
+ SumT := 0.0;
+ H := 0.0;
+
+ // Initialize arrays
+ SetLength(RankSums,nogroups);
+ SetLength(group_count,nogroups);
+ for i := 0 to nogroups-1 do
+ begin
+ group_count[i] := 0;
+ RankSums[i] := 0.0;
+ end;
+
+ // Setup for printer output
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Kruskal - Wallis One-Way Analysis of Variance');
+ OutPutFrm.RichEdit.Lines.Add('See pages 184-194 in S. Siegel: Nonparametric Statistics for the Behavioral Sciences');
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ // Get data
+ for i := 1 to NoCases do
+ begin
+ if (not GoodRecord(i,NoSelected,ColNoSelected)) then continue;
+ score := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[dep_var,i]));
+ group := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ind_var,i])));
+ group := group - min_grp + 1;
+ if (group > nogroups) then
+ begin
+ ShowMessage('ERROR! Group codes must be sequential like 1 and 2!');
+ goto cleanup;
+ end;
+ group_count[group-1] := group_count[group-1] + 1;
+ X[i-1,0] := score;
+ X[i-1,1] := group;
+ end;
+
+ //Sort all scores in ascending order
+ for i := 1 to total_n - 1 do
+ begin
+ for j := i + 1 to total_n do
+ begin
+ if (X[i-1,0] > X[j-1,0]) then
+ begin
+ Temp := X[i-1,0];
+ X[i-1,0] := X[j-1,0];
+ X[j-1,0] := Temp;
+ Temp := X[i-1,1];
+ X[i-1,1] := X[j-1,1];
+ X[j-1,1] := Temp;
+ end;
+ end;
+ end;
+
+ // Store ranks
+ for i := 0 to total_n-1 do
+ begin
+ Ranks[i,0] := i+1;
+ Ranks[i,1] := X[i,1];
+ end;
+
+ //Check for ties in ranks - replace with average rank and calculate
+ //T for each tie and sum of the T's
+ i := 1;
+ while i < total_n do
+ begin
+ j := i + 1;
+ TieSum := 0;
+ NoTies := 0;
+ while (j < total_n) do
+ begin
+ if (X[j-1,0] > X[i-1,0]) then goto Check1;
+ if (X[j-1,0] = X[i-1,0]) then // match
+ begin
+ TieSum := TieSum + round(Ranks[j-1,0]);
+ NoTies := NoTies + 1;
+ end;
+ j := j + 1;
+ end;
+Check1:
+ if (NoTies > 0) then //At least one tie found
+ begin
+ TieSum := TieSum + Ranks[i-1,0];
+ NoTies := NoTies + 1;
+ Avg := TieSum / NoTies;
+ for j := i to i + NoTies - 1 do Ranks[j-1,0] := Avg;
+ t := Power(NoTies,3) - NoTies;
+ SumT := SumT + t;
+ NoTieGroups := NoTieGroups + 1;
+ i := i + (NoTies - 1);
+ end;
+ i := i + 1;
+ end; // next i
+
+ // Calculate sum of ranks in each group
+ for i := 1 to total_n do
+ begin
+ group := round(Ranks[i-1,1]);
+ RankSums[group-1] := RankSums[group-1] + Ranks[i-1,0];
+ end;
+
+ // Calculate statistics
+ for j := 0 to nogroups-1 do H := H + (RankSums[j] * RankSums[j] / (group_count[j]));
+ H := H * (12.0 / ( total_n * (total_n + 1)) );
+ H := H - (3.0 * (total_n + 1));
+ Correction := 1.0 - ( SumT / (Power(total_n,3) - total_n) );
+ CorrectedH := H / Correction;
+ k := max_grp - min_grp;
+ Probchi := 1.0 - chisquaredprob(H, k);
+
+ // Report results
+ OutPutFrm.RichEdit.Lines.Add(' Score Rank Group');
+ OutPutFrm.RichEdit.Lines.Add('');
+ for i := 1 to total_n do
+ begin
+ outline := format('%10.2f %10.2f %10.0f',
+ [X[i-1,0], Ranks[i-1,0], Ranks[i-1,1]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Sum of Ranks in each Group');
+ OutPutFrm.RichEdit.Lines.Add('Group Sum No. in Group');
+ for i := 1 to nogroups do
+ begin
+ outline := format('%3d %10.2f %5d', [i+min_grp-1, RankSums[i-1],group_count[i-1]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('No. of tied rank groups = %3d',[NoTieGroups]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Statistic H uncorrected for ties = %8.4f',[H]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Correction for Ties = %6.4f',[Correction]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Statistic H corrected for ties = %8.4f',[CorrectedH]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('Corrected H is approx. chi-square with %3d D.F. and probability = %6.4f',[k,Probchi]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ if not MWUChk.Checked then goto cleanup;
+ // do Mann-Whitney U tests on group pairs
+ alpha := StrToFloat(AlphaEdit.Text);
+ npairs := nogroups * (nogroups - 1) div 2;
+ alpha := alpha / npairs;
+ outline := format('New alpha for %d paired comparisons = %5.3f',[npairs, alpha]);
+ ShowMessage(outline);
+ for i := 1 to nogroups - 1 do
+ begin
+ for j := i + 1 to nogroups do
+ begin
+ // Setup for printer output
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Mann-Whitney U Test');
+ OutPutFrm.RichEdit.Lines.Add('See pages 116-127 in S. Siegel: Nonparametric Statistics for the Behavioral Sciences');
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('Comparison of group %d with group %d',[i,j]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ group_count[0] := 0;
+ group_count[1] := 0;
+ RankSums[0] := 0;
+ RankSums[1] := 0;
+ total_n := 0;
+ for k := 1 to NoCases do
+ begin
+ if (not GoodRecord(k,NoSelected,ColNoSelected)) then continue;
+ score := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[dep_var,k]));
+ value := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[ind_var,k]));
+ if round(value) = i then
+ begin
+ X[total_n,0] := score;
+ X[total_n,1] := value;
+ group_count[0] := group_count[0] + 1;
+ total_n := total_n + 1;
+ end;
+ if round(value) = j then
+ begin
+ X[total_n,0] := score;
+ X[total_n,1] := value;
+ group_count[1] := group_count[1] + 1;
+ total_n := total_n + 1;
+ end;
+ end; // next case k
+
+ //Sort all scores in ascending order
+ for k := 1 to total_n - 1 do
+ begin
+ for m := k + 1 to total_n do
+ begin
+ if (X[k-1,0] > X[m-1,0]) then
+ begin
+ Temp := X[k-1,0];
+ X[k-1,0] := X[m-1,0];
+ X[m-1,0] := Temp;
+ Temp := X[k-1,1];
+ X[k-1,1] := X[m-1,1];
+ X[m-1,1] := Temp;
+ end;
+ end;
+ end;
+
+ // get ranks for these two groups
+ for k := 1 to total_n do
+ begin
+ Ranks[k-1,0] := k;
+ Ranks[k-1,1] := X[k-1,1];
+ end;
+
+ //Check for ties in ranks - replace with average rank and calculate
+ //T for each tie and sum of the T's
+ NoTieGroups := 0;
+ k := 1;
+ while k < total_n do
+ begin
+ m := k + 1;
+ TieSum := 0;
+ NoTies := 0;
+ while (m < total_n) do
+ begin
+ if (X[m-1,0] > X[k-1,0]) then goto Check2;
+ if (X[m-1,0] = X[k-1,0]) then // match
+ begin
+ TieSum := TieSum + round(Ranks[m-1,0]);
+ NoTies := NoTies + 1;
+ end;
+ m := m + 1;
+ end;
+ Check2:
+ if (NoTies > 0) then //At least one tie found
+ begin
+ TieSum := TieSum + Ranks[k-1,0];
+ NoTies := NoTies + 1;
+ Avg := TieSum / NoTies;
+ for m := k to k + NoTies - 1 do Ranks[m-1,0] := Avg;
+ t := Power(NoTies,3) - NoTies;
+ SumT := SumT + t;
+ NoTieGroups := NoTieGroups + 1;
+ k := k + (NoTies - 1);
+ end;
+ k := k + 1;
+ end; // next k
+
+ // Calculate sum of ranks in each group
+ for k := 1 to total_n do
+ begin
+ group := round(Ranks[k-1,1]);
+ RankSums[group-1] := RankSums[group-1] + Ranks[k-1,0];
+ end;
+
+ //Calculate U for larger and smaller groups
+ n1 := group_count[0];
+ n2 := group_count[1];
+ if (n1 > n2) then
+ begin
+ group := i-1;
+ U := (n1 * n2) + ((n1 * (n1 + 1)) / 2.0) - RankSums[group];
+ end
+ else
+ begin
+ group := j - 1;
+ U := (n1 * n2) + ((n2 * (n2 + 1)) / 2.0) - RankSums[group];
+ end;
+ U2 := (n1 * n2) - U;
+ SD := (n1 * n2 * (n1 + n2 + 1)) / 12.0;
+ SD := sqrt(SD);
+ if (U2 > U) then z := (U2 - (n1 * n2 / 2)) / SD
+ else z := (U - (n1 * n2 / 2)) / SD;
+ prob := 1.0 - probz(z);
+
+ //Report results
+ OutPutFrm.RichEdit.Lines.Add(' Score Rank Group');
+ OutPutFrm.RichEdit.Lines.Add('');
+ for k := 1 to total_n do
+ begin
+ outline := format('%10.2f %10.2f %10.0f',
+ [X[k-1,0], Ranks[k-1,0], Ranks[k-1,1]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Sum of Ranks in each Group');
+ OutPutFrm.RichEdit.Lines.Add('Group Sum No. in Group');
+ group := i - 1;
+ outline := format('%3d %10.3f %5d', [i, RankSums[group],group_count[0]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ group := j - 1;
+ outline := format('%3d %10.3f %5d', [j, RankSums[group],group_count[1]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := format('No. of tied rank groups = %3d',[NoTieGroups]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ if (n1 > n2) then largestn := n1
+ else largestn := n2;
+ if (largestn < 20) then
+ outline := format('Statistic U = %8.4f',[U])
+ else
+ begin
+ if (U > U2) then outline := format('Statistic U = %8.4f',[U])
+ else outline := format('Statistic U = %8.4f',[U2]);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := format('z Statistic (corrected for ties) = %8.4f, Prob. > z = %6.4f',
+ [z, prob]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ if (n2 < 20) then
+ begin
+ OutPutFrm.RichEdit.Lines.Add('z test is approximate. Use tables of exact probabilities in Siegel.');
+ OutPutFrm.RichEdit.Lines.Add('(Table J or K, pages 271-277)');
+ end;
+ OutPutFrm.ShowModal;
+ end; // next group j
+ end; // next group i
+cleanup:
+ group_count := nil;
+ RankSums := nil;
+ X := nil;
+ Ranks := nil;
+ ColNoSelected := nil;
+end;
+
+procedure TKWAnovaFrm.DepOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(DepEdit.Text);
+ DepEdit.Text := '';
+ DepIn.Visible := true;
+ DepOut.Visible := false;
+end;
+
+procedure TKWAnovaFrm.GrpInClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ GrpEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ GrpIn.Visible := false;
+ GrpOut.Visible := true;
+end;
+
+procedure TKWAnovaFrm.GrpOutClick(Sender: TObject);
+begin
+ VarList.Items.Add(GrpEdit.Text);
+ GrpEdit.Text := '';
+ GrpIn.Visible := true;
+ GrpOut.Visible := false;
+end;
+
+initialization
+ {$I kwanovaunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/latinspecsunit.lfm b/applications/lazstats/source_orig/latinspecsunit.lfm
new file mode 100644
index 000000000..f52c0e9f8
--- /dev/null
+++ b/applications/lazstats/source_orig/latinspecsunit.lfm
@@ -0,0 +1,706 @@
+object LatinSpecsFrm: TLatinSpecsFrm
+ Left = 163
+ Height = 566
+ Top = 51
+ Width = 493
+ Caption = 'Latin Squares Analysis Specification Form'
+ ClientHeight = 566
+ ClientWidth = 493
+ OnShow = FormShow
+ LCLVersion = '0.9.26.2'
+ object Label1: TLabel
+ Left = 9
+ Height = 14
+ Top = 7
+ Width = 63
+ Caption = 'File Variables'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 280
+ Height = 14
+ Top = 26
+ Width = 111
+ Caption = 'Factor A Code Variable'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 279
+ Height = 14
+ Top = 105
+ Width = 110
+ Caption = 'Factor B Code Variable'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 280
+ Height = 14
+ Top = 183
+ Width = 111
+ Caption = 'Factor C Code Variable'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 281
+ Height = 14
+ Top = 265
+ Width = 111
+ Caption = 'Factor D Code Variable'
+ ParentColor = False
+ end
+ object Label6: TLabel
+ Left = 281
+ Height = 14
+ Top = 352
+ Width = 99
+ Caption = 'Group Code Variable'
+ ParentColor = False
+ end
+ object Label7: TLabel
+ Left = 280
+ Height = 14
+ Top = 431
+ Width = 95
+ Caption = 'Dependent Variable'
+ ParentColor = False
+ end
+ object Label8: TLabel
+ Left = 231
+ Height = 14
+ Top = 504
+ Width = 62
+ Caption = 'No. per cell: '
+ ParentColor = False
+ end
+ object VarList: TListBox
+ Left = 8
+ Height = 504
+ Top = 29
+ Width = 210
+ TabOrder = 0
+ end
+ object AInBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 25
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = AInBtnClick
+ TabOrder = 1
+ end
+ object AOutBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 56
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = AOutBtnClick
+ TabOrder = 2
+ end
+ object BInBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 104
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = BInBtnClick
+ TabOrder = 3
+ end
+ object BOutBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 136
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = BOutBtnClick
+ TabOrder = 4
+ end
+ object CInBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 184
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = CInBtnClick
+ TabOrder = 5
+ end
+ object COutBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 216
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = COutBtnClick
+ TabOrder = 6
+ end
+ object DInBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 264
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DInBtnClick
+ TabOrder = 7
+ end
+ object DOutBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 296
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DOutBtnClick
+ TabOrder = 8
+ end
+ object GrpInBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 352
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = GrpInBtnClick
+ TabOrder = 9
+ end
+ object GrpOutBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 384
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = GrpOutBtnClick
+ TabOrder = 10
+ end
+ object DataInBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 432
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DataInBtnClick
+ TabOrder = 11
+ end
+ object DataOutBtn: TBitBtn
+ Left = 232
+ Height = 28
+ Top = 464
+ Width = 33
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DataOutBtnClick
+ TabOrder = 12
+ end
+ object ACodeEdit: TEdit
+ Left = 278
+ Height = 20
+ Top = 42
+ Width = 155
+ TabOrder = 13
+ Text = 'ACodeEdit'
+ end
+ object BCodeEdit: TEdit
+ Left = 280
+ Height = 20
+ Top = 120
+ Width = 155
+ TabOrder = 14
+ Text = 'Edit1'
+ end
+ object CCodeEdit: TEdit
+ Left = 278
+ Height = 20
+ Top = 200
+ Width = 155
+ TabOrder = 15
+ Text = 'Edit1'
+ end
+ object DCodeEdit: TEdit
+ Left = 278
+ Height = 20
+ Top = 280
+ Width = 155
+ TabOrder = 16
+ Text = 'Edit1'
+ end
+ object GrpCodeEdit: TEdit
+ Left = 280
+ Height = 20
+ Top = 368
+ Width = 155
+ TabOrder = 17
+ Text = 'Edit1'
+ end
+ object DepVarEdit: TEdit
+ Left = 278
+ Height = 20
+ Top = 448
+ Width = 155
+ TabOrder = 18
+ Text = 'Edit1'
+ end
+ object ResetBtn: TButton
+ Left = 232
+ Height = 30
+ Top = 528
+ Width = 74
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 19
+ end
+ object CancelBtn: TButton
+ Left = 315
+ Height = 30
+ Top = 528
+ Width = 74
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 20
+ end
+ object OKBtn: TButton
+ Left = 400
+ Height = 30
+ Top = 528
+ Width = 74
+ Caption = 'OK'
+ ModalResult = 1
+ OnClick = OKBtnClick
+ TabOrder = 21
+ end
+ object nPerCellEdit: TEdit
+ Left = 296
+ Height = 19
+ Top = 495
+ Width = 48
+ TabOrder = 22
+ Text = 'nPerCellEdit'
+ end
+end
diff --git a/applications/lazstats/source_orig/latinspecsunit.lrs b/applications/lazstats/source_orig/latinspecsunit.lrs
new file mode 100644
index 000000000..549f4e342
--- /dev/null
+++ b/applications/lazstats/source_orig/latinspecsunit.lrs
@@ -0,0 +1,658 @@
+LazarusResources.Add('TLatinSpecsFrm','FORMDATA',[
+ 'TPF0'#14'TLatinSpecsFrm'#13'LatinSpecsFrm'#4'Left'#3#163#0#6'Height'#3'6'#2#3
+ +'Top'#2'3'#5'Width'#3#237#1#7'Caption'#6')Latin Squares Analysis Specificati'
+ +'on Form'#12'ClientHeight'#3'6'#2#11'ClientWidth'#3#237#1#6'OnShow'#7#8'Form'
+ +'Show'#10'LCLVersion'#6#8'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6'Heig'
+ +'ht'#2#14#3'Top'#2#7#5'Width'#2'?'#7'Caption'#6#14'File Variables'#11'Parent'
+ +'Color'#8#0#0#6'TLabel'#6'Label2'#4'Left'#3#24#1#6'Height'#2#14#3'Top'#2#26#5
+ +'Width'#2'o'#7'Caption'#6#22'Factor A Code Variable'#11'ParentColor'#8#0#0#6
+ +'TLabel'#6'Label3'#4'Left'#3#23#1#6'Height'#2#14#3'Top'#2'i'#5'Width'#2'n'#7
+ +'Caption'#6#22'Factor B Code Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Lab'
+ +'el4'#4'Left'#3#24#1#6'Height'#2#14#3'Top'#3#183#0#5'Width'#2'o'#7'Caption'#6
+ +#22'Factor C Code Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'
+ +#3#25#1#6'Height'#2#14#3'Top'#3#9#1#5'Width'#2'o'#7'Caption'#6#22'Factor D C'
+ +'ode Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#3#25#1#6'He'
+ +'ight'#2#14#3'Top'#3'`'#1#5'Width'#2'c'#7'Caption'#6#19'Group Code Variable'
+ +#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#3#24#1#6'Height'#2#14#3'T'
+ +'op'#3#175#1#5'Width'#2'_'#7'Caption'#6#18'Dependent Variable'#11'ParentColo'
+ +'r'#8#0#0#6'TLabel'#6'Label8'#4'Left'#3#231#0#6'Height'#2#14#3'Top'#3#248#1#5
+ +'Width'#2'>'#7'Caption'#6#14'No. per cell: '#11'ParentColor'#8#0#0#8'TListBo'
+ +'x'#7'VarList'#4'Left'#2#8#6'Height'#3#248#1#3'Top'#2#29#5'Width'#3#210#0#8
+ +'TabOrder'#2#0#0#0#7'TBitBtn'#6'AInBtn'#4'Left'#3#232#0#6'Height'#2#28#3'Top'
+ +#2#25#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'
+ +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0
+ +#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%'
+ +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'
+ +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'
+ +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'
+ +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255
+ +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152
+ +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193
+ +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'
+ +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255
+ +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139
+ +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255
+ +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'
+ +#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'
+ +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'
+ +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'
+ +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7
+ +'OnClick'#7#11'AInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#7'AOutBtn'#4'Left'
+ +#3#232#0#6'Height'#2#28#3'Top'#2'8'#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0
+ +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0
+ +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'
+ +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255
+ +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152
+ +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255
+ +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!'
+ +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'AOutBtnClick'#8'TabOrd'
+ +'er'#2#2#0#0#7'TBitBtn'#6'BInBtn'#4'Left'#3#232#0#6'Height'#2#28#3'Top'#2'h'
+ +#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0
+ +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0
+ +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'
+ +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139
+ +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160
+ +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255
+ +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128
+ +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199
+ +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150
+ +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255
+ +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255
+ +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255
+ +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163
+ +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247
+ +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187
+ +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl'
+ +'ick'#7#11'BInBtnClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#7'BOutBtn'#4'Left'#3
+ +#232#0#6'Height'#2#28#3'Top'#3#136#0#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0
+ +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0
+ +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'
+ +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255
+ +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152
+ +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255
+ +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!'
+ +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'BOutBtnClick'#8'TabOrd'
+ +'er'#2#4#0#0#7'TBitBtn'#6'CInBtn'#4'Left'#3#232#0#6'Height'#2#28#3'Top'#3#184
+ +#0#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0
+ +#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0
+ +#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%'
+ +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'
+ +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'
+ +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'
+ +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255
+ +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152
+ +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193
+ +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'
+ +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255
+ +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139
+ +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255
+ +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'
+ ,#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'
+ +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'
+ +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'
+ +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7
+ +'OnClick'#7#11'CInBtnClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#7'COutBtn'#4'Left'
+ +#3#232#0#6'Height'#2#28#3'Top'#3#216#0#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0
+ +#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0
+ +#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'
+ +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255
+ +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152
+ +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255
+ +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!'
+ +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'COutBtnClick'#8'TabOrd'
+ +'er'#2#6#0#0#7'TBitBtn'#6'DInBtn'#4'Left'#3#232#0#6'Height'#2#28#3'Top'#3#8#1
+ +#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0
+ +#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0
+ +#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'
+ +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139
+ +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160
+ +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255
+ +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128
+ +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199
+ +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150
+ +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255
+ +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255
+ +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255
+ +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163
+ +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247
+ +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187
+ +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl'
+ +'ick'#7#11'DInBtnClick'#8'TabOrder'#2#7#0#0#7'TBitBtn'#7'DOutBtn'#4'Left'#3
+ +#232#0#6'Height'#2#28#3'Top'#3'('#1#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0
+ +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0
+ +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'
+ +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255
+ +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152
+ +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255
+ +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!'
+ +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#12'DOutBtnClick'#8'TabOrd'
+ +'er'#2#8#0#0#7'TBitBtn'#8'GrpInBtn'#4'Left'#3#232#0#6'Height'#2#28#3'Top'#3
+ +'`'#1#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'
+ +#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0
+ +#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ ,#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%'
+ +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'
+ +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'
+ +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'
+ +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255
+ +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152
+ +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193
+ +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'
+ +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255
+ +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139
+ +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255
+ +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'
+ +#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'
+ +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'
+ +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'
+ +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7
+ +'OnClick'#7#13'GrpInBtnClick'#8'TabOrder'#2#9#0#0#7'TBitBtn'#9'GrpOutBtn'#4
+ +'Left'#3#232#0#6'Height'#2#28#3'Top'#3#128#1#5'Width'#2'!'#10'Glyph.Data'#10
+ +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0
+ +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255
+ +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213
+ +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135
+ +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'
+ +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255
+ +#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154
+ +#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194
+ ,#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'
+ +#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169
+ +'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255
+ +'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'
+ +#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199
+ +'t'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'GrpOutBtnClick'#8
+ +'TabOrder'#2#10#0#0#7'TBitBtn'#9'DataInBtn'#4'Left'#3#232#0#6'Height'#2#28#3
+ +'Top'#3#176#1#5'Width'#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0
+ +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0
+ +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'
+ +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'
+ +#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0
+ +'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157
+ +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195
+ +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0
+ +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255
+ +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144
+ +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201
+ +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#9'NumGlyphs'#2#0#7'OnClick'#7#14'DataInBtnClick'#8'TabOrder'#2#11#0#0#7'TBi'
+ +'tBtn'#10'DataOutBtn'#4'Left'#3#232#0#6'Height'#2#28#3'Top'#3#208#1#5'Width'
+ +#2'!'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0
+ +#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255
+ +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%'
+ +'i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200
+ +#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139
+ +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'
+ +#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201
+ +''#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159
+ +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197
+ +#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'
+ +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'
+ +#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#15
+ +'DataOutBtnClick'#8'TabOrder'#2#12#0#0#5'TEdit'#9'ACodeEdit'#4'Left'#3#22#1#6
+ +'Height'#2#20#3'Top'#2'*'#5'Width'#3#155#0#8'TabOrder'#2#13#4'Text'#6#9'ACod'
+ +'eEdit'#0#0#5'TEdit'#9'BCodeEdit'#4'Left'#3#24#1#6'Height'#2#20#3'Top'#2'x'#5
+ ,'Width'#3#155#0#8'TabOrder'#2#14#4'Text'#6#5'Edit1'#0#0#5'TEdit'#9'CCodeEdit'
+ +#4'Left'#3#22#1#6'Height'#2#20#3'Top'#3#200#0#5'Width'#3#155#0#8'TabOrder'#2
+ +#15#4'Text'#6#5'Edit1'#0#0#5'TEdit'#9'DCodeEdit'#4'Left'#3#22#1#6'Height'#2
+ +#20#3'Top'#3#24#1#5'Width'#3#155#0#8'TabOrder'#2#16#4'Text'#6#5'Edit1'#0#0#5
+ +'TEdit'#11'GrpCodeEdit'#4'Left'#3#24#1#6'Height'#2#20#3'Top'#3'p'#1#5'Width'
+ +#3#155#0#8'TabOrder'#2#17#4'Text'#6#5'Edit1'#0#0#5'TEdit'#10'DepVarEdit'#4'L'
+ +'eft'#3#22#1#6'Height'#2#20#3'Top'#3#192#1#5'Width'#3#155#0#8'TabOrder'#2#18
+ +#4'Text'#6#5'Edit1'#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#232#0#6'Height'#2#30
+ +#3'Top'#3#16#2#5'Width'#2'J'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnC'
+ +'lick'#8'TabOrder'#2#19#0#0#7'TButton'#9'CancelBtn'#4'Left'#3';'#1#6'Height'
+ +#2#30#3'Top'#3#16#2#5'Width'#2'J'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2
+ +#8'TabOrder'#2#20#0#0#7'TButton'#5'OKBtn'#4'Left'#3#144#1#6'Height'#2#30#3'T'
+ +'op'#3#16#2#5'Width'#2'J'#7'Caption'#6#2'OK'#11'ModalResult'#2#1#7'OnClick'#7
+ +#10'OKBtnClick'#8'TabOrder'#2#21#0#0#5'TEdit'#12'nPerCellEdit'#4'Left'#3'('#1
+ +#6'Height'#2#19#3'Top'#3#239#1#5'Width'#2'0'#8'TabOrder'#2#22#4'Text'#6#12'n'
+ +'PerCellEdit'#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/latinspecsunit.pas b/applications/lazstats/source_orig/latinspecsunit.pas
new file mode 100644
index 000000000..629dceeb9
--- /dev/null
+++ b/applications/lazstats/source_orig/latinspecsunit.pas
@@ -0,0 +1,208 @@
+unit LatinSpecsUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, MainUnit, Globals;
+
+type
+
+ { TLatinSpecsFrm }
+
+ TLatinSpecsFrm = class(TForm)
+ AInBtn: TBitBtn;
+ nPerCellEdit: TEdit;
+ GrpOutBtn: TBitBtn;
+ DataInBtn: TBitBtn;
+ DataOutBtn: TBitBtn;
+ AOutBtn: TBitBtn;
+ BInBtn: TBitBtn;
+ BOutBtn: TBitBtn;
+ CInBtn: TBitBtn;
+ COutBtn: TBitBtn;
+ DInBtn: TBitBtn;
+ DOutBtn: TBitBtn;
+ GrpInBtn: TBitBtn;
+ Label8: TLabel;
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ OKBtn: TButton;
+ ACodeEdit: TEdit;
+ BCodeEdit: TEdit;
+ CCodeEdit: TEdit;
+ DCodeEdit: TEdit;
+ GrpCodeEdit: TEdit;
+ DepVarEdit: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ Label5: TLabel;
+ Label6: TLabel;
+ Label7: TLabel;
+ VarList: TListBox;
+ procedure AInBtnClick(Sender: TObject);
+ procedure AOutBtnClick(Sender: TObject);
+ procedure BInBtnClick(Sender: TObject);
+ procedure BOutBtnClick(Sender: TObject);
+ procedure CInBtnClick(Sender: TObject);
+ procedure COutBtnClick(Sender: TObject);
+ procedure DataInBtnClick(Sender: TObject);
+ procedure DataOutBtnClick(Sender: TObject);
+ procedure DInBtnClick(Sender: TObject);
+ procedure DOutBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure GrpInBtnClick(Sender: TObject);
+ procedure GrpOutBtnClick(Sender: TObject);
+ procedure OKBtnClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ LatinSpecsFrm: TLatinSpecsFrm;
+
+implementation
+uses LatinSqrsUnit;
+
+
+{ TLatinSpecsFrm }
+
+procedure TLatinSpecsFrm.ResetBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ VarList.Clear;
+ for i := 1 to NoVariables do
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+end;
+
+procedure TLatinSpecsFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(Self);
+end;
+
+procedure TLatinSpecsFrm.GrpInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ GrpCodeEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ GrpInBtn.Visible := false;
+ GrpOutBtn.Visible := true;
+end;
+
+procedure TLatinSpecsFrm.GrpOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(GrpCodeEdit.Text);
+ GrpCodeEdit.Text := '';
+ GrpInBtn.Visible := true;
+ GrpOutBtn.Visible := false;
+end;
+
+procedure TLatinSpecsFrm.AInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ ACodeEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ AinBtn.Visible := false;
+ AOutBtn.Visible := true;
+end;
+
+procedure TLatinSpecsFrm.AOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(ACodeEdit.Text);
+ ACodeEdit.Text := '';
+ AinBtn.Visible := true;
+ AOutBtn.Visible := false;
+end;
+
+procedure TLatinSpecsFrm.BInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ BCodeEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ BinBtn.Visible := false;
+ BOutBtn.Visible := true;
+end;
+
+procedure TLatinSpecsFrm.BOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(BCodeEdit.Text);
+ BCodeEdit.Text := '';
+ BinBtn.Visible := true;
+ BOutBtn.Visible := false;
+end;
+
+procedure TLatinSpecsFrm.CInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ CCodeEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ CinBtn.Visible := false;
+ COutBtn.Visible := true;
+end;
+
+procedure TLatinSpecsFrm.COutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(CCodeEdit.Text);
+ CCodeEdit.Text := '';
+ CinBtn.Visible := true;
+ COutBtn.Visible := false;
+end;
+
+procedure TLatinSpecsFrm.DataInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ DepVarEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ DataInBtn.Visible := false;
+ DataOutBtn.Visible := true;
+end;
+
+procedure TLatinSpecsFrm.DataOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(DepVarEdit.Text);
+ DepVarEdit.Text := '';
+ DataInBtn.Visible := true;
+ DataOutBtn.Visible := false;
+end;
+
+procedure TLatinSpecsFrm.DInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ DCodeEdit.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ DinBtn.Visible := false;
+ DOutBtn.Visible := true;
+end;
+
+procedure TLatinSpecsFrm.DOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(DCodeEdit.Text);
+ DCodeEdit.Text := '';
+ DinBtn.Visible := true;
+ DOutBtn.Visible := false;
+end;
+
+procedure TLatinSpecsFrm.OKBtnClick(Sender: TObject);
+begin
+ LatinSpecsFrm.Hide;
+ ModalResult := mrOK;
+end;
+
+initialization
+ {$I latinspecsunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/latinsqrsunit.lfm b/applications/lazstats/source_orig/latinsqrsunit.lfm
new file mode 100644
index 000000000..543d9e9d6
--- /dev/null
+++ b/applications/lazstats/source_orig/latinsqrsunit.lfm
@@ -0,0 +1,69 @@
+object LatinSqrsFrm: TLatinSqrsFrm
+ Left = 199
+ Height = 313
+ Top = 108
+ Width = 514
+ Caption = 'Latin and Greco-Latin Squares Analyses'
+ ClientHeight = 313
+ ClientWidth = 514
+ LCLVersion = '0.9.28.2'
+ object CancelBtn: TButton
+ Left = 208
+ Height = 28
+ Top = 272
+ Width = 74
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 0
+ end
+ object OKBtn: TButton
+ Left = 424
+ Height = 28
+ Top = 272
+ Width = 74
+ Caption = 'OK'
+ ModalResult = 1
+ OnClick = OKBtnClick
+ TabOrder = 1
+ end
+ object Plan: TRadioGroup
+ Left = 8
+ Height = 246
+ Top = 8
+ Width = 493
+ AutoFill = True
+ Caption = 'Winer''s Plans:'
+ ChildSizing.LeftRightSpacing = 6
+ ChildSizing.TopBottomSpacing = 6
+ ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
+ ChildSizing.EnlargeVertical = crsHomogenousChildResize
+ ChildSizing.ShrinkHorizontal = crsScaleChilds
+ ChildSizing.ShrinkVertical = crsScaleChilds
+ ChildSizing.Layout = cclLeftToRightThenTopToBottom
+ ChildSizing.ControlsPerLine = 1
+ ClientHeight = 228
+ ClientWidth = 489
+ Items.Strings = (
+ 'Plan 1. Three Factors (A,B,C) with no interactions.'
+ 'Plan 2. Four Factors (A,B,C,D) with partial interactions.'
+ 'Plan 3. Like Plan 2 but different assumptions (Partial confounding of interaction ABC.)'
+ 'The Greco-Latin with no interactions assumed.'
+ 'Plan 5. Repeated measures Latin Square (random assignment of groups to rows.)'
+ 'Plan 6. Fractional replication of a three factor factorial experiment in incomplete blocks.'
+ 'Plan 7. Plan 5 with superimposing of an orthogonal Latin square.'
+ 'Plan 9. AxBxC (same square used for all levels of Factor C.)'
+ )
+ OnClick = PlanClick
+ TabOrder = 2
+ end
+ object HelpBtn: TButton
+ Tag = 130
+ Left = 8
+ Height = 28
+ Top = 272
+ Width = 81
+ Caption = 'Help'
+ OnClick = HelpBtnClick
+ TabOrder = 3
+ end
+end
diff --git a/applications/lazstats/source_orig/latinsqrsunit.lrs b/applications/lazstats/source_orig/latinsqrsunit.lrs
new file mode 100644
index 000000000..10ee25cec
--- /dev/null
+++ b/applications/lazstats/source_orig/latinsqrsunit.lrs
@@ -0,0 +1,30 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLatinSqrsFrm','FORMDATA',[
+ 'TPF0'#13'TLatinSqrsFrm'#12'LatinSqrsFrm'#4'Left'#3#199#0#6'Height'#3'9'#1#3
+ +'Top'#2'l'#5'Width'#3#2#2#7'Caption'#6'&Latin and Greco-Latin Squares Analys'
+ +'es'#12'ClientHeight'#3'9'#1#11'ClientWidth'#3#2#2#10'LCLVersion'#6#8'0.9.28'
+ +'.2'#0#7'TButton'#9'CancelBtn'#4'Left'#3#208#0#6'Height'#2#28#3'Top'#3#16#1#5
+ +'Width'#2'J'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#0#0#0#7
+ +'TButton'#5'OKBtn'#4'Left'#3#168#1#6'Height'#2#28#3'Top'#3#16#1#5'Width'#2'J'
+ +#7'Caption'#6#2'OK'#11'ModalResult'#2#1#7'OnClick'#7#10'OKBtnClick'#8'TabOrd'
+ +'er'#2#1#0#0#11'TRadioGroup'#4'Plan'#4'Left'#2#8#6'Height'#3#246#0#3'Top'#2#8
+ +#5'Width'#3#237#1#8'AutoFill'#9#7'Caption'#6#14'Winer''s Plans:'#28'ChildSiz'
+ +'ing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizi'
+ +'ng.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.Enlarge'
+ +'Vertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7
+ +#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'C'
+ +'hildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.Contr'
+ +'olsPerLine'#2#1#12'ClientHeight'#3#228#0#11'ClientWidth'#3#233#1#13'Items.S'
+ +'trings'#1#6'5Plan 1. Three Factors (A,B,C) with no interactions.'#6';Plan'
+ +' 2. Four Factors (A,B,C,D) with partial interactions.'#6'YPlan 3. Like '
+ +'Plan 2 but different assumptions (Partial confounding of interaction ABC.)'
+ +#6'-The Greco-Latin with no interactions assumed.'#6'OPlan 5. Repeated mea'
+ +'sures Latin Square (random assignment of groups to rows.)'#6']Plan 6. Fra'
+ +'ctional replication of a three factor factorial experiment in incomplete bl'
+ +'ocks.'#6'BPlan 7. Plan 5 with superimposing of an orthogonal Latin square'
+ +'.'#6'>Plan 9. AxBxC (same square used for all levels of Factor C.)'#0#7'O'
+ +'nClick'#7#9'PlanClick'#8'TabOrder'#2#2#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3
+ +#130#0#4'Left'#2#8#6'Height'#2#28#3'Top'#3#16#1#5'Width'#2'Q'#7'Caption'#6#4
+ +'Help'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#3#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/latinsqrsunit.pas b/applications/lazstats/source_orig/latinsqrsunit.pas
new file mode 100644
index 000000000..e4f683805
--- /dev/null
+++ b/applications/lazstats/source_orig/latinsqrsunit.pas
@@ -0,0 +1,4491 @@
+unit LatinSqrsUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, LatinSpecsUnit, MainUnit, Globals, FunctionsLib,
+ OutPutUnit, GraphLib, DataProcs, MatrixLib, ExtCtrls, contexthelpunit;
+
+type
+
+ { TLatinSqrsFrm }
+
+ TLatinSqrsFrm = class(TForm)
+ CancelBtn: TButton;
+ HelpBtn: TButton;
+ OKBtn: TButton;
+ Plan: TRadioGroup;
+ procedure HelpBtnClick(Sender: TObject);
+ procedure OKBtnClick(Sender: TObject);
+ procedure PlanClick(Sender: TObject);
+ private
+ { private declarations }
+ Btn : integer;
+ procedure Plan1(Sender: TObject);
+ procedure Plan2(Sender: TObject);
+ procedure Plan3(Sender: TObject);
+ procedure Plan4(Sender: TObject);
+ procedure Plan5(Sender: TObject);
+ procedure Plan6(Sender: TObject);
+ procedure Plan7(Sender: TObject);
+// procedure Plan8(Sender: TObject);
+ procedure Plan9(Sender: TObject);
+
+ public
+ { public declarations }
+ end;
+
+var
+ LatinSqrsFrm: TLatinSqrsFrm;
+
+implementation
+
+{ TLatinSqrsFrm }
+
+procedure TLatinSqrsFrm.OKBtnClick(Sender: TObject);
+begin
+ case Btn of
+ 1 : begin
+ Plan1(Self);
+ end;
+ 2 : begin
+ Plan2(Self);
+ end;
+ 3 : begin
+ Plan3(Self);
+ end;
+ 4 : begin
+ Plan4(Self);
+ end;
+ 5 : begin
+ Plan5(Self);
+ end;
+ 6 : begin
+ Plan6(Self);
+ end;
+ 7 : begin
+ Plan7(Self);
+ end;
+ 8 : begin
+ Plan9(Self);
+ end;
+ end;
+ LatinSqrsFrm.Hide;
+end;
+
+procedure TLatinSqrsFrm.HelpBtnClick(Sender: TObject);
+begin
+ ContextHelpForm.HelpMessage((Sender as TButton).tag);
+end;
+
+procedure TLatinSqrsFrm.PlanClick(Sender: TObject);
+begin
+ Btn := Plan.ItemIndex + 1;
+end;
+
+procedure TLatinSqrsFrm.Plan1(Sender: TObject);
+label cleanup;
+var
+ NoFactors : integer;
+ n : integer; // no. of subjects per cell
+ Acol, Bcol, Ccol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ FactorC : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, minA, minB, minC, maxA, maxB, maxC, rangeA, rangeB, rangeC : integer;
+ value : integer;
+ cellcnts : IntDyneMat;
+ celltotals : DblDyneMat;
+ Ctotals : DblDyneVec;
+ design : StrDyneMat;
+ G, term1, term2, term3, term4, term5, term6, sumxsqr : double;
+ sumAsqr, sumBsqr, sumCsqr, sumABCsqr, SSA, SSB, SSC : double;
+ SSbetween, SSwithin, SSres, SStotal : double;
+ MSa, MSb, MSc, MSres, MSwithin : double;
+ data, GrandMean : double;
+ p, row, col, slice : integer;
+ dfa, dfb, dfc, dfres, dfwithin, dftotal, fa, fb, fc, fpartial : double;
+ proba, probb, probc, probpartial : double;
+
+begin
+ NoFactors := 3;
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.Label5.Visible := false;
+ LatinSpecsFrm.Label6.Visible := false;
+ LatinSpecsFrm.DinBtn.Visible := false;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := false;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.GrpCodeEdit.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text);
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of cases per cell.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ FactorC := LatinSpecsFrm.CCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then ACol := i;
+ if (cellstring = FactorB) then BCol := i;
+ if (cellstring = FactorC) then Ccol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+ // determine no. of levels in A, B and C
+ minA := 1000;
+ minB := 1000;
+ minC := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ maxC := -1000;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[ACol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[BCol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ if value < minC then minC := value;
+ if value > maxC then maxC := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeC := maxC - minC + 1;
+
+ // check for squareness
+ if ( (rangeA <> rangeB) or (rangeA <> rangeC) or (rangeB <> rangeC)) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should all be equal!');
+ exit;
+ end;
+ p := rangeA;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(cellcnts,rangeA+1,rangeB+1);
+ SetLength(celltotals,rangeA+1,rangeB+1);
+ SetLength(Ctotals,rangeC+1);
+ SetLength(Design,rangeA,rangeB);
+
+ // initialize arrays and values
+ for i := 0 to rangeA do
+ begin
+ for j := 0 to rangeB do
+ begin
+ cellcnts[i,j] := 0;
+ celltotals[i,j] := 0.0;
+ end;
+ end;
+ for i := 0 to rangeC-1 do Ctotals[i] := 0;
+ G := 0.0;
+ sumxsqr := 0.0;
+ sumAsqr := 0.0;
+ sumBsqr := 0.0;
+ sumCsqr := 0.0;
+ sumABCsqr := 0.0;
+ term1 := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ GrandMean := 0.0;
+
+ // Read in the data
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,i]);
+ cellcnts[row-1,col-1] := cellcnts[row-1,col-1] + 1;
+ celltotals[row-1,col-1] := celltotals[row-1,col-1] + data;
+ Ctotals[slice-1] := Ctotals[slice-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ GrandMean := GrandMean + data;
+ end;
+
+ // check for equal cell counts
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ if cellcnts[i,j] <> n then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+ end;
+
+ // calculate values
+ for i := 0 to p - 1 do // get row and column sums
+ begin
+ for j := 0 to p-1 do
+ begin
+ celltotals[i,p] := celltotals[i,p] + celltotals[i,j];
+ celltotals[p,j] := celltotals[p,j] + celltotals[i,j];
+ sumABCsqr := sumABCsqr + (celltotals[i,j] * celltotals[i,j]);
+ end;
+ end;
+ for i := 0 to p-1 do G := G + Ctotals[i];
+ term1 := (G * G) / (n * p * p);
+ term2 := sumxsqr;
+ for i := 0 to p-1 do // sum of squared A's
+ sumAsqr := sumAsqr + (celltotals[i,p] * celltotals[i,p]);
+ for i := 0 to p-1 do // sum of squared B's
+ sumBsqr := sumBsqr + (celltotals[p,i] * celltotals[p,i]);
+ for i := 0 to p-1 do // sum of squared C's
+ sumCsqr := sumCsqr + (Ctotals[i] * Ctotals[i]);
+ term3 := sumAsqr / (n * p);
+ term4 := sumBsqr / (n * p);
+ term5 := sumCsqr / (n * p);
+ term6 := sumABCsqr / n;
+ SSA := term3 - term1;
+ SSB := term4 - term1;
+ SSC := term5 - term1;
+ SSbetween := term6 - term1;
+ SSwithin := term2 - term6;
+ SSres := term6 - term3 - term4 - term5 + 2 * term1;
+ SStotal := SSA + SSB + SSC + SSres + SSwithin;
+ dfa := p-1;
+ dfb := p-1;
+ dfc := p-1;
+ dfres := (p-1) * (p-2);
+ dfwithin := (p * p) * (n - 1);
+ dftotal := n * p * p - 1;
+ MSa := SSA / dfa;
+ MSb := SSB / dfb;
+ MSc := SSC / dfc;
+ MSres := SSres / dfres;
+ MSwithin := SSwithin / dfwithin;
+ fa := MSa / MSwithin;
+ fb := MSb / MSwithin;
+ fc := MSc / MSwithin;
+ fpartial := MSres / MSwithin;
+ proba := probf(fa,dfa,dfwithin);
+ probb := probf(fb,dfb,dfwithin);
+ probc := probf(fc,dfc,dfwithin);
+ probpartial := probf(fpartial,dfres,dfwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Latin Square Analysis Plan 1 Results');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSA,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSB,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSC,dfc,MSc,fc,probc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Residual ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSres,dfres,MSres,fpartial,probpartial]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Within ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSwithin, dfwithin, MSwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+
+ // show design
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Experimental Design');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ Design[row-1,col-1] := 'C' + IntToStr(slice);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // show table cell means
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ celltotals[i,j] := celltotals[i,j] / n;
+ for i := 0 to p-1 do
+ begin
+ celltotals[i,p] := celltotals[i,p] / (p * n);
+ celltotals[p,i] := celltotals[p,i] / (p * n);
+ end;
+ GrandMean := GrandMean / (p * p * n);
+ for i := 0 to p-1 do Ctotals[i] := Ctotals[i] / (p * n);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell means and totals');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[celltotals[i,j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[celltotals[i,p]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := 'Total ';
+ for j := 0 to p-1 do
+ cellstring := cellstring + format(' %8.3f ',[celltotals[p,j]]);
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // show category means
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorC]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Ctotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.ShowModal;
+
+cleanup:
+ Design := nil;
+ Ctotals := nil;
+ celltotals := nil;
+ cellcnts := nil;
+end;
+
+procedure TLatinSqrsFrm.Plan2(Sender: TObject);
+label cleanup;
+var
+ NoFactors : integer;
+ n : integer; // no. of subjects per cell
+ Acol, Bcol, Ccol, Dcol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ FactorC : string;
+ FactorD : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, k, minA, minB, minC, maxA, maxB, maxC : integer;
+ minD, maxD, rangeD, rangeA, rangeB, rangeC : integer;
+ value : integer;
+ cellcnts : IntDyneCube;
+ celltotals : DblDyneCube;
+ Ctotals : DblDyneVec;
+ design : StrDyneMat;
+ G, term1, term2, term3, term4, term5, term6, term7, term8 : double;
+ term9, sumxsqr : double;
+ sumAsqr, sumBsqr, sumCsqr, sumDsqr, SSA, SSB, SSC, SSD : double;
+ sumADsqr, sumBDsqr, sumCDsqr : double;
+ ADmat, BDmat, CDmat : DblDyneMat;
+ SSAD, SSBD, SSCD, SSbetween, SSwithin, SSres, SStotal : double;
+ MSa, MSb, MSc, MSd, MSAD, MSBD, MSCD, MSres, MSwithin : double;
+ data, GrandMean : double;
+ p, row, col, slice, block : integer;
+ dfa, dfb, dfc, dfres, dfwithin, dftotal, fa, fb, fc, fpartial : double;
+ dfd, fd, fad, fbd, fcd, fabc, dfad, dfbd, dfcd : double;
+ proba, probb, probc, probd, probpartial : double;
+ probad, probbd, probcd, probabc : double;
+
+begin
+ NoFactors := 4;
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.DCodeEdit.Visible := true;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Visible := false;
+ LatinSpecsFrm.Label5.Visible := true;
+ LatinSpecsFrm.Label6.Visible := false;
+ LatinSpecsFrm.DinBtn.Visible := true;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := false;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text);
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of cases per cell.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ FactorC := LatinSpecsFrm.CCodeEdit.Text;
+ FactorD := LatinSpecsFrm.DCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then ACol := i;
+ if (cellstring = FactorB) then BCol := i;
+ if (cellstring = FactorC) then Ccol := i;
+ if (cellstring = FactorD) then Dcol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+ // determine no. of levels in A, B and C
+ minA := 1000;
+ minB := 1000;
+ minC := 1000;
+ minD := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ maxC := -1000;
+ maxD := -1000;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[ACol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[BCol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ if value < minC then minC := value;
+ if value > maxC then maxC := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ if value < minD then minD := value;
+ if value > maxD then maxD := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeC := maxC - minC + 1;
+ rangeD := maxD - minD + 1;
+
+ // check for squareness
+ if ( (rangeA <> rangeB) or (rangeA <> rangeC) or (rangeB <> rangeC)) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should all be equal!');
+ exit;
+ end;
+ p := rangeA;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(cellcnts,rangeA+1,rangeB+1,rangeD+1);
+ SetLength(celltotals,rangeA+1,rangeB+1,rangeD+1);
+ SetLength(ADmat,rangeA+1,rangeD+1);
+ SetLength(BDmat,rangeB+1,rangeD+1);
+ SetLength(CDmat,rangeC+1,rangeD+1);
+ SetLength(Ctotals,rangeC+1);
+ SetLength(Design,rangeA,rangeB);
+
+ // initialize arrays and values
+ for i := 0 to rangeA do
+ begin
+ for j := 0 to rangeB do
+ begin
+ for k := 0 to rangeD do
+ begin
+ cellcnts[i,j,k] := 0;
+ celltotals[i,j,k] := 0.0;
+ end;
+ end;
+ end;
+ for i := 0 to rangeA do
+ for j := 0 to rangeD do
+ ADmat[i,j] := 0.0;
+ for i := 0 to rangeB do
+ for j := 0 to rangeD do
+ BDmat[i,j] := 0.0;
+ for i := 0 to rangeC do
+ for j := 0 to rangeD do
+ CDmat[i,j] := 0.0;
+ for i := 0 to rangeC-1 do Ctotals[i] := 0;
+ G := 0.0;
+ sumxsqr := 0.0;
+ sumAsqr := 0.0;
+ sumBsqr := 0.0;
+ sumCsqr := 0.0;
+ sumDsqr := 0.0;
+ sumADsqr := 0.0;
+ sumBDsqr := 0.0;
+ sumCDsqr := 0.0;
+ term1 := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ term7 := 0.0;
+ term8 := 0.0;
+ term9 := 0.0;
+ GrandMean := 0.0;
+ SSwithin := 0.0;
+
+ // Read in the data
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ block := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,i]);
+ cellcnts[row-1,col-1,block-1] := cellcnts[row-1,col-1,block-1] + 1;
+ celltotals[row-1,col-1,block-1] := celltotals[row-1,col-1,block-1] + data;
+ ADmat[row-1,block-1] := ADmat[row-1,block-1] + data;
+ BDmat[col-1,block-1] := BDmat[col-1,block-1] + data;
+ CDmat[slice-1,block-1] := CDmat[slice-1,block-1] + data;
+ Ctotals[slice-1] := Ctotals[slice-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ GrandMean := GrandMean + data;
+ end;
+
+ // check for equal cell counts
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ for k := 0 to rangeD - 1 do
+ begin
+ if cellcnts[i,j,k] <> n then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+ end;
+ end;
+
+ // calculate values
+ for i := 0 to p - 1 do // get row, column and block sums
+ begin
+ for j := 0 to p-1 do
+ begin
+ for k := 0 to rangeD - 1 do
+ begin
+ celltotals[i,p,k] := celltotals[i,p,k] + celltotals[i,j,k];
+ celltotals[p,j,k] := celltotals[p,j,k] + celltotals[i,j,k];
+ celltotals[i,j,rangeD] :=celltotals[i,j,rangeD] + celltotals[i,j,k];
+ end;
+ end;
+ end;
+ // get interaction AD
+ for i := 0 to rangeA-1 do
+ begin
+ for j := 0 to rangeD-1 do
+ begin
+ sumADsqr := sumADsqr + (ADmat[i,j] * ADmat[i,j]);
+ ADmat[i,rangeD] := ADmat[i,rangeD] + ADmat[i,j];
+ ADmat[rangeA,j] := ADmat[rangeA,j] + ADmat[i,j];
+ end;
+ end;
+ for i := 0 to rangeA-1 do
+ sumAsqr := sumAsqr + (ADmat[i,rangeD] * ADmat[i,rangeD]);
+ for i := 0 to rangeD-1 do
+ sumDsqr := sumDsqr + (ADmat[rangeA,i] * ADmat[rangeA,i]);
+
+ // get interaction BD
+ for i := 0 to rangeB-1 do
+ begin
+ for j := 0 to rangeD-1 do
+ begin
+ sumBDsqr := sumBDsqr + (BDmat[i,j] * BDmat[i,j]);
+ BDmat[i,rangeD] := BDmat[i,rangeD] + BDmat[i,j];
+ BDmat[rangeB,j] := BDmat[rangeB,j] + BDmat[i,j];
+ end;
+ end;
+ for i := 0 to rangeB-1 do
+ sumBsqr := sumBsqr + (BDmat[i,rangeD] * BDmat[i,rangeD]);
+
+ // get interaction CD
+ for i := 0 to rangeC-1 do
+ begin
+ for j := 0 to rangeD-1 do
+ begin
+ sumCDsqr := sumCDsqr + (CDmat[i,j] * CDmat[i,j]);
+ CDmat[i,rangeD] := CDmat[i,rangeD] + CDmat[i,j];
+ CDmat[rangeC,j] := CDmat[rangeC,j] + CDmat[i,j];
+ end;
+ end;
+ for i := 0 to rangeC-1 do
+ sumCsqr := sumCsqr + (CDmat[i,rangeD] * CDmat[i,rangeD]);
+
+ G := GrandMean;
+ term1 := (G * G) / (n * p * p * rangeD);
+ term2 := sumxsqr;
+ term3 := sumAsqr / (n * p * rangeD);
+ term4 := sumBsqr / (n * p * rangeD);
+ term5 := sumCsqr / (n * p * rangeD);
+ term6 := sumADsqr / (n * p);
+ term7 := SumBDsqr / (n * p);
+ term8 := SumCDsqr / (n * p);
+ term9 := sumDsqr / (n * p * p);
+ SSA := term3 - term1;
+ SSD := term9 - term1;
+ SSAD := term6 - term3 - term9 + term1;
+ SSB := term4 - term1;
+ SSBD := term7 - term4 - term9 + term1;
+ SSC := term5 - term1;
+ SSCD := term8 - term5 - term9 + term1;
+
+ // get ss within
+ for i := 0 to rangeA - 1 do
+ for j := 0 to rangeB - 1 do
+ for k := 0 to rangeD - 1 do
+ SSwithin := SSwithin + (celltotals[i,j,k] * celltotals[i,j,k]);
+ SSwithin := sumXsqr - (SSwithin / n);
+
+ // get SS residual
+ SStotal := sumXsqr - term1;
+ SSres := SStotal - SSA - SSB - SSC - SSD - SSAD - SSBD - SSCD - SSwithin;
+ dfa := p-1;
+ dfb := p-1;
+ dfc := p-1;
+ dfd := rangeD - 1;
+ dfad := (p-1) * (rangeD - 1);
+ dfbd := dfad;
+ dfcd := dfad;
+ dfres := rangeD * (p-1) * (p-2);
+ dfwithin := (p * p) * rangeD * (n - 1);
+ dftotal := n * p * p * rangeD - 1;
+ MSa := SSA / dfa;
+ MSb := SSB / dfb;
+ MSc := SSC / dfc;
+ MSd := SSD / dfd;
+ MSad := SSAD / dfad;
+ MSbd := SSBD / dfbd;
+ MScd := SSCD / dfcd;
+ MSres := SSres / dfres;
+ MSwithin := SSwithin / dfwithin;
+ fa := MSa / MSwithin;
+ fb := MSb / MSwithin;
+ fc := MSc / MSwithin;
+ fd := MSd / MSwithin;
+ fad := MSad / MSwithin;
+ fbd := MSbd / MSwithin;
+ fcd := MScd / MSwithin;
+ fpartial := MSres / MSwithin;
+ proba := probf(fa,dfa,dfwithin);
+ probb := probf(fb,dfb,dfwithin);
+ probc := probf(fc,dfc,dfwithin);
+ probd := probf(fd,dfd,dfwithin);
+ probad := probf(fad,dfad,dfwithin);
+ probbd := probf(fbd,dfbd,dfwithin);
+ probcd := probf(fcd,dfcd,dfwithin);
+ probpartial := probf(fpartial,dfres,dfwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Latin Square Analysis Plan 2 Results');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSA,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSB,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSC,dfc,MSc,fc,probc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor D ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSD,dfd,MSd,fd,probd]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'A x D ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSAD,dfad,MSad,fad,probad]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'B x D ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSBD,dfbd,MSbd,fbd,probbd]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'C x D ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSCD,dfcd,MScd,fcd,probcd]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Residual ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSres,dfres,MSres,fpartial,probpartial]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Within ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSwithin, dfwithin, MSwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+
+ // show design for each block
+ for k := 0 to rangeD - 1 do
+ begin
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for block ' + format('%d',[k+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ block := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ if block = minD + k then
+ Design[row-1,col-1] := 'C' + IntToStr(slice);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+
+ // get cell means
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ for k := 0 to rangeD - 1 do
+ celltotals[i,j,k] := celltotals[i,j,k] / n;
+ for i := 0 to p-1 do
+ begin
+ for k := 0 to rangeD - 1 do
+ begin
+ celltotals[i,p,k] := celltotals[i,p,k] / (p * n);
+ celltotals[p,i,k] := celltotals[p,i,k] / (p * n);
+ end;
+ end;
+ GrandMean := GrandMean / (p * p * n * rangeD);
+ for i := 0 to p-1 do Ctotals[i] := Ctotals[i] / (p * n * rangeD);
+
+ // show table of means for each block
+ for k := 0 to rangeD-1 do
+ begin
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := format('BLOCK %d',[k+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell means and totals');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[celltotals[i,j,k]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[celltotals[i,p,k]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := 'Total ';
+ for j := 0 to p-1 do
+ cellstring := cellstring + format(' %8.3f ',[celltotals[p,j,k]]);
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+
+ // show category means
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorC]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Ctotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.ShowModal;
+
+cleanup:
+ Design := nil;
+ Ctotals := nil;
+ CDmat := nil;
+ BDmat := nil;
+ ADmat := nil;
+ celltotals := nil;
+ cellcnts := nil;
+end;
+
+procedure TLatinSqrsFrm.Plan3(Sender: TObject);
+label cleanup;
+var
+ NoFactors : integer;
+ n : integer; // no. of subjects per cell
+ Acol, Bcol, Ccol, Dcol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ FactorC : string;
+ FactorD : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, k, m, minA, minB, minC, maxA, maxB, maxC : integer;
+ minD, maxD, rangeA, rangeB, rangeC, rangeD : integer;
+ value : integer;
+ cellcnts : IntDyneCube;
+ celltotals : DblDyneQuad;
+ ABmat, ACmat, BCmat : DblDyneMat;
+ ABCmat : DblDyneCube;
+ Atotals : DblDyneVec;
+ Btotals : DblDyneVec;
+ Ctotals : DblDyneVec;
+ Dtotals : DblDyneVec;
+ design : StrDyneMat;
+ G, term1, term2, term3, term4, term5, term6, term7, term8 : double;
+ term9, term10, sumxsqr : double;
+ sumAsqr, sumBsqr, sumCsqr, sumDsqr, SSA, SSB, SSC, SSD : double;
+ sumABsqr, sumACsqr, sumBCsqr, sumABCsqr : double;
+ SSAB, SSAC, SSBC, SSABC, SSbetween, SSwithin, SSres, SStotal : double;
+ MSa, MSb, MSc, MSd, MSAB, MSAC, MSBC, MSABC, MSres, MSwithin : double;
+ data, GrandMean : double;
+ p, row, col, slice, block : integer;
+ dfa, dfb, dfc, dfres, dfwithin, dftotal, fa, fb, fc, fpartial : double;
+ dfd, fd, fab, fac, fbc, fabc, dfab, dfac, dfbc, dfabc : double;
+ proba, probb, probc, probd, probpartial : double;
+ probab, probac, probbc, probabc : double;
+
+begin
+ NoFactors := 4;
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.DCodeEdit.Visible := true;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Visible := false;
+ LatinSpecsFrm.Label5.Visible := true;
+ LatinSpecsFrm.Label6.Visible := false;
+ LatinSpecsFrm.DinBtn.Visible := true;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := false;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text);
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of cases per cell.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ FactorC := LatinSpecsFrm.CCodeEdit.Text;
+ FactorD := LatinSpecsFrm.DCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then ACol := i;
+ if (cellstring = FactorB) then BCol := i;
+ if (cellstring = FactorC) then Ccol := i;
+ if (cellstring = FactorD) then Dcol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+ // determine no. of levels in A, B and C
+ minA := 1000;
+ minB := 1000;
+ minC := 1000;
+ minD := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ maxC := -1000;
+ maxD := -1000;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[ACol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[BCol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ if value < minC then minC := value;
+ if value > maxC then maxC := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ if value < minD then minD := value;
+ if value > maxD then maxD := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeC := maxC - minC + 1;
+ rangeD := maxD - minD + 1;
+
+ // check for squareness
+ if ( (rangeA <> rangeB) or (rangeA <> rangeC) or (rangeB <> rangeC) or (rangeA <> rangeD) ) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should all be equal!');
+ exit;
+ end;
+ p := rangeA;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(cellcnts,p+1,p+1,p+1);
+ SetLength(celltotals,p+1,p+1,p+1,p+1);
+ SetLength(ABmat,p+1,p+1);
+ SetLength(ACmat,p+1,p+1);
+ SetLength(BCmat,p+1,p+1);
+ SetLength(ABCmat,p+1,p+1,p+1);
+ SetLength(Atotals,p);
+ SetLength(Btotals,p);
+ SetLength(Ctotals,p);
+ SetLength(Dtotals,p);
+ SetLength(Design,p,p);
+
+ // initialize arrays and values
+ for i := 0 to p do
+ for j := 0 to p do
+ for k := 0 to p do
+ for m := 0 to p do
+ celltotals[i,j,k,m] := 0.0;
+ for i := 0 to p do
+ begin
+ for j := 0 to p do
+ begin
+ ABmat[i,j] := 0.0;
+ ACmat[i,j] := 0.0;
+ BCmat[i,j] := 0.0;
+ end;
+ end;
+ for i := 0 to p do
+ begin
+ for j := 0 to p do
+ begin
+ for k := 0 to p do
+ begin
+ ABCmat[i,j,k] := 0.0;
+ cellcnts[i,j,k] := 0;
+ end;
+ end;
+ end;
+ for i := 0 to p-1 do
+ begin
+ Atotals[i] := 0.0;
+ Btotals[i] := 0.0;
+ Ctotals[i] := 0.0;
+ Dtotals[i] := 0.0;
+ end;
+ G := 0.0;
+ sumxsqr := 0.0;
+ sumAsqr := 0.0;
+ sumBsqr := 0.0;
+ sumCsqr := 0.0;
+ sumDsqr := 0.0;
+ sumABsqr := 0.0;
+ sumACsqr := 0.0;
+ sumBCsqr := 0.0;
+ sumABCsqr := 0.0;
+ term1 := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ term7 := 0.0;
+ term8 := 0.0;
+ term9 := 0.0;
+ term10 := 0.0;
+ GrandMean := 0.0;
+ SSwithin := 0.0;
+
+ // Read in the data
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ block := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,i]);
+ cellcnts[row-1,col-1,slice-1] := cellcnts[row-1,col-1,slice-1] + 1;
+ celltotals[row-1,col-1,slice-1,block-1] := celltotals[row-1,col-1,slice-1,block-1] + data;
+ ABmat[row-1,col-1] := ABmat[row-1,col-1] + data;
+ ACmat[row-1,slice-1] := ACmat[row-1,slice-1] + data;
+ BCmat[col-1,slice-1] := BCmat[col-1,slice-1] + data;
+ ABCmat[row-1,col-1,slice-1] := ABCmat[row-1,col-1,slice-1] + data;
+ Atotals[row-1] := Atotals[row-1] + data;
+ Btotals[col-1] := Btotals[col-1] + data;
+ Ctotals[slice-1] := Ctotals[slice-1] + data;
+ Dtotals[block-1] := Dtotals[block-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ GrandMean := GrandMean + data;
+ end;
+
+ // check for equal cell counts in ABCmat
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ for k := 0 to p - 1 do
+ begin
+ if cellcnts[i,j,k] <> n then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+ end;
+ end;
+
+ // calculate values
+ for i := 0 to p - 1 do // get row, column, slice and block sums
+ begin
+ for j := 0 to p-1 do
+ begin
+ for k := 0 to p - 1 do
+ begin
+ for m := 0 to p - 1 do
+ begin
+ celltotals[p,j,k,m] := celltotals[p,j,k,m] + celltotals[i,j,k,m];
+ celltotals[i,p,k,m] := celltotals[i,p,k,m] + celltotals[i,j,k,m];
+ celltotals[i,j,p,m] := celltotals[i,j,p,m] + celltotals[i,j,k,m];
+ celltotals[i,j,k,p] := celltotals[i,j,k,p] + celltotals[i,j,k,m];
+ end;
+ end;
+ end;
+ end;
+ for i := 0 to p - 1 do // get row, column and slice sums in ABC matrix
+ begin
+ for j := 0 to p-1 do
+ begin
+ for k := 0 to p-1 do
+ begin
+ ABCmat[p,j,k] := ABCmat[p,j,k] + ABCmat[i,j,k];
+ ABCmat[i,p,k] := ABCmat[i,p,k] + ABCmat[i,j,k];
+ ABCmat[i,j,p] := ABCmat[i,j,p] + ABCmat[i,j,k];
+ end;
+ end;
+ end;
+
+ // get 2-way interactions
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ sumABsqr := sumABsqr + (ABmat[i,j] * ABmat[i,j]);
+ sumACsqr := sumACsqr + (ACmat[i,j] * ACmat[i,j]);
+ sumBCsqr := SumBCsqr + (BCmat[i,j] * BCmat[i,j]);
+ ABmat[i,p] := ABmat[i,p] + ABmat[i,j];
+ ABmat[p,j] := ABmat[p,j] + ABmat[i,j];
+ ACmat[i,p] := ACmat[i,p] + ACmat[i,j];
+ ACmat[p,j] := ACmat[p,j] + ACmat[i,j];
+ BCmat[i,p] := BCmat[i,p] + BCmat[i,j];
+ BCmat[p,j] := BCmat[p,j] + BCmat[i,j];
+ for k := 0 to p-1 do
+ sumABCsqr := sumABCsqr + (ABCmat[i,j,k] * ABCmat[i,j,k]);
+ end;
+ end;
+ for i := 0 to p-1 do
+ begin
+ sumAsqr := sumAsqr + (Atotals[i] * Atotals[i]);
+ sumBsqr := sumBsqr + (Btotals[i] * Btotals[i]);
+ SumCsqr := sumCsqr + (Ctotals[i] * Ctotals[i]);
+ sumDsqr := sumDsqr + (Dtotals[i] * Dtotals[i]);
+ end;
+
+ G := GrandMean;
+ term1 := (G * G) / (n * p * p * p);
+ term2 := sumxsqr;
+ term3 := sumAsqr / (n * p * p);
+ term4 := sumBsqr / (n * p * p);
+ term5 := sumCsqr / (n * p * p);
+ term9 := sumDsqr / (n * p * p);
+ term6 := sumABsqr / (n * p);
+ term7 := SumACsqr / (n * p);
+ term8 := SumBCsqr / (n * p);
+ term10 := sumABCsqr / n;
+ SSA := term3 - term1;
+ SSB := term4 - term1;
+ SSC := term5 - term1;
+ SSD := term9 - term1;
+ SSAB := term6 - term3 - term4 + term1;
+ SSAC := term7 - term3 - term5 + term1;
+ SSBC := term8 - term4 - term5 + term1;
+ SSABC := term10 - term6 - term7 - term8 + term3 + term4 + term5 - term1;
+ SSABC := SSABC - (term9 - term1);
+
+ // get ss within
+ for i := 0 to p - 1 do
+ for j := 0 to p - 1 do
+ for k := 0 to p - 1 do
+ for m := 0 to p - 1 do
+ SSwithin := SSwithin + (celltotals[i,j,k,m] * celltotals[i,j,k,m]);
+ SSwithin := sumXsqr - (SSwithin / n);
+
+ // get SS residual
+ SStotal := sumXsqr - term1;
+ dfa := p-1;
+ dfb := p-1;
+ dfc := p-1;
+ dfd := p-1;
+ dfab := (p - 1) * (p - 1);
+ dfac := dfab;
+ dfbc := dfab;
+ dfabc := ( (p-1) * (p-1) * (p-1) ) - (p-1);
+ dfwithin := p * p * p * (n - 1);
+ dftotal := n * p * p * p - 1;
+ MSa := SSA / dfa;
+ MSb := SSB / dfb;
+ MSc := SSC / dfc;
+ MSd := SSD / dfd;
+ MSab := SSAB / dfab;
+ MSac := SSAC / dfac;
+ MSbc := SSBC / dfbc;
+ MSabc := SSABC / dfabc;
+// MSres := SSres / dfres;
+ MSwithin := SSwithin / dfwithin;
+ fa := MSa / MSwithin;
+ fb := MSb / MSwithin;
+ fc := MSc / MSwithin;
+ fd := MSd / MSwithin;
+ fab := MSab / MSwithin;
+ fac := MSac / MSwithin;
+ fbc := MSbc / MSwithin;
+ fabc := MSabc / MSwithin;
+ proba := probf(fa,dfa,dfwithin);
+ probb := probf(fb,dfb,dfwithin);
+ probc := probf(fc,dfc,dfwithin);
+ probd := probf(fd,dfd,dfwithin);
+ probab := probf(fab,dfab,dfwithin);
+ probac := probf(fac,dfac,dfwithin);
+ probbc := probf(fbc,dfbc,dfwithin);
+ probabc := probf(fabc,dfabc,dfwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Latin Square Analysis Plan 3 Results');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSA,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSB,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSC,dfc,MSc,fc,probc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor D ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSD,dfd,MSd,fd,probd]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'A x B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSAB,dfab,MSab,fab,probab]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'A x C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSAC,dfac,MSac,fac,probac]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'B x C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSBC,dfbc,MSbc,fbc,probbc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'A x B x C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSABC,dfabc,MSabc,fabc,probabc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Within ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSwithin, dfwithin, MSwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+
+ // show design for each block
+ for k := 0 to rangeD - 1 do
+ begin
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for block ' + format('%d',[k+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ block := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ if block = minD + k then
+ Design[row-1,col-1] := 'C' + IntToStr(slice);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+
+ // get cell means
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ for k := 0 to p - 1 do
+ for m := 0 to p - 1 do
+ celltotals[i,j,k,m] := celltotals[i,j,k,m] / n;
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p - 1 do
+ begin
+ for k := 0 to p - 1 do
+ begin
+ for m := 0 to p - 1 do
+ begin
+ celltotals[p,j,k,m] := celltotals[p,j,k,m] / (p * n);
+ celltotals[i,p,k,m] := celltotals[i,p,k,m] / (p * n);
+ celltotals[i,j,p,m] := celltotals[i,j,p,m] / (p * n);
+ celltotals[i,j,k,p] := celltotals[i,j,k,p] / (p * n);
+ end;
+ end;
+ end;
+ end;
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ for k := 0 to p-1 do
+ ABCmat[i,j,k] := ABCmat[i,j,k] / n;
+ for j := 0 to p-1 do
+ for k := 0 to p-1 do
+ ABCmat[p,j,k] := ABCmat[p,j,k] / (p * n);
+ for i := 0 to p-1 do
+ for k := 0 to p-1 do
+ ABCmat[i,p,k] := ABCmat[i,p,k] / (p * n);
+ for i := 0 to p - 1 do
+ for j := 0 to p - 1 do
+ ABCmat[i,j,p] := ABCmat[i,j,p] / (p * n);
+
+ GrandMean := GrandMean / (p * p * p * n );
+ for i := 0 to p-1 do
+ begin
+ Atotals[i] := Atotals[i] / (p * p * n);
+ Btotals[i] := Btotals[i] / (p * p * n);
+ Ctotals[i] := Ctotals[i] / (p * p * n);
+ Dtotals[i] := Dtotals[i] / (p * p * n);
+ end;
+
+ // show table of means for each block
+ for k := 0 to p-1 do
+ begin
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := format('BLOCK %d',[k+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell means and totals');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[ABCmat[i,j,k]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[ABCmat[i,p,k]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := 'Total ';
+ for j := 0 to p-1 do
+ cellstring := cellstring + format(' %8.3f ',[ABCmat[p,j,k]]);
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+
+ // show category means
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Means for each variable');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Atotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Btotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorC]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Ctotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorD]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Dtotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.ShowModal;
+
+cleanup:
+ Design := nil;
+ Dtotals := nil;
+ Ctotals := nil;
+ Btotals := nil;
+ Atotals := nil;
+ ABmat := nil;
+ ACmat := nil;
+ BCmat := nil;
+ ABCmat := nil;
+ celltotals := nil;
+ cellcnts := nil;
+end;
+
+procedure TLatinSqrsFrm.Plan4(Sender: TObject);
+label cleanup;
+var
+ NoFactors : integer;
+ n : integer; // no. of subjects per cell
+ Acol, Bcol, Ccol, Dcol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ FactorC : string;
+ FactorD : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, k, m, minA, minB, minC, maxA, maxB, maxC : integer;
+ minD, maxD, rangeA, rangeB, rangeC, rangeD : integer;
+ value : integer;
+ cellcnts : IntDyneMat;
+ ABmat : DblDyneMat;
+ ABCmat : DblDyneCube;
+ Atotals : DblDyneVec;
+ Btotals : DblDyneVec;
+ Ctotals : DblDyneVec;
+ Dtotals : DblDyneVec;
+ design : StrDyneMat;
+ G, term1, term2, term3, term4, term5, term6, term7 : double;
+ sumxsqr : double;
+ sumAsqr, sumBsqr, sumCsqr, sumDsqr, SSA, SSB, SSC, SSD : double;
+ SSbetween, SSwithin, SSres, SStotal : double;
+ MSa, MSb, MSc, MSd, MSres, MSwithin : double;
+ data, GrandMean : double;
+ p, row, col, slice, block : integer;
+ dfa, dfb, dfc, dfres, dfwithin, dftotal, fa, fb, fc : double;
+ dfd, fd, fres : double;
+ proba, probb, probc, probd, probres : double;
+
+begin
+ NoFactors := 4;
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.DCodeEdit.Visible := true;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Visible := false;
+ LatinSpecsFrm.Label5.Visible := true;
+ LatinSpecsFrm.Label6.Visible := false;
+ LatinSpecsFrm.DinBtn.Visible := true;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := false;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text);
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of cases per cell.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ FactorC := LatinSpecsFrm.CCodeEdit.Text;
+ FactorD := LatinSpecsFrm.DCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then ACol := i;
+ if (cellstring = FactorB) then BCol := i;
+ if (cellstring = FactorC) then Ccol := i;
+ if (cellstring = FactorD) then Dcol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+
+ // determine no. of levels in A, B and C
+ minA := 1000;
+ minB := 1000;
+ minC := 1000;
+ minD := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ maxC := -1000;
+ maxD := -1000;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[ACol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[BCol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ if value < minC then minC := value;
+ if value > maxC then maxC := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ if value < minD then minD := value;
+ if value > maxD then maxD := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeC := maxC - minC + 1;
+ rangeD := maxD - minD + 1;
+
+ // check for squareness
+ if ( (rangeA <> rangeB) or (rangeA <> rangeC) or (rangeB <> rangeC) ) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should be equal for A,B and C!');
+ exit;
+ end;
+ p := rangeA;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(ABmat,p+1,p+1);
+ SetLength(ABCmat,p+1,p+1,p+1);
+ SetLength(cellcnts,p+1,p+1);
+ SetLength(Atotals,p);
+ SetLength(Btotals,p);
+ SetLength(Ctotals,p);
+ SetLength(Dtotals,p);
+ SetLength(Design,p,p);
+
+ for i := 0 to p do
+ for j := 0 to p do
+ for k := 0 to p do
+ ABCmat[i,j,k] := 0.0;
+
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ cellcnts[i,j] := 0;
+ ABmat[i,j] := 0.0;
+ end;
+ end;
+
+ for i := 0 to p-1 do
+ begin
+ Atotals[i] := 0.0;
+ Btotals[i] := 0.0;
+ Ctotals[i] := 0.0;
+ Dtotals[i] := 0.0;
+ end;
+
+ G := 0.0;
+ sumxsqr := 0.0;
+ sumAsqr := 0.0;
+ sumBsqr := 0.0;
+ sumCsqr := 0.0;
+ sumDsqr := 0.0;
+ SSwithin := 0.0;
+ term1 := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ term7 := 0.0;
+ GrandMean := 0.0;
+
+ // Read in the data
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ block := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,i]);
+ cellcnts[row-1,col-1] := cellcnts[row-1,col-1] + 1;
+ ABCmat[row-1,col-1,slice-1] := ABCmat[row-1,col-1,slice-1] + data;
+ Atotals[row-1] := Atotals[row-1] + data;
+ Btotals[col-1] := Btotals[col-1] + data;
+ Ctotals[slice-1] := Ctotals[slice-1] + data;
+ Dtotals[block-1] := Dtotals[block-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ GrandMean := GrandMean + data;
+ end;
+
+ // collapse c's into a x b
+ for k := 0 to p-1 do
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ ABmat[i,j] := ABmat[i,j] + ABCmat[i,j,k];
+
+ // get sum of squared cells
+ for i := 0 to p - 1 do
+ for j := 0 to p - 1 do
+ SSwithin := SSwithin + (ABmat[i,j] * ABmat[i,j]);
+
+ // check for equal cell counts
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ if cellcnts[i,j] <> n then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+ end;
+
+ for i := 0 to p-1 do
+ begin
+ sumAsqr := sumAsqr + (Atotals[i] * Atotals[i]);
+ sumBsqr := sumBsqr + (Btotals[i] * Btotals[i]);
+ sumCsqr := sumCsqr + (Ctotals[i] * Ctotals[i]);
+ sumDsqr := sumDsqr + (Dtotals[i] * Dtotals[i]);
+ end;
+
+ G := GrandMean;
+ term1 := (G * G) / (n * p * p);
+ term2 := sumxsqr;
+ term3 := sumAsqr / (n * p);
+ term4 := sumBsqr / (n * p);
+ term5 := sumCsqr / (n * p);
+ term6 := sumDsqr / (n * p);
+ term7 := SSwithin / n;
+ SSA := term3 - term1;
+ SSB := term4 - term1;
+ SSC := term5 - term1;
+ SSD := term6 - term1;
+ SSres := term7 - term3 - term4 - term5 - term6 + (3 * term1);
+ SSwithin := term2 - term7;
+ SStotal := term2 - term1;
+
+ dfa := p-1;
+ dfb := p-1;
+ dfc := p-1;
+ dfd := p-1;
+ dfres := (p-1) * (p-3);
+ dfwithin := p * p * (n - 1);
+ dftotal := n * p * p - 1;
+ MSa := SSA / dfa;
+ MSb := SSB / dfb;
+ MSc := SSC / dfc;
+ MSd := SSD / dfd;
+ if dfres > 0 then MSres := SSres / dfres;
+ MSwithin := SSwithin / dfwithin;
+ fa := MSa / MSwithin;
+ fb := MSb / MSwithin;
+ fc := MSc / MSwithin;
+ fd := MSd / MSwithin;
+ if dfres > 0 then fres := MSres / MSwithin;
+ proba := probf(fa,dfa,dfwithin);
+ probb := probf(fb,dfb,dfwithin);
+ probc := probf(fc,dfc,dfwithin);
+ probd := probf(fd,dfd,dfwithin);
+ if dfres > 0 then probres := probf(fres,dfres,dfwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Greco-Latin Square Analysis (No Interactions)');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSA,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSB,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Latin Sqr.';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSC,dfc,MSc,fc,probc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Greek Sqr.';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSD,dfd,MSd,fd,probd]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Residual ';
+ if dfres > 0 then
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSres,dfres,MSres,fres,probres])
+ else cellstring := cellstring + ' - - - - -';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Within ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSwithin, dfwithin, MSwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+
+ // show design for Latin Square
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for Latin Square ';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ Design[row-1,col-1] := 'C' + IntToStr(slice);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // show design for Greek Square
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for Greek Square ';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ block := StrToInt(OS3MainFrm.DataGrid.Cells[Dcol,i]);
+ Design[row-1,col-1] := 'C' + IntToStr(block);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p - 1 do
+ begin
+ ABmat[i,p] := ABmat[i,p] + ABmat[i,j];
+ ABmat[p,j] := ABmat[p,j] + ABmat[i,j];
+ end;
+ end;
+
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ ABmat[i,j] := ABmat[i,j] / n;
+ for i := 0 to p-1 do
+ ABmat[i,p] := ABmat[i,p] / (n * p);
+ for j := 0 to p-1 do
+ ABmat[p,j] := ABmat[p,j] / (n * p);
+
+ GrandMean := GrandMean / (p * p * n );
+ for i := 0 to p-1 do
+ begin
+ Atotals[i] := Atotals[i] / (p * n);
+ Btotals[i] := Btotals[i] / (p * n);
+ Ctotals[i] := Ctotals[i] / (p * n);
+ Dtotals[i] := Dtotals[i] / (p * n);
+ end;
+
+ // show table of means for ABmat
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell means and totals');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,j]]);
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,p]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := 'Total ';
+ for j := 0 to p-1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[p,j]]);
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // show category means
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Means for each variable');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Atotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Btotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorC]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Ctotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to rangeD + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorD]);
+ for i := 1 to rangeD do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to rangeD + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to rangeD - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Dtotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to rangeD + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.ShowModal;
+
+cleanup:
+ Design := nil;
+ Dtotals := nil;
+ Ctotals := nil;
+ Btotals := nil;
+ Atotals := nil;
+ cellcnts := nil;
+ ABCmat := nil;
+ ABmat := nil;
+end;
+
+procedure TLatinSqrsFrm.Plan5(Sender: TObject);
+label cleanup;
+var
+ NoFactors : integer;
+ n : integer; // no. of subjects per cell
+ Acol, Bcol, SbjCol, Grpcol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ SubjectFactor : string;
+ GroupFactor : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, k, m, minA, minB, minGrp, maxA, maxB, maxGrp : integer;
+ rangeA, rangeB, rangeGrp : integer;
+ value : integer;
+ cellcnts : IntDyneMat;
+ ABmat : DblDyneMat;
+ ABCmat : DblDyneCube;
+ GBmat : DblDyneMat;
+ Atotals : DblDyneVec;
+ Btotals : DblDyneVec;
+ Grptotals : DblDyneVec;
+ Subjtotals : DblDyneMat;
+ design : StrDyneMat;
+ G, term1, term2, term3, term4, term5, term6, term7 : double;
+ sumxsqr : double;
+ SSbetsubj, SSgroups, SSsubwGrps, SSwithinsubj, SSa, SSb, SSab : double;
+ SSerrwithin, SStotal, MSgroups, MSsubwGrps, MSa, MSb, MSab : double;
+ MSerrwithin, DFbetsubj, DFgroups, DFsubwGrps, DFwithinsubj : double;
+ DFa, DFb, DFab, DFerrwithin, DFtotal : double;
+ data, GrandMean : double;
+ p, row, col, subject, group : integer;
+ proba, probb, probab, probgrps : double;
+ fa, fb, fab, fgroups : double;
+ RowLabels, ColLabels : StrDyneVec;
+ Title : string;
+
+begin
+ NoFactors := 3;
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.DCodeEdit.Visible := false;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Visible := true;
+ LatinSpecsFrm.Label5.Visible := false;
+ LatinSpecsFrm.Label6.Visible := true;
+ LatinSpecsFrm.DinBtn.Visible := false;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := true;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text);
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of cases per cell.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ SubjectFactor := LatinSpecsFrm.CCodeEdit.Text;
+ GroupFactor := LatinSpecsFrm.GrpCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then ACol := i;
+ if (cellstring = FactorB) then BCol := i;
+ if (cellstring = GroupFactor) then Grpcol := i;
+ if (cellstring = SubjectFactor) then Sbjcol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+
+ // determine no. of levels in A, B and Group
+ minA := 1000;
+ minB := 1000;
+ minGrp := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ maxGrp := -1000;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[ACol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[BCol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]);
+ if value < minGrp then minGrp := value;
+ if value > maxGrp then maxGrp := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeGrp := maxGrp - minGrp + 1;
+
+ // check for squareness
+ if (rangeA <> rangeGrp) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should be equal for A,B and C!');
+ exit;
+ end;
+ p := rangeA;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(ABmat,p+1,p+1);
+ SetLength(ABCmat,p+1,p+1,n+1);
+ SetLength(cellcnts,p+1,p+1);
+ SetLength(Atotals,p+1);
+ SetLength(Btotals,p+1);
+ SetLength(Grptotals,p+1);
+ SetLength(Design,p,p);
+ SetLength(Subjtotals,p+1,n+1);
+ SetLength(RowLabels,p+1);
+ SetLength(ColLabels,n+1);
+ SetLength(GBmat,p+1,p+1);
+
+ for i := 0 to p-1 do
+ begin
+ RowLabels[i] := IntToStr(i+1);
+ ColLabels[i] := RowLabels[i];
+ end;
+ RowLabels[p] := 'Total';
+ ColLabels[p] := 'Total';
+
+ for i := 0 to p do
+ for j := 0 to p do
+ for k := 0 to n do
+ ABCmat[i,j,k] := 0.0;
+
+ for i := 0 to p do
+ begin
+ for j := 0 to p do
+ begin
+ cellcnts[i,j] := 0;
+ ABmat[i,j] := 0.0;
+ GBmat[i,j] := 0.0;
+ end;
+ end;
+
+ for i := 0 to p do
+ begin
+ Atotals[i] := 0.0;
+ Btotals[i] := 0.0;
+ Grptotals[i] := 0.0;
+ end;
+
+ for i := 0 to p do
+ for j := 0 to n do
+ Subjtotals[i,j] := 0.0;
+
+ G := 0.0;
+ sumxsqr := 0.0;
+ term1 := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ term7 := 0.0;
+ GrandMean := 0.0;
+
+ // Read in the data
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ group := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]);
+ subject := StrToInt(OS3MainFrm.DataGrid.Cells[Sbjcol,i]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,i]);
+ cellcnts[group-1,row-1] := cellcnts[group-1,row-1] + 1;
+ ABCmat[group-1,row-1,subject-1] := ABCmat[group-1,row-1,subject-1] + data;
+ Subjtotals[group-1,subject-1] := Subjtotals[group-1,subject-1] + data;
+ GBmat[group-1,col-1] := GBmat[group-1,col-1] + data;
+ Atotals[col-1] := Atotals[col-1] + data;
+ Btotals[group-1] := Btotals[group-1] + data;
+ Grptotals[group-1] := Grptotals[group-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ GrandMean := GrandMean + data;
+ end;
+
+ // check for equal cell counts
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ if cellcnts[i,j] <> n then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+ end;
+
+ // collapse subjects's into group x a matrix
+ for i := 0 to p-1 do // group
+ for j := 0 to p-1 do // factor a
+ for k := 0 to n-1 do // subject
+ ABmat[i,j] := ABmat[i,j] + ABCmat[i,j,k];
+
+ // get marginal totals for ABmat and GBmat
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ ABmat[p,j] := ABmat[p,j] + ABmat[i,j];
+ ABmat[i,p] := ABmat[i,p] + ABmat[i,j];
+ GBmat[p,j] := GBmat[p,j] + GBmat[i,j];
+ GBmat[i,p] := GBmat[i,p] + GBmat[i,j];
+ end;
+ end;
+
+ // get grand total for ABmat and GBmat
+ for i := 0 to p-1 do
+ begin
+ ABmat[p,p] := ABmat[p,p] + ABmat[p,i];
+ GBmat[p,p] := GBmat[p,p] + GBmat[p,i];
+ end;
+
+ // Get marginal totals for Subjtotals
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to n-1 do
+ begin
+ Subjtotals[p,j] := Subjtotals[p,j] + Subjtotals[i,j];
+ Subjtotals[i,n] := Subjtotals[i,n] + Subjtotals[i,j];
+ end;
+ end;
+ for i := 0 to p-1 do Subjtotals[p,n] := Subjtotals[p,n] + Subjtotals[i,n];
+ // test block
+ OutPutFrm.RichEdit.Lines.Add('Sums for ANOVA Analysis');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Group (rows) times A Factor (columns) sums';
+ MAT_PRINT(ABmat,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p));
+ cellstring := 'Group (rows) times B (cells Factor) sums';
+ MAT_PRINT(GBmat,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p));
+ Title := 'Groups (rows) times Subjects (columns) matrix';
+ for i := 0 to n-1 do ColLabels[i] := IntToStr(i+1);
+ ColLabels[n] := 'Total';
+ Mat_Print(Subjtotals,p+1,n+1,Title,RowLabels,ColLabels,(n*p*p));
+ OutPutFrm.ShowModal;
+
+ // get squared sum of subject's totals in each group
+ for i := 0 to p-1 do // group
+ term7 := term7 + (Subjtotals[i,n] * Subjtotals[i,n]);
+ term7 := term7 / (n*p); // Sum G^2 sub k
+
+ // now square each person score in each group and get sum for group
+ for i := 0 to p-1 do
+ for j := 0 to n-1 do
+ Subjtotals[i,j] := Subjtotals[i,j] * Subjtotals[i,j];
+ for i := 0 to p-1 do Subjtotals[i,n] := 0.0;
+ for i := 0 to p-1 do
+ for j := 0 to n-1 do
+ Subjtotals[i,n] := Subjtotals[i,n] + Subjtotals[i,j];
+ for i := 0 to p-1 do term6 := term6 + Subjtotals[i,n];
+ SSsubwgrps := term6 / p - term7;
+
+ // get correction term
+ term1 := (GrandMean * GrandMean) / (n * p * p);
+
+ term2 := sumxsqr;
+
+ // get sum of squared a's for term3
+ for j := 0 to p-1 do
+ term3 := term3 + (ABmat[p,j] * ABmat[p,j]);
+ term3 := term3 / (n * p);
+
+ // get sum of squared groups for term4
+ for i := 0 to p-1 do
+ term4 := term4 + (ABmat[i,p] * ABmat[i,p]);
+ term4 := term4 / (n * p);
+
+ // get squared sum of b's (across groups) for term5
+ for j := 0 to p-1 do
+ term5 := term5 + (GBmat[p,j] * GBmat[p,j]);
+ term5 := term5 / (n * p);
+
+ SSgroups := term4 - term1;
+ SSbetsubj := SSgroups + SSsubwgrps;
+ SStotal := sumxsqr - term1;
+ SSwithinsubj := SStotal - SSbetsubj;
+ SSa := term3 - term1;
+ SSb := term5 - term1;
+
+ // get sum of squared AB cells for term6
+ term6 := 0.0;
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ term6 := term6 + (ABmat[i,j] * ABmat[i,j]);
+ term6 := term6 / n;
+ SSab := term6 - term3 - term5 + term1;
+ SSab := SSab - SSgroups;
+ SSerrwithin := ( sumxsqr - term6) - SSsubwgrps;
+
+ // record degrees of freedom for sources
+ dfbetsubj := n * p - 1;
+ dfsubwgrps := p * (n-1);
+ dfgroups := p - 1;
+ dftotal := n * p * p - 1;
+ dfwithinsubj := n * p * (p-1);
+ dfa := p - 1;
+ dfb := p - 1;
+ dfab := (p - 1) * (p - 2);
+ dferrwithin := p * (n - 1) * (p - 1);
+
+ MSsubwgrps := SSsubwgrps / dfsubwgrps;
+ MSgroups := SSgroups / dfgroups;
+ MSa := SSa / dfa;
+ MSb := SSb / dfb;
+ MSab := SSab / dfab;
+ MSerrwithin := SSerrwithin / dferrwithin;
+ fgroups := MSgroups / MSsubwgrps;
+ fa := MSa / MSerrwithin;
+ fb := MSb / MSerrwithin;
+ fab := MSab / MSerrwithin;
+ probgrps := probf(fgroups,dfgroups,dfsubwgrps);
+ proba := probf(fa,dfa,dferrwithin);
+ probb := probf(fb,dfb,dferrwithin);
+ probab := probf(fab,dfab,dferrwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 5 (Partial Interactions)');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Betw.Subj.';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSbetsubj,dfbetsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Groups ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSgroups,dfgroups,MSgroups,fgroups,probgrps]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Subj.w.g.';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSsubwgrps,dfsubwgrps,MSsubwgrps]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Within Sub';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSwithinsubj,dfwithinsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSa,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSb,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor AB';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSab,dfab,MSab,fab,probab]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Error w. ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSerrwithin,dferrwithin,MSerrwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+
+ // show design for Square
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for Latin Square ';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]); // A (column) effect
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]); // B (cell) effect
+ group := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]); // group (row)
+ Design[group-1,row-1] := 'B' + IntToStr(col);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ ABmat[i,j] := ABmat[i,j] / n;
+ for i := 0 to p-1 do
+ ABmat[i,p] := ABmat[i,p] / (n * p);
+ for j := 0 to p-1 do
+ ABmat[p,j] := ABmat[p,j] / (n * p);
+
+ GrandMean := GrandMean / (p * p * n );
+ for i := 0 to p-1 do
+ begin
+ Atotals[i] := Atotals[i] / (p * n);
+ Btotals[i] := Btotals[i] / (p * n);
+ Grptotals[i] := Grptotals[i] / (p * n);
+// Dtotals[i] := Dtotals[i] / (p * n);
+ end;
+
+ // show table of means for ABmat
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell means and totals');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,j]]);
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,p]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := 'Total ';
+ for j := 0 to p-1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[p,j]]);
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // show category means
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Means for each variable');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Atotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Btotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Grptotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.ShowModal;
+
+cleanup:
+ GBmat := nil;
+ ColLabels := nil;
+ RowLabels := nil;
+ Subjtotals := nil;
+ Design := nil;
+ Grptotals := nil;
+ Btotals := nil;
+ Atotals := nil;
+ cellcnts := nil;
+ ABCmat := nil;
+ ABmat := nil;
+end;
+
+procedure TLatinSqrsFrm.Plan6(Sender: TObject);
+label cleanup;
+var
+ NoFactors : integer;
+ n : integer; // no. of subjects per cell
+ Acol, Bcol, SbjCol, Grpcol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ SubjectFactor : string;
+ GroupFactor : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, k, m, minA, minB, minGrp, maxA, maxB, maxGrp : integer;
+ rangeA, rangeB, rangeGrp : integer;
+ value : integer;
+ cellcnts : IntDyneMat;
+ ABmat : DblDyneMat;
+ ABCmat : DblDyneCube;
+ GBmat : DblDyneMat;
+ Atotals : DblDyneVec;
+ Btotals : DblDyneVec;
+ Grptotals : DblDyneVec;
+ Subjtotals : DblDyneMat;
+ design : StrDyneMat;
+ G, term1, term2, term3, term4, term5, term6, term7 : double;
+ sumxsqr : double;
+ SSbetsubj, SSgroups, SSsubwGrps, SSwithinsubj, SSa, SSb, SSab : double;
+ SSerrwithin, SStotal, MSgroups, MSsubwGrps, MSa, MSb, MSab : double;
+ MSerrwithin, DFbetsubj, DFgroups, DFsubwGrps, DFwithinsubj : double;
+ DFa, DFb, DFab, DFerrwithin, DFtotal : double;
+ data, GrandMean : double;
+ p, row, col, subject, group : integer;
+ proba, probb, probab, probgrps : double;
+ fa, fb, fab, fgroups : double;
+ RowLabels, ColLabels : StrDyneVec;
+ Title : string;
+
+begin
+ NoFactors := 3;
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.DCodeEdit.Visible := false;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Visible := true;
+ LatinSpecsFrm.Label5.Visible := false;
+ LatinSpecsFrm.Label6.Visible := true;
+ LatinSpecsFrm.DinBtn.Visible := false;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := true;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text);
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of cases per cell.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ SubjectFactor := LatinSpecsFrm.CCodeEdit.Text;
+ GroupFactor := LatinSpecsFrm.GrpCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then ACol := i;
+ if (cellstring = FactorB) then BCol := i;
+ if (cellstring = GroupFactor) then Grpcol := i;
+ if (cellstring = SubjectFactor) then Sbjcol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+
+ // determine no. of levels in A, B and Group
+ minA := 1000;
+ minB := 1000;
+ minGrp := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ maxGrp := -1000;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[ACol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[BCol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]);
+ if value < minGrp then minGrp := value;
+ if value > maxGrp then maxGrp := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeGrp := maxGrp - minGrp + 1;
+
+ // check for squareness
+ if (rangeA <> rangeGrp) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should be equal for A,B and C!');
+ exit;
+ end;
+ p := rangeA;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(ABmat,p+1,p+1);
+ SetLength(ABCmat,p+1,p+1,n+1);
+ SetLength(cellcnts,p+1,p+1);
+ SetLength(Atotals,p+1);
+ SetLength(Btotals,p+1);
+ SetLength(Grptotals,p+1);
+ SetLength(Design,p,p);
+ SetLength(Subjtotals,p+1,n+1);
+ SetLength(RowLabels,p+1);
+ SetLength(ColLabels,n+1);
+ SetLength(GBmat,p+1,p+1);
+
+ for i := 0 to p-1 do
+ begin
+ RowLabels[i] := IntToStr(i+1);
+ ColLabels[i] := RowLabels[i];
+ end;
+ RowLabels[p] := 'Total';
+ ColLabels[p] := 'Total';
+
+ for i := 0 to p do
+ for j := 0 to p do
+ for k := 0 to n do
+ ABCmat[i,j,k] := 0.0;
+
+ for i := 0 to p do
+ begin
+ for j := 0 to p do
+ begin
+ cellcnts[i,j] := 0;
+ ABmat[i,j] := 0.0;
+ GBmat[i,j] := 0.0;
+ end;
+ end;
+
+ for i := 0 to p do
+ begin
+ Atotals[i] := 0.0;
+ Btotals[i] := 0.0;
+ Grptotals[i] := 0.0;
+ end;
+
+ for i := 0 to p do
+ for j := 0 to n do
+ Subjtotals[i,j] := 0.0;
+
+ G := 0.0;
+ sumxsqr := 0.0;
+ term1 := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ term7 := 0.0;
+ GrandMean := 0.0;
+
+ // Read in the data
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ group := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]);
+ subject := StrToInt(OS3MainFrm.DataGrid.Cells[Sbjcol,i]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,i]);
+ cellcnts[group-1,row-1] := cellcnts[group-1,row-1] + 1;
+ ABCmat[group-1,row-1,subject-1] := ABCmat[group-1,row-1,subject-1] + data;
+ Subjtotals[group-1,subject-1] := Subjtotals[group-1,subject-1] + data;
+ GBmat[group-1,col-1] := GBmat[group-1,col-1] + data;
+ Atotals[col-1] := Atotals[col-1] + data;
+ Btotals[group-1] := Btotals[group-1] + data;
+ Grptotals[group-1] := Grptotals[group-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ GrandMean := GrandMean + data;
+ end;
+
+ // check for equal cell counts
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ if cellcnts[i,j] <> n then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+ end;
+
+ // collapse subjects's into group x a matrix
+ for i := 0 to p-1 do // group
+ for j := 0 to p-1 do // factor a
+ for k := 0 to n-1 do // subject
+ ABmat[i,j] := ABmat[i,j] + ABCmat[i,j,k];
+
+ // get marginal totals for ABmat and GBmat
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ ABmat[p,j] := ABmat[p,j] + ABmat[i,j];
+ ABmat[i,p] := ABmat[i,p] + ABmat[i,j];
+ GBmat[p,j] := GBmat[p,j] + GBmat[i,j];
+ GBmat[i,p] := GBmat[i,p] + GBmat[i,j];
+ end;
+ end;
+
+ // get grand total for ABmat and GBmat
+ for i := 0 to p-1 do
+ begin
+ ABmat[p,p] := ABmat[p,p] + ABmat[p,i];
+ GBmat[p,p] := GBmat[p,p] + GBmat[p,i];
+ end;
+
+ // Get marginal totals for Subjtotals
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to n-1 do
+ begin
+ Subjtotals[p,j] := Subjtotals[p,j] + Subjtotals[i,j];
+ Subjtotals[i,n] := Subjtotals[i,n] + Subjtotals[i,j];
+ end;
+ end;
+ for i := 0 to p-1 do Subjtotals[p,n] := Subjtotals[p,n] + Subjtotals[i,n];
+
+ // test block
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 6');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Sums for ANOVA Analysis');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Group - C (rows) times A Factor (columns) sums';
+ MAT_PRINT(ABmat,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p));
+ cellstring := 'Group - C (rows) times B (cells Factor) sums';
+ MAT_PRINT(GBmat,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p));
+ Title := 'Group - C (rows) times Subjects (columns) matrix';
+ for i := 0 to n-1 do ColLabels[i] := IntToStr(i+1);
+ ColLabels[n] := 'Total';
+ Mat_Print(Subjtotals,p+1,n+1,Title,RowLabels,ColLabels,(n*p*p));
+ OutPutFrm.ShowModal;
+
+ // get squared sum of subject's totals in each group
+ for i := 0 to p-1 do // group
+ term7 := term7 + (Subjtotals[i,n] * Subjtotals[i,n]);
+ term7 := term7 / (n*p); // Sum G^2 sub k
+
+ // now square each person score in each group and get sum for group
+ for i := 0 to p-1 do
+ for j := 0 to n-1 do
+ Subjtotals[i,j] := Subjtotals[i,j] * Subjtotals[i,j];
+ for i := 0 to p-1 do Subjtotals[i,n] := 0.0;
+ for i := 0 to p-1 do
+ for j := 0 to n-1 do
+ Subjtotals[i,n] := Subjtotals[i,n] + Subjtotals[i,j];
+ for i := 0 to p-1 do term6 := term6 + Subjtotals[i,n];
+ SSsubwgrps := term6 / p - term7;
+
+ // get correction term
+ term1 := (GrandMean * GrandMean) / (n * p * p);
+
+ term2 := sumxsqr;
+
+ // get sum of squared a's for term3
+ for j := 0 to p-1 do
+ term3 := term3 + (ABmat[p,j] * ABmat[p,j]);
+ term3 := term3 / (n * p);
+
+ // get sum of squared groups for term4
+ for i := 0 to p-1 do
+ term4 := term4 + (ABmat[i,p] * ABmat[i,p]);
+ term4 := term4 / (n * p);
+
+ // get squared sum of b's (across groups) for term5
+ for j := 0 to p-1 do
+ term5 := term5 + (GBmat[p,j] * GBmat[p,j]);
+ term5 := term5 / (n * p);
+
+ SSgroups := term4 - term1;
+ SSbetsubj := SSgroups + SSsubwgrps;
+ SStotal := sumxsqr - term1;
+ SSwithinsubj := SStotal - SSbetsubj;
+ SSa := term3 - term1;
+ SSb := term5 - term1;
+
+ // get sum of squared AB cells for term6
+ term6 := 0.0;
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ term6 := term6 + (ABmat[i,j] * ABmat[i,j]);
+ term6 := term6 / n;
+ SSab := term6 - term3 - term5 + term1;
+ SSab := SSab - SSgroups;
+ SSerrwithin := ( sumxsqr - term6) - SSsubwgrps;
+
+ // record degrees of freedom for sources
+ dfbetsubj := n * p - 1;
+ dfsubwgrps := p * (n-1);
+ dfgroups := p - 1;
+ dftotal := n * p * p - 1;
+ dfwithinsubj := n * p * (p-1);
+ dfa := p - 1;
+ dfb := p - 1;
+ dfab := (p - 1) * (p - 2);
+ dferrwithin := p * (n - 1) * (p - 1);
+
+ MSsubwgrps := SSsubwgrps / dfsubwgrps;
+ MSgroups := SSgroups / dfgroups;
+ MSa := SSa / dfa;
+ MSb := SSb / dfb;
+ MSab := SSab / dfab;
+ MSerrwithin := SSerrwithin / dferrwithin;
+ fgroups := MSgroups / MSsubwgrps;
+ fa := MSa / MSerrwithin;
+ fb := MSb / MSerrwithin;
+ fab := MSab / MSerrwithin;
+ probgrps := probf(fgroups,dfgroups,dfsubwgrps);
+ proba := probf(fa,dfa,dferrwithin);
+ probb := probf(fb,dfb,dferrwithin);
+ probab := probf(fab,dfab,dferrwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 6');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Betw.Subj.';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSbetsubj,dfbetsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSgroups,dfgroups,MSgroups,fgroups,probgrps]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Subj.w.g.';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSsubwgrps,dfsubwgrps,MSsubwgrps]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Within Sub';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSwithinsubj,dfwithinsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSa,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSb,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Residual ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSab,dfab,MSab,fab,probab]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Error w. ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSerrwithin,dferrwithin,MSerrwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+
+ // show design for Square
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for Latin Square ';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' G C ';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]); // A (column) effect
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]); // B (cell) effect
+ group := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]); // group (row)
+ Design[group-1,row-1] := 'B' + IntToStr(col);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format('%3d %3d ',[i+1,i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ ABmat[i,j] := ABmat[i,j] / n;
+ for i := 0 to p-1 do
+ ABmat[i,p] := ABmat[i,p] / (n * p);
+ for j := 0 to p-1 do
+ ABmat[p,j] := ABmat[p,j] / (n * p);
+
+ GrandMean := GrandMean / (p * p * n );
+ for i := 0 to p-1 do
+ begin
+ Atotals[i] := Atotals[i] / (p * n);
+ Btotals[i] := Btotals[i] / (p * n);
+ Grptotals[i] := Grptotals[i] / (p * n);
+ end;
+
+ // show table of means for ABmat
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell means and totals');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,j]]);
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,p]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := 'Total ';
+ for j := 0 to p-1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[p,j]]);
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // show category means
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Means for each variable');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Atotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Btotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Grptotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.ShowModal;
+
+cleanup:
+ GBmat := nil;
+ ColLabels := nil;
+ RowLabels := nil;
+ Subjtotals := nil;
+ Design := nil;
+ Grptotals := nil;
+ Btotals := nil;
+ Atotals := nil;
+ cellcnts := nil;
+ ABCmat := nil;
+ ABmat := nil;
+end;
+
+procedure TLatinSqrsFrm.Plan7(Sender: TObject);
+label cleanup;
+var
+ NoFactors : integer;
+ n : integer; // no. of subjects per cell
+ Acol, Bcol, Ccol, SbjCol, Grpcol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ SubjectFactor : string;
+ FactorC : string;
+ GroupFactor : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, k, m, minA, minB, minC, minGrp, maxA, maxB, maxC, maxGrp : integer;
+ rangeA, rangeB, rangeC, rangeGrp : integer;
+ value : integer;
+ cellcnts : IntDyneMat;
+ ABmat : DblDyneMat;
+ ABCmat : DblDyneCube;
+ GBmat : DblDyneMat;
+ GCmat : DblDyneMat;
+ Atotals : DblDyneVec;
+ Btotals : DblDyneVec;
+ Ctotals : DblDyneVec;
+ Grptotals : DblDyneVec;
+ Subjtotals : DblDyneMat;
+ design : StrDyneMat;
+ G, term1, term2, term3, term4, term5, term6, term7, term8, term9 : double;
+ sumxsqr : double;
+ SSbetsubj, SSgroups, SSsubwGrps, SSwithinsubj, SSa, SSb, SSc, SSab : double;
+ SSerrwithin, SStotal, MSgroups, MSsubwGrps, MSa, MSb, MSc, MSab : double;
+ MSerrwithin, DFbetsubj, DFgroups, DFsubwGrps, DFwithinsubj : double;
+ DFa, DFb, DFc, DFab, DFerrwithin, DFtotal : double;
+ data, GrandMean : double;
+ p, row, col, slice, subject, group : integer;
+ proba, probb, probc, probab, probgrps : double;
+ fa, fb, fc, fab, fgroups : double;
+ RowLabels, ColLabels : StrDyneVec;
+ Title : string;
+
+begin
+ NoFactors := 4;
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.DCodeEdit.Visible := true;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Visible := true;
+ LatinSpecsFrm.Label5.Visible := true;
+ LatinSpecsFrm.Label6.Visible := true;
+ LatinSpecsFrm.DinBtn.Visible := true;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := true;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text);
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of cases per cell.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ FactorC := LatinSpecsFrm.CCodeEdit.Text;
+ SubjectFactor := LatinSpecsFrm.DCodeEdit.Text;
+ GroupFactor := LatinSpecsFrm.GrpCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then Acol := i;
+ if (cellstring = FactorB) then Bcol := i;
+ if (cellstring = FactorC) then Ccol := i;
+ if (cellstring = GroupFactor) then Grpcol := i;
+ if (cellstring = SubjectFactor) then Sbjcol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+
+ // determine no. of levels in A, B, C and Group
+ minA := 1000;
+ minB := 1000;
+ minGrp := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ minC := 1000;
+ maxC := -1000;
+ maxGrp := -1000;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ if value < minC then minC := value;
+ if value > maxC then maxC := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]);
+ if value < minGrp then minGrp := value;
+ if value > maxGrp then maxGrp := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeC := maxC - minC + 1;
+ rangeGrp := maxGrp - minGrp + 1;
+
+ // check for squareness
+ if ((rangeA <> rangeB) or (rangeA <> rangeC) or (rangeA <> rangeGrp)) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should be equal for A,B and C!');
+ exit;
+ end;
+ p := rangeA;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(ABmat,p+1,p+1);
+ SetLength(ABCmat,p+1,p+1,n+1);
+ SetLength(cellcnts,p+1,p+1);
+ SetLength(Atotals,p+1);
+ SetLength(Btotals,p+1);
+ SetLength(Ctotals,p+1);
+ SetLength(Grptotals,p+1);
+ SetLength(Design,p,p);
+ SetLength(Subjtotals,p+1,n+1);
+ SetLength(RowLabels,p+1);
+ SetLength(ColLabels,n+1);
+ SetLength(GBmat,p+1,p+1);
+ SetLength(GCmat,p+1,p+1);
+
+ for i := 0 to p-1 do
+ begin
+ RowLabels[i] := IntToStr(i+1);
+ ColLabels[i] := RowLabels[i];
+ end;
+ RowLabels[p] := 'Total';
+ ColLabels[p] := 'Total';
+
+ for i := 0 to p do
+ for j := 0 to p do
+ for k := 0 to n do
+ ABCmat[i,j,k] := 0.0;
+
+ for i := 0 to p do
+ begin
+ for j := 0 to p do
+ begin
+ cellcnts[i,j] := 0;
+ ABmat[i,j] := 0.0;
+ GBmat[i,j] := 0.0;
+ GCmat[i,j] := 0.0;
+ end;
+ end;
+
+ for i := 0 to p do
+ begin
+ Atotals[i] := 0.0;
+ Btotals[i] := 0.0;
+ Ctotals[i] := 0.0;
+ Grptotals[i] := 0.0;
+ end;
+
+ for i := 0 to p do
+ for j := 0 to n do
+ Subjtotals[i,j] := 0.0;
+
+ G := 0.0;
+ sumxsqr := 0.0;
+ term1 := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ term7 := 0.0;
+ term8 := 0.0;
+ term9 := 0.0;
+ GrandMean := 0.0;
+
+ // Read in the data
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ group := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]);
+ subject := StrToInt(OS3MainFrm.DataGrid.Cells[Sbjcol,i]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,i]);
+ cellcnts[group-1,row-1] := cellcnts[group-1,row-1] + 1;
+ ABCmat[group-1,row-1,slice-1] := ABCmat[group-1,row-1,slice-1] + data;
+ Subjtotals[group-1,subject-1] := Subjtotals[group-1,subject-1] + data;
+ GBmat[group-1,col-1] := GBmat[group-1,col-1] + data;
+ GCmat[group-1,slice-1] := GCmat[group-1,slice-1] + data;
+ Atotals[row-1] := Atotals[row-1] + data;
+ Btotals[col-1] := Btotals[col-1] + data;
+ Ctotals[slice-1] := Ctotals[slice-1] + data;
+ Grptotals[group-1] := Grptotals[group-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ GrandMean := GrandMean + data;
+ end;
+
+ // check for equal cell counts
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ if cellcnts[i,j] <> n then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+ end;
+
+ // collapse slices into group x a matrix
+ // result is the group times A matrix with BC cells containing n cases each
+ for i := 0 to p-1 do // group
+ for j := 0 to p-1 do // factor a
+ for k := 0 to n-1 do // factor c
+ ABmat[i,j] := ABmat[i,j] + ABCmat[i,j,k];
+
+ // get marginal totals for ABmat, GBmat and GCmat
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ ABmat[p,j] := ABmat[p,j] + ABmat[i,j];
+ ABmat[i,p] := ABmat[i,p] + ABmat[i,j];
+ GBmat[p,j] := GBmat[p,j] + GBmat[i,j];
+ GBmat[i,p] := GBmat[i,p] + GBmat[i,j];
+ GCmat[p,j] := GCmat[p,j] + GCmat[i,j];
+ GCmat[i,p] := GCmat[i,p] + GCmat[i,j];
+ end;
+ end;
+
+ // get grand total for ABmat, GBmat and GCmat
+ for i := 0 to p-1 do
+ begin
+ ABmat[p,p] := ABmat[p,p] + ABmat[p,i];
+ GBmat[p,p] := GBmat[p,p] + GBmat[p,i];
+ GCmat[p,p] := GCmat[p,p] + GCmat[p,i];
+ end;
+
+ // Get marginal totals for Subjtotals
+ for i := 0 to p-1 do // groups 1-p
+ begin
+ for j := 0 to n-1 do // subjects 1-n
+ begin
+ Subjtotals[p,j] := Subjtotals[p,j] + Subjtotals[i,j];
+ Subjtotals[i,n] := Subjtotals[i,n] + Subjtotals[i,j];
+ end;
+ end;
+ for i := 0 to p-1 do Subjtotals[p,n] := Subjtotals[p,n] + Subjtotals[i,n];
+
+ // test block
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 7 (superimposed squares)');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Sums for ANOVA Analysis');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Group (rows) times A Factor (columns) sums';
+ MAT_PRINT(ABmat,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p));
+ cellstring := 'Group (rows) times B (cells Factor) sums';
+ MAT_PRINT(GBmat,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p));
+ cellstring := 'Group (rows) times C (cells Factor) sums';
+ MAT_PRINT(GCmat,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p));
+ for i := 0 to n-1 do ColLabels[i] := IntToStr(i+1);
+ ColLabels[n] := 'Total';
+ Title := 'Group (rows) times Subjects (columns) sums';
+ Mat_Print(Subjtotals,p+1,n+1,Title,RowLabels,ColLabels,(n*p*p));
+ OutPutFrm.ShowModal;
+
+ // get squared sum of subject's totals in each group
+ for i := 0 to p-1 do // group
+ term7 := term7 + (Subjtotals[i,n] * Subjtotals[i,n]);
+ term7 := term7 / (n*p); // Sum G^2 sub k
+
+ // now square each person score in each group and get sum for group
+ for i := 0 to p-1 do // groups
+ for j := 0 to n-1 do // subjects
+ Subjtotals[i,j] := Subjtotals[i,j] * Subjtotals[i,j];
+ for i := 0 to p-1 do Subjtotals[i,n] := 0.0; // clear group totals
+
+ // get sum of squared person scores in each group
+ for i := 0 to p-1 do // groups
+ for j := 0 to n-1 do // subjects
+ Subjtotals[i,n] := Subjtotals[i,n] + Subjtotals[i,j];
+
+ // get sum of squares for subjects within groups
+ for i := 0 to p-1 do term6 := term6 + Subjtotals[i,n];
+ SSsubwgrps := (term6 / p) - term7;
+
+ // get correction term and term for total sum of squares
+ term1 := (GrandMean * GrandMean) / (n * p * p);
+ term2 := sumxsqr;
+
+ // get sum of squared groups for term4 of sum of squares for groups
+ for i := 0 to p-1 do
+ term4 := term4 + (Grptotals[i] * Grptotals[i]);
+ term4 := term4 / (n * p);
+
+ // get sum of squared a's for term3
+ for j := 0 to p-1 do // levels of a
+ term3 := term3 + (Atotals[j] * Atotals[j]);
+ term3 := term3 / (n * p);
+
+ // get squared sum of b's (across groups) for term5 of sum of squares b
+ for j := 0 to p-1 do
+ term5 := term5 + (Btotals[j] * Btotals[j]);
+ term5 := term5 / (n * p);
+
+ // get squared sum of c's (across groups) for term8 of SS for c
+ for j := 0 to p-1 do
+ term8 := term8 + (Ctotals[j] * Ctotals[j]);
+ term8 := term8 / (n * p);
+
+ SSgroups := term4 - term1;
+ SSbetsubj := SSgroups + SSsubwgrps;
+ SStotal := term2 - term1;
+ SSwithinsubj := SStotal - SSbetsubj;
+ SSa := term3 - term1;
+ SSb := term5 - term1;
+ SSc := term8 - term1;
+
+ // get sum of squared AB cells for term6
+ term6 := 0.0;
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ term6 := term6 + (ABmat[i,j] * ABmat[i,j]);
+ term9 := term6 / n - term1;
+ term6 := sumxsqr - (term6 / n); // SS within cells from sum squared x's
+ SSerrwithin := term6 - SSsubwgrps;
+ SSab := term9 - (SSa + SSb + SSc + SSgroups); // residual
+
+ // record degrees of freedom for sources
+ dfbetsubj := n * p - 1;
+ dfsubwgrps := p * (n-1);
+ dfgroups := p - 1;
+ dftotal := n * p * p - 1;
+ dfwithinsubj := n * p * (p-1);
+ dfa := p - 1;
+ dfb := p - 1;
+ dfc := p - 1;
+ dfab := (p - 1) * (p - 3);
+ dferrwithin := p * (n - 1) * (p - 1);
+
+ MSsubwgrps := SSsubwgrps / dfsubwgrps;
+ MSgroups := SSgroups / dfgroups;
+ MSa := SSa / dfa;
+ MSb := SSb / dfb;
+ MSc := SSc / dfc;
+ if dfab > 0 then MSab := SSab / dfab;
+ MSerrwithin := SSerrwithin / dferrwithin;
+ fgroups := MSgroups / MSsubwgrps;
+ fa := MSa / MSerrwithin;
+ fb := MSb / MSerrwithin;
+ fc := MSc / MSerrwithin;
+ if dfab > 0 then fab := MSab / MSerrwithin;
+ probgrps := probf(fgroups,dfgroups,dfsubwgrps);
+ proba := probf(fa,dfa,dferrwithin);
+ probb := probf(fb,dfb,dferrwithin);
+ probc := probf(fc,dfc,dferrwithin);
+ probab := probf(fab,dfab,dferrwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 7 (superimposed squares)');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Betw.Subj.';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSbetsubj,dfbetsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Groups ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSgroups,dfgroups,MSgroups,fgroups,probgrps]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Subj.w.g.';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSsubwgrps,dfsubwgrps,MSsubwgrps]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Within Sub';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSwithinsubj,dfwithinsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSa,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSb,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSc,dfc,MSc,fc,probc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' residual ';
+ if dfab > 0 then
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSab,dfab,MSab,fab,probab])
+ else
+ cellstring := cellstring + format(' - %9.0f -',[dfab]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Error w. ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSerrwithin,dferrwithin,MSerrwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+
+ // show design for Square
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for Latin Square ';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]); // A (column) effect
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]); // B (cell) effect
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]); // C (cell) effect
+ group := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]); // group (row)
+ Design[group-1,row-1] := 'BC' + IntToStr(col) + IntToStr(slice);
+ end;
+ for i := 0 to p - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // get means
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ ABmat[i,j] := ABmat[i,j] / n;
+ for i := 0 to p-1 do
+ ABmat[i,p] := ABmat[i,p] / (n * p);
+ for j := 0 to p-1 do
+ ABmat[p,j] := ABmat[p,j] / (n * p);
+
+ GrandMean := GrandMean / (p * p * n );
+ for i := 0 to p-1 do
+ begin
+ Atotals[i] := Atotals[i] / (p * n);
+ Btotals[i] := Btotals[i] / (p * n);
+ Ctotals[i] := Ctotals[i] / (p * n);
+ Grptotals[i] := Grptotals[i] / (p * n);
+ end;
+
+ // show table of means for ABmat
+ // means for Groups by A matrix
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell means and totals');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,j]]);
+ cellstring := cellstring + format(' %8.3f ',[ABmat[i,p]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := 'Total ';
+ for j := 0 to p-1 do
+ cellstring := cellstring + format(' %8.3f ',[ABmat[p,j]]);
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // show category means
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Means for each variable');
+ OutPutFrm.RichEdit.Lines.Add('');
+
+ // factor A means
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Atotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // means for B
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorB]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Btotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // C means
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorC]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Ctotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+
+ // Group means
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ cellstring := cellstring + ' Total';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p - 1 do
+ begin
+ cellstring := cellstring + format(' %8.3f ',[Grptotals[j]]);
+ end;
+ cellstring := cellstring + format(' %8.3f ',[GrandMean]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '----------';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.ShowModal;
+
+cleanup:
+ GCmat := nil;
+ GBmat := nil;
+ ColLabels := nil;
+ RowLabels := nil;
+ Subjtotals := nil;
+ Design := nil;
+ Grptotals := nil;
+ Ctotals := nil;
+ Btotals := nil;
+ Atotals := nil;
+ cellcnts := nil;
+ ABCmat := nil;
+ ABmat := nil;
+end;
+
+procedure TLatinSqrsFrm.Plan9(Sender: TObject);
+label cleanup;
+var
+ NoFactors, row, col, slice, group, index : integer;
+ Acol, Bcol, Ccol, SbjCol, Grpcol, DataCol : integer; // variable columns in grid
+ FactorA : string;
+ FactorB : string;
+ FactorC : string;
+ SubjectFactor : string;
+ GroupFactor : string;
+ DataVar : string;
+ cellstring : string;
+ i, j, k, m, minA, minB, minC, minGrp, maxA, maxB, maxC, maxGrp : integer;
+ n, subject, nosubjects, rangeA, rangeB, rangeC, rangeGrp : integer;
+ p, q, rows, value : integer;
+ ABC, AGC : DblDyneCube;
+ AB, AC, BC, RC : DblDyneMat;
+ A, B, C, Persons, Gm, R : DblDyneVec;
+ cellcnts : IntDyneVec;
+ Design : StrDyneMat;
+ RowLabels : StrDyneVec;
+ ColLabels : StrDyneVec;
+ G, sumxsqr, sumAsqr, sumBsqr, sumCsqr, sumABsqr, sumACsqr : double;
+ sumBCsqr, sumABCsqr, sumPsqr, sumGmsqr, sumRsqr : double;
+ SSbetsubj, SSc, SSrows, SScxrow, SSsubwgrps, SSwsubj, SSa : double;
+ SSwithinsubj, SSerrwithin : double;
+ SSb, SSac, SSbc, SSabprime, SSABCprime, SSerrorwithin, SStotal : double;
+ term1, term2, term3, term4, term5, term6, term7, term8, term9, term10 : double;
+ term11, term12 : double;
+ dfc, dfrows, dfcxrow, dfsubwgrps, dfwithinsubj, dfa, dfb,dfac : double;
+ dfbc, dfabprime, dfabcprime,dferrwithin, dftotal, dfbetsubj : double;
+ MSbetweensubj, MSc, MSrows, MScxrow, MSsubwgrps, MSwsubj, MSa : double;
+ MSb, MSac, MSbc, MSabprime, MSabcprime, MSerrwithin, MStotal : double;
+ fc, frows, fcxrow, fsubwgrps, fa, fb, fac, fbc, fabprime, fabcprime : double;
+ probc, probrows, probcxrow, probsubwgrps, proba, probb : double;
+ probac, probbc, probabprime, probabcprime : double;
+ data : double;
+
+begin
+ NoFactors := 4;
+ cellstring := LatinSpecsFrm.Label5.Caption; // get current label
+ LatinSpecsFrm.Label5.Caption := 'Subject No.'; // set new label
+ LatinSpecsFrm.AinBtn.Visible := true;
+ LatinSpecsFrm.AoutBtn.Visible := false;
+ LatinSpecsFrm.BinBtn.Visible := true;
+ LatinSpecsFrm.BoutBtn.Visible := false;
+ LatinSpecsFrm.CinBtn.Visible := true;
+ LatinSpecsFrm.CoutBtn.Visible := false;
+ LatinSpecsFrm.DCodeEdit.Visible := true;
+ LatinSpecsFrm.ACodeEdit.Text := '';
+ LatinSpecsFrm.BCodeEdit.Text := '';
+ LatinSpecsFrm.CCodeEdit.Text := '';
+ LatinSpecsFrm.DCodeEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Text := '';
+ LatinSpecsFrm.DepVarEdit.Text := '';
+ LatinSpecsFrm.nPerCellEdit.Text := '';
+ LatinSpecsFrm.GrpCodeEdit.Visible := true;
+ LatinSpecsFrm.Label5.Visible := true;
+ LatinSpecsFrm.Label6.Visible := true;
+ LatinSpecsFrm.DinBtn.Visible := true;
+ LatinSpecsFrm.DoutBtn.Visible := false;
+ LatinSpecsFrm.GrpInBtn.Visible := true;
+ LatinSpecsFrm.GrpOutBtn.Visible := false;
+ LatinSpecsFrm.DataInBtn.Visible := true;
+ LatinSpecsFrm.DataOutBtn.Visible := false;
+ LatinSpecsFrm.ShowModal;
+ if LatinSpecsFrm.ModalResult = mrCancel then exit;
+ LatinSpecsFrm.Label5.Caption := cellstring; // restore label
+ n := StrToInt(LatinSpecsFrm.nPerCellEdit.Text); // no. persons per cell
+ if n <= 0 then
+ begin
+ ShowMessage('Please specify the number of subjects per group.');
+ exit;
+ end;
+ FactorA := LatinSpecsFrm.ACodeEdit.Text;
+ FactorB := LatinSpecsFrm.BCodeEdit.Text;
+ FactorC := LatinSpecsFrm.CCodeEdit.Text;
+ SubjectFactor := LatinSpecsFrm.DCodeEdit.Text;
+ GroupFactor := LatinSpecsFrm.GrpCodeEdit.Text;
+ DataVar := LatinSpecsFrm.DepVarEdit.Text;
+ for i := 1 to NoVariables do
+ begin
+ cellstring := OS3MainFrm.DataGrid.Cells[i,0];
+ if (cellstring = FactorA) then Acol := i;
+ if (cellstring = FactorB) then Bcol := i;
+ if (cellstring = FactorC) then Ccol := i;
+ if (cellstring = GroupFactor) then Grpcol := i;
+ if (cellstring = SubjectFactor) then Sbjcol := i;
+ if (cellstring = DataVar) then DataCol := i;
+ end;
+
+ // determine no. of levels in A, B, C and Group
+ minA := 1000;
+ minB := 1000;
+ minGrp := 1000;
+ maxA := -1000;
+ maxB := -1000;
+ minC := 1000;
+ maxC := -1000;
+ maxGrp := -1000;
+ nosubjects := 0;
+ for i := 1 to NoCases do
+ begin
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]);
+ if value < minA then minA := value;
+ if value > maxA then maxA := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]);
+ if value < minB then minB := value;
+ if value > maxB then maxB := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]);
+ if value < minC then minC := value;
+ if value > maxC then maxC := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[sbjcol,i]);
+ if value > nosubjects then nosubjects := value;
+ value := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]);
+ if value < minGrp then minGrp := value;
+ if value > maxGrp then maxGrp := value;
+ end;
+ rangeA := maxA - minA + 1;
+ rangeB := maxB - minB + 1;
+ rangeC := maxC - minC + 1;
+ rangeGrp := maxGrp - minGrp + 1;
+
+ // check for squareness
+ if (rangeA <> rangeB) then
+ begin
+ ShowMessage('ERROR! In a Latin square the range of values should be equal for A,B and C!');
+ exit;
+ end;
+ p := rangeA;
+ q := rangeC;
+
+ // set up an array for cell counts and for cell sums and marginal sums
+ SetLength(ABC,p+1,p+1,q+1);
+ SetLength(AGC,p+1,rangegrp+1,q+1);
+ SetLength(AB,p+1,p+1);
+ SetLength(AC,p+1,q+1);
+ SetLength(BC,p+1,q+1);
+ SetLength(RC,(rangegrp div q)+1,q+1);
+ SetLength(A,p+1);
+ SetLength(B,p+1);
+ SetLength(C,q+1);
+ SetLength(Persons,nosubjects+1);
+ SetLength(Gm,rangegrp+1);
+ SetLength(R,p+1);
+ SetLength(cellcnts,p+1);
+ SetLength(Design,rangegrp,p);
+ SetLength(RowLabels,100);
+ SetLength(ColLabels,100);
+
+ // initialize arrays
+ for i := 0 to p-1 do
+ begin
+ RowLabels[i] := IntToStr(i+1);
+ ColLabels[i] := RowLabels[i];
+ end;
+ RowLabels[p] := 'Total';
+ ColLabels[p] := 'Total';
+
+ for i := 0 to p do
+ for j := 0 to p do
+ for k := 0 to q do
+ ABC[i,j,k] := 0.0;
+
+ for i := 0 to p do
+ for j := 0 to rangegrp do
+ for k := 0 to q do
+ AGC[i,j,k] := 0.0;
+
+ for i := 0 to p do
+ for j := 0 to p do
+ AB[i,j] := 0.0;
+
+ for i := 0 to p do
+ for j := 0 to q do
+ AC[i,j] := 0.0;
+
+ for i := 0 to p do
+ for j := 0 to q do
+ BC[i,j] := 0.0;
+
+ for i := 0 to p do
+ for j := 0 to q do
+ RC[i,j] := 0.0;
+
+ for i := 0 to p do A[i] := 0.0;
+ for i := 0 to p do B[i] := 0.0;
+ for i := 0 to q do C[i] := 0.0;
+ for i := 0 to nosubjects do Persons[i] := 0.0;
+ for i := 0 to rangegrp do Gm[i] := 0.0;
+ for i := 0 to p do R[i] := 0.0;
+ for i := 0 to p do cellcnts[i] := 0;
+
+ // initialize single values
+ G := 0.0;
+ sumxsqr := 0.0;
+ sumAsqr := 0.0;
+ sumBsqr := 0.0;
+ sumABsqr := 0.0;
+ sumACsqr := 0.0;
+ sumBCsqr := 0.0;
+ sumABCsqr := 0.0;
+ sumRsqr := 0.0;
+ sumGmsqr := 0.0;
+ sumRsqr := 0.0;
+ sumPsqr := 0.0;
+ term2 := 0.0;
+ term3 := 0.0;
+ term4 := 0.0;
+ term5 := 0.0;
+ term6 := 0.0;
+ term7 := 0.0;
+ term8 := 0.0;
+ term9 := 0.0;
+ term10 := 0.0;
+ term11 := 0.0;
+ term12 := 0.0;
+
+ // Read in the data
+ for index := 1 to NoCases do
+ begin
+ i := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,index]);
+ j := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,index]);
+ k := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,index]);
+ m := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,index]);
+ subject := StrToInt(OS3MainFrm.DataGrid.Cells[Sbjcol,index]);
+ data := StrToFloat(OS3MainFrm.DataGrid.Cells[DataCol,index]);
+ cellcnts[j-1] := cellcnts[j-1] + 1;
+ ABC[i-1,j-1,k-1] := ABC[i-1,j-1,k-1] + data;
+ AGC[i-1,m-1,k-1] := AGC[i-1,m-1,k-1] + data;
+ AB[i-1,j-1] := AB[i-1,j-1] + data;
+ AC[i-1,k-1] := AC[i-1,k-1] + data;
+ BC[j-1,k-1] := BC[j-1,k-1] + data;
+ A[i-1] := A[i-1] + data;
+ B[j-1] := B[j-1] + data;
+ C[k-1] := C[k-1] + data;
+ Gm[m-1] := Gm[m-1] + data;
+ Persons[subject-1] := Persons[subject-1] + data;
+ sumxsqr := sumxsqr + (data * data);
+ G := G + data;
+ end;
+
+ // check for equal cell counts in b treatments
+ for i := 1 to p-1 do
+ begin
+ if cellcnts[i-1] <> cellcnts[i] then
+ begin
+ ShowMessage('cell sizes are not equal!');
+ goto cleanup;
+ end;
+ end;
+
+ // get sums in the RC matrix
+ rows := rangegrp div q;
+ for i := 0 to rows - 1 do
+ begin
+ for j := 0 to q-1 do
+ begin
+// k := (i * q) + j;
+ k := i + q * j;
+ RC[i,j] := Gm[k];
+ end;
+ end;
+
+ // get marginal totals for RC array
+ for i := 0 to rows -1 do
+ begin
+ for j := 0 to q-1 do
+ begin
+ RC[i,q] := RC[i,q] + RC[i,j];
+ RC[rows,j] := RC[rows,j] + RC[i,j];
+ end;
+ end;
+
+ // get marginal totals for arrays ABC and AGC
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ for k := 0 to q-1 do
+ begin
+ ABC[i,j,q] := ABC[i,j,q] + ABC[i,j,k];
+ ABC[i,p,k] := ABC[i,p,k] + ABC[i,j,k];
+ ABC[p,j,k] := ABC[p,j,k] + ABC[i,j,k];
+ end;
+ end;
+ end;
+
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to rangegrp - 1 do
+ begin
+ for k := 0 to q-1 do
+ begin
+ AGC[i,j,q] := AGC[i,j,q] + AGC[i,j,k];
+ AGC[i,rangegrp,k] := AGC[i,rangegrp,k] + AGC[i,j,k];
+ AGC[p,j,k] := AGC[p,j,k] + AGC[i,j,k];
+ end;
+ end;
+ end;
+
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to q-1 do
+ begin
+ AC[p,j] := AC[p,j] + AC[i,j];
+ AC[i,q] := AC[i,q] + AC[i,j];
+ BC[p,j] := BC[p,j] + BC[i,j];
+ BC[i,q] := BC[i,q] + BC[i,j];
+ end;
+ end;
+
+ // get grand total for AC, BC and RC
+ for i := 0 to q-1 do
+ begin
+ AC[p,q] := AC[p,q] + AC[p,i];
+ BC[p,q] := BC[p,q] + BC[p,i];
+ RC[p,q] := RC[p,q] + RC[p,i];
+ end;
+
+ // get margins and totals in AB matrix
+ for i := 0 to p-1 do
+ begin
+ for j := 0 to p-1 do
+ begin
+ AB[p,j] := AB[p,j] + AB[i,j];
+ AB[i,p] := AB[i,p] + AB[i,j];
+ end;
+ end;
+ for i := 0 to p-1 do AB[p,p] := AB[p,p] + AB[i,p];
+
+ // get total for groups
+ for m := 0 to rangegrp - 1 do Gm[rangegrp] := Gm[rangegrp] + Gm[m];
+
+ // test block
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 9');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Sums for ANOVA Analysis');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'ABC matrix';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ for k := 0 to q-1 do
+ begin
+ cellstring := format('C level %d',[k+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p-1 do cellstring := cellstring + format(' %3d ',[j+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do // row
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p-1 do
+ begin
+ cellstring := cellstring + format('%9.3f ',[ABC[i,j,k]]);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('');
+ end;
+ cellstring := 'AB sums';
+ MAT_PRINT(AB,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*q));
+ cellstring := 'AC sums';
+ MAT_PRINT(AC,p+1,q+1,cellstring,RowLabels,ColLabels,(n*p*q));
+ cellstring := 'BC sums';
+ MAT_PRINT(BC,p+1,q+1,cellstring,RowLabels,ColLabels,(n*p*q));
+ cellstring := 'RC sums';
+ MAT_PRINT(RC,rows+1,q+1,cellstring,RowLabels,ColLabels,(n*p*q));
+ cellstring := 'Group totals';
+ for i := 0 to rangegrp-1 do ColLabels[i] := IntToStr(i+1);
+ ColLabels[rangegrp] := 'Total';
+ DynVectorPrint(Gm,rangegrp+1,cellstring,ColLabels,(n*p*q));
+ for i := 0 to nosubjects-1 do ColLabels[i] := IntToStr(i+1);
+ ColLabels[nosubjects] := 'Total';
+ cellstring := 'Subjects sums';
+ DynVectorPrint(Persons,nosubjects+1,cellstring,ColLabels,(n*p*q));
+ OutPutFrm.ShowModal;
+
+ term1 := (G * G) / (n * p * p * q);
+ term2 := sumXsqr;
+ for i := 0 to p-1 do term3 := term3 + (A[i] * A[i]);
+ term3 := term3 / (n * p * q);
+ for i := 0 to p-1 do term4 := term4 + (B[i] * B[i]);
+ term4 := term4 / (n * p * q);
+ for i := 0 to q-1 do term5 := term5 + (C[i] * C[i]);
+ term5 := term5 / (n * p * p);
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ term6 := term6 + (AB[i,j] * AB[i,j]);
+ term6 := term6 / (n * q);
+ for i := 0 to p-1 do
+ for j := 0 to q-1 do
+ term7 := term7 + (AC[i,j] * AC[i,j]);
+ term7 := term7 / (n * p);
+ for i := 0 to p-1 do
+ for j := 0 to q-1 do
+ term8 := term8 + (BC[i,j] * BC[i,j]);
+ term8 := term8 / (n * p);
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ for k := 0 to q-1 do
+ term9 := term9 + (ABC[i,j,k] * ABC[i,j,k]);
+ term9 := term9 / n;
+ for i := 0 to nosubjects-1 do term10 := term10 + (persons[i] * persons[i]);
+ term10 := term10 / p;
+ for i := 0 to rangegrp-1 do term11 := term11 + (Gm[i] * Gm[i]);
+ term11 := term11 / (n * p);
+ for i := 0 to rows-1 do term12 := term12 + (RC[i,q] * RC[i,q]);
+ term12 := term12 / (n * p * q);
+
+ // term check
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Computation Terms');
+ cellstring := format('Term1 = %9.3f',[term1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term2 = %9.3f',[term2]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term3 = %9.3f',[term3]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term4 = %9.3f',[term4]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term5 = %9.3f',[term5]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term6 = %9.3f',[term6]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term7 = %9.3f',[term7]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term8 = %9.3f',[term8]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term9 = %9.3f',[term9]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term10 = %9.3f',[term10]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term11 = %9.3f',[term11]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('term12 = %9.3f',[term12]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ // now get sums of squares
+ SSbetsubj := term10 - term1;
+ SSc := term5 - term1;
+ SSrows := term12 - term1;
+ SScxrow := term11 - term5 - term12 + term1;
+ SSsubwgrps := term10 - term11;
+ SSwithinsubj := term2 - term10;
+ SSa := term3 - term1;
+ SSb := term4 - term1;
+ SSac := term7 - term3 - term5 + term1;
+ SSbc := term8 - term4 - term5 + term1;
+ SSabprime := (term6 - term3 - term4 + term1) - (term12 - term1);
+ SSabcprime := (term9 - term6 - term7 - term8 + term3 + term4 + term5 - term1)
+ - (term11 - term5 - term12 + term1);
+ SSerrwithin := term2 - term10 - term9 + term11;
+ SStotal := term2 - term1;
+
+ // record degrees of freedom for sources
+ dfbetsubj := n * p * q - 1;
+ dfc := q - 1;
+ dfrows := p - 1;
+ dfcxrow := (p-1) * (q-1);
+ dfsubwgrps := p * q * (n-1);
+ dfwithinsubj := n * p * q * (p-1);
+ dfa := p - 1;
+ dfb := p - 1;
+ dfac := (p - 1) * (q - 1);
+ dfbc := (p - 1) * (q - 1);
+ dfabprime := (p - 1) * (p - 2);
+ dfabcprime := (p - 1) * (p - 2) * (q - 1);
+ dferrwithin := p * q * (n - 1) * (p - 1);
+ dftotal := n * p * p * q - 1;
+
+ MSc := SSc / dfc;
+ MSrows := SSrows / dfrows;
+ MScxrow := SScxrow / dfcxrow;
+ MSsubwgrps := SSsubwgrps / dfsubwgrps;
+ MSa := SSa / dfa;
+ MSb := SSb / dfb;
+ MSac := SSac / dfac;
+ MSbc := SSbc / dfbc;
+ MSabprime := SSabprime / dfabprime;
+ MSabcprime := SSabcprime / dfabcprime;
+ MSerrwithin := SSerrwithin / dferrwithin;
+
+ fc := MSc / MSsubwgrps;
+ frows := MSrows / MSsubwgrps;
+ fcxrow := MScxrow / MSsubwgrps;
+ fsubwgrps := MSsubwgrps / MSerrwithin;
+ fa := MSa / MSerrwithin;
+ fb := MSb / MSerrwithin;
+ fac := MSac / MSerrwithin;
+ fbc := MSbc / MSerrwithin;
+ fabprime := MSabprime / MSerrwithin;
+ fabcprime := MSabcprime / MSerrwithin;
+
+ probc := probf(fc,dfc,dfsubwgrps);
+ probrows := probf(frows,dfrows,dfsubwgrps);
+ probcxrow := probf(fcxrow,dfcxrow,dfsubwgrps);
+ probsubwgrps := probf(fsubwgrps,dfsubwgrps,dferrwithin);
+ proba := probf(fa,dfa,dferrwithin);
+ probb := probf(fb,dfb,dferrwithin);
+ probac := probf(fac,dfac,dferrwithin);
+ probbc := probf(fbc,dfbc,dferrwithin);
+ probabprime := probf(fabprime,dfabprime,dferrwithin);
+ probabcprime := probf(fabcprime,dfabcprime,dferrwithin);
+
+ // show ANOVA table results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 9');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('Source SS DF MS F Prob.>F');
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ cellstring := 'Betw.Subj.';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSbetsubj,dfbetsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor C ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSc,dfc,MSc,fc,probc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Rows ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSrows,dfrows,MSrows,frows,probrows]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' C x row ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SScxrow,dfcxrow,MScxrow,fcxrow,probcxrow]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Subj.w.g.';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSsubwgrps,dfsubwgrps,MSsubwgrps]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Within Sub';
+ cellstring := cellstring + format('%9.3f %9.0f',[SSwithinsubj,dfwithinsubj]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor A ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSa,dfa,MSa,fa,proba]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor B ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSb,dfb,MSb,fb,probb]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor AC';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSac,dfac,MSac,fac,probac]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Factor BC';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSbc,dfbc,MSbc,fbc,probbc]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' AB prime ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSabprime,dfabprime,MSabprime,fabprime,probabprime]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ABC prime';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f %9.3f %9.3f',[SSabcprime,dfabcprime,MSabcprime,fabcprime,probabcprime]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' Error w. ';
+ cellstring := cellstring + format('%9.3f %9.0f %9.3f',[SSerrwithin,dferrwithin,MSerrwithin]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := 'Total ';
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := cellstring + format('%9.3f %9.0f',[SStotal, dftotal]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('-----------------------------------------------------------');
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ // show design for Squares c1, c2, etc.
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'Experimental Design for Latin Square ';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[FactorA]);
+ for i := 1 to p do cellstring := cellstring + format(' %3d ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := format('%10s',[GroupFactor]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 1 to NoCases do
+ begin
+ row := StrToInt(OS3MainFrm.DataGrid.Cells[Acol,i]); // A (column) effect
+ col := StrToInt(OS3MainFrm.DataGrid.Cells[Bcol,i]); // B (cell) effect
+ slice := StrToInt(OS3MainFrm.DataGrid.Cells[Ccol,i]); // C (cell) effect
+ group := StrToInt(OS3MainFrm.DataGrid.Cells[Grpcol,i]); // group (row)
+ Design[group-1,row-1] := 'B' + IntToStr(col);
+ end;
+ for i := 0 to rangegrp - 1 do
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p - 1 do
+ cellstring := cellstring + format('%5s',[Design[i,j]]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ cellstring := '----------';
+ for i := 1 to p + 1 do cellstring := cellstring + '-----';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ // get means
+ G := G / (p * p * q * n );
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ for k := 0 to q-1 do
+ ABC[i,j,k] := ABC[i,j,k] / n;
+
+ for i := 0 to p-1 do
+ for j := 0 to p-1 do
+ AB[i,j] := AB[i,j] / (n * p);
+ for i := 0 to p-1 do AB[i,p] := AB[i,p] / (n * p * p);
+ for j := 0 to p-1 do AB[p,j] := AB[p,j] / (n * p * p);
+ AB[p,p] := G;
+
+ for i := 0 to p-1 do
+ for j := 0 to q-1 do
+ AC[i,j] := AC[i,j] / (n * p);
+ for i := 0 to p-1 do AC[i,q] := AC[i,q] / (n * p * p);
+ for j := 0 to q-1 do AC[p,j] := AC[p,j] / (n * p * p);
+ AC[p,q] := G;
+
+ for i := 0 to p-1 do
+ for j := 0 to q-1 do
+ BC[i,j] := BC[i,j] / (n * p);
+ for i := 0 to p-1 do BC[i,q] := BC[i,q] / (n * p * p);
+ for j := 0 to q-1 do BC[p,j] := BC[p,j] / (n * p * p);
+ BC[p,q] := G;
+
+ for i := 0 to rows-1 do
+ for j := 0 to q-1 do
+ RC[i,j] := RC[i,j] / (p * n);
+ for i := 0 to rows-1 do RC[i,q] := RC[i,q] / (p * q * n);
+ for j := 0 to q-1 do RC[p,j] := RC[p,j] / (q * p * n);
+ RC[p,q] := G;
+
+ for i := 0 to p-1 do
+ begin
+ A[i] := A[i] / (p * n * q);
+ B[i] := B[i] / (p * n * q);
+ end;
+ A[p] := G;
+ B[p] := G;
+
+ for i := 0 to q-1 do C[i] := C[i] / (p * q * n);
+ C[q] := G;
+
+ for i := 0 to rangegrp-1 do Gm[i] := Gm[i] / (p * n);
+ Gm[rangegrp] := G;
+
+ for i := 0 to nosubjects-1 do Persons[i] := Persons[i] / n;
+ Persons[nosubjects] := G;
+
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Latin Squares Repeated Analysis Plan 9');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Means for ANOVA Analysis');
+ OutPutFrm.RichEdit.Lines.Add('');
+ cellstring := 'ABC matrix';
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ OutPutFrm.RichEdit.Lines.Add('');
+ for k := 0 to q-1 do
+ begin
+ cellstring := format('C level %d',[k+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ cellstring := ' ';
+ for j := 0 to p-1 do cellstring := cellstring + format(' %3d ',[j+1]);
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ for i := 0 to p-1 do // row
+ begin
+ cellstring := format(' %3d ',[i+1]);
+ for j := 0 to p-1 do
+ begin
+ cellstring := cellstring + format('%9.3f ',[ABC[i,j,k]]);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(cellstring);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('');
+ end;
+ cellstring := 'AB Means';
+ MAT_PRINT(AB,p+1,p+1,cellstring,RowLabels,ColLabels,(n*p*p*q));
+ cellstring := 'AC Means';
+ MAT_PRINT(AC,p+1,q+1,cellstring,RowLabels,ColLabels,(n*p*p*q));
+ cellstring := 'BC Means';
+ MAT_PRINT(BC,p+1,q+1,cellstring,RowLabels,ColLabels,(n*p*p*q));
+ cellstring := 'RC Means';
+ MAT_PRINT(RC,rows+1,q+1,cellstring,RowLabels,ColLabels,(n*p*p*q));
+ cellstring := 'Group Means';
+ for i := 0 to rangegrp-1 do ColLabels[i] := IntToStr(i+1);
+ ColLabels[rangegrp] := 'Total';
+ DynVectorPrint(Gm,rangegrp+1,cellstring,ColLabels,(n*p*p*q));
+ for i := 0 to nosubjects-1 do ColLabels[i] := IntToStr(i+1);
+ ColLabels[nosubjects] := 'Total';
+ cellstring := 'Subjects Means';
+ DynVectorPrint(Persons,nosubjects+1,cellstring,ColLabels,(n*p*p*q));
+ OutPutFrm.ShowModal;
+
+cleanup:
+ ColLabels := nil;
+ RowLabels := nil;
+ Design := nil;
+ cellcnts := nil;
+ R := nil;
+ Gm := nil;
+ Persons := nil;
+ C := nil;
+ B := nil;
+ A := nil;
+ RC := nil;
+ BC := nil;
+ AC := nil;
+ AB := nil;
+ AGC := nil;
+ ABC := nil;
+end;
+
+initialization
+ {$I latinsqrsunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/licenseunit.lfm b/applications/lazstats/source_orig/licenseunit.lfm
new file mode 100644
index 000000000..857d80f55
--- /dev/null
+++ b/applications/lazstats/source_orig/licenseunit.lfm
@@ -0,0 +1,78 @@
+object LicenseFrm: TLicenseFrm
+ Left = 138
+ Height = 347
+ Top = 105
+ Width = 637
+ Caption = 'License For Use'
+ ClientHeight = 347
+ ClientWidth = 637
+ LCLVersion = '0.9.28.2'
+ object Memo1: TMemo
+ Left = 0
+ Height = 307
+ Top = 0
+ Width = 637
+ Align = alClient
+ Font.CharSet = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -13
+ Font.Name = 'Courier'
+ Font.Pitch = fpFixed
+ Font.Quality = fqDraft
+ Lines.Strings = (
+ ' ***************************************************************************'
+ ' * *'
+ ' * This source is free software; you can redistribute it and/or modify *'
+ ' * it under the terms of the GNU General Public License as published by *'
+ ' * the Free Software Foundation; either version 2 of the License, or *'
+ ' * (at your option) any later version. *'
+ ' * *'
+ ' * This code is distributed in the hope that it will be useful, but *'
+ ' * WITHOUT ANY WARRANTY; without even the implied warranty of *'
+ ' * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *'
+ ' * General Public License for more details. *'
+ ' * *'
+ ' * A copy of the GNU General Public License is available on the World *'
+ ' * Wide Web at . You can also *'
+ ' * obtain it by writing to the Free Software Foundation, *'
+ ' * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *'
+ ' * *'
+ ' ***************************************************************************'
+ ''
+ 'Use at your own risk. Compare results to other statistics programs'
+ 'or text book examples for each procedure.'
+ 'Click on Accept or Reject below.'
+ )
+ ParentFont = False
+ TabOrder = 0
+ end
+ object Panel1: TPanel
+ Left = 0
+ Height = 40
+ Top = 307
+ Width = 637
+ Align = alBottom
+ ClientHeight = 40
+ ClientWidth = 637
+ TabOrder = 1
+ object AcceptBtn: TButton
+ Left = 48
+ Height = 22
+ Top = 9
+ Width = 67
+ Caption = 'Accept'
+ ModalResult = 1
+ OnClick = AcceptBtnClick
+ TabOrder = 0
+ end
+ object RejectBtn: TButton
+ Left = 216
+ Height = 20
+ Top = 10
+ Width = 72
+ Caption = 'Reject'
+ OnClick = RejectBtnClick
+ TabOrder = 1
+ end
+ end
+end
diff --git a/applications/lazstats/source_orig/licenseunit.lrs b/applications/lazstats/source_orig/licenseunit.lrs
new file mode 100644
index 000000000..73f96ddbb
--- /dev/null
+++ b/applications/lazstats/source_orig/licenseunit.lrs
@@ -0,0 +1,40 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLicenseFrm','FORMDATA',[
+ 'TPF0'#11'TLicenseFrm'#10'LicenseFrm'#4'Left'#3#138#0#6'Height'#3'['#1#3'Top'
+ +#2'i'#5'Width'#3'}'#2#7'Caption'#6#15'License For Use'#12'ClientHeight'#3'['
+ +#1#11'ClientWidth'#3'}'#2#10'LCLVersion'#6#8'0.9.28.2'#0#5'TMemo'#5'Memo1'#4
+ +'Left'#2#0#6'Height'#3'3'#1#3'Top'#2#0#5'Width'#3'}'#2#5'Align'#7#8'alClient'
+ +#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color'#7#7'clBlack'#11'Font.Hei'
+ +'ght'#2#243#9'Font.Name'#6#7'Courier'#10'Font.Pitch'#7#7'fpFixed'#12'Font.Qu'
+ +'ality'#7#7'fqDraft'#13'Lines.Strings'#1#6'L *******************************'
+ +'********************************************'#6'L * '
+ +' *'#6'L * This source is '
+ +'free software; you can redistribute it and/or modify *'#6'L * it under '
+ +'the terms of the GNU General Public License as published by *'#6'L * the'
+ +' Free Software Foundation; either version 2 of the License, or *'#6'L *'
+ +' (at your option) any later version. *'
+ +#6'L * '
+ +' *'#6'L * This code is distributed in the hope that it will be useful, '
+ +'but *'#6'L * WITHOUT ANY WARRANTY; without even the implied warranty'
+ +' of *'#6'L * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPO'
+ +'SE. See the GNU *'#6'L * General Public License for more details. '
+ +' *'#6'L * '
+ +' *'#6'L * A copy of the GNU General Publi'
+ +'c License is available on the World *'#6'L * Wide Web at . You can also *'#6'L * obtain it by writin'
+ +'g to the Free Software Foundation, *'#6'L * Inc., 59 Temp'
+ +'le Place - Suite 330, Boston, MA 02111-1307, USA. *'#6'L * '
+ +' *'#6'L *****'
+ +'**********************************************************************'#6#0
+ +#6'CUse at your own risk. Compare results to other statistics programs'#6')'
+ +'or text book examples for each procedure.'#6' Click on Accept or Reject bel'
+ +'ow.'#0#10'ParentFont'#8#8'TabOrder'#2#0#0#0#6'TPanel'#6'Panel1'#4'Left'#2#0
+ +#6'Height'#2'('#3'Top'#3'3'#1#5'Width'#3'}'#2#5'Align'#7#8'alBottom'#12'Clie'
+ +'ntHeight'#2'('#11'ClientWidth'#3'}'#2#8'TabOrder'#2#1#0#7'TButton'#9'Accept'
+ +'Btn'#4'Left'#2'0'#6'Height'#2#22#3'Top'#2#9#5'Width'#2'C'#7'Caption'#6#6'Ac'
+ +'cept'#11'ModalResult'#2#1#7'OnClick'#7#14'AcceptBtnClick'#8'TabOrder'#2#0#0
+ +#0#7'TButton'#9'RejectBtn'#4'Left'#3#216#0#6'Height'#2#20#3'Top'#2#10#5'Widt'
+ +'h'#2'H'#7'Caption'#6#6'Reject'#7'OnClick'#7#14'RejectBtnClick'#8'TabOrder'#2
+ +#1#0#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/licenseunit.pas b/applications/lazstats/source_orig/licenseunit.pas
new file mode 100644
index 000000000..dbd5e3c98
--- /dev/null
+++ b/applications/lazstats/source_orig/licenseunit.pas
@@ -0,0 +1,49 @@
+unit LicenseUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, ExtCtrls;
+
+type
+
+ { TLicenseFrm }
+
+ TLicenseFrm = class(TForm)
+ AcceptBtn: TButton;
+ RejectBtn: TButton;
+ Memo1: TMemo;
+ Panel1: TPanel;
+ procedure AcceptBtnClick(Sender: TObject);
+ procedure RejectBtnClick(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ LicenseFrm: TLicenseFrm;
+
+implementation
+
+{ TLicenseFrm }
+
+procedure TLicenseFrm.AcceptBtnClick(Sender: TObject);
+begin
+ LicenseFrm.Hide;
+end;
+
+procedure TLicenseFrm.RejectBtnClick(Sender: TObject);
+begin
+ close;
+end;
+
+initialization
+ {$I licenseunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/lifetableunit.lfm b/applications/lazstats/source_orig/lifetableunit.lfm
new file mode 100644
index 000000000..bbfd89835
--- /dev/null
+++ b/applications/lazstats/source_orig/lifetableunit.lfm
@@ -0,0 +1,644 @@
+object LifeTableForm: TLifeTableForm
+ Left = 117
+ Height = 549
+ Top = 157
+ Width = 1195
+ Caption = 'LIFE TABLE'
+ ClientHeight = 549
+ ClientWidth = 1195
+ OnShow = FormShow
+ LCLVersion = '0.9.30.4'
+ object Label1: TLabel
+ Left = 7
+ Height = 16
+ Top = 11
+ Width = 51
+ Caption = 'Variables:'
+ ParentColor = False
+ end
+ object VarList: TListBox
+ Left = 8
+ Height = 496
+ Top = 32
+ Width = 168
+ ItemHeight = 0
+ TabOrder = 0
+ end
+ object Memo1: TMemo
+ Left = 320
+ Height = 112
+ Top = 8
+ Width = 440
+ Lines.Strings = (
+ 'Directions: Your input grid data should consist of five integer column vaiables:'
+ '1. The beginning of each observation period (typically 0 for the first observation.'
+ '2. The ending of each observation period.'
+ '3. The number alive in the observation period.'
+ '4. The number that died during the observation period.'
+ '5. The number last seen alive during the period that are lost (censored)'
+ 'See the example file LIFETABLE.LAZ.'
+ )
+ TabOrder = 1
+ end
+ object CancelBtn: TButton
+ Left = 766
+ Height = 37
+ Top = 8
+ Width = 81
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 2
+ end
+ object ResetBtn: TButton
+ Left = 768
+ Height = 37
+ Top = 56
+ Width = 81
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 3
+ end
+ object ComputeBtn: TButton
+ Left = 872
+ Height = 37
+ Top = 8
+ Width = 81
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 4
+ end
+ object ReturnBtn: TButton
+ Left = 872
+ Height = 37
+ Top = 56
+ Width = 81
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 5
+ end
+ object ObsStartInBtn: TBitBtn
+ Left = 184
+ Height = 29
+ Top = 72
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = ObsStartInBtnClick
+ TabOrder = 6
+ end
+ object ObsStartOutBtn: TBitBtn
+ Left = 232
+ Height = 29
+ Top = 72
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = ObsStartOutBtnClick
+ TabOrder = 7
+ end
+ object Label2: TLabel
+ Left = 185
+ Height = 16
+ Top = 31
+ Width = 92
+ Caption = 'Observation Start'
+ ParentColor = False
+ end
+ object ObsStartEdit: TEdit
+ Left = 186
+ Height = 23
+ Top = 46
+ Width = 125
+ TabOrder = 8
+ Text = 'ObsStartEdit'
+ end
+ object Label3: TLabel
+ Left = 184
+ Height = 16
+ Top = 114
+ Width = 91
+ Caption = 'Observation End:'
+ ParentColor = False
+ end
+ object ObsEndEdit: TEdit
+ Left = 186
+ Height = 23
+ Top = 131
+ Width = 127
+ TabOrder = 9
+ Text = 'ObsEndEdit'
+ end
+ object ObsEndInBtn: TBitBtn
+ Left = 186
+ Height = 29
+ Top = 160
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = ObsEndInBtnClick
+ TabOrder = 10
+ end
+ object ObsEndOutBtn: TBitBtn
+ Left = 234
+ Height = 29
+ Top = 160
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = ObsEndOutBtnClick
+ TabOrder = 11
+ end
+ object Label4: TLabel
+ Left = 184
+ Height = 16
+ Top = 207
+ Width = 77
+ Caption = 'Number Alive:'
+ ParentColor = False
+ end
+ object NoAliveEdit: TEdit
+ Left = 184
+ Height = 23
+ Top = 226
+ Width = 128
+ TabOrder = 12
+ Text = 'NoAliveEdit'
+ end
+ object AliveInBtn: TBitBtn
+ Left = 185
+ Height = 29
+ Top = 256
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = AliveInBtnClick
+ TabOrder = 13
+ end
+ object AliveOutBtn: TBitBtn
+ Left = 233
+ Height = 29
+ Top = 256
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = AliveOutBtnClick
+ TabOrder = 14
+ end
+ object Label5: TLabel
+ Left = 186
+ Height = 16
+ Top = 313
+ Width = 75
+ Caption = 'Number Died:'
+ ParentColor = False
+ end
+ object NoDiedEdit: TEdit
+ Left = 185
+ Height = 23
+ Top = 330
+ Width = 126
+ TabOrder = 15
+ Text = 'NoDiedEdit'
+ end
+ object NoDiedInBtn: TBitBtn
+ Left = 184
+ Height = 29
+ Top = 360
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = NoDiedInBtnClick
+ TabOrder = 16
+ end
+ object NoDiedOutBtn: TBitBtn
+ Left = 232
+ Height = 29
+ Top = 360
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = NoDiedOutBtnClick
+ TabOrder = 17
+ end
+ object Label6: TLabel
+ Left = 184
+ Height = 16
+ Top = 414
+ Width = 101
+ Caption = 'Number Censored:'
+ ParentColor = False
+ end
+ object NoCensoredEdit: TEdit
+ Left = 184
+ Height = 23
+ Top = 433
+ Width = 130
+ TabOrder = 18
+ Text = 'NoCensoredEdit'
+ end
+ object NoCensoredInBtn: TBitBtn
+ Left = 185
+ Height = 29
+ Top = 464
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = NoCensoredInBtnClick
+ TabOrder = 19
+ end
+ object NoCensoredOutBtn: TBitBtn
+ Left = 234
+ Height = 29
+ Top = 464
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = NoCensoredOutBtnClick
+ TabOrder = 20
+ end
+ object Grid: TStringGrid
+ Left = 321
+ Height = 353
+ Top = 129
+ Width = 861
+ ColCount = 13
+ RowCount = 2
+ ScrollBars = ssVertical
+ TabOrder = 21
+ end
+ object Label7: TLabel
+ Left = 432
+ Height = 16
+ Top = 504
+ Width = 189
+ Caption = 'Confidence Level for Number Alive:'
+ ParentColor = False
+ end
+ object CIEdit: TEdit
+ Left = 626
+ Height = 23
+ Top = 499
+ Width = 38
+ TabOrder = 22
+ Text = '0.95'
+ end
+ object HelpBtn: TButton
+ Left = 999
+ Height = 38
+ Top = 33
+ Width = 78
+ Caption = 'HELP'
+ OnClick = HelpBtnClick
+ TabOrder = 23
+ end
+end
diff --git a/applications/lazstats/source_orig/lifetableunit.lrs b/applications/lazstats/source_orig/lifetableunit.lrs
new file mode 100644
index 000000000..91e49a15b
--- /dev/null
+++ b/applications/lazstats/source_orig/lifetableunit.lrs
@@ -0,0 +1,569 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLifeTableForm','FORMDATA',[
+ 'TPF0'#14'TLifeTableForm'#13'LifeTableForm'#4'Left'#2'u'#6'Height'#3'%'#2#3'T'
+ +'op'#3#157#0#5'Width'#3#171#4#7'Caption'#6#10'LIFE TABLE'#12'ClientHeight'#3
+ +'%'#2#11'ClientWidth'#3#171#4#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9'
+ +'.30.4'#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2#16#3'Top'#2#11#5'Width'
+ +#2'3'#7'Caption'#6#10'Variables:'#11'ParentColor'#8#0#0#8'TListBox'#7'VarLis'
+ +'t'#4'Left'#2#8#6'Height'#3#240#1#3'Top'#2' '#5'Width'#3#168#0#10'ItemHeight'
+ +#2#0#8'TabOrder'#2#0#0#0#5'TMemo'#5'Memo1'#4'Left'#3'@'#1#6'Height'#2'p'#3'T'
+ +'op'#2#8#5'Width'#3#184#1#13'Lines.Strings'#1#6'QDirections: Your input gri'
+ +'d data should consist of five integer column vaiables:'#6'U1. The beginni'
+ +'ng of each observation period (typically 0 for the first observation.'#6'+2'
+ +'. The ending of each observation period.'#6'03. The number alive in the'
+ +' observation period.'#6'84. The number that died during the observation p'
+ +'eriod.'#6'J5. The number last seen alive during the period that are lost '
+ +'(censored)'#6'#See the example file LIFETABLE.LAZ.'#0#8'TabOrder'#2#1#0#0#7
+ +'TButton'#9'CancelBtn'#4'Left'#3#254#2#6'Height'#2'%'#3'Top'#2#8#5'Width'#2
+ +'Q'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#2#0#0#7'TButton'
+ +#8'ResetBtn'#4'Left'#3#0#3#6'Height'#2'%'#3'Top'#2'8'#5'Width'#2'Q'#7'Captio'
+ +'n'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#3#0#0#7'TButton'
+ +#10'ComputeBtn'#4'Left'#3'h'#3#6'Height'#2'%'#3'Top'#2#8#5'Width'#2'Q'#7'Cap'
+ +'tion'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#4#0#0#7'T'
+ +'Button'#9'ReturnBtn'#4'Left'#3'h'#3#6'Height'#2'%'#3'Top'#2'8'#5'Width'#2'Q'
+ +#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#5#0#0#7'TBitBtn'#13
+ +'ObsStartInBtn'#4'Left'#3#184#0#6'Height'#2#29#3'Top'#2'H'#5'Width'#2' '#10
+ +'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0
+ +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184
+ +'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'
+ +#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255
+ +#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147
+ +#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'
+ +#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218
+ +#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147
+ +#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255
+ +'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'
+ +#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'
+ +#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#18'ObsStart'
+ +'InBtnClick'#8'TabOrder'#2#6#0#0#7'TBitBtn'#14'ObsStartOutBtn'#4'Left'#3#232
+ +#0#6'Height'#2#29#3'Top'#2'H'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0
+ +#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0
+ +#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207
+ +'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'
+ +#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255
+ +#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211
+ +#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130
+ +#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'
+ +#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216#171
+ +#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204
+ +#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'
+ +#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209
+ +#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+ +#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#19'ObsStartOutBtnClick'#8
+ +'TabOrder'#2#7#0#0#6'TLabel'#6'Label2'#4'Left'#3#185#0#6'Height'#2#16#3'Top'
+ +#2#31#5'Width'#2'\'#7'Caption'#6#17'Observation Start'#11'ParentColor'#8#0#0
+ +#5'TEdit'#12'ObsStartEdit'#4'Left'#3#186#0#6'Height'#2#23#3'Top'#2'.'#5'Widt'
+ ,'h'#2'}'#8'TabOrder'#2#8#4'Text'#6#12'ObsStartEdit'#0#0#6'TLabel'#6'Label3'#4
+ +'Left'#3#184#0#6'Height'#2#16#3'Top'#2'r'#5'Width'#2'['#7'Caption'#6#16'Obse'
+ +'rvation End:'#11'ParentColor'#8#0#0#5'TEdit'#10'ObsEndEdit'#4'Left'#3#186#0
+ +#6'Height'#2#23#3'Top'#3#131#0#5'Width'#2#127#8'TabOrder'#2#9#4'Text'#6#10'O'
+ +'bsEndEdit'#0#0#7'TBitBtn'#11'ObsEndInBtn'#4'Left'#3#186#0#6'Height'#2#29#3
+ +'Top'#3#160#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0
+ +#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0
+ +'d'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'
+ +#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'
+ +#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0
+ +'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157
+ +#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195
+ +#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0
+ +#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255
+ +#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144
+ +#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201
+ +#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#9'NumGlyphs'#2#0#7'OnClick'#7#16'ObsEndInBtnClick'#8'TabOrder'#2#10#0#0#7'T'
+ +'BitBtn'#12'ObsEndOutBtn'#4'Left'#3#234#0#6'Height'#2#29#3'Top'#3#160#0#5'Wi'
+ +'dth'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('
+ +#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0
+ +#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247
+ +'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['
+ +#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'
+ +#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206
+ +#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'
+ +#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0
+ +'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163
+ +#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199
+ +#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0
+ +#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'
+ +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'
+ +#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7
+ +'OnClick'#7#17'ObsEndOutBtnClick'#8'TabOrder'#2#11#0#0#6'TLabel'#6'Label4'#4
+ +'Left'#3#184#0#6'Height'#2#16#3'Top'#3#207#0#5'Width'#2'M'#7'Caption'#6#13'N'
+ +'umber Alive:'#11'ParentColor'#8#0#0#5'TEdit'#11'NoAliveEdit'#4'Left'#3#184#0
+ +#6'Height'#2#23#3'Top'#3#226#0#5'Width'#3#128#0#8'TabOrder'#2#12#4'Text'#6#11
+ +'NoAliveEdit'#0#0#7'TBitBtn'#10'AliveInBtn'#4'Left'#3#185#0#6'Height'#2#29#3
+ +'Top'#3#0#1#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0
+ +#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'
+ +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'
+ +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'
+ +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195
+ +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144
+ +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255
+ +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255
+ +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212
+ +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133
+ +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255
+ +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255
+ +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145
+ +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp'
+ +'hs'#2#0#7'OnClick'#7#15'AliveInBtnClick'#8'TabOrder'#2#13#0#0#7'TBitBtn'#11
+ +'AliveOutBtn'#4'Left'#3#233#0#6'Height'#2#29#3'Top'#3#0#1#5'Width'#2' '#10'G'
+ +'lyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0
+ +#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'
+ +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'
+ +#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134
+ +#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203
+ +#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190
+ +'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127
+ +#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255
+ +#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135
+ ,#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255
+ +#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177
+ +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255
+ +'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#16
+ +'AliveOutBtnClick'#8'TabOrder'#2#14#0#0#6'TLabel'#6'Label5'#4'Left'#3#186#0#6
+ +'Height'#2#16#3'Top'#3'9'#1#5'Width'#2'K'#7'Caption'#6#12'Number Died:'#11'P'
+ +'arentColor'#8#0#0#5'TEdit'#10'NoDiedEdit'#4'Left'#3#185#0#6'Height'#2#23#3
+ +'Top'#3'J'#1#5'Width'#2'~'#8'TabOrder'#2#15#4'Text'#6#10'NoDiedEdit'#0#0#7'T'
+ +'BitBtn'#11'NoDiedInBtn'#4'Left'#3#184#0#6'Height'#2#29#3'Top'#3'h'#1#5'Widt'
+ +'h'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0
+ +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0
+ +#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247
+ +'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'
+ +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'
+ +#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215
+ +#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139
+ +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'
+ +#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255
+ +#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159
+ +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197
+ +#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'
+ +#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'
+ +#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'
+ +#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'
+ +#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'
+ ,#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#16
+ +'NoDiedInBtnClick'#8'TabOrder'#2#16#0#0#7'TBitBtn'#12'NoDiedOutBtn'#4'Left'#3
+ +#232#0#6'Height'#2#29#3'Top'#3'h'#1#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0
+ +'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0
+ +#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'
+ +#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255
+ +';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255
+ +#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152
+ +#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255
+ +#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!'
+ +'c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138#255#162#216
+ +#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142
+ +#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255
+ +'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255
+ +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'
+ +#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199
+ +'t'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'
+ +#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ ,#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#17'NoDiedOutBtnClick'#8'T'
+ +'abOrder'#2#17#0#0#6'TLabel'#6'Label6'#4'Left'#3#184#0#6'Height'#2#16#3'Top'
+ +#3#158#1#5'Width'#2'e'#7'Caption'#6#16'Number Censored:'#11'ParentColor'#8#0
+ +#0#5'TEdit'#14'NoCensoredEdit'#4'Left'#3#184#0#6'Height'#2#23#3'Top'#3#177#1
+ +#5'Width'#3#130#0#8'TabOrder'#2#18#4'Text'#6#14'NoCensoredEdit'#0#0#7'TBitBt'
+ +'n'#15'NoCensoredInBtn'#4'Left'#3#185#0#6'Height'#2#29#3'Top'#3#208#1#5'Widt'
+ +'h'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0
+ +#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0
+ +#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247
+ +'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'
+ +#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'
+ +#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215
+ +#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139
+ +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'
+ +#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255
+ +#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159
+ +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197
+ +#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'
+ +#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'
+ +#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'
+ +#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'
+ +#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'
+ +#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#20
+ +'NoCensoredInBtnClick'#8'TabOrder'#2#19#0#0#7'TBitBtn'#16'NoCensoredOutBtn'#4
+ +'Left'#3#234#0#6'Height'#2#29#3'Top'#3#208#1#5'Width'#2' '#10'Glyph.Data'#10
+ +':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0
+ +' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255
+ +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213
+ +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135
+ +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'
+ +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138
+ +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207
+ +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'
+ +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'
+ +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#21'NoCensoredOutB'
+ +'tnClick'#8'TabOrder'#2#20#0#0#11'TStringGrid'#4'Grid'#4'Left'#3'A'#1#6'Heig'
+ +'ht'#3'a'#1#3'Top'#3#129#0#5'Width'#3']'#3#8'ColCount'#2#13#8'RowCount'#2#2
+ +#10'ScrollBars'#7#10'ssVertical'#8'TabOrder'#2#21#0#0#6'TLabel'#6'Label7'#4
+ +'Left'#3#176#1#6'Height'#2#16#3'Top'#3#248#1#5'Width'#3#189#0#7'Caption'#6'"'
+ +'Confidence Level for Number Alive:'#11'ParentColor'#8#0#0#5'TEdit'#6'CIEdit'
+ +#4'Left'#3'r'#2#6'Height'#2#23#3'Top'#3#243#1#5'Width'#2'&'#8'TabOrder'#2#22
+ +#4'Text'#6#4'0.95'#0#0#7'TButton'#7'HelpBtn'#4'Left'#3#231#3#6'Height'#2'&'#3
+ +'Top'#2'!'#5'Width'#2'N'#7'Caption'#6#4'HELP'#7'OnClick'#7#12'HelpBtnClick'#8
+ +'TabOrder'#2#23#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/lifetableunit.pas b/applications/lazstats/source_orig/lifetableunit.pas
new file mode 100644
index 000000000..b535da834
--- /dev/null
+++ b/applications/lazstats/source_orig/lifetableunit.pas
@@ -0,0 +1,311 @@
+unit LifeTableUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, ExtCtrls, Grids, MainUnit, Globals, FunctionsLib,
+ OutPutUnit, DictionaryUnit, DataProcs, GraphLib, contexthelpunit;
+
+type
+
+ { TLifeTableForm }
+
+ TLifeTableForm = class(TForm)
+ HelpBtn: TButton;
+ CancelBtn: TButton;
+ CIEdit: TEdit;
+ Label7: TLabel;
+ NoCensoredEdit: TEdit;
+ Label6: TLabel;
+ NoDiedEdit: TEdit;
+ Label5: TLabel;
+ NoAliveEdit: TEdit;
+ Label4: TLabel;
+ ObsEndEdit: TEdit;
+ Label3: TLabel;
+ ObsStartEdit: TEdit;
+ Label2: TLabel;
+ ObsStartInBtn: TBitBtn;
+ ObsEndInBtn: TBitBtn;
+ AliveInBtn: TBitBtn;
+ NoDiedInBtn: TBitBtn;
+ NoCensoredInBtn: TBitBtn;
+ ObsStartOutBtn: TBitBtn;
+ ObsEndOutBtn: TBitBtn;
+ AliveOutBtn: TBitBtn;
+ NoDiedOutBtn: TBitBtn;
+ NoCensoredOutBtn: TBitBtn;
+ ResetBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ Label1: TLabel;
+ Memo1: TMemo;
+ Grid: TStringGrid;
+ VarList: TListBox;
+ procedure AliveInBtnClick(Sender: TObject);
+ procedure AliveOutBtnClick(Sender: TObject);
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure HelpBtnClick(Sender: TObject);
+ procedure NoCensoredInBtnClick(Sender: TObject);
+ procedure NoCensoredOutBtnClick(Sender: TObject);
+ procedure NoDiedInBtnClick(Sender: TObject);
+ procedure NoDiedOutBtnClick(Sender: TObject);
+ procedure ObsEndInBtnClick(Sender: TObject);
+ procedure ObsEndOutBtnClick(Sender: TObject);
+ procedure ObsStartInBtnClick(Sender: TObject);
+ procedure ObsStartOutBtnClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ private
+ { private declarations }
+// NoCases : integer;
+
+ public
+ { public declarations }
+ end;
+
+var
+ LifeTableForm: TLifeTableForm;
+
+implementation
+
+{ TLifeTableForm }
+
+procedure TLifeTableForm.FormShow(Sender: TObject);
+
+begin
+ ResetBtnClick(self);
+end;
+
+procedure TLifeTableForm.HelpBtnClick(Sender: TObject);
+begin
+ ContextHelpForm.HelpMessage((Sender as TButton).tag);
+end;
+
+procedure TLifeTableForm.NoCensoredInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ NoCensoredEdit.Text := VarList.Items.Strings[index];
+ NoCensoredInBtn.Visible := false;
+ NoCensoredOutBtn.Visible := true;
+ VarList.Items.Delete(index);
+end;
+
+procedure TLifeTableForm.NoCensoredOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(NoCensoredEdit.Text);
+ NoCensoredEdit.Text := '';
+ NoCensoredOutBtn.Visible := false;
+ NoCensoredInBtn.Visible := true;
+end;
+
+procedure TLifeTableForm.NoDiedInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ NoDiedEdit.Text := VarList.Items.Strings[index];
+ NoDiedInBtn.Visible := false;
+ NoDiedOutBtn.Visible := true;
+ VarList.Items.Delete(index);
+end;
+
+procedure TLifeTableForm.NoDiedOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(NoDiedEdit.Text);
+ NoDiedEdit.Text := '';
+ NoDiedOutBtn.Visible := false;
+ NoDiedInBtn.Visible := true;
+end;
+
+procedure TLifeTableForm.AliveInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ NoAliveEdit.Text := VarList.Items.Strings[index];
+ AliveInBtn.Visible := false;
+ AliveOutBtn.Visible := true;
+ VarList.Items.Delete(index);
+end;
+
+procedure TLifeTableForm.AliveOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(NoAliveEdit.Text);
+ NoAliveEdit.Text := '';
+ AliveInBtn.Visible := true;
+ AliveOutBtn.Visible := false;
+end;
+
+procedure TLifeTableForm.ComputeBtnClick(Sender: TObject);
+VAR
+ i : integer;
+ varcols : IntDyneVec;
+ AtRisk, ProbDie, CumProbLive, StdErr, Up95, Low95 : double;
+ N, P, Q, mu, CI, z : double;
+ outline : string;
+begin
+ CI := StrToFloat(CIEdit.Text);
+ z := inversez(CI);
+ SetLength(varcols,5);
+ for i := 1 to 5 do
+ begin
+ if (OS3MainFrm.DataGrid.Cells[i,0] = ObsStartEdit.Text) then varcols[0] := i;
+ if (OS3MainFrm.DataGrid.Cells[i,0] = ObsEndEdit.Text) then varcols[1] := i;
+ if (OS3MainFrm.DataGrid.Cells[i,0] = NoAliveEdit.Text) then varcols[2] := i;
+ if (OS3MainFrm.DataGrid.Cells[i,0] = NoDiedEdit.Text) then varcols[3] := i;
+ if (OS3MainFrm.DataGrid.Cells[i,0] = NoCensoredEdit.Text) then varcols[4] := i;
+ end;
+
+ for i := 1 to NoCases do
+ begin
+ Grid.Cells[0,i] := 'CASE ' + IntToStr(i);
+ Grid.Cells[1,i] := Trim(OS3MainFrm.DataGrid.Cells[varcols[0],i]);
+ Grid.Cells[2,i] := Trim(OS3MainFrm.DataGrid.Cells[varcols[1],i]);
+ Grid.Cells[3,i] := Trim(OS3MainFrm.DataGrid.Cells[varcols[2],i]);
+ Grid.Cells[4,i] := Trim(OS3MainFrm.DataGrid.Cells[varcols[3],i]);
+ Grid.Cells[5,i] := Trim(OS3MainFrm.DataGrid.Cells[varcols[4],i]);
+ end;
+ for i := 1 to NoCases do
+ begin
+ AtRisk := StrToFloat(Grid.Cells[3,i]);
+ AtRisk := AtRisk - (StrToFloat(Grid.Cells[5,i]) / 2.0);
+ outline := format('%8.4f',[AtRisk]);
+ Grid.Cells[6,i] := outline;
+ ProbDie := StrToFloat(Grid.Cells[4,i]) / AtRisk;
+ outline := format('%8.4f',[ProbDie]);
+ Grid.Cells[7,i] := outline;
+ outline := format('%8.4f',[1.0-ProbDie]);
+ Grid.Cells[8,i] := outline;
+ end;
+ N := StrToFloat(Grid.Cells[3,1]);
+ Grid.Cells[9,1] := Grid.Cells[8,1];
+ P := StrToFloat(Grid.Cells[9,1]);
+ Q := 1.0 - P;
+ StdErr := sqrt(N * P * Q);
+ outline := format('%8.4f',[StdErr]);
+ Grid.Cells[10,1] := outline;
+ mu := N * P;
+ outline := format('%8.4f',[StdErr]);
+ Grid.Cells[10,1] := outline;
+ Up95 := mu + (z * StdErr);
+ Low95 := mu - (z * StdErr);
+ outline := format('%8.4f',[Low95]);
+ Grid.Cells[11,1] := outline;
+ outline := format('%8.3f',[Up95]);
+ Grid.Cells[12,1] := outline;
+
+ for i := 2 to NoCases do
+ begin
+ CumProbLive := StrToFloat(Grid.Cells[9,i-1]) *
+ StrToFloat(Grid.Cells[8,i]);
+ outline := format('%8.4f',[CumProbLive]);
+ Grid.Cells[9,i] := outline;
+ P := CumProbLive;
+ Q := 1.0 - P;
+ StdErr := sqrt(N * P * Q);
+ mu := N * P;
+ outline := format('%8.4f',[StdErr]);
+ Grid.Cells[10,i] := outline;
+ Up95 := mu + (z * StdErr);
+ Low95 := mu - (z * StdErr);
+ outline := format('%8.4f',[Low95]);
+ Grid.Cells[11,i] := outline;
+ outline := format('%8.3f',[Up95]);
+ Grid.Cells[12,i] := outline;
+ end;
+ varcols := nil;
+end;
+
+procedure TLifeTableForm.ObsEndInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ ObsEndEdit.Text := VarList.Items.Strings[index];
+ ObsEndInBtn.Visible := false;
+ ObsEndOutBtn.Visible := true;
+ VarList.Items.Delete(index);
+end;
+
+procedure TLifeTableForm.ObsEndOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(ObsEndEdit.Text);
+ ObsEndEdit.Text := '';
+ ObsEndInBtn.Visible := true;
+ ObsEndOutBtn.Visible := false;
+end;
+
+procedure TLifeTableForm.ObsStartInBtnClick(Sender: TObject);
+ VAR index : integer;
+ begin
+ index := VarList.ItemIndex;
+ ObsStartEdit.Text := VarList.Items.Strings[index];
+ ObsStartInBtn.Visible := false;
+ ObsStartOutBtn.Visible := true;
+ VarList.Items.Delete(index);
+end;
+
+procedure TLifeTableForm.ObsStartOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(ObsStartEdit.Text);
+ ObsStartEdit.Text := '';
+ ObsStartInBtn.Visible := true;
+ ObsStartOutBtn.Visible := false;
+end;
+
+procedure TLifeTableForm.ResetBtnClick(Sender: TObject);
+
+VAR i : integer;
+ j : integer;
+ outline : string;
+begin
+// outline := format('NoCases = %d',[NoCases]);
+// ShowMessage(outline);
+// outline := format('No.Variables = %d',[NoVariables]);
+// ShowMessage(outline);
+ VarList.Clear;
+ ObsStartEdit.Text := '';
+ ObsEndEdit.Text := '';
+ NoAliveEdit.Text := '';
+ NoDiedEdit.Text := '';
+ NoCensoredEdit.Text := '';
+ ObsStartInBtn.Visible := true;
+ ObsStartOutBtn.Visible := false;
+ ObsEndInBtn.Visible := true;
+ ObsEndOutBtn.Visible := false;
+ AliveInBtn.Visible := true;
+ AliveOutBtn.Visible := false;
+ NoDiedInBtn.Visible := true;
+ NoDiedOutBtn.Visible := false;
+ NoCensoredInBtn.Visible := true;
+ NoCensoredOutBtn.Visible := false;
+ Grid.RowCount := NoCases+1;
+ Grid.ColCount := 13;
+ Grid.Cells[1,0] := 'Obs.Start';
+ Grid.Cells[2,0] := 'Obs.End';
+ Grid.Cells[3,0] := 'Alive';
+ Grid.Cells[4,0] := 'Died';
+ Grid.Cells[5,0] := 'Censored';
+ Grid.Cells[6,0] := 'At Risk';
+ Grid.Cells[7,0] := 'Prob.Die';
+ Grid.Cells[8,0] := 'Prob.Alive';
+ Grid.Cells[9,0] := 'Cum.P.Alive';
+ Grid.Cells[10,0] := 'S.E. Alive';
+ Grid.Cells[11,0] := 'Low 95%';
+ Grid.Cells[12,0] := 'Hi 95%';
+ for i := 0 to 12 do
+ begin
+ for j := 1 to NoCases do Grid.Cells[i,j] := '';
+ end;
+ for i := 1 to NoVariables do
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+end;
+
+
+initialization
+ {$I lifetableunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/limitedunit.lfm b/applications/lazstats/source_orig/limitedunit.lfm
new file mode 100644
index 000000000..7fe2bb5d4
--- /dev/null
+++ b/applications/lazstats/source_orig/limitedunit.lfm
@@ -0,0 +1,34 @@
+object LimitedForm: TLimitedForm
+ Left = 290
+ Height = 192
+ Top = 175
+ Width = 400
+ Caption = 'UNAVAILABLE IN THIS LIMITED VERSION'
+ ClientHeight = 192
+ ClientWidth = 400
+ LCLVersion = '0.9.28.2'
+ object Memo1: TMemo
+ Left = 6
+ Height = 120
+ Top = 8
+ Width = 384
+ Lines.Strings = (
+ 'This procedure is not implimented in this limited'
+ 'version. The full version for Windows and Linux'
+ 'systems can be purchased at:'
+ 'http://www.statprograms4U.com'
+ 'If you have any questions, send an email to me'
+ 'at billmiller50322@gmail.com'
+ )
+ TabOrder = 0
+ end
+ object ReturnBtn: TButton
+ Left = 104
+ Height = 35
+ Top = 143
+ Width = 146
+ Caption = 'RETURN'
+ ModalResult = 1
+ TabOrder = 1
+ end
+end
diff --git a/applications/lazstats/source_orig/limitedunit.lrs b/applications/lazstats/source_orig/limitedunit.lrs
new file mode 100644
index 000000000..ff59904d6
--- /dev/null
+++ b/applications/lazstats/source_orig/limitedunit.lrs
@@ -0,0 +1,15 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLimitedForm','FORMDATA',[
+ 'TPF0'#12'TLimitedForm'#11'LimitedForm'#4'Left'#3'"'#1#6'Height'#3#192#0#3'To'
+ +'p'#3#175#0#5'Width'#3#144#1#7'Caption'#6'#UNAVAILABLE IN THIS LIMITED VERSI'
+ +'ON'#12'ClientHeight'#3#192#0#11'ClientWidth'#3#144#1#10'LCLVersion'#6#8'0.9'
+ +'.28.2'#0#5'TMemo'#5'Memo1'#4'Left'#2#6#6'Height'#2'x'#3'Top'#2#8#5'Width'#3
+ +#128#1#13'Lines.Strings'#1#6'1This procedure is not implimented in this limi'
+ +'ted'#6'0version. The full version for Windows and Linux'#6#28'systems can '
+ +'be purchased at:'#6#29'http://www.statprograms4U.com'#6'.If you have any qu'
+ +'estions, send an email to me'#6#28'at billmiller50322@gmail.com'#0#8'TabOrd'
+ +'er'#2#0#0#0#7'TButton'#9'ReturnBtn'#4'Left'#2'h'#6'Height'#2'#'#3'Top'#3#143
+ +#0#5'Width'#3#146#0#7'Caption'#6#6'RETURN'#11'ModalResult'#2#1#8'TabOrder'#2
+ +#1#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/limitedunit.pas b/applications/lazstats/source_orig/limitedunit.pas
new file mode 100644
index 000000000..3f43c7178
--- /dev/null
+++ b/applications/lazstats/source_orig/limitedunit.pas
@@ -0,0 +1,33 @@
+unit LimitedUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls;
+
+type
+
+ { TLimitedForm }
+
+ TLimitedForm = class(TForm)
+ ReturnBtn: TButton;
+ Memo1: TMemo;
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ LimitedForm: TLimitedForm;
+
+implementation
+
+initialization
+ {$I limitedunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/linprounit.lfm b/applications/lazstats/source_orig/linprounit.lfm
new file mode 100644
index 000000000..8fd0d9986
--- /dev/null
+++ b/applications/lazstats/source_orig/linprounit.lfm
@@ -0,0 +1,308 @@
+object LinProFrm: TLinProFrm
+ Left = 106
+ Height = 483
+ Top = 92
+ Width = 740
+ Caption = 'Linear Programming Using Min/Max Algorithm'
+ ClientHeight = 483
+ ClientWidth = 740
+ OnShow = FormShow
+ LCLVersion = '0.9.26.2'
+ object Label1: TLabel
+ Left = 8
+ Height = 14
+ Top = 3
+ Width = 26
+ Caption = 'FILE:'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 144
+ Height = 14
+ Top = 24
+ Width = 47
+ Caption = 'Objective'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 72
+ Height = 14
+ Top = 61
+ Width = 56
+ Caption = 'Constraints'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 7
+ Height = 14
+ Top = 30
+ Width = 64
+ Caption = 'No. Variables'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 7
+ Height = 14
+ Top = 64
+ Width = 58
+ Caption = 'No.Max.(<)'
+ ParentColor = False
+ end
+ object Label6: TLabel
+ Left = 6
+ Height = 14
+ Top = 79
+ Width = 54
+ Caption = 'constraints'
+ ParentColor = False
+ end
+ object Label7: TLabel
+ Left = 7
+ Height = 14
+ Top = 183
+ Width = 57
+ Caption = 'No. Min.(>)'
+ ParentColor = False
+ end
+ object Label8: TLabel
+ Left = 5
+ Height = 14
+ Top = 201
+ Width = 54
+ Caption = 'constraints'
+ ParentColor = False
+ end
+ object Label9: TLabel
+ Left = 5
+ Height = 14
+ Top = 293
+ Width = 66
+ Caption = 'No. Equal (=)'
+ ParentColor = False
+ end
+ object Label10: TLabel
+ Left = 4
+ Height = 14
+ Top = 310
+ Width = 54
+ Caption = 'constraints'
+ ParentColor = False
+ end
+ object Label11: TLabel
+ Left = 120
+ Height = 14
+ Top = 409
+ Width = 80
+ Caption = 'General Results:'
+ ParentColor = False
+ end
+ object FileNameEdit: TEdit
+ Left = 37
+ Height = 15
+ Top = 1
+ Width = 675
+ TabOrder = 0
+ Text = 'FileNameEdit'
+ end
+ object ObjectiveGrid: TStringGrid
+ Left = 143
+ Height = 30
+ Top = 42
+ Width = 570
+ ColCount = 1
+ RowCount = 1
+ TabOrder = 1
+ end
+ object MaxGrid: TStringGrid
+ Left = 143
+ Height = 98
+ Top = 80
+ Width = 571
+ ColCount = 1
+ RowCount = 1
+ TabOrder = 2
+ end
+ object MinGrid: TStringGrid
+ Left = 143
+ Height = 100
+ Top = 186
+ Width = 570
+ ColCount = 1
+ RowCount = 1
+ TabOrder = 3
+ end
+ object EqualGrid: TStringGrid
+ Left = 143
+ Height = 99
+ Top = 295
+ Width = 569
+ ColCount = 1
+ RowCount = 1
+ TabOrder = 4
+ end
+ object MaxConstraintsGrid: TStringGrid
+ Left = 72
+ Height = 94
+ Top = 82
+ Width = 65
+ ColCount = 1
+ RowCount = 1
+ ScrollBars = ssNone
+ TabOrder = 5
+ end
+ object MinConstraintsGrid: TStringGrid
+ Left = 71
+ Height = 98
+ Top = 185
+ Width = 66
+ ColCount = 1
+ RowCount = 1
+ ScrollBars = ssNone
+ TabOrder = 6
+ end
+ object EqualConstraintsGrid: TStringGrid
+ Left = 72
+ Height = 98
+ Top = 294
+ Width = 64
+ ColCount = 1
+ RowCount = 1
+ ScrollBars = ssNone
+ TabOrder = 7
+ end
+ object NoVarsEdit: TEdit
+ Left = 71
+ Height = 22
+ Top = 21
+ Width = 62
+ OnExit = NoVarsEditExit
+ OnKeyPress = NoVarsEditKeyPress
+ TabOrder = 8
+ Text = 'NoVarsEdit'
+ end
+ object NoMaxEdit: TEdit
+ Left = 4
+ Height = 18
+ Top = 97
+ Width = 59
+ OnExit = NoMaxEditExit
+ OnKeyPress = NoMaxEditKeyPress
+ TabOrder = 9
+ Text = 'NoMaxEdit'
+ end
+ object NoMinEdit: TEdit
+ Left = 5
+ Height = 19
+ Top = 216
+ Width = 59
+ OnExit = NoMinEditExit
+ OnKeyPress = NoMinEditKeyPress
+ TabOrder = 10
+ Text = 'NoMinEdit'
+ end
+ object NoEqualEdit: TEdit
+ Left = 4
+ Height = 16
+ Top = 327
+ Width = 59
+ OnExit = NoEqualEditExit
+ OnKeyPress = NoEqualEditKeyPress
+ TabOrder = 11
+ Text = 'NoEqualEdit'
+ end
+ object MinMaxGrp: TRadioGroup
+ Left = 5
+ Height = 65
+ Top = 407
+ Width = 95
+ AutoFill = True
+ Caption = 'Min/Max'
+ ChildSizing.LeftRightSpacing = 6
+ ChildSizing.TopBottomSpacing = 6
+ ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
+ ChildSizing.EnlargeVertical = crsHomogenousChildResize
+ ChildSizing.ShrinkHorizontal = crsScaleChilds
+ ChildSizing.ShrinkVertical = crsScaleChilds
+ ChildSizing.Layout = cclLeftToRightThenTopToBottom
+ ChildSizing.ControlsPerLine = 1
+ ClientHeight = 47
+ ClientWidth = 91
+ Items.Strings = (
+ 'Maximize'
+ 'Minimize'
+ )
+ TabOrder = 12
+ end
+ object ResultsEdit: TEdit
+ Left = 202
+ Height = 18
+ Top = 405
+ Width = 508
+ TabOrder = 13
+ Text = 'ResultsEdit'
+ end
+ object LoadBtn: TButton
+ Left = 184
+ Height = 26
+ Top = 439
+ Width = 79
+ Caption = 'Load File'
+ OnClick = LoadBtnClick
+ TabOrder = 14
+ end
+ object SaveBtn: TButton
+ Left = 272
+ Height = 26
+ Top = 440
+ Width = 79
+ Caption = 'Save File'
+ OnClick = SaveBtnClick
+ TabOrder = 15
+ end
+ object ResetBtn: TButton
+ Left = 368
+ Height = 27
+ Top = 440
+ Width = 76
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 16
+ end
+ object CancelBtn: TButton
+ Left = 456
+ Height = 27
+ Top = 440
+ Width = 76
+ Caption = 'Cancel'
+ ModalResult = 2
+ OnClick = CancelBtnClick
+ TabOrder = 17
+ end
+ object ComputeBtn: TButton
+ Left = 544
+ Height = 27
+ Top = 440
+ Width = 76
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 18
+ end
+ object ExitBtn: TButton
+ Left = 632
+ Height = 27
+ Top = 439
+ Width = 76
+ Caption = 'EXIT'
+ ModalResult = 1
+ OnClick = ExitBtnClick
+ TabOrder = 19
+ end
+ object OpenDialog1: TOpenDialog
+ left = 112
+ top = 436
+ end
+ object SaveDialog1: TSaveDialog
+ left = 144
+ top = 435
+ end
+end
diff --git a/applications/lazstats/source_orig/linprounit.lrs b/applications/lazstats/source_orig/linprounit.lrs
new file mode 100644
index 000000000..aa4a53278
--- /dev/null
+++ b/applications/lazstats/source_orig/linprounit.lrs
@@ -0,0 +1,77 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLinProFrm','FORMDATA',[
+ 'TPF0'#10'TLinProFrm'#9'LinProFrm'#4'Left'#2'j'#6'Height'#3#227#1#3'Top'#2'\'
+ +#5'Width'#3#228#2#7'Caption'#6'*Linear Programming Using Min/Max Algorithm'
+ +#12'ClientHeight'#3#227#1#11'ClientWidth'#3#228#2#6'OnShow'#7#8'FormShow'#10
+ +'LCLVersion'#6#8'0.9.26.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3
+ +'Top'#2#3#5'Width'#2#26#7'Caption'#6#5'FILE:'#11'ParentColor'#8#0#0#6'TLabel'
+ +#6'Label2'#4'Left'#3#144#0#6'Height'#2#14#3'Top'#2#24#5'Width'#2'/'#7'Captio'
+ +'n'#6#9'Objective'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2'H'#6
+ +'Height'#2#14#3'Top'#2'='#5'Width'#2'8'#7'Caption'#6#11'Constraints'#11'Pare'
+ +'ntColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#7#6'Height'#2#14#3'Top'#2#30#5
+ +'Width'#2'@'#7'Caption'#6#13'No. Variables'#11'ParentColor'#8#0#0#6'TLabel'#6
+ +'Label5'#4'Left'#2#7#6'Height'#2#14#3'Top'#2'@'#5'Width'#2':'#7'Caption'#6#10
+ +'No.Max.(<)'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#2#6#6'Height'
+ +#2#14#3'Top'#2'O'#5'Width'#2'6'#7'Caption'#6#11'constraints'#11'ParentColor'
+ +#8#0#0#6'TLabel'#6'Label7'#4'Left'#2#7#6'Height'#2#14#3'Top'#3#183#0#5'Width'
+ +#2'9'#7'Caption'#6#11'No. Min.(>)'#11'ParentColor'#8#0#0#6'TLabel'#6'Label8'
+ +#4'Left'#2#5#6'Height'#2#14#3'Top'#3#201#0#5'Width'#2'6'#7'Caption'#6#11'con'
+ +'straints'#11'ParentColor'#8#0#0#6'TLabel'#6'Label9'#4'Left'#2#5#6'Height'#2
+ +#14#3'Top'#3'%'#1#5'Width'#2'B'#7'Caption'#6#13'No. Equal (=)'#11'ParentColo'
+ +'r'#8#0#0#6'TLabel'#7'Label10'#4'Left'#2#4#6'Height'#2#14#3'Top'#3'6'#1#5'Wi'
+ +'dth'#2'6'#7'Caption'#6#11'constraints'#11'ParentColor'#8#0#0#6'TLabel'#7'La'
+ +'bel11'#4'Left'#2'x'#6'Height'#2#14#3'Top'#3#153#1#5'Width'#2'P'#7'Caption'#6
+ +#16'General Results:'#11'ParentColor'#8#0#0#5'TEdit'#12'FileNameEdit'#4'Left'
+ +#2'%'#6'Height'#2#15#3'Top'#2#1#5'Width'#3#163#2#8'TabOrder'#2#0#4'Text'#6#12
+ +'FileNameEdit'#0#0#11'TStringGrid'#13'ObjectiveGrid'#4'Left'#3#143#0#6'Heigh'
+ +'t'#2#30#3'Top'#2'*'#5'Width'#3':'#2#8'ColCount'#2#1#8'RowCount'#2#1#8'TabOr'
+ +'der'#2#1#0#0#11'TStringGrid'#7'MaxGrid'#4'Left'#3#143#0#6'Height'#2'b'#3'To'
+ +'p'#2'P'#5'Width'#3';'#2#8'ColCount'#2#1#8'RowCount'#2#1#8'TabOrder'#2#2#0#0
+ +#11'TStringGrid'#7'MinGrid'#4'Left'#3#143#0#6'Height'#2'd'#3'Top'#3#186#0#5
+ +'Width'#3':'#2#8'ColCount'#2#1#8'RowCount'#2#1#8'TabOrder'#2#3#0#0#11'TStrin'
+ +'gGrid'#9'EqualGrid'#4'Left'#3#143#0#6'Height'#2'c'#3'Top'#3''''#1#5'Width'#3
+ +'9'#2#8'ColCount'#2#1#8'RowCount'#2#1#8'TabOrder'#2#4#0#0#11'TStringGrid'#18
+ +'MaxConstraintsGrid'#4'Left'#2'H'#6'Height'#2'^'#3'Top'#2'R'#5'Width'#2'A'#8
+ +'ColCount'#2#1#8'RowCount'#2#1#10'ScrollBars'#7#6'ssNone'#8'TabOrder'#2#5#0#0
+ +#11'TStringGrid'#18'MinConstraintsGrid'#4'Left'#2'G'#6'Height'#2'b'#3'Top'#3
+ +#185#0#5'Width'#2'B'#8'ColCount'#2#1#8'RowCount'#2#1#10'ScrollBars'#7#6'ssNo'
+ +'ne'#8'TabOrder'#2#6#0#0#11'TStringGrid'#20'EqualConstraintsGrid'#4'Left'#2
+ +'H'#6'Height'#2'b'#3'Top'#3'&'#1#5'Width'#2'@'#8'ColCount'#2#1#8'RowCount'#2
+ +#1#10'ScrollBars'#7#6'ssNone'#8'TabOrder'#2#7#0#0#5'TEdit'#10'NoVarsEdit'#4
+ +'Left'#2'G'#6'Height'#2#22#3'Top'#2#21#5'Width'#2'>'#6'OnExit'#7#14'NoVarsEd'
+ +'itExit'#10'OnKeyPress'#7#18'NoVarsEditKeyPress'#8'TabOrder'#2#8#4'Text'#6#10
+ +'NoVarsEdit'#0#0#5'TEdit'#9'NoMaxEdit'#4'Left'#2#4#6'Height'#2#18#3'Top'#2'a'
+ +#5'Width'#2';'#6'OnExit'#7#13'NoMaxEditExit'#10'OnKeyPress'#7#17'NoMaxEditKe'
+ +'yPress'#8'TabOrder'#2#9#4'Text'#6#9'NoMaxEdit'#0#0#5'TEdit'#9'NoMinEdit'#4
+ +'Left'#2#5#6'Height'#2#19#3'Top'#3#216#0#5'Width'#2';'#6'OnExit'#7#13'NoMinE'
+ +'ditExit'#10'OnKeyPress'#7#17'NoMinEditKeyPress'#8'TabOrder'#2#10#4'Text'#6#9
+ +'NoMinEdit'#0#0#5'TEdit'#11'NoEqualEdit'#4'Left'#2#4#6'Height'#2#16#3'Top'#3
+ +'G'#1#5'Width'#2';'#6'OnExit'#7#15'NoEqualEditExit'#10'OnKeyPress'#7#19'NoEq'
+ +'ualEditKeyPress'#8'TabOrder'#2#11#4'Text'#6#11'NoEqualEdit'#0#0#11'TRadioGr'
+ +'oup'#9'MinMaxGrp'#4'Left'#2#5#6'Height'#2'A'#3'Top'#3#151#1#5'Width'#2'_'#8
+ +'AutoFill'#9#7'Caption'#6#7'Min/Max'#28'ChildSizing.LeftRightSpacing'#2#6#28
+ +'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'cr'
+ +'sHomogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousC'
+ +'hildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildS'
+ +'izing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclL'
+ +'eftToRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHei'
+ +'ght'#2'/'#11'ClientWidth'#2'['#13'Items.Strings'#1#6#8'Maximize'#6#8'Minimi'
+ +'ze'#0#8'TabOrder'#2#12#0#0#5'TEdit'#11'ResultsEdit'#4'Left'#3#202#0#6'Heigh'
+ +'t'#2#18#3'Top'#3#149#1#5'Width'#3#252#1#8'TabOrder'#2#13#4'Text'#6#11'Resul'
+ +'tsEdit'#0#0#7'TButton'#7'LoadBtn'#4'Left'#3#184#0#6'Height'#2#26#3'Top'#3
+ +#183#1#5'Width'#2'O'#7'Caption'#6#9'Load File'#7'OnClick'#7#12'LoadBtnClick'
+ +#8'TabOrder'#2#14#0#0#7'TButton'#7'SaveBtn'#4'Left'#3#16#1#6'Height'#2#26#3
+ +'Top'#3#184#1#5'Width'#2'O'#7'Caption'#6#9'Save File'#7'OnClick'#7#12'SaveBt'
+ +'nClick'#8'TabOrder'#2#15#0#0#7'TButton'#8'ResetBtn'#4'Left'#3'p'#1#6'Height'
+ +#2#27#3'Top'#3#184#1#5'Width'#2'L'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'Res'
+ ,'etBtnClick'#8'TabOrder'#2#16#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#200#1#6
+ +'Height'#2#27#3'Top'#3#184#1#5'Width'#2'L'#7'Caption'#6#6'Cancel'#11'ModalRe'
+ +'sult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#17#0#0#7'TButton'#10
+ +'ComputeBtn'#4'Left'#3' '#2#6'Height'#2#27#3'Top'#3#184#1#5'Width'#2'L'#7'Ca'
+ +'ption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#18#0#0#7
+ +'TButton'#7'ExitBtn'#4'Left'#3'x'#2#6'Height'#2#27#3'Top'#3#183#1#5'Width'#2
+ +'L'#7'Caption'#6#4'EXIT'#11'ModalResult'#2#1#7'OnClick'#7#12'ExitBtnClick'#8
+ +'TabOrder'#2#19#0#0#11'TOpenDialog'#11'OpenDialog1'#4'left'#2'p'#3'top'#3#180
+ +#1#0#0#11'TSaveDialog'#11'SaveDialog1'#4'left'#3#144#0#3'top'#3#179#1#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/linprounit.pas b/applications/lazstats/source_orig/linprounit.pas
new file mode 100644
index 000000000..cbf4f5038
--- /dev/null
+++ b/applications/lazstats/source_orig/linprounit.pas
@@ -0,0 +1,699 @@
+unit LinProUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Grids, ExtCtrls, OutPutUnit, Globals;
+
+type
+
+ { TLinProFrm }
+
+ TLinProFrm = class(TForm)
+ ExitBtn: TButton;
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ LoadBtn: TButton;
+ SaveBtn: TButton;
+ OpenDialog1: TOpenDialog;
+ ResultsEdit: TEdit;
+ Label11: TLabel;
+ NoEqualEdit: TEdit;
+ Label10: TLabel;
+ Label9: TLabel;
+ NoMinEdit: TEdit;
+ Label7: TLabel;
+ Label8: TLabel;
+ NoMaxEdit: TEdit;
+ Label5: TLabel;
+ Label6: TLabel;
+ NoVarsEdit: TEdit;
+ FileNameEdit: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ ObjectiveGrid: TStringGrid;
+ MaxGrid: TStringGrid;
+ MinGrid: TStringGrid;
+ EqualGrid: TStringGrid;
+ MaxConstraintsGrid: TStringGrid;
+ MinConstraintsGrid: TStringGrid;
+ EqualConstraintsGrid: TStringGrid;
+ MinMaxGrp: TRadioGroup;
+ SaveDialog1: TSaveDialog;
+ procedure CancelBtnClick(Sender: TObject);
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure ExitBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure LoadBtnClick(Sender: TObject);
+ procedure NoEqualEditExit(Sender: TObject);
+ procedure NoEqualEditKeyPress(Sender: TObject; var Key: char);
+ procedure NoMaxEditExit(Sender: TObject);
+ procedure NoMaxEditKeyPress(Sender: TObject; var Key: char);
+ procedure NoMinEditExit(Sender: TObject);
+ procedure NoMinEditKeyPress(Sender: TObject; var Key: char);
+ procedure NoVarsEditExit(Sender: TObject);
+ procedure NoVarsEditKeyPress(Sender: TObject; var Key: char);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure SaveBtnClick(Sender: TObject);
+ private
+ { private declarations }
+ NoVars, NoMax, NoMin, NoEql, MinMax, NoCoefs : integer;
+ Objective : DblDyneVec;
+ MaxConstraints : DblDyneVec;
+ MinConstraints : DblDyneVec;
+ EqlConstraints : DblDyneVec;
+ Coefficients : DblDyneMat;
+
+ PROCEDURE simplx(VAR a: DblDyneMat; m,n,mp,np,m1,m2,m3: integer;
+ VAR icase: integer; VAR izrov: IntDyneVec;
+ VAR iposv: IntDyneVec);
+ PROCEDURE simp1(VAR a: DblDyneMat; mp,np,mm: integer;
+ ll: IntDyneVec; nll,iabf: integer;
+ VAR kp: integer; VAR bmax: double);
+ PROCEDURE simp2(VAR a: DblDyneMat; m,n,mp,np: integer;
+ l2: IntDyneVec; nl2: integer; VAR ip: integer;
+ kp: integer; VAR q1: double);
+ PROCEDURE simp3(VAR a: DblDyneMat; mp,np,i1,k1,ip,kp: integer);
+ procedure LoadArrayData(Sender: TObject);
+
+ public
+ { public declarations }
+ end;
+
+var
+ LinProFrm: TLinProFrm;
+
+implementation
+
+{ TLinProFrm }
+
+procedure TLinProFrm.ResetBtnClick(Sender: TObject);
+begin
+ NoVarsEdit.Text := '0';
+ NoMaxEdit.Text := '';
+ NoMinEdit.Text := '';
+ NoEqualEdit.Text := '';
+ MinMaxGrp.ItemIndex := 0;
+ FileNameEdit.Text := '';
+ MaxConstraintsGrid.RowCount := 1;
+ MaxConstraintsGrid.ColCount := 1;
+ MaxConstraintsGrid.Cells[0,0] := '';
+ MinConstraintsGrid.RowCount := 1;
+ MinConstraintsGrid.ColCount := 1;
+ MinConstraintsGrid.Cells[0,0] := '';
+ EqualConstraintsGrid.RowCount := 1;
+ EqualConstraintsGrid.ColCount := 1;
+ EqualConstraintsGrid.Cells[0,0] := '';
+ ObjectiveGrid.RowCount := 1;
+ ObjectiveGrid.ColCount := 1;
+ ObjectiveGrid.Cells[0,0] := '';
+ MaxGrid.RowCount := 1;
+ MaxGrid.ColCount := 1;
+ MaxGrid.Cells[0,0] := '';
+ MinGrid.RowCount := 1;
+ MinGrid.ColCount := 1;
+ MinGrid.Cells[0,0] := '';
+ EqualGrid.RowCount := 1;
+ EqualGrid.ColCount := 1;
+ EqualGrid.Cells[0,0] := '';
+ ResultsEdit.Text := '';
+end;
+
+procedure TLinProFrm.SaveBtnClick(Sender: TObject);
+var
+ F : TextFile;
+ i, j : integer;
+ FName : string;
+begin
+ LoadArrayData(Self);
+ SaveDialog1.DefaultExt := 'LPR';
+ SaveDialog1.Filter := 'Linear Programming File (*.LPR)|*.LPR|All Files (*.*)|*.*';
+ SaveDialog1.FilterIndex := 1;
+ if SaveDialog1.Execute then
+ begin
+ FName := SaveDialog1.FileName;
+ AssignFile(F,FName);
+ Rewrite(F);
+ writeln(F,NoVars);
+ writeln(F,NoMax);
+ writeln(F,NoMin);
+ writeln(F,NoEql);
+ writeln(F,MinMax);
+ NoCoefs := NoMax + NoMin + NoEql;
+ for i := 1 to NoVars do writeln(F,Objective[i]);
+ for i := 1 to NoMax do writeln(F,MaxConstraints[i]);
+ for i := 1 to NoMin do writeln(F,MinConstraints[i]);
+ for i := 1 to NoEql do writeln(F,EqlConstraints[i]);
+ for i := 1 to NoCoefs do
+ for j := 1 to NoVars do writeln(F,Coefficients[i,j]);
+ CloseFile(F);
+ end;
+end;
+
+procedure TLinProFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(Self);
+end;
+
+procedure TLinProFrm.LoadBtnClick(Sender: TObject);
+var
+ i, j : integer;
+ FName : string;
+ F : TextFile;
+begin
+ // load values
+ OpenDialog1.DefaultExt := 'LPR';
+ OpenDialog1.Filter := 'Linear Programming File (*.LPR)|*.LPR|All Files (*.*)|*.*';
+ OpenDialog1.FilterIndex := 1;
+ if OpenDialog1.Execute then
+ begin
+ FName := OpenDialog1.FileName;
+ AssignFile(F,FName);
+ FileMode := 0; {Set file access to read only }
+ Reset(F);
+ readln(F,NoVars);
+ readln(F,NoMax);
+ readln(F,NoMin);
+ readln(F,NoEql);
+ readln(F,MinMax);
+ NoCoefs := NoMax + NoMin + NoEql;
+
+ // allocate space
+ SetLength(Objective,NoVars + 1);
+ SetLength(MaxConstraints,NoMax + 1);
+ SetLength(MinConstraints,NoMin + 1);
+ SetLength(EqlConstraints,NoEql+1);
+ SetLength(Coefficients,NoCoefs+1,NoVars+1);
+
+ for i := 1 to NoVars do readln(F,Objective[i]);
+ for i := 1 to NoMax do readln(F,MaxConstraints[i]);
+ for i := 1 to NoMin do readln(F,MinConstraints[i]);
+ for i := 1 to NoEql do readln(F,EqlConstraints[i]);
+ for i := 1 to NoCoefs do
+ for j := 1 to NoVars do readln(F,Coefficients[i,j]);
+ CloseFile(F);
+ end;
+ // GetFileData(FName);
+ FileNameEdit.Text := FName;
+ NoVarsEdit.Text := IntToStr(NoVars);
+ NoMaxEdit.Text := IntToStr(NoMax);
+ NoMinEdit.Text := IntToStr(NoMin);
+ NoEqualEdit.Text := IntToStr(NoEql);
+ MinMaxGrp.ItemIndex := MinMax;
+ MaxConstraintsGrid.RowCount := NoMax;
+ MinConstraintsGrid.RowCount := NoMin;
+ EqualConstraintsGrid.RowCount := NoEql;
+ ObjectiveGrid.ColCount := NoVars;
+ MaxGrid.RowCount := NoMax;
+ MaxGrid.ColCount := NoVars;
+ MinGrid.RowCount := NoMin;
+ MinGrid.ColCount := NoVars;
+ EqualGrid.RowCount := NoEql;
+ EqualGrid.ColCount := NoVars;
+
+ // Place objectives in grid
+ for i := 1 to NoVars do
+ ObjectiveGrid.Cells[i-1,0] := FloatToStr(Objective[i]);
+
+ // Place Maximum constraints in grid
+ for i := 1 to NoMax do
+ begin
+ MaxConstraintsGrid.Cells[0,i-1] := FloatToStr(MaxConstraints[i]);
+ for j := 1 to NoVars do MaxGrid.Cells[j-1,i-1] := FloatToStr(Coefficients[i,j]);
+ end;
+
+ // Place Minimum constraints in grid
+ for i := 1 to NoMin do
+ begin
+ MinConstraintsGrid.Cells[0,i-1] := FloatToStr(MinConstraints[i]);
+ for j := 1 to NoVars do
+ MinGrid.Cells[j-1,i-1] := FloatToStr(Coefficients[NoMax+i,j]);
+ END;
+
+ // Place Equal constraints in grid
+ for i := 1 to NoEql do
+ begin
+ EqualConstraintsGrid.Cells[0,i-1] := FloatToStr(EqlConstraints[i]);
+ for j := 1 to NoVars do
+ EqualGrid.Cells[j-1,i-1] := FloatToStr(Coefficients[NoMax+NoMin+i,j]);
+ end;
+ ComputeBtn.SetFocus;
+end;
+
+procedure TLinProFrm.CancelBtnClick(Sender: TObject);
+begin
+ LinProFrm.Coefficients := nil;
+ LinProFrm.EqlConstraints := nil;
+ LinProFrm.MinConstraints := nil;
+ LinProFrm.MaxConstraints := nil;
+ LinProFrm.Objective := nil;
+ Close;
+end;
+
+procedure TLinProFrm.ComputeBtnClick(Sender: TObject);
+var
+ m1, m2, m3, m, mp, n, np, nm1m2 : integer;
+ i,icase,j : integer;
+ izrov : IntDyneVec;
+ iposv : IntDyneVec;
+ a : DblDyneMat;
+ txt : StrDyneVec;
+ outline : string;
+
+begin
+ n := NoVars;
+ m1 := NoMax;
+ m2 := NoMin;
+ m3 := NoEql;
+ m := m1 + m2 + m3;
+ np := n+1; (* np >= n+1 *)
+ mp := m + 2; (* mp >= m+2 *)
+ nm1m2 := n + m1 + m2; (* nm1m2=n+m1+m2 *)
+ SetLength(izrov,n+1);
+ SetLength(iposv,m+1);
+ SetLength(a,mp+1,np+1);
+ SetLength(txt,nm1m2+1);
+
+ // Initialize labels
+ for i := 1 to NoVars do txt[i] := 'X' + IntToStr(i);
+ for i := NoVars + 1 to nm1m2 do txt[i] := 'Y' + IntToStr(i-NoVars);
+
+ // Fill array data from grid
+ LoadArrayData(Self);
+ for i := 1 to NoVars do a[1,i+1] := Objective[i];
+ a[1,1] := 0.0;
+ for i := 1 to NoMax do
+ begin
+ a[i+1,1] := MaxConstraints[i];
+ for j := 1 to NoVars do a[i+1,j+1] := coefficients[i,j];
+ end;
+ for i := 1 to NoMin do
+ begin
+ a[i+1+NoMax,1] := MinConstraints[i];
+ for j := 1 to NoVars do a[i+1+NoMax,j+1] := Coefficients[i+NoMax,j];
+ end;
+ for i := 1 to NoEql do
+ begin
+ a[i+1+NoMax+NoMin,1] := EqlConstraints[i];
+ for j := 1 to NoVars do
+ a[i+1+NoMax+NoMin,j+1] := coefficients[i+NoMax+NoMin,j];
+ end;
+ if MinMaxGrp.ItemIndex = 1 then
+ begin
+ MinMax := 1;
+ for i := 1 to NoVars do a[1,i+1] := -1.0 * a[1,i+1];
+ end;
+
+ // Do analysis
+ simplx(a,m,n,mp,np,m1,m2,m3,icase,izrov,iposv);
+ if MinMax = 1 then a[1,1] := -a[1,1];
+
+ // Report results
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Linear Programming Results');
+ OutPutFrm.RichEdit.Lines.Add('');
+
+
+ outline := '';
+ IF (icase = 1) THEN
+ BEGIN
+ ResultsEdit.Text := 'Unbounded objective function.';
+ OutPutFrm.RichEdit.Lines.Add('Unbounded object function.')
+ END
+ ELSE IF (icase = -1) THEN
+ BEGIN
+ ResultsEdit.Text := 'No solutions satisfy constraints given.';
+ OutPutFrm.RichEdit.Lines.Add('No solutions satisfy constraints given')
+ END ELSE
+ BEGIN
+ ResultsEdit.Text := 'Solution found.';
+ outline := ' ';
+ FOR i := 1 to n DO
+ BEGIN
+ IF (izrov[i] <= nm1m2) THEN
+ BEGIN
+ outline := outline + format('%10s',[txt[izrov[i]]]);
+ END;
+ END;
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+ outline := '';
+ FOR i := 1 to m+1 DO
+ BEGIN
+ IF (i > 1) THEN
+ BEGIN
+ outline := outline + format('%3s',[txt[iposv[i-1]]]);
+ END
+ ELSE BEGIN
+ outline := outline + ' z';
+ END;
+ FOR j := 1 to (n+1) DO
+ BEGIN
+ IF (j=1) THEN
+ outline := outline + format('%10.4f',[a[i,j]]);
+ IF (j>1) THEN
+ BEGIN
+ IF (izrov[j-1] <= nm1m2) THEN
+ outline := outline + format('%10.4f',[a[i,j]]);
+ END;
+ END;
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ outline := '';
+ END;
+ END;
+ OutPutFrm.ShowModal;
+
+// ShowOutPut(m1, m2, m3, m, n, icase, a, iposv, izrov, Self);
+
+ // cleanup
+ txt := nil;
+ a := nil;
+ iposv := nil;
+ izrov := nil;
+end;
+
+procedure TLinProFrm.ExitBtnClick(Sender: TObject);
+begin
+ LinProFrm.Coefficients := nil;
+ LinProFrm.EqlConstraints := nil;
+ LinProFrm.MinConstraints := nil;
+ LinProFrm.MaxConstraints := nil;
+ LinProFrm.Objective := nil;
+ LinProFrm.Hide;
+end;
+
+procedure TLinProFrm.NoEqualEditExit(Sender: TObject);
+VAR value : integer;
+begin
+ value := StrToInt(NoEqualEdit.Text);
+ if value = 0 then exit;
+ EqualConstraintsGrid.RowCount := value;
+ EqualGrid.RowCount := value;
+ NoEql := value;
+ SetLength(EqlConstraints,value + 1);
+ NoCoefs := NoMax + NoMin + NoEql;
+ SetLength(Coefficients,NoCoefs+1,NoVars+1);
+end;
+
+procedure TLinProFrm.NoEqualEditKeyPress(Sender: TObject; var Key: char);
+begin
+ if ord(Key) = 13 then ObjectiveGrid.SetFocus;
+end;
+
+procedure TLinProFrm.NoMaxEditExit(Sender: TObject);
+VAR value : integer;
+begin
+ value := StrToInt(NoMaxEdit.Text);
+ if value = 0 then exit;
+ MaxConstraintsGrid.RowCount := value;
+ MaxGrid.RowCount := value;
+ NoMax := value;
+ SetLength(MaxConstraints,NoMax + 1);
+end;
+
+procedure TLinProFrm.NoMaxEditKeyPress(Sender: TObject; var Key: char);
+begin
+ if ord(Key) = 13 then NoMinEdit.SetFocus;
+end;
+
+procedure TLinProFrm.NoMinEditExit(Sender: TObject);
+VAR value : integer;
+begin
+ value := StrToInt(NoMinEdit.Text);
+ if value = 0 then exit;
+ MinConstraintsGrid.RowCount := value;
+ MinGrid.RowCount := value;
+ NoMin := value;
+ SetLength(MinConstraints,NoMin + 1);
+end;
+
+procedure TLinProFrm.NoMinEditKeyPress(Sender: TObject; var Key: char);
+begin
+ if ord(Key) = 13 then NoEqualEdit.SetFocus;
+end;
+
+procedure TLinProFrm.NoVarsEditExit(Sender: TObject);
+var value : integer;
+begin
+ value := StrToInt(NoVarsEdit.Text);
+ if value = 0 then exit;
+ ObjectiveGrid.ColCount := value;
+ MaxGrid.ColCount := value;
+ MinGrid.ColCount := value;
+ EqualGrid.ColCount := value;
+ NoVars := value;
+ SetLength(Objective,NoVars + 1);
+end;
+
+procedure TLinProFrm.NoVarsEditKeyPress(Sender: TObject; var Key: char);
+begin
+ if ord(Key) = 13 then NoMaxEdit.SetFocus;
+end;
+
+PROCEDURE TLinProFrm.simplx(VAR a: DblDyneMat; m,n,mp,np,m1,m2,m3: integer;
+ VAR icase: integer; VAR izrov: IntDyneVec;
+ VAR iposv: IntDyneVec);
+LABEL 1,2,10,20,30,99;
+CONST eps=1.0e-6;
+VAR
+ nl2,nl1,m12,kp,kh,k,is1,ir,ip,i: integer;
+ q1,bmax: double;
+ l1: IntDyneVec;
+ l2,l3: IntDyneVec;
+BEGIN
+ setlength(l1,np+1);
+ setlength(l2,mp + 1);
+ setlength(l3,mp + 1);
+ IF (m <> (m1+m2+m3)) THEN BEGIN
+ writeln('pause in routine SIMPLX');
+ writeln('bad input constraint counts'); readln
+ END;
+ nl1 := n;
+ FOR k := 1 TO n DO BEGIN
+ l1[k] := k;
+ izrov[k] := k
+ END;
+ nl2 := m;
+ FOR i := 1 TO m DO BEGIN
+ IF (a[i+1,1] < 0.0) THEN BEGIN
+ writeln('pause in routine SIMPLX');
+ writeln('bad input tableau'); readln
+ END;
+ l2[i] := i;
+ iposv[i] := n+i
+ END;
+ FOR i := 1 TO m2 DO BEGIN
+ l3[i] := 1
+ END;
+ ir := 0;
+ IF ((m2+m3) = 0) THEN GOTO 30;
+ ir := 1;
+ FOR k := 1 TO n+1 DO BEGIN
+ q1 := 0.0;
+ FOR i := m1+1 TO m DO BEGIN
+ q1 := q1+a[i+1,k]
+ END;
+ a[m+2,k] := -q1
+ END;
+10: simp1(a,mp,np,m+1,l1,nl1,0,kp,bmax);
+ IF ((bmax <= eps) AND (a[m+2,1] < -eps)) THEN BEGIN
+ icase := -1; GOTO 99 END
+ ELSE IF ((bmax <= eps) AND (a[m+2,1] <= eps)) THEN BEGIN
+ m12 := m1+m2+1;
+ IF (m12 <= m) THEN BEGIN
+ FOR ip := m12 TO m DO BEGIN
+ IF (iposv[ip] = (ip+n)) THEN BEGIN
+ simp1(a,mp,np,ip,l1,nl1,1,kp,bmax);
+ IF (bmax > 0.0) THEN GOTO 1
+ END
+ END
+ END;
+ ir := 0;
+ m12 := m12-1;
+ IF ((m1+1) > m12) THEN GOTO 30;
+ FOR i := m1+1 TO m12 DO BEGIN
+ IF (l3[i-m1] = 1) THEN BEGIN
+ FOR k := 1 TO n+1 DO BEGIN
+ a[i+1,k] := -a[i+1,k]
+ END
+ END
+ END;
+ GOTO 30
+ END;
+ simp2(a,m,n,mp,np,l2,nl2,ip,kp,q1);
+ IF (ip = 0) THEN BEGIN
+ icase := -1; GOTO 99
+ END;
+1: simp3(a,mp,np,m+1,n,ip,kp);
+ IF (iposv[ip] >= (n+m1+m2+1)) THEN BEGIN
+ FOR k := 1 TO nl1 DO BEGIN
+ IF (l1[k] = kp) THEN GOTO 2
+ END;
+2: nl1 := nl1-1;
+ FOR is1 := k TO nl1 DO BEGIN
+ l1[is1] := l1[is1+1]
+ END
+ END ELSE BEGIN
+ IF (iposv[ip] < (n+m1+1)) THEN GOTO 20;
+ kh := iposv[ip]-m1-n;
+ IF (l3[kh] = 0) THEN GOTO 20;
+ l3[kh] := 0
+ END;
+ a[m+2,kp+1] := a[m+2,kp+1]+1.0;
+ FOR i := 1 TO m+2 DO BEGIN
+ a[i,kp+1] := -a[i,kp+1]
+ END;
+20: is1 := izrov[kp];
+ izrov[kp] := iposv[ip];
+ iposv[ip] := is1;
+ IF (ir <> 0) THEN GOTO 10;
+30: simp1(a,mp,np,0,l1,nl1,0,kp,bmax);
+ IF (bmax <= 0.0) THEN BEGIN
+ icase := 0; GOTO 99
+ END;
+ simp2(a,m,n,mp,np,l2,nl2,ip,kp,q1);
+ IF (ip = 0) THEN BEGIN
+ icase := 1; GOTO 99
+ END;
+ simp3(a,mp,np,m,n,ip,kp);
+ GOTO 20;
+99:
+ l1 := nil;
+ l2 := nil;
+ l3 := nil;
+END;
+
+
+PROCEDURE TLinProFrm.simp1(VAR a: DblDyneMat; mp,np,mm: integer;
+ ll: IntDyneVec; nll,iabf: integer;
+ VAR kp: integer; VAR bmax: double);
+LABEL 99;
+VAR
+ k: integer;
+ test: real;
+BEGIN
+ kp := ll[1];
+ bmax := a[mm+1,kp+1];
+ IF (nll < 2) THEN GOTO 99;
+ FOR k := 2 TO nll DO BEGIN
+ IF (iabf = 0) THEN BEGIN
+ test := a[mm+1,ll[k]+1]-bmax
+ END ELSE BEGIN
+ test := abs(a[mm+1,ll[k]+1])-abs(bmax)
+ END;
+ IF (test > 0.0) THEN BEGIN
+ bmax := a[mm+1,ll[k]+1];
+ kp := ll[k]
+ END
+ END;
+99: END;
+
+
+PROCEDURE TLinProFrm.simp2(VAR a: DblDyneMat; m,n,mp,np: integer;
+ l2: IntDyneVec; nl2: integer; VAR ip: integer;
+ kp: integer; VAR q1: double);
+LABEL 2,6,99;
+VAR
+ k,ii,i: integer;
+ qp,q0,q: double;
+BEGIN
+ ip := 0;
+ IF (nl2 < 1) THEN GOTO 99;
+ FOR i := 1 TO nl2 DO BEGIN
+ IF (a[l2[i]+1,kp+1] < 0.0) THEN GOTO 2
+ END;
+ GOTO 99;
+2: q1 := -a[l2[i]+1,1]/a[l2[i]+1,kp+1];
+ ip := l2[i];
+ IF ((i+1) > nl2) THEN GOTO 99;
+ FOR i := i+1 TO nl2 DO BEGIN
+ ii := l2[i];
+ IF (a[ii+1,kp+1] < 0.0) THEN BEGIN
+ q := -a[ii+1,1]/a[ii+1,kp+1];
+ IF (q < q1) THEN BEGIN
+ ip := ii;
+ q1 := q
+ END ELSE IF (q = q1) THEN BEGIN
+ FOR k := 1 TO n DO BEGIN
+ qp := -a[ip+1,k+1]/a[ip+1,kp+1];
+ q0 := -a[ii+1,k+1]/a[ii+1,kp+1];
+ IF (q0 <> qp) THEN GOTO 6
+ END;
+6: IF (q0 < qp) THEN ip := ii
+ END
+ END
+ END;
+99:
+end;
+
+
+PROCEDURE TLinProFrm.simp3(VAR a: DblDyneMat; mp,np,i1,k1,ip,kp: integer);
+(* Programs using routine SIMP3 must define the type
+TYPE
+ glmpbynp = ARRAY [1..mp,1..np] OF real;
+in the main routine. *)
+VAR
+ kk,ii: integer;
+ piv: double;
+BEGIN
+ piv := 1.0/a[ip+1,kp+1];
+ IF (i1 >= 0) THEN BEGIN
+ FOR ii := 1 TO (i1+1) DO BEGIN
+ IF ((ii-1) <> ip) THEN BEGIN
+ a[ii,kp+1] := a[ii,kp+1]*piv;
+ FOR kk := 1 TO k1+1 DO BEGIN
+ IF ((kk-1) <> kp) THEN BEGIN
+ a[ii,kk] := a[ii,kk]
+ -a[ip+1,kk]*a[ii,kp+1]
+ END
+ END
+ END
+ END
+ END;
+ FOR kk := 1 TO k1+1 DO BEGIN
+ IF ((kk-1) <> kp) THEN a[ip+1,kk] := -a[ip+1,kk]*piv
+ END;
+ a[ip+1,kp+1] := piv
+END;
+
+
+procedure TLinProFrm.LoadArrayData(Sender: TObject);
+var
+ i, j : integer;
+begin
+ // load objectives
+ for i := 1 to NoVars do Objective[i] := StrToFloat(ObjectiveGrid.Cells[i-1,0]);
+
+ // load constraints
+ for i := 1 to NoMax do
+ begin
+ MaxConstraints[i] := StrToFloat(MaxConstraintsGrid.Cells[0,i-1]);
+ for j := 1 to NoVars do coefficients[i,j] := StrToFloat(MaxGrid.Cells[j-1,i-1]);
+ end;
+ for i := 1 to NoMin do
+ begin
+ MinConstraints[i] := StrToFloat(MinConstraintsGrid.Cells[0,i-1]);
+ for j := 1 to NoVars do coefficients[i+NoMax,j] := StrToFloat(MinGrid.Cells[j-1,i-1]);
+ end;
+ for i := 1 to NoEql do
+ begin
+ EqlConstraints[i] := StrToFloat(EqualConstraintsGrid.Cells[0,i-1]);
+ for j := 1 to NoVars do coefficients[i+NoMax+NoMin,j] := StrToFloat(EqualGrid.Cells[j-1,i-1]);
+ end;
+
+ // Set for minimization if requested
+ if MinMaxGrp.ItemIndex = 1 then MinMax := 1;
+end;
+
+
+initialization
+ {$I linprounit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/loanitunit.lfm b/applications/lazstats/source_orig/loanitunit.lfm
new file mode 100644
index 000000000..264e15e82
--- /dev/null
+++ b/applications/lazstats/source_orig/loanitunit.lfm
@@ -0,0 +1,190 @@
+object LoanItFrm: TLoanItFrm
+ Left = 169
+ Height = 247
+ Top = 100
+ Width = 400
+ Caption = 'Loan Calculation and Amortization'
+ ClientHeight = 247
+ ClientWidth = 400
+ OnShow = FormShow
+ LCLVersion = '0.9.28.2'
+ object Label1: TLabel
+ Left = 14
+ Height = 14
+ Top = 88
+ Width = 80
+ Caption = 'Principal Amount'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 162
+ Height = 14
+ Top = 87
+ Width = 163
+ Caption = 'Annual Percentage Rate (APR %)'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 14
+ Height = 14
+ Top = 128
+ Width = 81
+ Caption = 'Number of years'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 162
+ Height = 14
+ Top = 128
+ Width = 145
+ Caption = 'Number of Payments Per Year'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 14
+ Height = 14
+ Top = 160
+ Width = 61
+ Caption = 'PAYMENT = '
+ ParentColor = False
+ end
+ object Label6: TLabel
+ Left = 8
+ Height = 14
+ Top = 9
+ Width = 60
+ Caption = 'Your Name: '
+ ParentColor = False
+ end
+ object Label7: TLabel
+ Left = 8
+ Height = 14
+ Top = 40
+ Width = 91
+ Caption = 'Current Month No.'
+ ParentColor = False
+ end
+ object Label8: TLabel
+ Left = 144
+ Height = 14
+ Top = 40
+ Width = 70
+ Caption = 'Day of Month:'
+ ParentColor = False
+ end
+ object Label9: TLabel
+ Left = 256
+ Height = 14
+ Top = 40
+ Width = 63
+ Caption = 'Current Year'
+ ParentColor = False
+ end
+ object AmountEdit: TEdit
+ Left = 105
+ Height = 21
+ Top = 80
+ Width = 43
+ TabOrder = 0
+ Text = 'AmountEdit'
+ end
+ object InterestEdit: TEdit
+ Left = 329
+ Height = 21
+ Top = 80
+ Width = 50
+ TabOrder = 1
+ Text = 'InterestEdit'
+ end
+ object YearsEdit: TEdit
+ Left = 105
+ Height = 21
+ Top = 120
+ Width = 44
+ TabOrder = 2
+ Text = 'YearsEdit'
+ end
+ object PayPerYrEdit: TEdit
+ Left = 329
+ Height = 21
+ Top = 121
+ Width = 51
+ TabOrder = 3
+ Text = 'PayPerYrEdit'
+ end
+ object RePayEdit: TEdit
+ Left = 96
+ Height = 21
+ Top = 153
+ Width = 95
+ TabOrder = 4
+ Text = 'RePayEdit'
+ end
+ object ResetBtn: TButton
+ Left = 14
+ Height = 27
+ Top = 200
+ Width = 71
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 5
+ end
+ object AmortizeBtn: TButton
+ Left = 144
+ Height = 27
+ Top = 200
+ Width = 80
+ Caption = 'Compute'
+ OnClick = AmortizeBtnClick
+ TabOrder = 6
+ end
+ object ReturnBtn: TButton
+ Left = 287
+ Height = 27
+ Top = 200
+ Width = 90
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 7
+ end
+ object NameEdit: TEdit
+ Left = 74
+ Height = 21
+ Top = 2
+ Width = 137
+ TabOrder = 8
+ Text = 'NameEdit'
+ end
+ object MonthEdit: TEdit
+ Left = 102
+ Height = 21
+ Top = 32
+ Width = 31
+ TabOrder = 9
+ Text = 'MonthEdit'
+ end
+ object DayEdit: TEdit
+ Left = 218
+ Height = 21
+ Top = 32
+ Width = 29
+ TabOrder = 10
+ Text = 'DayEdit'
+ end
+ object YearEdit: TEdit
+ Left = 326
+ Height = 21
+ Top = 30
+ Width = 52
+ TabOrder = 11
+ Text = 'YearEdit'
+ end
+ object PrintChk: TCheckBox
+ Left = 211
+ Height = 17
+ Top = 158
+ Width = 170
+ Caption = 'Print the Amortization Schedule'
+ TabOrder = 12
+ end
+end
diff --git a/applications/lazstats/source_orig/loanitunit.lrs b/applications/lazstats/source_orig/loanitunit.lrs
new file mode 100644
index 000000000..2c14dc53b
--- /dev/null
+++ b/applications/lazstats/source_orig/loanitunit.lrs
@@ -0,0 +1,46 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLoanItFrm','FORMDATA',[
+ 'TPF0'#10'TLoanItFrm'#9'LoanItFrm'#4'Left'#3#169#0#6'Height'#3#247#0#3'Top'#2
+ +'d'#5'Width'#3#144#1#7'Caption'#6'!Loan Calculation and Amortization'#12'Cli'
+ +'entHeight'#3#247#0#11'ClientWidth'#3#144#1#6'OnShow'#7#8'FormShow'#10'LCLVe'
+ +'rsion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#14#6'Height'#2#14#3'To'
+ +'p'#2'X'#5'Width'#2'P'#7'Caption'#6#16'Principal Amount'#11'ParentColor'#8#0
+ +#0#6'TLabel'#6'Label2'#4'Left'#3#162#0#6'Height'#2#14#3'Top'#2'W'#5'Width'#3
+ +#163#0#7'Caption'#6#30'Annual Percentage Rate (APR %)'#11'ParentColor'#8#0#0
+ +#6'TLabel'#6'Label3'#4'Left'#2#14#6'Height'#2#14#3'Top'#3#128#0#5'Width'#2'Q'
+ +#7'Caption'#6#15'Number of years'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4
+ +'Left'#3#162#0#6'Height'#2#14#3'Top'#3#128#0#5'Width'#3#145#0#7'Caption'#6#27
+ +'Number of Payments Per Year'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Le'
+ +'ft'#2#14#6'Height'#2#14#3'Top'#3#160#0#5'Width'#2'='#7'Caption'#6#10'PAYMEN'
+ +'T = '#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#2#8#6'Height'#2#14#3
+ +'Top'#2#9#5'Width'#2'<'#7'Caption'#6#11'Your Name: '#11'ParentColor'#8#0#0#6
+ +'TLabel'#6'Label7'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'('#5'Width'#2'['#7'Ca'
+ +'ption'#6#17'Current Month No.'#11'ParentColor'#8#0#0#6'TLabel'#6'Label8'#4
+ +'Left'#3#144#0#6'Height'#2#14#3'Top'#2'('#5'Width'#2'F'#7'Caption'#6#13'Day '
+ +'of Month:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label9'#4'Left'#3#0#1#6'Height'
+ +#2#14#3'Top'#2'('#5'Width'#2'?'#7'Caption'#6#12'Current Year'#11'ParentColor'
+ +#8#0#0#5'TEdit'#10'AmountEdit'#4'Left'#2'i'#6'Height'#2#21#3'Top'#2'P'#5'Wid'
+ +'th'#2'+'#8'TabOrder'#2#0#4'Text'#6#10'AmountEdit'#0#0#5'TEdit'#12'InterestE'
+ +'dit'#4'Left'#3'I'#1#6'Height'#2#21#3'Top'#2'P'#5'Width'#2'2'#8'TabOrder'#2#1
+ +#4'Text'#6#12'InterestEdit'#0#0#5'TEdit'#9'YearsEdit'#4'Left'#2'i'#6'Height'
+ +#2#21#3'Top'#2'x'#5'Width'#2','#8'TabOrder'#2#2#4'Text'#6#9'YearsEdit'#0#0#5
+ +'TEdit'#12'PayPerYrEdit'#4'Left'#3'I'#1#6'Height'#2#21#3'Top'#2'y'#5'Width'#2
+ +'3'#8'TabOrder'#2#3#4'Text'#6#12'PayPerYrEdit'#0#0#5'TEdit'#9'RePayEdit'#4'L'
+ +'eft'#2'`'#6'Height'#2#21#3'Top'#3#153#0#5'Width'#2'_'#8'TabOrder'#2#4#4'Tex'
+ +'t'#6#9'RePayEdit'#0#0#7'TButton'#8'ResetBtn'#4'Left'#2#14#6'Height'#2#27#3
+ +'Top'#3#200#0#5'Width'#2'G'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnCl'
+ +'ick'#8'TabOrder'#2#5#0#0#7'TButton'#11'AmortizeBtn'#4'Left'#3#144#0#6'Heigh'
+ +'t'#2#27#3'Top'#3#200#0#5'Width'#2'P'#7'Caption'#6#7'Compute'#7'OnClick'#7#16
+ +'AmortizeBtnClick'#8'TabOrder'#2#6#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#31#1
+ +#6'Height'#2#27#3'Top'#3#200#0#5'Width'#2'Z'#7'Caption'#6#6'Return'#11'Modal'
+ +'Result'#2#1#8'TabOrder'#2#7#0#0#5'TEdit'#8'NameEdit'#4'Left'#2'J'#6'Height'
+ +#2#21#3'Top'#2#2#5'Width'#3#137#0#8'TabOrder'#2#8#4'Text'#6#8'NameEdit'#0#0#5
+ +'TEdit'#9'MonthEdit'#4'Left'#2'f'#6'Height'#2#21#3'Top'#2' '#5'Width'#2#31#8
+ +'TabOrder'#2#9#4'Text'#6#9'MonthEdit'#0#0#5'TEdit'#7'DayEdit'#4'Left'#3#218#0
+ +#6'Height'#2#21#3'Top'#2' '#5'Width'#2#29#8'TabOrder'#2#10#4'Text'#6#7'DayEd'
+ +'it'#0#0#5'TEdit'#8'YearEdit'#4'Left'#3'F'#1#6'Height'#2#21#3'Top'#2#30#5'Wi'
+ +'dth'#2'4'#8'TabOrder'#2#11#4'Text'#6#8'YearEdit'#0#0#9'TCheckBox'#8'PrintCh'
+ +'k'#4'Left'#3#211#0#6'Height'#2#17#3'Top'#3#158#0#5'Width'#3#170#0#7'Caption'
+ +#6#31'Print the Amortization Schedule'#8'TabOrder'#2#12#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/loanitunit.pas b/applications/lazstats/source_orig/loanitunit.pas
new file mode 100644
index 000000000..bfd0318cd
--- /dev/null
+++ b/applications/lazstats/source_orig/loanitunit.pas
@@ -0,0 +1,154 @@
+unit LoanItUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, OutPutUnit, math;
+
+type
+
+ { TLoanItFrm }
+
+ TLoanItFrm = class(TForm)
+ PrintChk: TCheckBox;
+ DayEdit: TEdit;
+ YearEdit: TEdit;
+ MonthEdit: TEdit;
+ Label7: TLabel;
+ Label8: TLabel;
+ Label9: TLabel;
+ NameEdit: TEdit;
+ Label6: TLabel;
+ ResetBtn: TButton;
+ AmortizeBtn: TButton;
+ ReturnBtn: TButton;
+ AmountEdit: TEdit;
+ InterestEdit: TEdit;
+ YearsEdit: TEdit;
+ PayPerYrEdit: TEdit;
+ RePayEdit: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ Label5: TLabel;
+ procedure AmortizeBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure Heading(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ LoanItFrm: TLoanItFrm;
+
+implementation
+
+{ TLoanItFrm }
+
+procedure TLoanItFrm.ResetBtnClick(Sender: TObject);
+begin
+ NameEdit.Text := '';
+ MonthEdit.Text := '';
+ DayEdit.Text := '';
+ YearEdit.Text := '';
+ YearsEdit.Text := '30';
+ AmountEdit.Text := '10000';
+ InterestEdit.Text := '6.5';
+ PayPerYrEdit.Text := '12';
+ RepayEdit.Text := '';
+end;
+
+procedure TLoanItFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(self);
+end;
+
+procedure TLoanItFrm.AmortizeBtnClick(Sender: TObject);
+VAR
+ no_per_year, year_payed, month_payed, day, month, j, k : integer;
+ fraction, interest, numerator, denominator, payment, total_interest : double;
+ amount, interest_payment, total_payed, pcnt_interest, years, no_years : double;
+ aname, astring : string;
+ outline : string;
+begin
+ aname := NameEdit.Text;
+ no_per_year := StrToInt(PayPerYrEdit.Text);
+ day := StrToInt(DayEdit.Text);
+ month := StrToInt(MonthEdit.Text);
+ years := StrToFloat(YearEdit.Text);
+ amount := StrToFloat(AmountEdit.Text);
+ no_years := StrToFloat(YearsEdit.Text);
+ pcnt_interest := StrToFloat(InterestEdit.Text);
+
+ interest := pcnt_interest / 100.0;
+ numerator := interest * amount / no_per_year ;
+ denominator := 1.0 - (1.0 / power((interest / no_per_year + 1.0),
+ (no_per_year * no_years) ) );
+ payment := numerator / denominator;
+ outline := format('%10.2f',[payment]);
+ repayEdit.Text := outline;
+
+ if PrintChk.Checked = false then exit;
+ OutPutFrm.RichEdit.Clear;
+// OutPutFrm.RichEdit.Lines.Add(outline);
+ if (no_per_year < 12) then
+ fraction := 12.0 / no_per_year else fraction := 1.0;
+ OutPutFrm.RichEdit.Lines.Add('Payment Schedule Program by W. G. Miller');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('');
+ astring := 'Name of Borrower : ';
+ astring := astring + aname;
+ OutPutFrm.RichEdit.Lines.Add(astring);
+ outline := format('Amount borrowed := $%12.2f at %5.2f percent over %2.1f years.',
+ [amount,pcnt_interest,no_years]);
+ total_interest := 0.0;
+ total_payed := 0.0;
+ for j := 1 to round(no_years) do
+ begin
+ Heading(self);
+ for k := 1 to no_per_year do
+ begin
+ year_payed := round(years) + j - 1 ;
+ month_payed := round(k * fraction + (month - fraction));
+ if (month_payed > 12) then
+ begin
+ year_payed := year_payed + 1;
+ month_payed := month_payed - 12;
+ end;
+ interest_payment := amount * interest / no_per_year;
+ amount := amount - payment + interest_payment;
+ total_interest := total_interest + interest_payment;
+ total_payed := total_payed + payment;
+ outline := format(' %2d/%2d/%2d %12.2f %12.2f %12.2f %12.2f %12.2f',
+ [month_payed,day,year_payed,payment,interest_payment,
+ amount,total_interest,total_payed]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end; // next k
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------------');
+ end; // next j
+ OutPutFrm.ShowModal;
+end;
+
+procedure TLoanItFrm.Heading(Sender: TObject);
+begin
+ OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------------');
+ OutPutFrm.RichEdit.Lines.Add('PAYMENT PAYMENT INTEREST BALANCE TOTAL TOTAL');
+ OutPutFrm.RichEdit.Lines.Add('NUMBER AMOUNT PAYED REMAINING INTEREST PAID');
+ OutPutFrm.RichEdit.Lines.Add('----------------------------------------------------------------------------');
+end;
+
+initialization
+
+ {$I loanitunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/loglinscreenunit.lfm b/applications/lazstats/source_orig/loglinscreenunit.lfm
new file mode 100644
index 000000000..00cf5fa07
--- /dev/null
+++ b/applications/lazstats/source_orig/loglinscreenunit.lfm
@@ -0,0 +1,335 @@
+object LogLinScreenFrm: TLogLinScreenFrm
+ Left = 144
+ Height = 393
+ Top = 105
+ Width = 546
+ Caption = 'Cross-Classification Log Linear Screen'
+ ClientHeight = 393
+ ClientWidth = 546
+ OnShow = FormShow
+ LCLVersion = '0.9.28.2'
+ object Label1: TLabel
+ Left = 9
+ Height = 14
+ Top = 40
+ Width = 314
+ Caption = '1, Select the variables of the Grid that define your classifications'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 9
+ Height = 14
+ Top = 72
+ Width = 90
+ Caption = 'Available Variables'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 192
+ Height = 14
+ Top = 72
+ Width = 42
+ Caption = 'Selected'
+ ParentColor = False
+ end
+ object CountVarChk: TCheckBox
+ Left = 6
+ Height = 17
+ Top = 8
+ Width = 230
+ Caption = 'Last Variable Selected is a Frequency Count'
+ TabOrder = 0
+ end
+ object Step2Btn: TButton
+ Left = 304
+ Height = 22
+ Top = 8
+ Width = 228
+ Caption = '2. Click here when variables are selected'
+ OnClick = Step2BtnClick
+ TabOrder = 1
+ end
+ object VarList: TListBox
+ Left = 7
+ Height = 220
+ Top = 88
+ Width = 140
+ ItemHeight = 0
+ MultiSelect = True
+ TabOrder = 2
+ end
+ object InBtn: TBitBtn
+ Left = 152
+ Height = 28
+ Top = 96
+ Width = 31
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = InBtnClick
+ TabOrder = 3
+ end
+ object OutBtn: TBitBtn
+ Left = 152
+ Height = 28
+ Top = 128
+ Width = 31
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = OutBtnClick
+ TabOrder = 4
+ end
+ object AllBtn: TBitBtn
+ Left = 152
+ Height = 28
+ Top = 192
+ Width = 31
+ Caption = 'ALL'
+ NumGlyphs = 0
+ OnClick = AllBtnClick
+ TabOrder = 5
+ end
+ object SelectList: TListBox
+ Left = 192
+ Height = 219
+ Top = 89
+ Width = 142
+ ItemHeight = 0
+ TabOrder = 6
+ end
+ object Panel1: TPanel
+ Left = 344
+ Height = 152
+ Top = 72
+ Width = 184
+ ClientHeight = 152
+ ClientWidth = 184
+ TabOrder = 7
+ object Label4: TLabel
+ Left = 7
+ Height = 14
+ Top = 10
+ Width = 165
+ Caption = '3. For each variable complete the'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 7
+ Height = 14
+ Top = 27
+ Width = 151
+ Caption = 'specifications below. Press the'
+ ParentColor = False
+ end
+ object Label6: TLabel
+ Left = 7
+ Height = 14
+ Top = 45
+ Width = 151
+ Caption = 'enter key following each entry.'
+ ParentColor = False
+ end
+ object Label7: TLabel
+ Left = 93
+ Height = 14
+ Top = 70
+ Width = 43
+ Caption = 'Variable:'
+ ParentColor = False
+ end
+ object Label8: TLabel
+ Left = 8
+ Height = 14
+ Top = 98
+ Width = 74
+ Caption = 'Minimum Value:'
+ ParentColor = False
+ end
+ object Label9: TLabel
+ Left = 7
+ Height = 14
+ Top = 128
+ Width = 78
+ Caption = 'Maximum Value:'
+ ParentColor = False
+ end
+ object ScrollBar1: TScrollBar
+ Left = 7
+ Height = 17
+ Top = 66
+ Width = 76
+ PageSize = 0
+ TabOrder = 0
+ OnChange = ScrollBar1Change
+ end
+ object VarNoEdit: TEdit
+ Left = 139
+ Height = 21
+ Top = 66
+ Width = 36
+ TabOrder = 1
+ Text = 'VarNoEdit'
+ end
+ object MinEdit: TEdit
+ Left = 139
+ Height = 21
+ Top = 95
+ Width = 33
+ OnKeyPress = MinEditKeyPress
+ TabOrder = 2
+ Text = 'MinEdit'
+ end
+ object MaxEdit: TEdit
+ Left = 138
+ Height = 21
+ Top = 123
+ Width = 35
+ OnKeyPress = MaxEditKeyPress
+ TabOrder = 3
+ Text = 'MaxEdit'
+ end
+ end
+ object GroupBox1: TGroupBox
+ Left = 6
+ Height = 64
+ Top = 320
+ Width = 328
+ Caption = 'Options'
+ ClientHeight = 46
+ ClientWidth = 324
+ TabOrder = 8
+ object MarginsChk: TCheckBox
+ Left = 6
+ Height = 17
+ Top = 2
+ Width = 117
+ Caption = 'Print Marginal Totals'
+ TabOrder = 0
+ end
+ object GenlModelChk: TCheckBox
+ Left = 6
+ Height = 17
+ Top = 23
+ Width = 194
+ Caption = 'Print General Linear Modle Estimates'
+ TabOrder = 1
+ end
+ end
+ object ResetBtn: TButton
+ Left = 456
+ Height = 28
+ Top = 240
+ Width = 72
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 9
+ end
+ object CancelBtn: TButton
+ Left = 344
+ Height = 28
+ Top = 280
+ Width = 81
+ Caption = 'Cancel'
+ ModalResult = 2
+ OnClick = CancelBtnClick
+ TabOrder = 10
+ end
+ object ComputeBtn: TButton
+ Left = 456
+ Height = 28
+ Top = 280
+ Width = 72
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 11
+ end
+ object ReturnBtn: TButton
+ Left = 408
+ Height = 28
+ Top = 320
+ Width = 72
+ Caption = 'Return'
+ ModalResult = 1
+ OnClick = ReturnBtnClick
+ TabOrder = 12
+ end
+ object HelpBtn: TButton
+ Tag = 131
+ Left = 344
+ Height = 28
+ Top = 240
+ Width = 81
+ Caption = 'Help'
+ OnClick = HelpBtnClick
+ TabOrder = 13
+ end
+end
diff --git a/applications/lazstats/source_orig/loglinscreenunit.lrs b/applications/lazstats/source_orig/loglinscreenunit.lrs
new file mode 100644
index 000000000..24fb78ee7
--- /dev/null
+++ b/applications/lazstats/source_orig/loglinscreenunit.lrs
@@ -0,0 +1,165 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLogLinScreenFrm','FORMDATA',[
+ 'TPF0'#16'TLogLinScreenFrm'#15'LogLinScreenFrm'#4'Left'#3#144#0#6'Height'#3
+ +#137#1#3'Top'#2'i'#5'Width'#3'"'#2#7'Caption'#6'&Cross-Classification Log Li'
+ +'near Screen'#12'ClientHeight'#3#137#1#11'ClientWidth'#3'"'#2#6'OnShow'#7#8
+ +'FormShow'#10'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#9#6
+ +'Height'#2#14#3'Top'#2'('#5'Width'#3':'#1#7'Caption'#6'E1, Select the varia'
+ +'bles of the Grid that define your classifications'#11'ParentColor'#8#0#0#6
+ +'TLabel'#6'Label2'#4'Left'#2#9#6'Height'#2#14#3'Top'#2'H'#5'Width'#2'Z'#7'Ca'
+ +'ption'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4
+ +'Left'#3#192#0#6'Height'#2#14#3'Top'#2'H'#5'Width'#2'*'#7'Caption'#6#8'Selec'
+ +'ted'#11'ParentColor'#8#0#0#9'TCheckBox'#11'CountVarChk'#4'Left'#2#6#6'Heigh'
+ +'t'#2#17#3'Top'#2#8#5'Width'#3#230#0#7'Caption'#6'+Last Variable Selected is'
+ +' a Frequency Count'#8'TabOrder'#2#0#0#0#7'TButton'#8'Step2Btn'#4'Left'#3'0'
+ +#1#6'Height'#2#22#3'Top'#2#8#5'Width'#3#228#0#7'Caption'#6')2. Click here wh'
+ +'en variables are selected'#7'OnClick'#7#13'Step2BtnClick'#8'TabOrder'#2#1#0
+ +#0#8'TListBox'#7'VarList'#4'Left'#2#7#6'Height'#3#220#0#3'Top'#2'X'#5'Width'
+ +#3#140#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'TabOrder'#2#2#0#0#7'TBitBtn'
+ +#5'InBtn'#4'Left'#3#152#0#6'Height'#2#28#3'Top'#2'`'#5'Width'#2#31#10'Glyph.'
+ +'Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16
+ +#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184
+ +#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177
+ +'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255
+ +'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255
+ +#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255
+ +#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142
+ +#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'
+ +#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162
+ +#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255
+ +#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130
+ +#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199
+ +'t'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255
+ +'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'
+ +#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'InBtnClick'#8
+ +'TabOrder'#2#3#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#152#0#6'Height'#2#28#3'Top'
+ +#3#128#0#5'Width'#2#31#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0
+ +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0
+ +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'
+ +#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161
+ +'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131
+ +#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/'
+ +'x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'
+ +#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255
+ +#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132
+ +#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255
+ +#255#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154
+ +#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255
+ +#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255
+ +#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201
+ +#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'
+ +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'Num'
+ +'Glyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8'TabOrder'#2#4#0#0#7'TBitBtn'#6'A'
+ +'llBtn'#4'Left'#3#152#0#6'Height'#2#28#3'Top'#3#192#0#5'Width'#2#31#7'Captio'
+ +'n'#6#3'ALL'#9'NumGlyphs'#2#0#7'OnClick'#7#11'AllBtnClick'#8'TabOrder'#2#5#0
+ +#0#8'TListBox'#10'SelectList'#4'Left'#3#192#0#6'Height'#3#219#0#3'Top'#2'Y'#5
+ +'Width'#3#142#0#10'ItemHeight'#2#0#8'TabOrder'#2#6#0#0#6'TPanel'#6'Panel1'#4
+ +'Left'#3'X'#1#6'Height'#3#152#0#3'Top'#2'H'#5'Width'#3#184#0#12'ClientHeight'
+ +#3#152#0#11'ClientWidth'#3#184#0#8'TabOrder'#2#7#0#6'TLabel'#6'Label4'#4'Lef'
+ +'t'#2#7#6'Height'#2#14#3'Top'#2#10#5'Width'#3#165#0#7'Caption'#6'"3. For ea'
+ +'ch variable complete the'#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'
+ +#2#7#6'Height'#2#14#3'Top'#2#27#5'Width'#3#151#0#7'Caption'#6' specification'
+ ,'s below. Press the'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Left'#2#7#6
+ +'Height'#2#14#3'Top'#2'-'#5'Width'#3#151#0#7'Caption'#6#31'enter key followi'
+ +'ng each entry.'#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#2']'#6'He'
+ +'ight'#2#14#3'Top'#2'F'#5'Width'#2'+'#7'Caption'#6#9'Variable:'#11'ParentCol'
+ +'or'#8#0#0#6'TLabel'#6'Label8'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'b'#5'Widt'
+ +'h'#2'J'#7'Caption'#6#14'Minimum Value:'#11'ParentColor'#8#0#0#6'TLabel'#6'L'
+ +'abel9'#4'Left'#2#7#6'Height'#2#14#3'Top'#3#128#0#5'Width'#2'N'#7'Caption'#6
+ +#14'Maximum Value:'#11'ParentColor'#8#0#0#10'TScrollBar'#10'ScrollBar1'#4'Le'
+ +'ft'#2#7#6'Height'#2#17#3'Top'#2'B'#5'Width'#2'L'#8'PageSize'#2#0#8'TabOrder'
+ +#2#0#8'OnChange'#7#16'ScrollBar1Change'#0#0#5'TEdit'#9'VarNoEdit'#4'Left'#3
+ +#139#0#6'Height'#2#21#3'Top'#2'B'#5'Width'#2'$'#8'TabOrder'#2#1#4'Text'#6#9
+ +'VarNoEdit'#0#0#5'TEdit'#7'MinEdit'#4'Left'#3#139#0#6'Height'#2#21#3'Top'#2
+ +'_'#5'Width'#2'!'#10'OnKeyPress'#7#15'MinEditKeyPress'#8'TabOrder'#2#2#4'Tex'
+ +'t'#6#7'MinEdit'#0#0#5'TEdit'#7'MaxEdit'#4'Left'#3#138#0#6'Height'#2#21#3'To'
+ +'p'#2'{'#5'Width'#2'#'#10'OnKeyPress'#7#15'MaxEditKeyPress'#8'TabOrder'#2#3#4
+ +'Text'#6#7'MaxEdit'#0#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#2#6#6'Height'#2
+ +'@'#3'Top'#3'@'#1#5'Width'#3'H'#1#7'Caption'#6#7'Options'#12'ClientHeight'#2
+ +'.'#11'ClientWidth'#3'D'#1#8'TabOrder'#2#8#0#9'TCheckBox'#10'MarginsChk'#4'L'
+ +'eft'#2#6#6'Height'#2#17#3'Top'#2#2#5'Width'#2'u'#7'Caption'#6#21'Print Marg'
+ +'inal Totals'#8'TabOrder'#2#0#0#0#9'TCheckBox'#12'GenlModelChk'#4'Left'#2#6#6
+ +'Height'#2#17#3'Top'#2#23#5'Width'#3#194#0#7'Caption'#6'$Print General Linea'
+ +'r Modle Estimates'#8'TabOrder'#2#1#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3
+ +#200#1#6'Height'#2#28#3'Top'#3#240#0#5'Width'#2'H'#7'Caption'#6#5'Reset'#7'O'
+ +'nClick'#7#13'ResetBtnClick'#8'TabOrder'#2#9#0#0#7'TButton'#9'CancelBtn'#4'L'
+ +'eft'#3'X'#1#6'Height'#2#28#3'Top'#3#24#1#5'Width'#2'Q'#7'Caption'#6#6'Cance'
+ +'l'#11'ModalResult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#10#0#0
+ +#7'TButton'#10'ComputeBtn'#4'Left'#3#200#1#6'Height'#2#28#3'Top'#3#24#1#5'Wi'
+ +'dth'#2'H'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrd'
+ +'er'#2#11#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#152#1#6'Height'#2#28#3'Top'#3
+ +'@'#1#5'Width'#2'H'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7
+ +#14'ReturnBtnClick'#8'TabOrder'#2#12#0#0#7'TButton'#7'HelpBtn'#3'Tag'#3#131#0
+ +#4'Left'#3'X'#1#6'Height'#2#28#3'Top'#3#240#0#5'Width'#2'Q'#7'Caption'#6#4'H'
+ +'elp'#7'OnClick'#7#12'HelpBtnClick'#8'TabOrder'#2#13#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/loglinscreenunit.pas b/applications/lazstats/source_orig/loglinscreenunit.pas
new file mode 100644
index 000000000..4103ddf83
--- /dev/null
+++ b/applications/lazstats/source_orig/loglinscreenunit.pas
@@ -0,0 +1,1140 @@
+unit LogLinScreenUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, ExtCtrls, Globals, MainUnit, FunctionsLib, OutPutUnit,
+ DataProcs, contexthelpunit;
+
+type
+
+ { TLogLinScreenFrm }
+
+ TLogLinScreenFrm = class(TForm)
+ HelpBtn: TButton;
+ InBtn: TBitBtn;
+ OutBtn: TBitBtn;
+ AllBtn: TBitBtn;
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ MarginsChk: TCheckBox;
+ GenlModelChk: TCheckBox;
+ GroupBox1: TGroupBox;
+ MaxEdit: TEdit;
+ MinEdit: TEdit;
+ Label8: TLabel;
+ Label9: TLabel;
+ VarNoEdit: TEdit;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ Label5: TLabel;
+ Label6: TLabel;
+ Label7: TLabel;
+ Panel1: TPanel;
+ ScrollBar1: TScrollBar;
+ SelectList: TListBox;
+ VarList: TListBox;
+ Step2Btn: TButton;
+ CountVarChk: TCheckBox;
+ Label1: TLabel;
+ procedure AllBtnClick(Sender: TObject);
+ procedure CancelBtnClick(Sender: TObject);
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure HelpBtnClick(Sender: TObject);
+ procedure InBtnClick(Sender: TObject);
+ procedure MaxEditKeyPress(Sender: TObject; var Key: char);
+ procedure MinEditKeyPress(Sender: TObject; var Key: char);
+ procedure OutBtnClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure ReturnBtnClick(Sender: TObject);
+ procedure ScrollBar1Change(Sender: TObject);
+ procedure Step2BtnClick(Sender: TObject);
+ function ArrayPosition(Sender: TObject; NoDims : integer;
+ VAR Data : DblDyneVec;
+ VAR Subscripts : IntDyneVec;
+ VAR DimSize : IntDyneVec) : integer;
+ procedure Marginals(Sender: TObject;
+ NoDims : integer;
+ ArraySize : integer;
+ VAR Indexes : IntDyneMat;
+ VAR Data : DblDyneVec;
+ VAR Margins : IntDyneMat);
+
+ private
+ { private declarations }
+ procedure Screen(VAR NVAR : integer;
+ VAR MP : integer; VAR MM : integer;
+ VAR NTAB : integer; VAR TABLE : DblDyneVec;
+ VAR DIM : IntDyneVec; VAR GSQ : DblDyneVec;
+ VAR DGFR : IntDyneVec; VAR PART : DblDyneMat;
+ VAR MARG : DblDyneMat; VAR DFS : IntDyneMat;
+ VAR IP : IntDyneMat; VAR IM : IntDyneMat;
+ VAR ISET : IntDyneVec; VAR JSET : IntDyneVec;
+ VAR CONFIG : IntDyneMat; VAR FIT : DblDyneVec;
+ VAR SIZE : IntDyneVec; VAR COORD : IntDyneVec;
+ VAR X : DblDyneVec; VAR Y : DblDyneVec;
+ VAR IFAULT : integer);
+
+ procedure CONF(VAR N : integer; VAR M : integer;
+ VAR MP : integer;
+ VAR MM : integer;
+ VAR ISET : IntDyneVec; VAR JSET : IntDyneVec;
+ VAR IP : IntDyneMat; VAR IM : IntDyneMat; VAR NP : integer);
+
+ procedure COMBO(VAR ISET : IntDyneVec;
+ N, M : Integer;
+ VAR LAST : boolean);
+
+ procedure EVAL(VAR IAR : IntDyneMat;
+ NC, NV, IBEG, NVAR, MAX : integer;
+ VAR CONFIG : IntDyneMat;
+ VAR DIM : IntDyneVec; VAR DF : integer);
+
+ procedure RESET(VAR FIT : DblDyneVec; NTAB : Integer;
+ AVG : Double);
+
+ procedure LIKE(VAR GSQ : Double; VAR FIT : DblDyneVec;
+ VAR TABLE : DblDyneVec; NTAB : integer);
+
+ procedure LOGFIT(NVAR, NTAB, NCON : integer;
+ VAR DIM : IntDyneVec;
+ VAR CONFIG : IntDyneMat; VAR TABLE : DblDyneVec;
+ VAR FIT : DblDyneVec; VAR SIZE : IntDyneVec;
+ VAR COORD : IntDyneVec; VAR X : DblDyneVec;
+ VAR Y : DblDyneVec);
+
+ procedure MaxCombos(NoDims : integer; VAR MM : integer; VAR MP : integer);
+
+ public
+ { public declarations }
+ end;
+
+var
+ LogLinScreenFrm: TLogLinScreenFrm;
+ Minimums : IntDyneVec;
+ Maximums : IntDyneVec;
+ Response : BoolDyneVec;
+ Interact : BoolDyneVec;
+ NoDims : integer;
+
+implementation
+
+{ TLogLinScreenFrm }
+
+procedure TLogLinScreenFrm.ResetBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ Panel1.Visible := false;
+ VarList.Clear;
+ SelectList.Clear;
+ VarNoEdit.Text := '1';
+ MaxEdit.Text := '';
+ MinEdit.Text := '';
+ InBtn.Visible := true;
+ OutBtn.Visible := false;
+ NoDims := 0;
+ Minimums := nil;
+ Maximums := nil;
+ Response := nil;
+ Interact := nil;
+ ScrollBar1.Min := 1;
+ ScrollBar1.Max := 1;
+ ScrollBar1.Position := 1;
+ for i := 1 to NoVariables do VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+end;
+
+procedure TLogLinScreenFrm.ReturnBtnClick(Sender: TObject);
+begin
+ Maximums := nil;
+ Minimums := nil;
+ Response := nil;
+ Interact := nil;
+ LogLinScreenFrm.Hide;
+end;
+
+procedure TLogLinScreenFrm.ScrollBar1Change(Sender: TObject);
+begin
+ VarNoEdit.Text := IntToStr(ScrollBar1.Position);
+end;
+
+procedure TLogLinScreenFrm.Step2BtnClick(Sender: TObject);
+begin
+ if CountVarChk.Checked then
+ begin
+ NoDims := NoDims - 1;
+ ScrollBar1.Max := NoDims;
+ end;
+ Panel1.Visible := true;
+ setLength(Maximums,NoDims);
+ SetLength(Minimums,NoDims);
+ SetLength(Response,NoDims);
+ SetLength(Interact,NoDims);
+ MaxEdit.SetFocus;
+end;
+
+procedure TLogLinScreenFrm.InBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ SelectList.Items.Add(VarList.Items.Strings[index]);
+ VarList.Items.Delete(index);
+ OutBtn.Visible := true;
+ NoDims := NoDims + 1;
+ ScrollBar1.Max := NoDims;
+ index := VarList.Items.Count;
+ if index <= 0 then InBtn.Visible := false;
+end;
+
+procedure TLogLinScreenFrm.MaxEditKeyPress(Sender: TObject; var Key: char);
+VAR DimNo : integer;
+begin
+ if ord(Key) = 13 then // return key
+ begin
+ DimNo := StrToInt(VarNoEdit.Text);
+ Maximums[DimNo-1] := StrToInt(MaxEdit.Text);
+ ScrollBar1.SetFocus;
+ end;
+end;
+
+procedure TLogLinScreenFrm.MinEditKeyPress(Sender: TObject; var Key: char);
+VAR DimNo : integer;
+begin
+ if ord(Key) = 13 then // return key
+ begin
+ DimNo := StrToInt(VarNoEdit.Text);
+ Minimums[DimNo-1] := StrToInt(MinEdit.Text);
+ MaxEdit.SetFocus;
+ end;
+end;
+
+procedure TLogLinScreenFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(Self);
+end;
+
+procedure TLogLinScreenFrm.HelpBtnClick(Sender: TObject);
+begin
+ ContextHelpForm.HelpMessage((Sender as TButton).tag);
+end;
+
+procedure TLogLinScreenFrm.CancelBtnClick(Sender: TObject);
+begin
+ Maximums := nil;
+ Minimums := nil;
+ Response := nil;
+ Interact := nil;
+ LogLinScreenFrm.Hide;
+end;
+
+procedure TLogLinScreenFrm.AllBtnClick(Sender: TObject);
+VAR i, count : integer;
+begin
+ count := VarList.Items.Count;
+ for i := 0 to count-1 do
+ SelectList.Items.Add(VarList.Items.Strings[i]);
+ InBtn.Visible := false;
+ OutBtn.Visible := true;
+ NoDims := SelectList.Items.Count;
+ ScrollBar1.Max := NoDims;
+end;
+
+procedure TLogLinScreenFrm.ComputeBtnClick(Sender: TObject);
+var
+ ArraySize : integer;
+ N : integer;
+ index, index2, i, j, k, l, NoVars : integer;
+ count : integer;
+ Data : DblDyneVec;
+ Subscripts : IntDyneVec;
+ DimSize : IntDyneVec;
+ GridPos : IntDyneVec;
+ Labels : StrDyneVec;
+ Margins : IntDyneMat;
+ Expected : DblDyneVec;
+ WorkVec : IntDyneVec;
+ Indexes : IntDyneMat;
+ LogM : DblDyneVec;
+ NSize : IntDyneVec;
+ M : DblDyneMat;
+ astr, HeadStr : string;
+ MaxDim, MP, MM : integer;
+ U, Mu : Double;
+ Chi2, G2 : double;
+ DF : integer;
+ ProbChi2, ProbG2 : double;
+ GSQ : DblDyneVec;
+ DGFR : IntDyneVec;
+ PART : DblDyneMat;
+ MARG : DblDyneMat;
+ DFS : IntDyneMat;
+ IP : IntDyneMat;
+ IM : IntDyneMat;
+ ISET : IntDyneVec;
+ JSET : IntDyneVec;
+ CONFIG : IntDyneMat;
+ FIT : DblDyneVec;
+ SIZE : IntDyneVec;
+ COORD : IntDyneVec;
+ X, Y : DblDyneVec;
+ IFAULT : integer;
+ TABLE : DblDyneVec;
+ DIM : IntDyneVec;
+ HiOrder : integer;
+ response : string;
+begin
+ OutPutFrm.RichEdit.Clear;
+
+ // Allocate space for labels, DimSize and SubScripts
+ NoVars := SelectList.Items.Count;
+ SetLength(Labels,NoVars);
+ SetLength(DimSize,NoDims);
+ SetLength(Subscripts,NoDims);
+ SetLength(GridPos,NoVars);
+
+ // get variable labels and column positions
+ for i := 1 to NoVars do
+ begin
+ astr := SelectList.Items.Strings[i-1];
+ for j := 1 to NoVariables do
+ begin
+ if OS3MainFrm.DataGrid.Cells[j,0] = astr then
+ begin
+ Labels[i-1] := astr;
+ GridPos[i-1] := j;
+ break;
+ end;
+ end;
+ end;
+
+ // Get no. of categories for each dimension (DimSize)
+ MaxDim := 0;
+ ArraySize := 1;
+ for i := 0 to NoDims - 1 do
+ begin
+ DimSize[i] := Maximums[i] - Minimums[i] + 1;
+ if DimSize[i] > MaxDim then MaxDim := DimSize[i];
+ ArraySize := ArraySize * DimSize[i];
+ end;
+
+ // Allocate space for Data and marginals
+ SetLength(WorkVec,MaxDim);
+ SetLength(Data,ArraySize);
+ SetLength(Margins,NoDims,MaxDim);
+ SetLength(Expected,ArraySize);
+ SetLength(Indexes,ArraySize+1,NoDims);
+ SetLength(LogM,ArraySize);
+ SetLength(M,ArraySize,NoDims);
+ SetLength(NSize,NoDims);
+
+ // Initialize data and margins arrays
+ for i := 1 to NoDims do
+ for j := 1 to MaxDim do
+ Margins[i-1,j-1] := 0;
+ for i := 1 to ArraySize do Data[i-1] := 0;
+ N := 0;
+
+ // Read and store frequencies in Data
+ for i := 1 to NoCases do
+ begin
+ if GoodRecord(i, NoVars, GridPos) then // casewise check
+ begin
+ for j := 1 to NoDims do // get cell subscripts
+ begin
+ index := StrToInt(OS3MainFrm.DataGrid.Cells[GridPos[j-1],i]);
+ index := index - Minimums[j-1] + 1;
+ Subscripts[j-1] := index;
+ end;
+
+ index := ArrayPosition(Self, NoDims, Data, Subscripts, DimSize);
+
+ for j := 1 to NoDims do // save subscripts for later use
+ Indexes[index,j-1] := Subscripts[j-1];
+
+ if CountVarChk.Checked then
+ begin
+ k := GridPos[NoVars-1];
+ Data[index] := Data[index] + StrToInt(OS3MainFrm.DataGrid.Cells[k,i]);
+ end
+ else Data[index] := Data[index] + 1;
+ end;
+ end;
+
+ // get total N
+ for i := 1 to ArraySize do N := N + Round(Data[i-1]);
+
+ // Get marginal frequencies
+ Marginals(Self,NoDims,ArraySize,Indexes,Data,Margins);
+
+ // Print Marginal totals if requested
+ if MarginsChk.Checked then
+ begin
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('FILE: '+ OS3MainFrm.FileNameEdit.Text);
+ OutPutFrm.RichEdit.Lines.Add('');
+ for i := 1 to NoDims do
+ begin
+ HeadStr := 'Marginal Totals for ' + Labels[i-1];
+ k := DimSize[i-1];
+ for j := 0 to k-1 do WorkVec[j] := Margins[i-1,j];
+ VecPrint(WorkVec,k,HeadStr);
+ end;
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ astr := Format('Total Frequencies = %d',[N]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ OutPutFrm.ShowModal;
+
+ // Get Expected cell values
+ U := 0.0; // overall mean (mu) of log linear model
+ for i := 1 to ArraySize do // indexes point to each cell
+ begin
+ Expected[i-1] := 1.0;
+ for j := 1 to NoDims do
+ begin
+ k := Indexes[i-1,j-1];
+ Expected[i-1] := Expected[i-1] * (Margins[j-1,k-1] / N);
+ end;
+ Expected[i-1] := Expected[i-1] * N;
+ LogM[i-1] := ln(Expected[i-1]);
+ end;
+ for i := 1 to ArraySize do U := U + LogM[i-1];
+ U := U / ArraySize;
+
+ // print expected values
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('FILE: '+ OS3MainFrm.FileNameEdit.Text);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('EXPECTED CELL VALUES FOR MODEL OF COMPLETE INDEPENDENCE');
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Cell Observed Expected Log Expected');
+ for i := 1 to ArraySize do
+ begin
+ astr := '';
+ for j := 1 to NoDims do astr := astr + format('%3d ',[Indexes[i-1,j-1]]);
+ astr := astr + format('%10.0f %10.2f %10.3f',[Data[i-1],Expected[i-1],LogM[i-1]]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ end;
+ chi2 := 0.0;
+ G2 := 0.0;
+
+ // Calculate chi-squared and G squared statistics
+ for i := 1 to ArraySize do
+ begin
+ chi2 := chi2 + Sqr(Data[i-1] - Expected[i-1]) / Expected[i-1];
+ G2 := G2 + Data[i-1] * ln(Data[i-1] / Expected[i-1]);
+ end;
+ G2 := 2.0 * G2;
+ DF := 1;
+ for i := 1 to NoDims do DF := DF * (DimSize[i-1]-1);
+ ProbChi2 := 1.0 - Chisquaredprob(chi2,DF);
+ ProbG2 := 1.0 - Chisquaredprob(G2,DF);
+ astr := format('Chisquare = %10.3f with probability = %10.3f (DF = %d)',[chi2,ProbChi2,DF]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ astr := format('G squared = %10.3f with probability = %10.3f (DF = %d)',[G2,ProbG2,DF]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ OutPutFrm.RichEdit.Lines.Add('');
+ astr := format('U (mu) for general loglinear model = %10.2f',[U]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.ShowModal;
+
+ // Get log linear model values for each cell
+ // get M's for each cell
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('First Order LogLinear Model Factors and N of Cells in Each');
+ astr := 'CELL ';
+ for i := 1 to NoDims do astr := astr + format(' U%d N Cells ',[i]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ OutPutFrm.RichEdit.Lines.Add('');
+ for i := 1 to ArraySize do // cell
+ begin
+ astr := '';
+ for j := 1 to NoDims do
+ astr := astr + format('%3d ',[Indexes[i-1,j-1]]);
+ for j := 1 to NoDims do // jth mu
+ begin
+ index := Indexes[i-1,j-1]; // sum for this mu
+ count := 0;
+ Mu := 0.0;
+ for k := 1 to ArraySize do
+ begin
+ if index = Indexes[k-1,j-1] then
+ begin
+ count := count + 1;
+ Mu := Mu + LogM[k-1];
+ end;
+ end;
+ Mu := Mu / count - U;
+ astr := astr + format('%10.3f %3d ',[Mu,count]);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ end;
+ OutPutFrm.ShowModal;
+
+ // get second order interactions
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Second Order Loglinear Model Terms and N of Cells in Each');
+ astr := 'CELL ';
+ for i := 1 to NoDims-1 do
+ for j := i + 1 to NoDims do
+ astr := astr + format('U%d%d N Cells ',[i,j]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ OutPutFrm.RichEdit.Lines.Add('');
+ for i := 1 to ArraySize do // cell
+ begin
+ astr := '';
+ for j := 1 to NoDims do
+ astr := astr + format('%3d ',[Indexes[i-1,j-1]]);
+ for j := 1 to NoDims-1 do // jth
+ begin
+ index := Indexes[i-1,j-1]; // sum for this mu using j and k
+ for k := j+1 to NoDims do // with kth
+ begin
+ index2 := Indexes[i-1,k-1];
+ Mu := 0.0;
+ count := 0;
+ for l := 1 to ArraySize do
+ begin
+ if ((index = Indexes[l-1,j-1]) and (index2 = Indexes[l-1,k-1])) then
+ begin
+ Mu := Mu + LogM[l-1];
+ count := count + 1;
+ end;
+ end; // next l
+ Mu := Mu / count - U;
+ astr := astr + format('%10.3f %3d',[Mu,count]);
+ end; // next k (second term subscript)
+ end; // next j (first term subscript)
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ end; // next i
+
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ // get maximum no. of interactions in saturated model
+ MaxCombos(NoDims, MM, MP);
+
+ SetLength(GSQ,NoDims+1);
+ SetLength(DGFR,NoDims+1);
+ SetLength(PART,NoDims+1,MP+1);
+ SetLength(MARG,NoDims+1,MP+1);
+ SetLength(DFS,NoDims+1,MP+1);
+ SetLength(IP,NoDims+1,MP+1);
+ SetLength(IM,NoDims+1,MM+1);
+ SetLength(ISET,NoDims+1);
+ SetLength(JSET,NoDims+1);
+ SetLength(CONFIG,NoDims+1,MP+1);
+ SetLength(FIT,ArraySize+1);
+ SetLength(SIZE,NoDims+1);
+ SetLength(COORD,NoDims+1);
+ SetLength(X,ArraySize+1);
+ SetLength(Y,ArraySize+1);
+ SetLength(TABLE,ArraySize+1);
+ SetLength(DIM,NoDims+1);
+
+ // Load TABLE and DIM one up from Data
+ for i := 1 to ArraySize do Table[i] := Data[i-1];
+ for i := 1 to NoDims do DIM[i] := DimSize[i-1];
+
+ Screen(NoDims,MP,MM,ArraySize,TABLE,DIM,
+ GSQ,DGFR,PART,MARG,DFS,IP,IM,ISET,JSET,CONFIG,FIT,SIZE,
+ COORD,X,Y,IFAULT);
+
+ // show results
+ astr := 'SCREEN FOR INTERACTIONS AMONG THE VARIABLES';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ astr := 'Adapted from the Fortran program by Lustbader and Stodola printed in';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ astr := 'Applied Statistics, Volume 30, Issue 1, 1981, pages 97-105 as Algorithm';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ astr := 'AS 160 Partial and Marginal Association in Multidimensional Contingency Tables';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ OutPutFrm.RichEdit.Lines.Add('');
+ astr := 'Statistics for tests that the interactions of a given order are zero';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ astr := 'ORDER STATISTIC D.F. PROB.';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ for i := 1 to NoDims do
+ begin
+ ProbChi2 := 1.0 - ChiSquaredProb(GSQ[i],DGFR[i]);
+ astr := format('%5d %10.3f %3d %10.3f',[i,GSQ[i],DGFR[i],ProbChi2]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ astr := 'Statistics for Marginal Association Tests';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ astr := 'VARIABLE ASSOC. PART ASSOC. MARGINAL ASSOC. D.F. PROB';
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ for i := 1 to NoDims-1 do
+ begin
+ for j := 1 to MP do
+ begin
+ ProbChi2 := 1.0 - ChiSquaredProb(MARG[i,j],DFS[i,j]);
+ astr := format('%5d %5d %10.3f %10.3f %3d %10.3f',
+ [i,j,Part[i,j],MARG[i,j], DFS[i,j],ProbChi2]);
+ OutPutFrm.RichEdit.Lines.Add(astr);
+ end;
+ end;
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ TABLE := nil;
+ DIM := nil;
+ Y := nil;
+ X := nil;
+ COORD := nil;
+ SIZE := nil;
+ FIT := nil;
+ CONFIG := nil;
+ JSET := nil;
+ ISET := nil;
+ IM := nil;
+ IP := nil;
+ DFS := nil;
+ MARG := nil;
+ PART := nil;
+ DGFR := nil;
+ GSQ := nil;
+ NSize := nil;
+ M := nil;
+ LogM := nil;
+ Indexes := nil;
+ Expected := nil;
+ Margins := nil;
+ Data := nil;
+ WorkVec := nil;
+ GridPos := nil;
+ Subscripts := nil;
+ DimSize := nil;
+ Labels := nil;
+end;
+
+procedure TLogLinScreenFrm.OutBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := SelectList.ItemIndex;
+ if index < 0 then exit;
+ VarList.Items.Add(SelectList.Items.Strings[index]);
+ SelectList.Items.Delete(index);
+ index := SelectList.Items.Count;
+ if index <= 0 then OutBtn.Visible := false;
+ InBtn.Visible := true;
+ NoDims := NoDims - 1;
+ if NoDims > 0 then ScrollBar1.Max := NoDims else ScrollBar1.Max := 1;
+end;
+
+procedure TLogLinScreenFrm.Screen(var NVAR: integer; var MP: integer;
+ var MM: integer; var NTAB: integer; var TABLE: DblDyneVec;
+ var DIM: IntDyneVec; var GSQ: DblDyneVec; var DGFR: IntDyneVec;
+ var PART: DblDyneMat; var MARG: DblDyneMat; var DFS: IntDyneMat;
+ var IP: IntDyneMat; var IM: IntDyneMat; var ISET: IntDyneVec;
+ var JSET: IntDyneVec; var CONFIG: IntDyneMat; var FIT: DblDyneVec;
+ var SIZE: IntDyneVec; var COORD: IntDyneVec; var X: DblDyneVec;
+ var Y: DblDyneVec; var IFAULT: integer);
+Label 160, 170;
+VAR ISZ, MAX, LIM, I, J, NV1, M, M1, ITP, NP, NP1, L3, DF : integer;
+ ZERO, G21, G22, G23, AVG : double;
+
+begin
+// SUBROUTINE SCREEN(NVAR, MP, MM, NTAB, TABLE, DIM, GSQ, DGFR,
+// * PART, MARG, DFS, IP, IM, ISET, JSET, CONFIG, FIT, SIZE,
+// * COORD, X, Y, IFAULT)
+//
+// ALGORITHM AS 160 APPL. STATIST. (1981) VOL.30, NO.1
+//
+// Screen all efects for partial and marginal association.
+//
+// INTEGER NVAR, MP, MM, NTAB, IP(NVAR,MP), IM(NVAR,MM), DGFR(NVAR),
+// * DFS(NVAR,MP), ISET(NVAR), JSET(NVAR), CONFIG(NVAR,MP),
+// * DIM(NVAR), DF, SIZE(NVAR), COORD(NVAR)
+// REAL GSQ(NVAR), PART(NVAR,MP), MARG(NVAR,MP), TABLE(NTAB),
+// * FIT(NTAB), X(NTAB), Y(NTAB), ZERO
+// DATA ZERO /0.0/
+//
+// Check for input errors
+//
+ ZERO := 0.0;
+ IFAULT := 1;
+ IF (NVAR <= 1) then exit;
+ ISZ := 1;
+ for I := 1 to NVAR do
+ begin
+ if (DIM[I] <= 1) then IFAULT := 2;
+ ISZ := ISZ * DIM[i];
+ end;
+ IF (ISZ <> NTAB) then IFAULT := 2;
+ MAX := 1;
+ LIM := NVAR div 2;
+ for I := 1 to LIM do MAX := MAX * (NVAR - I + 1) div I;
+ IF (MP < MAX) then IFAULT := 3;
+ MAX := 1;
+ LIM := (NVAR - 1) div 2;
+ for I := 1 to LIM do MAX := MAX * (NVAR - I) div I;
+ MAX := MAX * NVAR;
+ IF (MM < MAX) then IFAULT := 4;
+ IF (IFAULT > 1) then exit;
+//
+// Fit the no effect model
+//
+ DGFR[NVAR] := NTAB - 1;
+ AVG := ZERO;
+ IFAULT := 5;
+ for I := 1 to NTAB do
+ begin
+ IF (TABLE[I] < ZERO) then exit; //RETURN
+ AVG := AVG + TABLE[I];
+ end;
+ IFAULT := 0;
+ AVG := AVG / NTAB;
+ RESET(FIT, NTAB, AVG);
+ LIKE(GSQ[1], FIT, TABLE, NTAB);
+//
+// Begin fitting effects
+//
+ NV1 := NVAR - 1;
+ for M := 1 to NV1 do
+ begin
+ // DO 200 M = 1, NV1
+ //
+ // Set up the arrays IP and IM
+ //
+ M1 := M;
+ CONF(NVAR, M1, MP, MM, ISET, JSET, IP, IM, NP);
+ //
+ // Fit the saturated model
+ //
+ RESET(FIT, NTAB, AVG);
+ EVAL(IP, NP, M, 1, NVAR, MP, CONFIG, DIM, DGFR[M]);
+ LOGFIT(NVAR, NTAB, NP, DIM, CONFIG, TABLE, FIT, SIZE, COORD, X, Y);
+ LIKE(GSQ[M+1], FIT, TABLE, NTAB);
+ //
+ // Move the first column of IP to the last
+ //
+ for I := 1 to M do
+ begin
+ // DO 150 I = 1, M
+ ITP := IP[I,1];
+ NP1 := NP - 1;
+ for J := 1 to NP1 do IP[I,J] := IP[I,J+1];
+ IP[I,NP] := ITP;
+ end; // 150 CONTINUE
+ L3 := -M + 1;
+ for J := 1 to NP do
+ begin
+ // DO 190 J = 1, NP
+ //
+ // Fit the effects in IP ignoring the last column
+ //
+ RESET(FIT, NTAB, AVG);
+ EVAL(IP, NP-1, M, 1, NVAR, MP, CONFIG, DIM, DF);
+ LOGFIT(NVAR, NTAB, NP-1, DIM, CONFIG, TABLE, FIT, SIZE, COORD, X, Y);
+ LIKE(G21, FIT, TABLE, NTAB);
+ DFS[M,J] := DGFR[M] - DF;
+ PART[M,J] := G21 - GSQ[M+1];
+ //
+ // For M = 1, partials and marginals are equal
+ //
+ IF (M > 1) then GOTO 160;
+ MARG[1,J] := PART[1,J];
+ GOTO 170;
+ //
+ // Fit the last column alone
+ //
+ 160: RESET(FIT, NTAB, AVG);
+ EVAL(IP, 1, M, NP, NVAR, MP, CONFIG, DIM, DF);
+ LOGFIT(NVAR, NTAB, 1, DIM, CONFIG, TABLE, FIT, SIZE,
+ COORD, X, Y);
+ LIKE(G22, FIT, TABLE, NTAB);
+ //
+ // Locate the appropriate columns of IM and fit them
+ //
+ L3 := L3 + M;
+ RESET(FIT, NTAB, AVG);
+ EVAL(IM, M, M-1, L3, NVAR, MM, CONFIG, DIM, DF);
+ LOGFIT(NVAR, NTAB, M, DIM, CONFIG, TABLE, FIT, SIZE,
+ COORD, X, Y);
+ LIKE(G23, FIT, TABLE, NTAB);
+ MARG[M,J] := G23 - G22;
+ //
+ // Move the next effect to be ignored to the last in IP
+ //
+ 170: for I := 1 to M do // DO 180 I = 1, M
+ begin
+ ITP := IP[I,NP];
+ IP[I,NP] := IP[I,J];
+ IP[I,J] := ITP;
+ end;
+ // 180 CONTINUE
+ end; // 190 CONTINUE
+ //
+ DGFR[NVAR] := DGFR[NVAR] - DGFR[M];
+ GSQ[M] := GSQ[M] - GSQ[M+1];
+ end; // 200 CONTINUE
+end;
+
+procedure TLogLinScreenFrm.CONF(var N: integer; var M: integer;
+ var MP: integer; var MM: integer; var ISET: IntDyneVec; var JSET: IntDyneVec;
+ var IP: IntDyneMat; var IM: IntDyneMat; var NP: integer);
+Label 100, 120;
+VAR
+ ILAST, JLAST : boolean;
+ I, L, NM, JS : integer;
+// SUBROUTINE CONF(N, M, MP, MM, ISET, JSET, IP, IM, NP)
+//C
+//C ALGORITHM AS 160.1 APPL. STATIST. (1981) VOL.30, NO.1
+//C
+//C Set up the arrays IP and IM for a given N and M. Essentially
+//C IP contains all possible combinations of (N choose M). For each
+//C combination found IM contains all combinations of degree M-1.
+//C
+// INTEGER ISET(N), JSET(N), IP(N,MP), IM(N,MM)
+// LOGICAL ILAST, JLAST
+//C
+
+begin
+ ILAST := TRUE;
+ NP := 0;
+ NM := 0;
+ //
+ // Get IP
+ //
+ 100:
+ COMBO(ISET, N, M, ILAST);
+ IF (ILAST) then exit;
+ NP := NP + 1;
+ for I := 1 to M do IP[I,NP] := ISET[I];
+ IF (M = 1) then GOTO 100;
+//
+// Get IM
+//
+ JLAST := TRUE;
+ L := M - 1;
+ 120:
+ COMBO(JSET, M, L, JLAST);
+ IF (JLAST) then GOTO 100;
+ NM := NM + 1;
+ for I := 1 to L do // DO 130 I = 1, L
+ begin
+ JS := JSET[I];
+ IM[I,NM] := ISET[JS];
+ end; // 130 CONTINUE
+ GOTO 120;
+end;
+
+procedure TLogLinScreenFrm.COMBO(var ISET: IntDyneVec; N, M: Integer;
+ var LAST: boolean);
+label 100, 110, 130, 150;
+VAR
+ I, K, L : integer;
+
+// SUBROUTINE COMBO(ISET, N, M, LAST)
+//
+// ALGORITHM AS 160.2 APPL. STATIST. (1981) VOL.30, NO.1
+//
+// Subroutine to generate all possible combinations of M of the
+// integers from 1 to N in a stepwise fashion. Prior to the first
+// call, LAST should be set to .FALSE. Thereafter, as long as LAST
+// is returned .FALSE., a new valid combination has been generated.
+// When LAST goes .TRUE., there are no more combinations.
+//
+// LOGICAL LAST
+// INTEGER N, M, ISET(M)
+//
+
+begin
+ IF (LAST) then GOTO 110;
+//
+// Get next element to increment
+//
+ K := M;
+100: L := ISET[K] + 1;
+ IF (L + M - K <= N) then GOTO 150;
+ K := K - 1;
+//
+// See if we are done
+//
+ IF (K <= 0) then GOTO 130;
+ GOTO 100;
+//
+// Initialize first combination
+//
+110: for I := 1 to M do ISET[I] := I;
+130: LAST := NOT LAST;
+ exit;
+//
+// Fill in remainder of combination.
+//
+150: for I := K to M do //DO 160 I = K, M
+ begin
+ ISET[I] := L;
+ L := L + 1;
+ end; //160 CONTINUE
+end;
+
+procedure TLogLinScreenFrm.EVAL(var IAR: IntDyneMat; NC, NV, IBEG, NVAR,
+ MAX: integer; var CONFIG: IntDyneMat; var DIM: IntDyneVec; var DF: integer);
+VAR I, J, K, KK, L : integer;
+// SUBROUTINE EVAL(IAR, NC, NV, IBEG, NVAR, MAX, CONFIG, DIM, DF)
+//
+// ALGORITHM AS 160.3 APPL. STATIST. (1981) VOL.30, NO.1
+//
+// IAR = array containing the effects to be fitted
+// NC = number of columns of IAR to be used
+// NV = number of variables in each effect
+// IBEG = gebinning column
+// DF = degrees of freedom
+//
+// CONFIG is in a format compatible with algorithm AS 51
+//
+// INTEGER IAR(NVAR,MAX), CONFIG(NVAR,NC), DIM(NVAR), DF
+//
+begin
+ DF := 0;
+ for J := 1 to NC do //DO 110 J = 1, NC
+ begin
+ KK := 1;
+ for I := 1 to NV do //DO 100 I = 1, NV
+ begin
+ L := IBEG + J - 1;
+ K := IAR[I,L];
+ KK := KK * (DIM[K] - 1);
+ CONFIG[I,J] := K;
+ end; // 100 CONTINUE
+ CONFIG[NV+1,J] := 0;
+ DF := DF + KK;
+ end; // 110 CONTINUE
+end;
+
+procedure TLogLinScreenFrm.RESET(var FIT: DblDyneVec; NTAB: Integer; AVG: Double
+ );
+VAR I : integer;
+
+begin
+//
+// SUBROUTINE RESET(FIT, NTAB, AVG)
+//
+// ALGORITHM AS 160.4 APPL. STATIST. (1981) VOL.30, NO.1
+//
+// Initialize the fitted values to the average entry
+//
+// REAL FIT(NTAB)
+//
+ for I := 1 to NTAB do //DO 100 I = 1, NTAB
+ begin
+ FIT[I] := AVG;
+ end; // 100 CONTINUE
+end;
+
+procedure TLogLinScreenFrm.LIKE(var GSQ: Double; var FIT: DblDyneVec;
+ var TABLE: DblDyneVec; NTAB: integer);
+VAR I : integer;
+ ZERO, TWO : Double;
+
+begin
+ ZERO := 0.0;
+ TWO := 2.0;
+// SUBROUTINE LIKE(GSQ, FIT, TABLE, NTAB)
+//
+// ALGORITHM AS 160.5 APPL. STATIST. (1981) VOL.30, NO.1
+//
+// Compute the likelihood-ration chi-square
+//
+// REAL FIT(NTAB), TABLE(NTAB), ZERO, TWO
+// DATA ZERO /0.0/, TWO /2.0/
+//
+ GSQ := ZERO;
+ for I := 1 to NTAB do //DO 100 I = 1, NTAB
+ begin
+ IF (FIT[I] = ZERO) OR (TABLE[I] = ZERO) then continue; // GO TO 100
+ GSQ := GSQ + TABLE[I] * Ln(TABLE[I] / FIT[I]);
+ end; // 100 CONTINUE
+ GSQ := TWO * GSQ;
+end;
+
+procedure TLogLinScreenFrm.LOGFIT(NVAR, NTAB, NCON: integer;
+ var DIM: IntDyneVec; var CONFIG: IntDyneMat; var TABLE: DblDyneVec;
+ var FIT: DblDyneVec; var SIZE: IntDyneVec; var COORD: IntDyneVec;
+ var X: DblDyneVec; var Y: DblDyneVec);
+LABEL 110, 130, 150, 170, 180, 200;
+VAR
+ II, K, KK, L, N, J, I : integer;
+ OPTION : boolean;
+ MAXDEV, ZERO, XMAX, E : double;
+ MAXIT, NV1, ISZ : integer;
+
+begin
+// SUBROUTINE LOGFIT(NVAR, NTAB, NCON, DIM, CONFIG, TABLE, FIT, SIZE,
+// * COORD, X, Y)
+//
+// ALGORITHM AS 160.6 APPL. STATIST. (1981) VOL.30, NO.1
+//
+// Iterative proportional fitting of the marginals of a contingency
+// table. Relevant code from AS 51 is used.
+//
+// REAL TABLE(NTAB), FIT(NTAB), MAXDEV, X(NTAB), Y(NTAB), ZERO
+// INTEGER CONFIG(NVAR,NCON), DIM(NVAR), SIZE(NVAR), COORD(NVAR)
+// LOGICAL OPTION
+// DATA MAXDEV /0.25/, MAXIT /25/, ZERO /0.0/
+
+ MAXDEV := 0.25;
+ ZERO := 0.0;
+ MAXIT := 25;
+ for KK := 1 to MAXIT do //DO 230 KK = 1, MAXIT
+ begin
+ //
+ // XMAX is the maximum deviation between fitted and true marginal
+ //
+ XMAX := ZERO;
+ for II := 1 to NCON do //DO 220 II = 1, NCON
+ begin
+ OPTION := TRUE;
+ //
+ // Initialize arrays
+ //
+ SIZE[1] := 1;
+ NV1 := NVAR - 1;
+ for K := 1 to NV1 do //DO 100 K = 1, NV1
+ begin
+ L := CONFIG[K,II];
+ IF (L = 0) then GOTO 110;
+ SIZE[K+1] := SIZE[K] * DIM[L];
+ end; // 100 CONTINUE
+ K := NVAR;
+ 110: N := K - 1;
+ ISZ := SIZE[K];
+ for J := 1 to ISZ do //DO 120 J = 1, ISZ
+ begin
+ X[J] := ZERO;
+ Y[J] := ZERO;
+ end; // 120 CONTINUE
+ //
+ // Initialize co-ordinates
+ //
+ 130: for K := 1 to NVAR do COORD[K] := 0;
+ //
+ // Find locations in tables
+ //
+ I := 1;
+ 150: J := 1;
+ for K := 1 to N do //DO 160 K = 1, N
+ begin
+ L := CONFIG[K,II];
+ J := J + COORD[L] * SIZE[K];
+ end; //160 CONTINUE
+ IF (NOT OPTION) then GOTO 170;
+ //
+ // Compute marginals
+ //
+ X[J] := X[J] + TABLE[I];
+ Y[J] := Y[J] + FIT[I];
+ GOTO 180;
+ //
+ // Make adjustments
+ //
+ 170: IF (Y[J] <= ZERO) then FIT[I] := ZERO;
+ IF (Y[J] > ZERO) then FIT[I] := FIT[I] * X[J] / Y[J];
+ //
+ // Update co-ordinates
+ //
+ 180: I := I + 1;
+ for K := 1 to NVAR do //DO 190 K = 1, NVAR
+ begin
+ COORD[K] := COORD[K] + 1;
+ IF (COORD[K] < DIM[K]) then GOTO 150;
+ COORD[K] := 0;
+ end; //190 CONTINUE
+ IF (NOT OPTION) then GOTO 200;
+ OPTION := FALSE;
+ GOTO 130;
+ //
+ // Find the largest deviation
+ //
+ 200: for I := 1 to ISZ do //DO 210 I = 1, ISZ
+ begin
+ E := ABS(X[I] - Y[I]);
+ IF (E > XMAX) then XMAX := E;
+ end; // 210 CONTINUE
+ end; // 220 CONTINUE
+ //
+ // Test convergence
+ //
+ IF (XMAX < MAXDEV) then exit;
+ end; // 230 CONTINUE
+end;
+
+procedure TLogLinScreenFrm.MaxCombos(NoDims: integer; var MM: integer;
+ var MP: integer);
+var
+ combos : integer;
+ i,j : integer;
+
+begin
+ MM := 0;
+ MP := 0;
+ for i := 1 to NoDims do
+ begin
+ combos := 1;
+ // get numerator factorial products down to i
+ for j := NoDims downto i + 1 do
+ combos := combos * j;
+ // divide by factorial of NoDims - i;
+ for j := (NoDims - i) downto 2 do
+ combos := combos div j;
+ if combos > MP then MP := combos;
+ if i * combos > MM then MM := i * combos;
+ end;
+end;
+
+function TLogLinScreenFrm.ArrayPosition(Sender: TObject; NoDims : integer;
+ VAR Data : DblDyneVec;
+ VAR Subscripts : IntDyneVec;
+ VAR DimSize : IntDyneVec) : integer;
+
+var
+ Pos : integer;
+ i, j : integer;
+ PriorSizes : IntDyneVec;
+
+begin
+ // allocate space for PriorSizes
+ SetLength(PriorSizes,NoDims);
+ // calculate PriorSizes values
+ for i := 0 to NoDims - 2 do PriorSizes[i] := 1; // initialize
+ for i := NoDims - 2 downto 0 do
+ for j := 0 to i do PriorSizes[i] := PriorSizes[i] * DimSize[j];
+ Pos := Subscripts[0] - 1;
+ for i := 0 to NoDims - 2 do
+ Pos := Pos + (PriorSizes[i] * (Subscripts[i+1]-1));
+ Result := Pos;
+ PriorSizes := nil;
+end;
+
+procedure TLogLinScreenFrm.Marginals(Sender: TObject; NoDims: integer;
+ ArraySize: integer; var Indexes: IntDyneMat; var Data: DblDyneVec;
+ var Margins: IntDyneMat);
+var i, j, category : integer;
+
+begin
+ for i := 1 to ArraySize do
+ begin
+ for j := 1 to NoDims do
+ begin
+ category := Indexes[i-1,j-1];
+ Margins[j-1,category-1] := Margins[j-1,category-1] + Round(Data[i-1]);
+ end;
+ end;
+end;
+
+initialization
+ {$I loglinscreenunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/logregunit.lfm b/applications/lazstats/source_orig/logregunit.lfm
new file mode 100644
index 000000000..a7cec9edd
--- /dev/null
+++ b/applications/lazstats/source_orig/logregunit.lfm
@@ -0,0 +1,326 @@
+object LogRegFrm: TLogRegFrm
+ Left = 179
+ Height = 352
+ Top = 102
+ Width = 536
+ Caption = 'Binary Logistic Regression'
+ ClientHeight = 352
+ ClientWidth = 536
+ OnShow = FormShow
+ LCLVersion = '0.9.28.2'
+ object Label1: TLabel
+ Left = 7
+ Height = 14
+ Top = 0
+ Width = 90
+ Caption = 'Available Variables'
+ ParentColor = False
+ end
+ object Label2: TLabel
+ Left = 225
+ Height = 14
+ Top = 15
+ Width = 95
+ Caption = 'Dependent Variable'
+ ParentColor = False
+ end
+ object Label3: TLabel
+ Left = 224
+ Height = 14
+ Top = 97
+ Width = 109
+ Caption = 'Independent Variables'
+ ParentColor = False
+ end
+ object Label4: TLabel
+ Left = 378
+ Height = 14
+ Top = 129
+ Width = 95
+ Caption = 'Maximum Iterations'
+ ParentColor = False
+ end
+ object VarList: TListBox
+ Left = 7
+ Height = 316
+ Top = 16
+ Width = 169
+ ItemHeight = 0
+ MultiSelect = True
+ TabOrder = 0
+ end
+ object DepInBtn: TBitBtn
+ Left = 184
+ Height = 28
+ Top = 23
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DepInBtnClick
+ TabOrder = 1
+ end
+ object DepOutBtn: TBitBtn
+ Left = 184
+ Height = 28
+ Top = 56
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DepOutBtnClick
+ TabOrder = 2
+ end
+ object InBtn: TBitBtn
+ Left = 184
+ Height = 28
+ Top = 112
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = InBtnClick
+ TabOrder = 3
+ end
+ object OutBtn: TBitBtn
+ Left = 184
+ Height = 28
+ Top = 144
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = OutBtnClick
+ TabOrder = 4
+ end
+ object DepVar: TEdit
+ Left = 224
+ Height = 21
+ Top = 32
+ Width = 142
+ TabOrder = 5
+ Text = 'DepVar'
+ end
+ object BlockList: TListBox
+ Left = 224
+ Height = 217
+ Top = 115
+ Width = 144
+ ItemHeight = 0
+ TabOrder = 6
+ end
+ object GroupBox1: TGroupBox
+ Left = 378
+ Height = 107
+ Top = 7
+ Width = 145
+ Caption = 'Options'
+ ClientHeight = 89
+ ClientWidth = 141
+ TabOrder = 7
+ object DescChk: TCheckBox
+ Left = 8
+ Height = 17
+ Top = 5
+ Width = 119
+ Caption = 'Descriptive Statistics'
+ TabOrder = 0
+ end
+ object ProbsChk: TCheckBox
+ Left = 8
+ Height = 17
+ Top = 31
+ Width = 86
+ Caption = 'Y Probabilities'
+ TabOrder = 1
+ end
+ object ItersChk: TCheckBox
+ Left = 8
+ Height = 17
+ Top = 57
+ Width = 96
+ Caption = 'Show Iterations'
+ TabOrder = 2
+ end
+ end
+ object MaxItsEdit: TEdit
+ Left = 485
+ Height = 21
+ Top = 121
+ Width = 38
+ TabOrder = 8
+ Text = 'MaxItsEdit'
+ end
+ object ResetBtn: TButton
+ Left = 417
+ Height = 29
+ Top = 152
+ Width = 68
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 9
+ end
+ object CancelBtn: TButton
+ Left = 417
+ Height = 29
+ Top = 200
+ Width = 68
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 10
+ end
+ object ComputeBtn: TButton
+ Left = 417
+ Height = 29
+ Top = 248
+ Width = 68
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 11
+ end
+ object ReturnBtn: TButton
+ Left = 417
+ Height = 29
+ Top = 296
+ Width = 68
+ Caption = 'Return'
+ ModalResult = 1
+ TabOrder = 12
+ end
+end
diff --git a/applications/lazstats/source_orig/logregunit.lrs b/applications/lazstats/source_orig/logregunit.lrs
new file mode 100644
index 000000000..9049bc472
--- /dev/null
+++ b/applications/lazstats/source_orig/logregunit.lrs
@@ -0,0 +1,241 @@
+LazarusResources.Add('TLogRegFrm','FORMDATA',[
+ 'TPF0'#10'TLogRegFrm'#9'LogRegFrm'#4'Left'#3#179#0#6'Height'#3'`'#1#3'Top'#2
+ +'f'#5'Width'#3#24#2#7'Caption'#6#26'Binary Logistic Regression'#12'ClientHei'
+ +'ght'#3'`'#1#11'ClientWidth'#3#24#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6
+ +#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2#14#3'Top'#2#0#5'W'
+ +'idth'#2'Z'#7'Caption'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLa'
+ +'bel'#6'Label2'#4'Left'#3#225#0#6'Height'#2#14#3'Top'#2#15#5'Width'#2'_'#7'C'
+ +'aption'#6#18'Dependent Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4
+ +'Left'#3#224#0#6'Height'#2#14#3'Top'#2'a'#5'Width'#2'm'#7'Caption'#6#21'Inde'
+ +'pendent Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3'z'#1
+ +#6'Height'#2#14#3'Top'#3#129#0#5'Width'#2'_'#7'Caption'#6#18'Maximum Iterati'
+ +'ons'#11'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#7#6'Height'#3'<'
+ +#1#3'Top'#2#16#5'Width'#3#169#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'TabOr'
+ +'der'#2#0#0#0#7'TBitBtn'#8'DepInBtn'#4'Left'#3#184#0#6'Height'#2#28#3'Top'#2
+ +#23#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0
+ +#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0
+ +#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%'
+ +'i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'
+ +#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'
+ +#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'
+ +#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255
+ +#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152
+ +#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193
+ +#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'
+ +#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255
+ +#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139
+ +#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255
+ +#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'
+ +#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'
+ +#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'
+ +#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'
+ +#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7
+ +'OnClick'#7#13'DepInBtnClick'#8'TabOrder'#2#1#0#0#7'TBitBtn'#9'DepOutBtn'#4
+ ,'Left'#3#184#0#6'Height'#2#28#3'Top'#2'8'#5'Width'#2' '#10'Glyph.Data'#10':'
+ +#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '
+ +#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255
+ +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213
+ +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135
+ +#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'
+ +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138
+ +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207
+ +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'
+ +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'
+ +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14'DepOutBtnClick'
+ +#8'TabOrder'#2#2#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#184#0#6'Height'#2#28#3'To'
+ +'p'#2'p'#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0
+ +'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0
+ +#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ ,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'
+ +#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'
+ +#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195
+ +'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144
+ +#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255
+ +'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255
+ +#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212
+ +#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133
+ +#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255
+ +#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255
+ +']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145
+ +'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp'
+ +'hs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6'OutBtn'
+ +#4'Left'#3#184#0#6'Height'#2#28#3'Top'#3#144#0#5'Width'#2' '#10'Glyph.Data'
+ +#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0
+ +#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'
+ +#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255
+ +#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213
+ +#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135
+ ,#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'
+ +#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201#127#204#138
+ +#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207
+ +#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'
+ +#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'
+ +#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'
+ +#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+ +#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'OutBtnClick'#8
+ +'TabOrder'#2#4#0#0#5'TEdit'#6'DepVar'#4'Left'#3#224#0#6'Height'#2#21#3'Top'#2
+ +' '#5'Width'#3#142#0#8'TabOrder'#2#5#4'Text'#6#6'DepVar'#0#0#8'TListBox'#9'B'
+ +'lockList'#4'Left'#3#224#0#6'Height'#3#217#0#3'Top'#2's'#5'Width'#3#144#0#10
+ +'ItemHeight'#2#0#8'TabOrder'#2#6#0#0#9'TGroupBox'#9'GroupBox1'#4'Left'#3'z'#1
+ +#6'Height'#2'k'#3'Top'#2#7#5'Width'#3#145#0#7'Caption'#6#7'Options'#12'Clien'
+ +'tHeight'#2'Y'#11'ClientWidth'#3#141#0#8'TabOrder'#2#7#0#9'TCheckBox'#7'Desc'
+ +'Chk'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#5#5'Width'#2'w'#7'Caption'#6#22'De'
+ +'scriptive Statistics'#8'TabOrder'#2#0#0#0#9'TCheckBox'#8'ProbsChk'#4'Left'#2
+ +#8#6'Height'#2#17#3'Top'#2#31#5'Width'#2'V'#7'Caption'#6#15'Y Probabilities'
+ +#8'TabOrder'#2#1#0#0#9'TCheckBox'#8'ItersChk'#4'Left'#2#8#6'Height'#2#17#3'T'
+ +'op'#2'9'#5'Width'#2'`'#7'Caption'#6#15'Show Iterations'#8'TabOrder'#2#2#0#0
+ +#0#5'TEdit'#10'MaxItsEdit'#4'Left'#3#229#1#6'Height'#2#21#3'Top'#2'y'#5'Widt'
+ +'h'#2'&'#8'TabOrder'#2#8#4'Text'#6#10'MaxItsEdit'#0#0#7'TButton'#8'ResetBtn'
+ +#4'Left'#3#161#1#6'Height'#2#29#3'Top'#3#152#0#5'Width'#2'D'#7'Caption'#6#5
+ +'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#9#0#0#7'TButton'#9'Canc'
+ +'elBtn'#4'Left'#3#161#1#6'Height'#2#29#3'Top'#3#200#0#5'Width'#2'D'#7'Captio'
+ +'n'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#10#0#0#7'TButton'#10'Compu'
+ +'teBtn'#4'Left'#3#161#1#6'Height'#2#29#3'Top'#3#248#0#5'Width'#2'D'#7'Captio'
+ +'n'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#11#0#0#7'TBu'
+ +'tton'#9'ReturnBtn'#4'Left'#3#161#1#6'Height'#2#29#3'Top'#3'('#1#5'Width'#2
+ +'D'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#12#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/logregunit.pas b/applications/lazstats/source_orig/logregunit.pas
new file mode 100644
index 000000000..8a34bb364
--- /dev/null
+++ b/applications/lazstats/source_orig/logregunit.pas
@@ -0,0 +1,534 @@
+unit LogRegUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, Globals, MainUnit, MatrixLib, OutPutUnit, FunctionsLib;
+
+type
+
+ { TLogRegFrm }
+
+ TLogRegFrm = class(TForm)
+ ResetBtn: TButton;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ ReturnBtn: TButton;
+ DepInBtn: TBitBtn;
+ DepOutBtn: TBitBtn;
+ MaxItsEdit: TEdit;
+ InBtn: TBitBtn;
+ Label4: TLabel;
+ OutBtn: TBitBtn;
+ DescChk: TCheckBox;
+ ProbsChk: TCheckBox;
+ ItersChk: TCheckBox;
+ DepVar: TEdit;
+ GroupBox1: TGroupBox;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ BlockList: TListBox;
+ VarList: TListBox;
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure DepInBtnClick(Sender: TObject);
+ procedure DepOutBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure InBtnClick(Sender: TObject);
+ procedure OutBtnClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ function ChiSq(x : double; n : integer) : double;
+ function Norm(z : double): double;
+ function ix(j, k, nCols : integer): integer;
+
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ LogRegFrm: TLogRegFrm;
+
+implementation
+
+{ TLogRegFrm }
+
+procedure TLogRegFrm.ResetBtnClick(Sender: TObject);
+VAR i : integer;
+begin
+ BlockList.Clear;
+ VarList.Clear;
+ for i := 1 to NoVariables do
+ begin
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+ end;
+ InBtn.Enabled := true;
+ OutBtn.Enabled := false;
+ DepInBtn.Enabled := true;
+ DepOutBtn.Enabled := false;
+ ProbsChk.Checked := true;
+ DescChk.Checked := true;
+ DepVar.Text := '';
+ MaxItsEdit.Text := '20';
+end;
+
+procedure TLogRegFrm.InBtnClick(Sender: TObject);
+VAR i, index : integer;
+begin
+ index := VarList.Items.Count;
+ i := 0;
+ while i < index do
+ begin
+ if (VarList.Selected[i]) then
+ begin
+ BlockList.Items.Add(VarList.Items.Strings[i]);
+ VarList.Items.Delete(i);
+ index := index - 1;
+ i := 0;
+ end
+ else i := i + 1;
+ end;
+ OutBtn.Enabled := true;
+end;
+
+procedure TLogRegFrm.DepInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ DepVar.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ DepOutBtn.Enabled := true;
+ DepInBtn.Enabled := false;
+end;
+
+procedure TLogRegFrm.ComputeBtnClick(Sender: TObject);
+Label CleanUp;
+var
+ i, j, k, l : integer;
+ title : string;
+ cellstring : string;
+ outline : string;
+ nR : integer; // no. independent variables
+ ColNoSelected : IntDyneVec;
+ nC : integer; // no. cases
+ nP : integer; // total no. variables
+ RowLabels, ColLabels : StrDyneVec;
+ nP1 : integer; // total no. variables plus 1
+ sY0, sY1 : integer; // sum of cases with dependent of 0 or 1
+ sC : integer; // total count of cases with 0 or 1
+ X : DblDyneVec; // data matrix for independent variables
+ Y0, Y1 : DblDyneVec; // data array for dependent data
+ xM : DblDyneVec; // variable means
+ xSD : DblDyneVec; // variable standard deviations
+ Par : DblDyneVec; // work array
+ SEP : DblDyneVec; // work array;
+ Arr : DblDyneVec; // work array;
+ indx, indx2, indx3 : integer; // indexes for arrays
+ value : double;
+ LLp, LL, LLn : double; // log likelihood
+ v, q : double; // work values
+ xij, s : double; // work value
+ CSq : double; // chi square statistic
+ prob : double; // probability of chi square
+ ORc, OR1, ORh : double; // Odds ratio values
+ iters : integer;
+ Table : array[1..3,1..3] of integer;
+ row, col : integer;
+begin
+ OutPutFrm.RichEdit.Clear;
+// OutPutFrm.RichEdit.ParaGraph.Alignment := taLeftJustify;
+ OutPutFrm.RichEdit.Lines.Add('Logistic Regression Adapted from John C. Pezzullo');
+ OutPutFrm.RichEdit.Lines.Add('Java program at http://members.aol.com/johnp71/logistic.html');
+
+ { get independent item columns }
+ nR := BlockList.Items.Count;
+ nC := NoCases;
+ SetLength(ColNoSelected,nR + 2);
+ SetLength(RowLabels,nR + 2);
+ SetLength(ColLabels,nR + 2);
+ if nR < 1 then
+ begin
+ ShowMessage('ERROR! No independent variables selected.');
+ goto CleanUp;
+ end;
+
+ for i := 1 to nR do
+ begin
+ cellstring := BlockList.Items.Strings[i-1];
+ for j := 1 to NoVariables do
+ begin
+ if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then
+ begin
+ ColNoSelected[i] := j;
+ RowLabels[i] := cellstring;
+ ColLabels[i] := cellstring;
+ end;
+ end;
+ end;
+
+ { get dependendent variable column }
+ if DepVar.Text = '' then
+ begin
+ ShowMessage('ERROR! No Dependent variable selected.');
+ goto CleanUp;
+ end;
+ nP := nR + 1;
+ nP1 := nP + 1;
+ for j := 1 to NoVariables do
+ begin
+ if DepVar.Text = OS3MainFrm.DataGrid.Cells[j,0] then
+ begin
+ ColNoSelected[nP] := j;
+ RowLabels[nP] := OS3MainFrm.DataGrid.Cells[j,0];
+ ColLabels[nP] := RowLabels[nP];
+ end;
+ end;
+
+ sY0 := 0;
+ sY1 := 0;
+ sC := 0;
+ SetLength(X,(nC + 1) * (nR + 1));
+ SetLength(Y0,nC + 1);
+ SetLength(Y1,nC + 1);
+ SetLength(xM,nR + 2);
+ SetLength(xSD,nR + 2);
+ SetLength(Par,nP + 1);
+ SetLength(SEP,nP + 1);
+ SetLength(Arr,(nP + 1) * (nP1 + 1));
+
+ // get data
+ for i := 0 to nC - 1 do
+ begin
+ indx := ix(i,0,nR+1);
+ X[indx] := 1;
+ for j := 1 to nR do
+ begin
+ indx := ColNoSelected[j];
+ value := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[indx,i+1]));
+ indx := ix(i,j,nR + 1);
+ X[indx] := value;
+ end;
+ indx := ColNoSelected[nP];
+ value := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[indx,i+1]));
+ if value = 0 then
+ begin
+ Y0[i] := 1;
+ sY0 := sY0 + 1;
+ end
+ else begin
+ Y1[i] := 1;
+ sY1 := sY1 + 1;
+ end;
+ sC := sC + round(Y0[i] + Y1[i]);
+ for j := 1 to nR do
+ begin
+ indx := ix(i,j,nR + 1);
+ value := X[indx];
+ xM[j] := xM[j] + (Y0[i] + Y1[i]) * value;
+ xSD[j] := xSD[j] + (Y0[i] + Y1[i]) * value * value;
+ end;
+ end; // next case i
+
+ // print descriptive statistics
+ OutPutFrm.RichEdit.Lines.Add('');
+ if DescChk.Checked then
+ OutPutFrm.RichEdit.Lines.Add('Descriptive Statistics');
+ outline := format('%d cases have Y=0; %d cases have Y=1.',[sY0,sY1]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('Variable Label Average Std.Dev.');
+ for j := 1 to nR do
+ begin
+ xM[j] := xM[j] / sC;
+ xSD[j] :=xSD[j] / sC;
+ xSD[j] := sqrt( abs(xSD[j] - xM[j] * xM[j]));
+ if DescChk.Checked then
+ begin
+ outline := format(' %3d %15s %10.4f %10.4f',[j,RowLabels[j],xM[j],xSD[j]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ end;
+ OutPutFrm.RichEdit.Lines.Add('');
+ xM[0] := 0.0;
+ xSD[0] := 1.0;
+ OutPutFrm.ShowModal;
+
+ // convert independent variable values to z scores
+ for i := 0 to nC - 1 do
+ begin
+ for j := 1 to nR do
+ begin
+ indx := ix(i,j,nR + 1);
+ X[indx] := (X[indx] - xM[j]) / xSD[j];
+ end;
+ end;
+
+ // begin iterations
+ iters := 0;
+ if ItersChk.Checked then
+ OutPutFrm.RichEdit.Lines.Add('Iteration History');
+ Par[0] := ln(sY1 / sY0);
+ for j := 1 to nR do Par[j] := 0.0;
+ LLp := 2e10;
+ LL := 1e10;
+ while abs(LLp-LL) > 0.00001 do
+ begin
+ iters := iters + 1;
+ if iters > StrToInt(MaxItsEdit.Text) then break;
+ LLp := LL;
+ LL := 0.0;
+ for j := 0 to nR do
+ begin
+ for k := j to nR + 1 do
+ begin
+ indx := ix(j,k,nR+2);
+ Arr[indx] := 0.0;
+ end;
+ end;
+ for i := 0 to nC - 1 do
+ begin
+ value := Par[0];
+ for j := 1 to nR do
+ begin
+ indx := ix(i,j,nR + 1);
+ value := value + Par[j] * X[indx];
+ end;
+ value := 1.0 / (1.0 + exp(-value));
+ q := value * (1.0 - value);
+ LL := LL - 2.0 * Y1[i] * ln(value) - 2.0 * Y0[i] * ln(1.0 - value);
+ for j := 0 to nR do
+ begin
+ indx := ix(i,j,nR + 1);
+ xij := X[indx];
+ indx := ix(j,nR + 1, nR + 2);
+ Arr[indx] := Arr[indx] + xij * ( Y1[i] * (1.0 - value) + Y0[i] * (-value));
+ for k := j to nR do
+ begin
+ indx := ix(j,k,nR + 2);
+ indx2 := ix(i,k,nR + 1);
+ Arr[indx] := Arr[indx] + xij * X[indx2] * q * (Y0[i] + Y1[i]);
+ end;
+ end; // next j
+ end; // next i
+ outline := format('-2 Log Likelihood = %10.4f ',[LL]);
+ if LLp = 1.0e10 then
+ begin
+ LLn := LL;
+ outline := outline + ' (Null Model)';
+ end;
+ if ItersChk.Checked then OutPutFrm.RichEdit.Lines.Add(outline);
+ for j := 1 to nR do
+ begin
+ for k := 0 to j-1 do
+ begin
+ indx := ix(j,k,nR + 2);
+ indx2 := ix(k,j,nR + 2);
+ Arr[indx] := Arr[indx2];
+ end;
+ end;
+ for i := 0 to nR do
+ begin
+ indx := ix(i,i,nR + 2);
+ s := Arr[indx];
+ Arr[indx] := 1.0;
+ for k := 0 to nR + 1 do
+ begin
+ indx := ix(i,k,nR + 2);
+ Arr[indx] := Arr[indx] / s;
+ end;
+ for j := 0 to nR do
+ begin
+ if i <> j then
+ begin
+ indx := ix(j,i,nR + 2);
+ s := Arr[indx];
+ Arr[indx] := 0.0;
+ for k := 0 to nR + 1 do
+ begin
+ indx2 := ix(j,k,nR + 2);
+ indx3 := ix(i,k,nR + 2);
+ Arr[indx2] := Arr[indx2] - s * Arr[indx3];
+ end; // next k
+ end; // if i not equal j
+ end; // next j
+ end; // next i
+ for j := 0 to nR do
+ begin
+ indx := ix(j,nR + 1,nR + 2);
+ Par[j] := Par[j] + Arr[indx];
+ end;
+ end; // iteration
+ OutPutFrm.RichEdit.Lines.Add('Converged');
+ OutPutFrm.ShowModal;
+
+ OutPutFrm.RichEdit.Lines.Add('');
+ CSq := LLn - LL;
+ prob := ChiSq(CSq,nR);
+ outline := format('Overall Model Fit... Chi Square = %8.4f with df = %3d and prob. = %8.4f',
+ [Csq, nR, prob]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Coefficients and Standard Errors...');
+ OutPutFrm.RichEdit.Lines.Add('Variable Label Coeff. StdErr p');
+ for j := 1 to nR do
+ begin
+ Par[j] := Par[j] / xSD[j];
+ indx := ix(j,j,nP + 1);
+ SEP[j] := sqrt(Arr[indx]) / xSD[j];
+ Par[0] := Par[0] - Par[j] * xM[j];
+ prob := Norm(abs(Par[j] / SEP[j]));
+ outline := format(' %3d %15s %10.4f %10.4f %10.4f',[j,RowLabels[j],Par[j],SEP[j],prob]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.ShowModal;
+
+ outline := format('Intercept %10.4f',[Par[0]]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Odds Ratios and 95% Confidence Intervals...');
+ OutPutFrm.RichEdit.Lines.Add('Variable O.R. Low -- High');
+ for j := 1 to nR do
+ begin
+ ORc := exp(Par[j]);
+ OR1 := exp(Par[j] - 1.96 * SEP[j]);
+ ORh := exp(Par[j] + 1.96 * SEP[j]);
+ outline := format('%15s %10.4f %10.4f %10.4f',[RowLabels[j],ORc,OR1,ORh]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ for i := 1 to 3 do
+ for j := 1 to 3 do Table[i,j] := 0;
+ outline := '';
+ OutPutFrm.RichEdit.Lines.Add('');
+ if ProbsChk.Checked then
+ begin
+ for j := 1 to nR do outline := outline + ' X ';
+ outline := outline + ' Y Prob';
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ for i := 0 to nC - 1 do
+ begin
+ value := Par[0];
+ outline := '';
+ for j := 1 to nR do
+ begin
+ indx := ix(i,j,nR + 1);
+ xij := xM[j] + xSD[j] * X[indx];
+ value := value + Par[j] * xij;
+ outline := outline + format(' %10.4f ',[xij]);
+ end;
+ value := 1.0 / (1.0 + exp( -value));
+ outline := outline + format('%4.0f %10.4f',[Y1[i],value]);
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ if round(Y1[i]) = 0 then row := 1 else row := 2;
+ if round(value) = 0 then col := 1 else col := 2;
+ Table[row,col] := Table[row,col] + 1;
+ end; // next i
+ end;
+ for i := 1 to 2 do
+ begin
+ for j := 1 to 2 do
+ begin
+ Table[i,3] := Table[i,3] + Table[i,j];
+ Table[3,j] := Table[3,j] + Table[i,j];
+ end;
+ end;
+ for i := 1 to 2 do Table[3,3] := Table[3,3] + Table[i,3];
+ OutPutFrm.RichEdit.Lines.Add('');
+ OutPutFrm.RichEdit.Lines.Add('Classification Table');
+ OutPutFrm.RichEdit.Lines.Add(' Predicted');
+ OutPutFrm.RichEdit.Lines.Add(' --------------- ');
+ OutPutFrm.RichEdit.Lines.Add('Observed 0 1 Total');
+ OutPutFrm.RichEdit.Lines.Add(' --------------- ');
+ for i := 1 to 2 do
+ begin
+ outline := format(' %d ',[i-1]);
+ for j := 1 to 3 do outline := outline + format('| %3d ',[Table[i,j]]);
+ outline := outline + '|';
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.RichEdit.Lines.Add(' --------------- ');
+ Outline := 'Total ';
+ for j := 1 to 3 do outline := outline + format('| %3d ',[Table[3,j]]);
+ outline := outline + '';
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ OutPutFrm.RichEdit.Lines.Add(' --------------- ');
+ OutPutFrm.ShowModal;
+
+cleanup:
+ Arr := nil;
+ SEP := nil;
+ Par := nil;
+ xSD := nil;
+ xM := nil;
+ Y1 := nil;
+ Y0 := nil;
+ X := nil;
+ RowLabels := nil;
+ ColLabels := nil;
+ ColNoSelected := nil;
+end;
+
+procedure TLogRegFrm.DepOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(DepVar.Text);
+ DepVar.Text := '';
+ DepInBtn.Enabled := true;
+end;
+
+procedure TLogRegFrm.FormShow(Sender: TObject);
+begin
+ ResetBtnClick(Self);
+end;
+
+procedure TLogRegFrm.OutBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := BlockList.ItemIndex;
+ VarList.Items.Add(BlockList.Items.Strings[index]);
+ BlockList.Items.Delete(index);
+ InBtn.Enabled := true;
+ if BlockList.Items.Count = 0 then OutBtn.Enabled := false;
+end;
+
+function TLogRegFrm.ChiSq(x : double; n : integer) : double;
+var
+ p, t, a : double;
+ k : integer;
+
+begin
+ p := exp(-0.5 * x);
+ if n mod 2 = 1 then p := p * sqrt(2 * x / Pi);
+ k := n;
+ while K >= 2 do
+ begin
+ p := p * x / k;
+ k := k - 2;
+ end;
+ t := p;
+ a := n;
+ while t > 0.000001 * p do
+ begin
+ a := a + 2;
+ t := t * x / a;
+ p := p + t;
+ end;
+ ChiSq := (1 - p);
+end;
+
+function TLogRegFrm.Norm(z : double): double;
+begin
+ Norm := ChiSq(z * z, 1);
+end;
+
+function TLogRegFrm.ix(j, k, nCols : integer): integer;
+begin
+ ix := j * nCols + k;
+end;
+
+initialization
+ {$I logregunit.lrs}
+
+end.
+
diff --git a/applications/lazstats/source_orig/lsmrunit.lfm b/applications/lazstats/source_orig/lsmrunit.lfm
new file mode 100644
index 000000000..ba57d94fd
--- /dev/null
+++ b/applications/lazstats/source_orig/lsmrunit.lfm
@@ -0,0 +1,377 @@
+object LSMregForm: TLSMregForm
+ Left = 358
+ Height = 376
+ Top = 150
+ Width = 668
+ Caption = 'Standard Least-Squares Multiple Regression'
+ ClientHeight = 376
+ ClientWidth = 668
+ OnShow = ResetBtnClick
+ LCLVersion = '0.9.30.4'
+ object Label1: TLabel
+ Left = 6
+ Height = 16
+ Top = 8
+ Width = 99
+ Caption = 'Available Variables'
+ ParentColor = False
+ end
+ object VarList: TListBox
+ Left = 6
+ Height = 297
+ Top = 23
+ Width = 161
+ ItemHeight = 0
+ MultiSelect = True
+ TabOrder = 0
+ end
+ object DepInBtn: TBitBtn
+ Left = 176
+ Height = 29
+ Top = 40
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DepInBtnClick
+ TabOrder = 1
+ end
+ object Label2: TLabel
+ Left = 217
+ Height = 16
+ Top = 40
+ Width = 104
+ Caption = 'Dependent Variable'
+ ParentColor = False
+ end
+ object DepVar: TEdit
+ Left = 216
+ Height = 23
+ Top = 56
+ Width = 146
+ TabOrder = 2
+ Text = 'DepVar'
+ end
+ object Label3: TLabel
+ Left = 214
+ Height = 16
+ Top = 112
+ Width = 168
+ Caption = 'Independent Var.s for this block'
+ ParentColor = False
+ end
+ object Label5: TLabel
+ Left = 383
+ Height = 16
+ Top = 11
+ Width = 164
+ Caption = 'Minimum Prob. to enter block:'
+ ParentColor = False
+ end
+ object GroupBox1: TGroupBox
+ Left = 400
+ Height = 225
+ Top = 32
+ Width = 226
+ Caption = 'Options'
+ ClientHeight = 207
+ ClientWidth = 222
+ TabOrder = 3
+ object CPChkBox: TCheckBox
+ Left = 6
+ Height = 19
+ Top = 1
+ Width = 169
+ Caption = 'Show Cross-Products Matrix'
+ TabOrder = 0
+ end
+ object CovChkBox: TCheckBox
+ Left = 6
+ Height = 19
+ Top = 22
+ Width = 197
+ Caption = 'Show Variance-Covariance Matrix'
+ TabOrder = 1
+ end
+ object CorrsChkBox: TCheckBox
+ Left = 6
+ Height = 19
+ Top = 43
+ Width = 169
+ Caption = 'Show Intercorrelation Matrix'
+ TabOrder = 2
+ end
+ object MeansChkBox: TCheckBox
+ Left = 7
+ Height = 19
+ Top = 64
+ Width = 87
+ Caption = 'Show Means'
+ TabOrder = 3
+ end
+ object VarChkBox: TCheckBox
+ Left = 7
+ Height = 19
+ Top = 85
+ Width = 102
+ Caption = 'Show Variances'
+ TabOrder = 4
+ end
+ object SDChkBox: TCheckBox
+ Left = 6
+ Height = 19
+ Top = 109
+ Width = 157
+ Caption = 'Show Standard Deviations'
+ TabOrder = 5
+ end
+ object MatSaveChkBox: TCheckBox
+ Left = 6
+ Height = 19
+ Top = 132
+ Width = 142
+ Caption = 'Save Correlation Matrix'
+ TabOrder = 6
+ end
+ object PredictChkBox: TCheckBox
+ Left = 7
+ Height = 19
+ Top = 154
+ Width = 195
+ Caption = 'Predictions,residuals,C.I.''s to Grid'
+ TabOrder = 7
+ end
+ end
+ object ResetBtn: TButton
+ Left = 400
+ Height = 26
+ Top = 272
+ Width = 66
+ Caption = 'Reset'
+ OnClick = ResetBtnClick
+ TabOrder = 4
+ end
+ object CancelBtn: TButton
+ Left = 544
+ Height = 26
+ Top = 272
+ Width = 66
+ Caption = 'Cancel'
+ ModalResult = 2
+ TabOrder = 5
+ end
+ object ReturnBtn: TButton
+ Left = 544
+ Height = 26
+ Top = 312
+ Width = 66
+ Caption = 'Return'
+ ModalResult = 1
+ OnClick = ReturnBtnClick
+ TabOrder = 6
+ end
+ object ComputeBtn: TButton
+ Left = 400
+ Height = 26
+ Top = 312
+ Width = 66
+ Caption = 'Compute'
+ OnClick = ComputeBtnClick
+ TabOrder = 7
+ end
+ object IndepVars: TListBox
+ Left = 214
+ Height = 192
+ Top = 128
+ Width = 150
+ ItemHeight = 0
+ TabOrder = 8
+ end
+ object DepOutBtn: TBitBtn
+ Left = 176
+ Height = 29
+ Top = 72
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = DepOutBtnClick
+ TabOrder = 9
+ end
+ object InBtn: TBitBtn
+ Left = 176
+ Height = 29
+ Top = 144
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
+ 6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
+ 3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
+ 71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
+ 74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
+ 74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = InBtnClick
+ TabOrder = 10
+ end
+ object OutBtn: TBitBtn
+ Left = 176
+ Height = 29
+ Top = 176
+ Width = 32
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
+ 3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
+ 71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
+ 89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
+ 74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
+ 90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
+ FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
+ 4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
+ }
+ NumGlyphs = 0
+ OnClick = OutBtnClick
+ TabOrder = 11
+ end
+ object AllBtn: TBitBtn
+ Left = 176
+ Height = 29
+ Top = 216
+ Width = 32
+ Caption = 'ALL'
+ NumGlyphs = 0
+ OnClick = AllBtnClick
+ TabOrder = 12
+ end
+ object InProb: TEdit
+ Left = 552
+ Height = 23
+ Top = 4
+ Width = 44
+ TabOrder = 13
+ Text = 'InProb'
+ end
+end
diff --git a/applications/lazstats/source_orig/lsmrunit.lrs b/applications/lazstats/source_orig/lsmrunit.lrs
new file mode 100644
index 000000000..c8a1bded6
--- /dev/null
+++ b/applications/lazstats/source_orig/lsmrunit.lrs
@@ -0,0 +1,257 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TLSMregForm','FORMDATA',[
+ 'TPF0'#11'TLSMregForm'#10'LSMregForm'#4'Left'#3'f'#1#6'Height'#3'x'#1#3'Top'#3
+ +#150#0#5'Width'#3#156#2#7'Caption'#6'*Standard Least-Squares Multiple Regres'
+ +'sion'#12'ClientHeight'#3'x'#1#11'ClientWidth'#3#156#2#6'OnShow'#7#13'ResetB'
+ +'tnClick'#10'LCLVersion'#6#8'0.9.30.4'#0#6'TLabel'#6'Label1'#4'Left'#2#6#6'H'
+ +'eight'#2#16#3'Top'#2#8#5'Width'#2'c'#7'Caption'#6#19'Available Variables'#11
+ +'ParentColor'#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#6#6'Height'#3')'#1#3'To'
+ +'p'#2#23#5'Width'#3#161#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'TabOrder'#2
+ +#0#0#0#7'TBitBtn'#8'DepInBtn'#4'Left'#3#176#0#6'Height'#2#29#3'Top'#2'('#5'W'
+ +'idth'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0
+ +'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0
+ +#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'
+ +#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190
+ +'m'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255
+ +'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139
+ +'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160
+ +#215#169#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255
+ +#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128
+ +#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199
+ +'t'#255#165#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150
+ +#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255
+ +#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255
+ +#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255
+ +'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163
+ +'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247
+ +';'#136'B'#219#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187
+ +'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnCl'
+ +'ick'#7#13'DepInBtnClick'#8'TabOrder'#2#1#0#0#6'TLabel'#6'Label2'#4'Left'#3
+ +#217#0#6'Height'#2#16#3'Top'#2'('#5'Width'#2'h'#7'Caption'#6#18'Dependent Va'
+ +'riable'#11'ParentColor'#8#0#0#5'TEdit'#6'DepVar'#4'Left'#3#216#0#6'Height'#2
+ +#23#3'Top'#2'8'#5'Width'#3#146#0#8'TabOrder'#2#2#4'Text'#6#6'DepVar'#0#0#6'T'
+ +'Label'#6'Label3'#4'Left'#3#214#0#6'Height'#2#16#3'Top'#2'p'#5'Width'#3#168#0
+ +#7'Caption'#6' Independent Var.s for this block'#11'ParentColor'#8#0#0#6'TLa'
+ ,'bel'#6'Label5'#4'Left'#3#127#1#6'Height'#2#16#3'Top'#2#11#5'Width'#3#164#0#7
+ +'Caption'#6#29'Minimum Prob. to enter block:'#11'ParentColor'#8#0#0#9'TGroup'
+ +'Box'#9'GroupBox1'#4'Left'#3#144#1#6'Height'#3#225#0#3'Top'#2' '#5'Width'#3
+ +#226#0#7'Caption'#6#7'Options'#12'ClientHeight'#3#207#0#11'ClientWidth'#3#222
+ +#0#8'TabOrder'#2#3#0#9'TCheckBox'#8'CPChkBox'#4'Left'#2#6#6'Height'#2#19#3'T'
+ +'op'#2#1#5'Width'#3#169#0#7'Caption'#6#26'Show Cross-Products Matrix'#8'TabO'
+ +'rder'#2#0#0#0#9'TCheckBox'#9'CovChkBox'#4'Left'#2#6#6'Height'#2#19#3'Top'#2
+ +#22#5'Width'#3#197#0#7'Caption'#6#31'Show Variance-Covariance Matrix'#8'TabO'
+ +'rder'#2#1#0#0#9'TCheckBox'#11'CorrsChkBox'#4'Left'#2#6#6'Height'#2#19#3'Top'
+ +#2'+'#5'Width'#3#169#0#7'Caption'#6#28'Show Intercorrelation Matrix'#8'TabOr'
+ +'der'#2#2#0#0#9'TCheckBox'#11'MeansChkBox'#4'Left'#2#7#6'Height'#2#19#3'Top'
+ +#2'@'#5'Width'#2'W'#7'Caption'#6#10'Show Means'#8'TabOrder'#2#3#0#0#9'TCheck'
+ +'Box'#9'VarChkBox'#4'Left'#2#7#6'Height'#2#19#3'Top'#2'U'#5'Width'#2'f'#7'Ca'
+ +'ption'#6#14'Show Variances'#8'TabOrder'#2#4#0#0#9'TCheckBox'#8'SDChkBox'#4
+ +'Left'#2#6#6'Height'#2#19#3'Top'#2'm'#5'Width'#3#157#0#7'Caption'#6#24'Show '
+ +'Standard Deviations'#8'TabOrder'#2#5#0#0#9'TCheckBox'#13'MatSaveChkBox'#4'L'
+ +'eft'#2#6#6'Height'#2#19#3'Top'#3#132#0#5'Width'#3#142#0#7'Caption'#6#23'Sav'
+ +'e Correlation Matrix'#8'TabOrder'#2#6#0#0#9'TCheckBox'#13'PredictChkBox'#4
+ +'Left'#2#7#6'Height'#2#19#3'Top'#3#154#0#5'Width'#3#195#0#7'Caption'#6'$Pred'
+ +'ictions,residuals,C.I.''s to Grid'#8'TabOrder'#2#7#0#0#0#7'TButton'#8'Reset'
+ +'Btn'#4'Left'#3#144#1#6'Height'#2#26#3'Top'#3#16#1#5'Width'#2'B'#7'Caption'#6
+ +#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#4#0#0#7'TButton'#9'Ca'
+ +'ncelBtn'#4'Left'#3' '#2#6'Height'#2#26#3'Top'#3#16#1#5'Width'#2'B'#7'Captio'
+ +'n'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#5#0#0#7'TButton'#9'ReturnB'
+ +'tn'#4'Left'#3' '#2#6'Height'#2#26#3'Top'#3'8'#1#5'Width'#2'B'#7'Caption'#6#6
+ +'Return'#11'ModalResult'#2#1#7'OnClick'#7#14'ReturnBtnClick'#8'TabOrder'#2#6
+ +#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#144#1#6'Height'#2#26#3'Top'#3'8'#1#5
+ +'Width'#2'B'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabO'
+ +'rder'#2#7#0#0#8'TListBox'#9'IndepVars'#4'Left'#3#214#0#6'Height'#3#192#0#3
+ +'Top'#3#128#0#5'Width'#3#150#0#10'ItemHeight'#2#0#8'TabOrder'#2#8#0#0#7'TBit'
+ +'Btn'#9'DepOutBtn'#4'Left'#3#176#0#6'Height'#2#29#3'Top'#2'H'#5'Width'#2' '
+ +#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16
+ +#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247'G'#153'O8'
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['#170'd'#255
+ +'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255'%'
+ +'i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'#196'{'#200
+ +#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139
+ +#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'
+ +#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0'h'#199't'#201
+ +#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159
+ +#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197
+ +#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'#184'h'#255'X'
+ +#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'
+ +#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255#0#255#255#255
+ +#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255#255#255#0#255
+ ,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#14
+ +'DepOutBtnClick'#8'TabOrder'#2#9#0#0#7'TBitBtn'#5'InBtn'#4'Left'#3#176#0#6'H'
+ +'eight'#2#29#3'Top'#3#144#0#5'Width'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0
+ +'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4
+ +#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'
+ +#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'
+ +#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0
+ +#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255
+ +#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137
+ +#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255
+ +#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158
+ +#214#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255
+ +#137#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255
+ +'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'
+ +#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'
+ +#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ ,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'InBtnClick'#8'TabOrder'#2#10
+ +#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#176#0#6'Height'#2#29#3'Top'#3#176#0#5'Wi'
+ +'dth'#2' '#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('
+ +#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0
+ +#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153'O'#184
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'#247
+ +'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255'['
+ +#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255
+ +'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195'q'
+ +#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206
+ +#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'
+ +#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255#255#0
+ +'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212#163
+ +#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133#199
+ +#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255#255#0
+ +#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135#255']'
+ +#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'
+ +#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255#255#255
+ +#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+ +#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+ +#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+ +#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7
+ +'OnClick'#7#11'OutBtnClick'#8'TabOrder'#2#11#0#0#7'TBitBtn'#6'AllBtn'#4'Left'
+ +#3#176#0#6'Height'#2#29#3'Top'#3#216#0#5'Width'#2' '#7'Caption'#6#3'ALL'#9'N'
+ +'umGlyphs'#2#0#7'OnClick'#7#11'AllBtnClick'#8'TabOrder'#2#12#0#0#5'TEdit'#6
+ +'InProb'#4'Left'#3'('#2#6'Height'#2#23#3'Top'#2#4#5'Width'#2','#8'TabOrder'#2
+ +#13#4'Text'#6#6'InProb'#0#0#0
+]);
diff --git a/applications/lazstats/source_orig/lsmrunit.pas b/applications/lazstats/source_orig/lsmrunit.pas
new file mode 100644
index 000000000..76ef1a81c
--- /dev/null
+++ b/applications/lazstats/source_orig/lsmrunit.pas
@@ -0,0 +1,358 @@
+unit LSMRunit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
+ StdCtrls, Buttons, Globals, MainUnit, MatrixLib, OutPutUnit,
+ FunctionsLib, DataProcs, DictionaryUnit;
+
+type
+
+ { TLSMregForm }
+
+ TLSMregForm = class(TForm)
+ AllBtn: TBitBtn;
+ IndepVars: TListBox;
+ CancelBtn: TButton;
+ ComputeBtn: TButton;
+ CorrsChkBox: TCheckBox;
+ CovChkBox: TCheckBox;
+ CPChkBox: TCheckBox;
+ DepInBtn: TBitBtn;
+ DepOutBtn: TBitBtn;
+ DepVar: TEdit;
+ GroupBox1: TGroupBox;
+ InBtn: TBitBtn;
+ InProb: TEdit;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label5: TLabel;
+ MatSaveChkBox: TCheckBox;
+ MeansChkBox: TCheckBox;
+ SaveDialog1: TSaveDialog;
+ OutBtn: TBitBtn;
+ PredictChkBox: TCheckBox;
+ ResetBtn: TButton;
+ ReturnBtn: TButton;
+ SDChkBox: TCheckBox;
+ VarChkBox: TCheckBox;
+ VarList: TListBox;
+ procedure AllBtnClick(Sender: TObject);
+ procedure CancelBtnClick(Sender: TObject);
+ procedure ComputeBtnClick(Sender: TObject);
+ procedure DepInBtnClick(Sender: TObject);
+ procedure DepOutBtnClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure InBtnClick(Sender: TObject);
+ procedure OutBtnClick(Sender: TObject);
+ procedure ResetBtnClick(Sender: TObject);
+ procedure ReturnBtnClick(Sender: TObject);
+
+ private
+ { private declarations }
+ IndepVarsCols : IntDyneVec;
+ NoVars : integer;
+ NoBlocks : integer;
+ public
+ { public declarations }
+ end;
+
+var
+ LSMregForm: TLSMregForm;
+
+implementation
+
+ procedure TLSMregForm.ResetBtnClick(Sender: TObject);
+ VAR i : integer;
+ begin
+ IndepVars.Items.Clear;
+ VarList.Items.Clear;
+ NoBlocks := 1;
+ for i := 1 to NoVariables do
+ begin
+ VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+ end;
+ InBtn.Enabled := true;
+ OutBtn.Enabled := false;
+ DepInBtn.Enabled := true;
+ DepOutBtn.Enabled := false;
+ CPChkBox.Checked := false;
+ CovChkBox.Checked := false;
+ CorrsChkBox.Checked := true;
+ MeansChkBox.Checked := true;
+ VarChkBox.Checked := false;
+ SDChkBox.Checked := true;
+ MatSaveChkBox.Checked := false;
+ PredictChkBox.Checked := false;
+// HeteroChk.Checked := false;
+ NoVars := 0;
+ DepVar.Text := '';
+ InProb.Text := '0.05';
+ SetLength(IndepVarsCols,NoVariables+1);
+ end;
+
+procedure TLSMregForm.ReturnBtnClick(Sender: TObject);
+begin
+ LSMregForm.Hide;
+end;
+
+ procedure TLSMregForm.FormShow(Sender: TObject);
+ begin
+ ResetBtnClick(self);
+ end;
+
+ procedure TLSMregForm.AllBtnClick(Sender: TObject);
+ VAR count, index : integer;
+ begin
+ count := VarList.Items.Count;
+ for index := 0 to count-1 do
+ begin
+ IndepVars.Items.Add(VarList.Items.Strings[index]);
+ end;
+ VarList.Clear;
+ end;
+
+ procedure TLSMregForm.CancelBtnClick(Sender: TObject);
+ begin
+ if IndepVarsCols <> nil then IndepVarsCols := nil;
+ LSMregForm.Hide;
+ end;
+
+procedure TLSMregForm.ComputeBtnClick(Sender: TObject);
+Label CleanUp;
+var
+ i, j, k, col, mattype, NCases, anerror : integer;
+ NoIndepVars, DepVarCol, NEntered, StepNo : integer;
+ R2, df1, df2, Y, z, BPG, chiprob : double;
+ StdErrEst, F, FProbF, OldR2 : double;
+ pdf1, pdf2, probin, prout : double;
+ errorcode : boolean;
+ BetaWeights : DblDyneVec;
+ BWeights : DblDyneVec;
+ BStdErrs : DblDyneVec;
+ Bttests : DblDyneVec;
+ tProbs : DblDyneVec;
+ cellstring, outline : string;
+ corrs : DblDyneMat;
+ Means : DblDyneVec;
+ Variances : DblDyneVec;
+ StdDevs : DblDyneVec;
+ title : string;
+ IndRowLabels : StrDyneVec;
+ IndColLabels : StrDyneVec;
+ IndepInverse : DblDyneMat;
+ XYCorrs : DblDyneVec;
+ Partial : DblDyneVec;
+ ColEntered : IntDyneVec;
+ filename : string;
+ constant : double;
+ errcode : boolean;
+begin
+ NCases := NoCases;
+ SetLength(corrs,NoVariables+1,NoVariables+1);
+ SetLength(IndepInverse,NoVariables,NoVariables+1);
+ SetLength(IndepVarsCols,NoVariables+1);
+ SetLength(BWeights,NoVariables+1);
+ SetLength(BStdErrs,NoVariables+1);
+ SetLength(Bttests,NoVariables+1);
+ SetLength(tProbs,NoVariables+1);
+ SetLength(Means,NoVariables+1);
+ SetLength(Variances,NoVariables+1);
+ SetLength(StdDevs,NoVariables+1);
+ SetLength(IndepVarsCols,NoVariables+1);
+ SetLength(IndColLabels,NoVariables+1);
+ SetLength(IndRowLabels,NoVariables+1);
+ SetLength(BetaWeights,NoVariables+1);
+ SetLength(ColEntered,NoVariables+2);
+ probin := StrToFloat(InProb.Text); // probability to include a block
+ prout := 1.0;
+ OutPutFrm.RichEdit.Clear;
+ OutPutFrm.RichEdit.Lines.Add('Least Squares Multiple Regression by Bill Miller');
+ errorcode := false;
+
+ { get dependendent variable column }
+ if DepVar.Text = '' then
+ begin
+ ShowMessage('ERROR! No Dependent variable selected.');
+ goto CleanUp;
+ end;
+ DepVarCol := 0;
+ NoVars := NoVars + 1;
+ for j := 1 to NoVariables do
+ if DepVar.Text = OS3MainFrm.DataGrid.Cells[j,0] then DepVarCol := j;
+ R2 := 0.0;
+ OldR2 := 0.0;
+ pdf1 := 0.0;
+ pdf2 := 0.0;
+ NEntered := 0;
+ for i := 0 to IndepVars.Count-1 do
+ begin
+ cellstring := OS3Mainfrm.DataGrid.Cells[i+1,0];
+ for j := 1 to NoVariables do
+ begin
+ if cellstring = OS3MainFrm.DataGrid.Cells[j,0] then
+ begin
+ IndepVarsCols[i] := j;
+ ColEntered[i] := j;
+ NEntered := NEntered + 1;
+ IndRowLabels[NEntered-1] := cellstring;
+ IndColLabels[NEntered-1] := cellstring;
+ end;
+ end;
+ end;
+ NEntered := NEntered + 1; // dependent variable last
+ ColEntered[NEntered-1] := DepVarCol;
+ IndRowLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[DepVarCol,0];
+ IndColLabels[NEntered-1] := OS3MainFrm.DataGrid.Cells[DepVarCol,0];
+ OutPutFrm.RichEdit.Lines.Add('');
+ if CPChkBox.Checked = true then
+ begin
+ title := 'Cross-Products Matrix';
+ GridXProd(NEntered,ColEntered,Corrs,errcode,NCases);
+ MAT_PRINT(Corrs,NEntered,NEntered,title,IndRowLabels,IndColLabels,NCases);
+ end;
+ if CovChkBox.Checked = true then
+ begin
+ title := 'Variance-Covariance Matrix';
+ GridCovar(NEntered,ColEntered,Corrs,Means,Variances,
+ StdDevs,errcode,NCases);
+ MAT_PRINT(Corrs,NEntered,NEntered,title,IndRowLabels,IndColLabels,NCases);
+ end;
+ Correlations(NEntered,ColEntered,Corrs,Means,Variances, StdDevs,errcode,NCases);
+ if CorrsChkBox.Checked = true then
+ begin
+ title := 'Product-Moment Correlations Matrix';
+ MAT_PRINT(Corrs,NEntered,NEntered,title,IndRowLabels,IndColLabels,NCases);
+ end;
+ title := 'Means';
+ if MeansChkBox.Checked = true then
+ DynVectorPrint(Means,NEntered,title,IndColLabels,NCases);
+ title := 'Variances';
+ if VarChkBox.Checked = true then
+ DynVectorPrint(Variances,NEntered,title,IndColLabels,NCases);
+ title := 'Standard Deviations';
+ if SDChkBox.Checked = true then
+ DynVectorPrint(StdDevs,NEntered,title,IndColLabels,NCases);
+ if errorcode = true then
+ begin
+ ShowMessage('ERROR! A selected variable has no variability-run aborted.');
+ goto CleanUp;
+ end;
+ NoIndepVars := NEntered - 1;
+
+ MReg(NoIndepVars,ColEntered,DepVarCol,IndRowLabels,Means,Variances,
+ StdDevs,BWeights,BetaWeights,BStdErrs,Bttests,tProbs,R2,StdErrEst,
+ NCases,errorcode,true);
+ df1 := NoIndepVars - pdf1;
+ df2 := NCases - NoIndepVars - 1;
+ F := ((R2 - OldR2) / (1.0 - R2)) * df2 / df1;
+ FProbF := probf(F,df1,df2);
+ if FProbF < probin then
+ begin
+ outline := 'Entry requirements met';
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end
+ else
+ begin
+ outline := 'Entry requirements not met';
+ OutPutFrm.RichEdit.Lines.Add(outline);
+ end;
+ OutPutFrm.ShowModal;
+ OutPutFrm.RichEdit.Clear;
+
+ { add [predicted scores, residual scores, etc. to grid if options elected }
+ if PredictChkBox.Checked = true then
+ begin
+ prout := 1.0;
+ Correlations(NEntered,ColEntered,Corrs,Means,Variances,
+ StdDevs,errcode,NCases);
+
+ MReg2(NCases,NEntered,NoIndepVars,ColEntered,corrs,IndepInverse,
+ IndRowLabels,R2,BetaWeights,
+ Means,Variances,anerror,StdErrEst,constant,prout,true, false,false);
+
+ Predict(ColEntered, NEntered, IndepInverse, Means, StdDevs,
+ BetaWeights, StdErrEst, IndepVarsCols, NoIndepVars);
+ end;
+// OutPutFrm.ShowModal;
+// OutPutFrm.RichEdit.Clear;
+
+ if MatSaveChkBox.Checked = true then
+ begin
+ SaveDialog1.Filter := 'FreeStat matrix files (*.MAT)|*.MAT|All files (*.*)|*.*';
+ SaveDialog1.FilterIndex := 1;
+ if SaveDialog1.Execute then
+ begin
+ filename := SaveDialog1.FileName;
+ MATSAVE(Corrs,NoVars,NoVars,Means,StdDevs,NCases,IndRowLabels,IndColLabels,filename);
+ end;
+ end;
+// OutPutFrm.ShowModal;
+CleanUp:
+ ColEntered := nil;
+ BetaWeights := nil;
+ IndColLabels := nil;
+ IndRowLabels := nil;
+ StdDevs := nil;
+ Variances := nil;
+ Means := nil;
+ IndepInverse := nil;
+ corrs := nil;
+ IndepVarsCols := nil;
+end;
+
+procedure TLSMregForm.DepInBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := VarList.ItemIndex;
+ DepVar.Text := VarList.Items.Strings[index];
+ VarList.Items.Delete(index);
+ DepOutBtn.Enabled := true;
+ DepInBtn.Enabled := false;
+end;
+
+procedure TLSMregForm.DepOutBtnClick(Sender: TObject);
+begin
+ VarList.Items.Add(DepVar.Text);
+ DepVar.Text := '';
+ DepInBtn.Enabled := true;
+end;
+
+procedure TLSMregForm.InBtnClick(Sender: TObject);
+VAR i, index : integer;
+begin
+ index := VarList.Items.Count;
+ i := 0;
+ while i < index do
+ begin
+ if (VarList.Selected[i]) then
+ begin
+ IndepVars.Items.Add(VarList.Items.Strings[i]);
+ VarList.Items.Delete(i);
+ index := index - 1;
+ i := 0;
+ end
+ else i := i + 1;
+ end;
+ OutBtn.Enabled := true;
+end;
+
+procedure TLSMregForm.OutBtnClick(Sender: TObject);
+VAR index : integer;
+begin
+ index := IndepVars.ItemIndex;
+ VarList.Items.Add(IndepVars.Items.Strings[index]);
+ IndepVars.Items.Delete(index);
+ InBtn.Enabled := true;
+ if IndepVars.Items.Count = 0 then OutBtn.Enabled := false;
+end;
+
+initialization
+ {$I lsmrunit.lrs}
+
+end.
+