From 6ac7b7a9daa67460aae85c3a81ce68ca42a1e83a Mon Sep 17 00:00:00 2001 From: Richard Barry <ribarry@amazon.com> Date: Fri, 9 Sep 2011 10:09:10 +0000 Subject: [PATCH] Complete the RL78 demo. main.c still requires documentation in the comments at the top of the file. --- .../FreeRTOSConfig.h | 13 +---- .../RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp | 14 ++--- Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87 | 9 +-- Demo/RL78_RL78G13_Promo_Board_IAR/main.c | 58 +++++++++++++++++-- .../settings/rtosdemo.dbgdt | 14 ++--- .../settings/rtosdemo.dni | 5 +- .../settings/rtosdemo.wsdt | 6 +- 7 files changed, 80 insertions(+), 39 deletions(-) diff --git a/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h b/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h index 6e841b0073..de9b770d2f 100644 --- a/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h +++ b/Demo/RL78_RL78G13_Promo_Board_IAR/FreeRTOSConfig.h @@ -90,12 +90,12 @@ asm file. It is valid in a C file, but not valid in an asm file. */ #define configUSE_PREEMPTION 1 #define configTICK_RATE_HZ ( ( unsigned short ) 1000 ) #define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) -#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 100 ) +#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 80 ) #define configMAX_TASK_NAME_LEN ( 10 ) #define configUSE_TRACE_FACILITY 0 #define configUSE_16_BIT_TICKS 1 #define configIDLE_SHOULD_YIELD 1 -#define configTOTAL_HEAP_SIZE ( (size_t ) ( 3500 ) ) +#define configTOTAL_HEAP_SIZE ( (size_t ) ( 3420 ) ) #define configCHECK_FOR_STACK_OVERFLOW 2 #define configUSE_MUTEXES 1 @@ -138,15 +138,6 @@ to exclude the API function. */ */ #define configCLOCK_SOURCE 1 -/* - * RL78/G13 Memory Model - * 1 = use far memory mode - * 0 = use near memory mode - * - * This setting must match the setting in the IAR project options. - */ -#define configMEMORY_MODE 0 - #if configCLOCK_SOURCE == 0 #define configCPU_CLOCK_HZ ( ( unsigned long ) 20000000 ) /* using the external clock source */ #else diff --git a/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp b/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp index 0b30add332..a00303a836 100644 --- a/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp +++ b/Demo/RL78_RL78G13_Promo_Board_IAR/RTOSDemo.ewp @@ -78,7 +78,7 @@ </option> <option> <name>GenRTLibraryPath</name> - <state>$TOOLKIT_DIR$\LIB\dlrl78nn1n.r87</state> + <state>$TOOLKIT_DIR$\LIB\dlrl78nf1n.r87</state> </option> <option> <name>GenHwSupport</name> @@ -104,7 +104,7 @@ </option> <option> <name>GenStackSize</name> - <state>128</state> + <state>130</state> </option> <option> <name>GenNearHeapSize</name> @@ -112,7 +112,7 @@ </option> <option> <name>GenFarHeapSize</name> - <state>4096</state> + <state>0</state> </option> <option> <name>GeneralEnableMisra</name> @@ -462,7 +462,7 @@ <option> <name>AsmDefines</name> <state>__NEAR_MODEL__</state> - <state>__NEAR_DATA_MODEL__</state> + <state>__FAR_DATA_MODEL__</state> </option> <option> <name>AsmPreprocOutput</name> @@ -1717,15 +1717,15 @@ <name>Demo Source</name> <group> <name>StandardDemos</name> + <file> + <name>$PROJ_DIR$\..\Common\Minimal\blocktim.c</name> + </file> <file> <name>$PROJ_DIR$\..\Common\Minimal\dynamic.c</name> </file> <file> <name>$PROJ_DIR$\..\Common\Minimal\PollQ.c</name> </file> - <file> - <name>$PROJ_DIR$\..\Common\Minimal\semtest.c</name> - </file> </group> <file> <name>$PROJ_DIR$\main.c</name> diff --git a/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87 b/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87 index 13dc31ce56..3d10c2ac09 100644 --- a/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87 +++ b/Demo/RL78_RL78G13_Promo_Board_IAR/RegTest.s87 @@ -94,7 +94,7 @@ vRegTest1: MOVW HL, #0x7788 MOV CS, #0x01 -#if configMEMORY_MODE == 1 +#if __DATA_MODEL__ == __DATA_MODEL_FAR__ ; ES is not saved or restored when using the near memory model so only ; test it when using the far model. @@ -135,7 +135,8 @@ loop1: BZ +5 BR vRegTestError -#if configMEMORY_MODE == 1 +#if __DATA_MODEL__ == __DATA_MODEL_FAR__ + ; ES is not saved or restored when using the near memory model so only ; test it when using the far model. MOV A, ES @@ -170,7 +171,7 @@ vRegTest2: MOVW HL, #0xff12 MOV CS, #0x03 -#if configMEMORY_MODE == 1 +#if __DATA_MODEL__ == __DATA_MODEL_FAR__ MOV ES, #0x04 @@ -197,7 +198,7 @@ loop2: BZ +5 BR vRegTestError -#if configMEMORY_MODE == 1 +#if __DATA_MODEL__ == __DATA_MODEL_FAR__ MOV A, ES CMP A, #0x04 diff --git a/Demo/RL78_RL78G13_Promo_Board_IAR/main.c b/Demo/RL78_RL78G13_Promo_Board_IAR/main.c index 495e18a639..d046e44364 100644 --- a/Demo/RL78_RL78G13_Promo_Board_IAR/main.c +++ b/Demo/RL78_RL78G13_Promo_Board_IAR/main.c @@ -69,13 +69,20 @@ /* Standard demo includes. */ #include "dynamic.h" #include "PollQ.h" -#include "semtest.h" +#include "blocktim.h" /* The period at which the check timer will expire, in ms, provided no errors have been reported by any of the standard demo tasks. ms are converted to the equivalent in ticks using the portTICK_RATE_MS constant. */ #define mainCHECK_TIMER_PERIOD_MS ( 3000UL / portTICK_RATE_MS ) +/* These are used to set the period of the demo timer. The demo timer period +is always relative to the check timer period, so the check timer can determine +if the demo timer has expired the expected number of times between its own +executions. */ +#define mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEROUT ( 100UL ) +#define mainDEMO_TIMER_PERIOD_MS ( mainCHECK_TIMER_PERIOD_MS / mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEROUT ) + /* The period at which the check timer will expire, in ms, if an error has been reported in one of the standard demo tasks. ms are converted to the equivalent in ticks using the portTICK_RATE_MS constant. */ @@ -94,6 +101,11 @@ in ticks using the portTICK_RATE_MS constant. */ */ static void prvCheckTimerCallback( xTimerHandle xTimer ); +/* + * The 'demo' timer callback function, as described at the top of this file. + */ +static void prvDemoTimerCallback( xTimerHandle xTimer ); + /* * This function is called from the C startup routine to setup the processor - * in particular the clock source. @@ -118,6 +130,12 @@ static short sRegTestStatus = pdPASS; function. */ static xTimerHandle xCheckTimer = NULL; +/* This time is just for demo purposes. */ +static xTimerHandle xDemoTimer = NULL; + +/* This variable is incremented each time the demo timer expires. */ +static volatile unsigned long ulDemoTimerCounter = 0UL; + /* RL78/G13 Option Byte Definition. Watchdog disabled, LVI enabled, OCD interface enabled. */ __root __far const unsigned char OptionByte[] @ 0x00C0 = @@ -142,7 +160,7 @@ short main( void ) is provided on the FreeRTOS.org WEB site. */ vStartDynamicPriorityTasks(); vStartPolledQueueTasks( tskIDLE_PRIORITY ); - vStartSemaphoreTasks( tskIDLE_PRIORITY + 1U ); + vCreateBlockTimeTasks(); /* Create the RegTest tasks as described at the top of this file. */ xTaskCreate( vRegTest1, "Reg1", configMINIMAL_STACK_SIZE, NULL, 0, NULL ); @@ -157,10 +175,19 @@ short main( void ) prvCheckTimerCallback /* The callback function that inspects the status of all the other tasks. */ ); + /* Create the software timer that just increments a variable for demo + purposes. */ + xDemoTimer = xTimerCreate( ( const signed char * ) "DemoTimer",/* A text name, purely to help debugging. */ + ( mainDEMO_TIMER_PERIOD_MS ), /* The timer period, in this case it is always calculated relative to the check timer period (see the definition of mainDEMO_TIMER_PERIOD_MS). */ + pdTRUE, /* This is an auto-reload timer, so xAutoReload is set to pdTRUE. */ + ( void * ) 0, /* The ID is not used, so can be set to anything. */ + prvDemoTimerCallback /* The callback function that inspects the status of all the other tasks. */ + ); - /* Send a command to start the check timer. It will not actually start - until the scheduler is running (when vTaskStartScheduler() is called). */ + /* Start both the check timer and the demo timer. The timers won't actually + start until the scheduler is started. */ xTimerStart( xCheckTimer, mainDONT_BLOCK ); + xTimerStart( xDemoTimer, mainDONT_BLOCK ); /* Finally start the scheduler running. */ vTaskStartScheduler(); @@ -171,9 +198,20 @@ short main( void ) } /*-----------------------------------------------------------*/ +static void prvDemoTimerCallback( xTimerHandle xTimer ) +{ + /* The demo timer has expired. All it does is increment a variable. The + period of the demo timer is relative to that of the check timer, so the + check timer knows how many times this variable should have been incremented + between each execution of the check timer's own callback. */ + ulDemoTimerCounter++; +} +/*-----------------------------------------------------------*/ + static void prvCheckTimerCallback( xTimerHandle xTimer ) { static portBASE_TYPE xChangedTimerPeriodAlready = pdFALSE, xErrorStatus = pdPASS; +static unsigned long ulLastDemoTimerCounter = 0UL; if( xAreDynamicPriorityTasksStillRunning() != pdTRUE ) { @@ -185,7 +223,7 @@ static portBASE_TYPE xChangedTimerPeriodAlready = pdFALSE, xErrorStatus = pdPASS xErrorStatus = pdFAIL; } - if( xAreSemaphoreTasksStillRunning() != pdTRUE ) + if( xAreBlockTimeTestTasksStillRunning() != pdTRUE ) { xErrorStatus = pdFAIL; } @@ -194,6 +232,16 @@ static portBASE_TYPE xChangedTimerPeriodAlready = pdFALSE, xErrorStatus = pdPASS { xErrorStatus = pdFAIL; } + + /* Ensure that the demo timer has expired at + mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEROUT times in between + each call of this function. */ + if( ( ulDemoTimerCounter - ulLastDemoTimerCounter ) < ( mainDEMO_TIMER_INCREMENTS_PER_CHECK_TIMER_TIMEROUT - 1 ) ) + { + xErrorStatus = pdFAIL; + } + + ulLastDemoTimerCounter = ulDemoTimerCounter; if( ( xErrorStatus == pdFAIL ) && ( xChangedTimerPeriodAlready == pdFALSE ) ) { diff --git a/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt b/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt index f14f331817..d7c608e742 100644 --- a/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt +++ b/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dbgdt @@ -26,12 +26,12 @@ <MixedMode>1</MixedMode><CodeCovShow>1</CodeCovShow><InstrProfShow>1</InstrProfShow></Disassembly> - </Static> + <STACK2><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></STACK2><Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register></Static> <Windows> - <Wnd0> + <Wnd2> <Tabs> <Tab> <Identity>TabID-30626-17561</Identity> @@ -47,7 +47,7 @@ </Tab> </Tabs> - <SelectedTab>0</SelectedTab></Wnd0><Wnd1> + <SelectedTab>0</SelectedTab></Wnd2><Wnd3> <Tabs> <Tab> <Identity>TabID-8606-17564</Identity> @@ -55,24 +55,24 @@ <Factory>Workspace</Factory> <Session> - <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/StandardDemos</ExpandedNode></NodeDict></Session> + <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/StandardDemos</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode></NodeDict></Session> </Tab> </Tabs> - <SelectedTab>0</SelectedTab></Wnd1></Windows> + <SelectedTab>0</SelectedTab></Wnd3></Windows> <Editor> - <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>157</YPos><SelStart>10672</SelStart><SelEnd>10672</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\semtest.c</Filename><XPos>0</XPos><YPos>248</YPos><SelStart>11198</SelStart><SelEnd>11228</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> + <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>134</YPos><SelStart>6308</SelStart><SelEnd>6308</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\MemMang\heap_1.c</Filename><XPos>0</XPos><YPos>105</YPos><SelStart>4982</SelStart><SelEnd>4982</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\tasks.c</Filename><XPos>0</XPos><YPos>1089</YPos><SelStart>38372</SelStart><SelEnd>38372</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\timers.c</Filename><XPos>0</XPos><YPos>186</YPos><SelStart>9465</SelStart><SelEnd>9465</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\FreeRTOSConfig.h</Filename><XPos>0</XPos><YPos>69</YPos><SelStart>4454</SelStart><SelEnd>4454</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\RegTest.s87</Filename><XPos>0</XPos><YPos>109</YPos><SelStart>5308</SelStart><SelEnd>5308</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> <Positions> - <Top><Row0><Sizes><Toolbar-013362c8><key>iaridepm.enu1</key></Toolbar-013362c8></Sizes></Row0><Row1><Sizes><Toolbar-04c02860><key>debuggergui.enu1</key></Toolbar-04c02860><Toolbar-08707c28><key>rl78ocd.enu1</key></Toolbar-08707c28></Sizes></Row1><Row2><Sizes/></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6></Top><Left><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>662</Bottom><Right>344</Right><x>-2</x><y>-2</y><xscreen>346</xscreen><yscreen>254</yscreen><sizeHorzCX>205952</sizeHorzCX><sizeHorzCY>258656</sizeHorzCY><sizeVertCX>205952</sizeVertCX><sizeVertCY>676171</sizeVertCY></Rect></Wnd1></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>252</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>254</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>258656</sizeHorzCY><sizeVertCX>205952</sizeVertCX><sizeVertCY>258656</sizeVertCY></Rect></Wnd0></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions> + <Top><Row0><Sizes><Toolbar-013362c8><key>iaridepm.enu1</key></Toolbar-013362c8></Sizes></Row0><Row1><Sizes><Toolbar-0b06e580><key>debuggergui.enu1</key></Toolbar-0b06e580><Toolbar-0ad5a4f8><key>rl78ocd.enu1</key></Toolbar-0ad5a4f8></Sizes></Row1><Row2><Sizes/></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19><Row20><Sizes/></Row20><Row21><Sizes/></Row21><Row22><Sizes/></Row22><Row23><Sizes/></Row23><Row24><Sizes/></Row24><Row25><Sizes/></Row25><Row26><Sizes/></Row26><Row27><Sizes/></Row27><Row28><Sizes/></Row28><Row29><Sizes/></Row29><Row30><Sizes/></Row30><Row31><Sizes/></Row31><Row32><Sizes/></Row32><Row33><Sizes/></Row33><Row34><Sizes/></Row34><Row35><Sizes/></Row35><Row36><Sizes/></Row36></Top><Left><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>662</Bottom><Right>344</Right><x>-2</x><y>-2</y><xscreen>346</xscreen><yscreen>254</yscreen><sizeHorzCX>205952</sizeHorzCX><sizeHorzCY>258656</sizeHorzCY><sizeVertCX>205952</sizeVertCX><sizeVertCY>676171</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>252</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>254</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>258656</sizeHorzCY><sizeVertCX>205952</sizeVertCX><sizeVertCY>258656</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions> </Desktop> </Project> diff --git a/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni b/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni index f1f403d76d..9c561957f8 100644 --- a/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni +++ b/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.dni @@ -15,7 +15,7 @@ TypeViolation=1 UnspecRange=1 ActionState=1 [DebugChecksum] -Checksum=-185012109 +Checksum=-1910636464 [DisAssemblyWindow] NumStates=_ 1 State 1=_ 1 @@ -177,7 +177,8 @@ Mode=0 Graph=0 Symbiont=0 [Breakpoints] -Count=0 +Bp0=_ "STD_CODE" "{$PROJ_DIR$\..\..\Source\portable\MemMang\heap_1.c}.121.4@1" 1 0 0 0 "" 0 "" +Count=1 [Aliases] A0=_ "C:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87" "E:\Data\RL78_STICK\FreeRTOSV6.1.1\Source\portable\IAR\RL78\portasm.s87" Count=1 diff --git a/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt b/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt index 670b6fff63..12f572b343 100644 --- a/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt +++ b/Demo/RL78_RL78G13_Promo_Board_IAR/settings/rtosdemo.wsdt @@ -25,7 +25,7 @@ <Factory>Workspace</Factory> <Session> - <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source</ExpandedNode><ExpandedNode>RTOSDemo/Demo Source/StandardDemos</ExpandedNode><ExpandedNode>RTOSDemo/Kernel Source</ExpandedNode></NodeDict></Session> + <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode></NodeDict></Session> </Tab> </Tabs> @@ -35,14 +35,14 @@ - <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>157</YPos><SelStart>10672</SelStart><SelEnd>10672</SelEnd></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\Common\Minimal\semtest.c</Filename><XPos>0</XPos><YPos>248</YPos><SelStart>11198</SelStart><SelEnd>11228</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> + <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>134</YPos><SelStart>6308</SelStart><SelEnd>6308</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor> <Positions> - <Top><Row0><Sizes><Toolbar-013362c8><key>iaridepm.enu1</key></Toolbar-013362c8></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>629</Bottom><Right>318</Right><x>-2</x><y>-2</y><xscreen>263</xscreen><yscreen>200</yscreen><sizeHorzCX>156548</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>190476</sizeVertCX><sizeVertCY>642566</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>309</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>311</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>316701</sizeHorzCY><sizeVertCX>205357</sizeVertCX><sizeVertCY>258656</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions> + <Top><Row0><Sizes><Toolbar-013362c8><key>iaridepm.enu1</key></Toolbar-013362c8></Sizes></Row0><Row1><Sizes/></Row1><Row2><Sizes/></Row2><Row3><Sizes/></Row3><Row4><Sizes/></Row4><Row5><Sizes/></Row5><Row6><Sizes/></Row6><Row7><Sizes/></Row7><Row8><Sizes/></Row8><Row9><Sizes/></Row9><Row10><Sizes/></Row10><Row11><Sizes/></Row11><Row12><Sizes/></Row12><Row13><Sizes/></Row13><Row14><Sizes/></Row14><Row15><Sizes/></Row15><Row16><Sizes/></Row16><Row17><Sizes/></Row17><Row18><Sizes/></Row18><Row19><Sizes/></Row19><Row20><Sizes/></Row20><Row21><Sizes/></Row21><Row22><Sizes/></Row22><Row23><Sizes/></Row23><Row24><Sizes/></Row24><Row25><Sizes/></Row25><Row26><Sizes/></Row26><Row27><Sizes/></Row27><Row28><Sizes/></Row28><Row29><Sizes/></Row29><Row30><Sizes/></Row30><Row31><Sizes/></Row31><Row32><Sizes/></Row32><Row33><Sizes/></Row33><Row34><Sizes/></Row34><Row35><Sizes/></Row35><Row36><Sizes/></Row36><Row37><Sizes/></Row37><Row38><Sizes/></Row38></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>629</Bottom><Right>318</Right><x>-2</x><y>-2</y><xscreen>263</xscreen><yscreen>200</yscreen><sizeHorzCX>156548</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>190476</sizeVertCX><sizeVertCY>642566</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>309</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>311</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>316701</sizeHorzCY><sizeVertCX>205357</sizeVertCX><sizeVertCY>258656</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions> </Desktop> </Workspace>