]> git.sur5r.net Git - freertos/commitdiff
Add GCC ARM Cortex-M4F MPU port.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 18 May 2016 10:41:28 +0000 (10:41 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 18 May 2016 10:41:28 +0000 (10:41 +0000)
Add RVDS ARM Cortex-M4F MPU port.
Increase the size of each buffer allocated to pbufs in the Microblaze lwIP demo to prevent pbufs chaining.
Use _start as the top of the stack for each Microblaze task, rather than NULL, as NULL was causing the Xilinx SDK to try and unwind the stack too far.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2458 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/GCC_Specific/RTOSDemo.uvguix.barryri [deleted file]
FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/GCC_Specific/sections.ld
FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/lwipopts.h
FreeRTOS/Source/portable/Common/mpu_wrappers.c
FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/port.c
FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/port.c [new file with mode: 0644]
FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/portmacro.h [new file with mode: 0644]
FreeRTOS/Source/portable/GCC/MicroBlazeV9/port.c
FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/port.c [new file with mode: 0644]
FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/portmacro.h [new file with mode: 0644]

diff --git a/FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/GCC_Specific/RTOSDemo.uvguix.barryri b/FreeRTOS/Demo/CORTEX_MPU_Simulator_Keil_GCC/GCC_Specific/RTOSDemo.uvguix.barryri
deleted file mode 100644 (file)
index 867b36c..0000000
+++ /dev/null
@@ -1,2646 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_guix.xsd">
-
-  <SchemaVersion>-5.1</SchemaVersion>
-
-  <Header>### uVision Project, (C) Keil Software</Header>
-
-  <ViewPool/>
-
-  <SECTreeCtrl>
-    <View>
-      <WinId>38003</WinId>
-      <ViewName>Registers</ViewName>
-      <TableColWidths>115 235</TableColWidths>
-    </View>
-    <View>
-      <WinId>346</WinId>
-      <ViewName>Code Coverage</ViewName>
-      <TableColWidths>868 438</TableColWidths>
-    </View>
-    <View>
-      <WinId>204</WinId>
-      <ViewName>Performance Analyzer</ViewName>
-      <TableColWidths>1028 154 154 100</TableColWidths>
-    </View>
-  </SECTreeCtrl>
-
-  <TreeListPane>
-    <View>
-      <WinId>1506</WinId>
-      <ViewName>Symbols</ViewName>
-      <UserString></UserString>
-      <TableColWidths>70 70 70</TableColWidths>
-    </View>
-    <View>
-      <WinId>1936</WinId>
-      <ViewName>Watch 1</ViewName>
-      <UserString></UserString>
-      <TableColWidths>167 70 70</TableColWidths>
-    </View>
-    <View>
-      <WinId>1937</WinId>
-      <ViewName>Watch 2</ViewName>
-      <UserString></UserString>
-      <TableColWidths>70 70 70</TableColWidths>
-    </View>
-    <View>
-      <WinId>1935</WinId>
-      <ViewName>Call Stack + Locals</ViewName>
-      <UserString></UserString>
-      <TableColWidths>70 70 70</TableColWidths>
-    </View>
-    <View>
-      <WinId>2506</WinId>
-      <ViewName>Trace Data</ViewName>
-      <UserString>FiltIdx=0;DescrEn=0;DescrHeight=4;FuncTrc=1;FindType=8;ColWidths=004B00870082005F004600E600C80096</UserString>
-      <TableColWidths>75 135 95 70 230 200 150</TableColWidths>
-    </View>
-  </TreeListPane>
-
-  <WindowSettings>
-    <LogicAnalizer>
-      <ShowLACursor>0</ShowLACursor>
-      <ShowSignalInfo>0</ShowSignalInfo>
-      <ShowCycles>0</ShowCycles>
-      <LeftSideBarSize>50</LeftSideBarSize>
-      <TimeBaseIndex>16</TimeBaseIndex>
-    </LogicAnalizer>
-  </WindowSettings>
-
-  <WinLayoutEx>
-    <sActiveDebugView></sActiveDebugView>
-    <WindowPosition>
-      <length>44</length>
-      <flags>2</flags>
-      <showCmd>3</showCmd>
-      <MinPosition>
-        <xPos>-1</xPos>
-        <yPos>-1</yPos>
-      </MinPosition>
-      <MaxPosition>
-        <xPos>-1</xPos>
-        <yPos>-1</yPos>
-      </MaxPosition>
-      <NormalPosition>
-        <Top>0</Top>
-        <Left>351</Left>
-        <Right>1293</Right>
-        <Bottom>872</Bottom>
-      </NormalPosition>
-    </WindowPosition>
-    <MDIClientArea>
-      <RegID>0</RegID>
-      <MDITabState>
-        <Len>857</Len>
-        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000600000002000000010000004C433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C536F757263655C706F727461626C655C436F6D6D6F6E5C6D70755F77726170706572732E63000000000E6D70755F77726170706572732E6300000000F7B88600FFFFFFFF5A433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C44656D6F5C434F525445585F4D50555F53696D756C61746F725F4B65696C5F4743435C4672656552544F53436F6E6669672E6800000000104672656552544F53436F6E6669672E68000000009CC1B600FFFFFFFF50433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C44656D6F5C434F525445585F4D50555F53696D756C61746F725F4B65696C5F4743435C6D61696E2E6300000000066D61696E2E6300000000BCA8E100FFFFFFFF4D433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C536F757263655C706F727461626C655C4743435C41524D5F434D335F4D50555C706F72742E630000000006706F72742E6300000000F0A0A100FFFFFFFF67433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C44656D6F5C434F525445585F4D50555F53696D756C61746F725F4B65696C5F4743435C4743435F53706563696669635C737461727475705F41524D434D342E530000000010737461727475705F41524D434D342E5300000000BECEA100FFFFFFFF52433A5C455C4465765C4672656552544F535C576F726B696E67436F70795C4672656552544F535C536F757263655C706F727461626C655C4743435C41524D5F434D335F4D50555C706F72746D6163726F2E68000000000B706F72746D6163726F2E6800000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000110100005E0000008007000050030000</Data>
-      </MDITabState>
-    </MDIClientArea>
-    <ViewEx>
-      <ViewType>0</ViewType>
-      <ViewName>Build</ViewName>
-      <Window>
-        <RegID>-1</RegID>
-        <PaneID>-1</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>D60000004B000000E4040000DB000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>D60000005E000000E4040000EE000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1005</RegID>
-        <PaneID>1005</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000000A01000024030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>109</RegID>
-        <PaneID>109</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000000A01000024030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>72000000850000006C010000C7020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1465</RegID>
-        <PaneID>1465</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1466</RegID>
-        <PaneID>1466</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1467</RegID>
-        <PaneID>1467</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1468</RegID>
-        <PaneID>1468</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1506</RegID>
-        <PaneID>1506</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>16384</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1913</RegID>
-        <PaneID>1913</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>D900000062000000E1040000C2000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1935</RegID>
-        <PaneID>1935</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1936</RegID>
-        <PaneID>1936</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1937</RegID>
-        <PaneID>1937</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1939</RegID>
-        <PaneID>1939</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1940</RegID>
-        <PaneID>1940</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1941</RegID>
-        <PaneID>1941</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1942</RegID>
-        <PaneID>1942</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>195</RegID>
-        <PaneID>195</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000000A01000024030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>72000000850000006C010000C7020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>196</RegID>
-        <PaneID>196</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000000A01000024030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>72000000850000006C010000C7020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>197</RegID>
-        <PaneID>197</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000580300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>198</RegID>
-        <PaneID>198</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>000000001B020000E4040000BF020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>199</RegID>
-        <PaneID>199</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000580300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>203</RegID>
-        <PaneID>203</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>D900000062000000E1040000C2000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>204</RegID>
-        <PaneID>204</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>D900000062000000E1040000C2000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>221</RegID>
-        <PaneID>221</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>00000000000000000000000000000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>2506</RegID>
-        <PaneID>2506</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>2507</RegID>
-        <PaneID>2507</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>343</RegID>
-        <PaneID>343</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>D900000062000000E1040000C2000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>346</RegID>
-        <PaneID>346</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>D900000062000000E1040000C2000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35824</RegID>
-        <PaneID>35824</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>D900000062000000E1040000C2000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35885</RegID>
-        <PaneID>35885</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35886</RegID>
-        <PaneID>35886</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35887</RegID>
-        <PaneID>35887</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35888</RegID>
-        <PaneID>35888</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35889</RegID>
-        <PaneID>35889</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35890</RegID>
-        <PaneID>35890</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35891</RegID>
-        <PaneID>35891</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35892</RegID>
-        <PaneID>35892</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35893</RegID>
-        <PaneID>35893</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35894</RegID>
-        <PaneID>35894</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35895</RegID>
-        <PaneID>35895</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35896</RegID>
-        <PaneID>35896</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35897</RegID>
-        <PaneID>35897</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35898</RegID>
-        <PaneID>35898</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35899</RegID>
-        <PaneID>35899</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35900</RegID>
-        <PaneID>35900</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35901</RegID>
-        <PaneID>35901</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35902</RegID>
-        <PaneID>35902</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35903</RegID>
-        <PaneID>35903</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35904</RegID>
-        <PaneID>35904</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35905</RegID>
-        <PaneID>35905</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>1504000062000000E104000012020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>38003</RegID>
-        <PaneID>38003</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000000A01000024030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>72000000850000006C010000C7020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>38007</RegID>
-        <PaneID>38007</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000580300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000E402000015010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>436</RegID>
-        <PaneID>436</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000580300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>72000000850000006C010000C7020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>437</RegID>
-        <PaneID>437</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>440</RegID>
-        <PaneID>440</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0300000032020000E1040000A6020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>7200000085000000440100004D010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59392</RegID>
-        <PaneID>59392</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>882</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>00000000000000007D0300001A000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59393</RegID>
-        <PaneID>0</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>000000006E0400008007000081040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59399</RegID>
-        <PaneID>59399</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>439</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>1</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>000000001A000000C201000034000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59400</RegID>
-        <PaneID>59400</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>572</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>2</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0000000034000000470200004E000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <DockMan>
-        <Len>2619</Len>
-        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000DB000000E4040000DF000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000D60000005E000000E4040000EE000000D60000004B000000E4040000DB0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF0E0400004B000000120400002B020000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000120400005E000000E40400003E020000120400004B000000E40400002B0200000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF0D0100004B000000110100003D03000001000000020000100400000001000000D2FEFFFF57050000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000005E0000000D01000050030000000000004B0000000D0100003D0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000017020000E40400001B02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000002E020000E4040000D2020000000000001B020000E4040000BF02000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF720200001B02000076020000BF02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000003D03000080070000410300000100000001000010040000000100000099FCFFFFB1000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000001000000000000005403000080070000810400000000000041030000800700006E0400000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
-      </DockMan>
-      <ToolBar>
-        <RegID>59392</RegID>
-        <Name>File</Name>
-        <Buttons>
-          <Len>2234</Len>
-          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C636F6E66696741535345525496000000000000000B000C636F6E6669674153534552540008546F44656C65746511707276526169736550726976696C6567650870727652616973650B706F727452455345545F501476506F7274526573657450726976696C6567656413706F727452455345545F50524956494C4547451378506F7274526169736550726976696C656765237374617469632042617365547970655F7420707276526169736550726976696C65676510706F72744E5649435F5356435F5052490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data>
-        </Buttons>
-        <OriginalItems>
-          <Len>1423</Len>
-          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
-        </OriginalItems>
-        <OrigResetItems>
-          <Len>1423</Len>
-          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data>
-        </OrigResetItems>
-      </ToolBar>
-      <ToolBar>
-        <RegID>59399</RegID>
-        <Name>Build</Name>
-        <Buttons>
-          <Len>694</Len>
-          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000001052544F5344656D6F5F4743435F4D5055960000000000000001001052544F5344656D6F5F4743435F4D5055000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000</Data>
-        </Buttons>
-        <OriginalItems>
-          <Len>583</Len>
-          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
-        </OriginalItems>
-        <OrigResetItems>
-          <Len>583</Len>
-          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data>
-        </OrigResetItems>
-      </ToolBar>
-      <ToolBar>
-        <RegID>59400</RegID>
-        <Name>Debug</Name>
-        <Buttons>
-          <Len>2247</Len>
-          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B000000000000310000000857617463682026320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F777300000000000000000000000001000000010000000000000000000000010000000400138093070000000000003300000008554152542023263100000000000000000000000001000000010000000000000000000000010000000000138094070000000000003300000008554152542023263200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000008554152542023263300000000000000000000000001000000010000000000000000000000010000000000138096070000000000003300000015446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7201000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data>
-        </Buttons>
-        <OriginalItems>
-          <Len>898</Len>
-          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
-        </OriginalItems>
-        <OrigResetItems>
-          <Len>898</Len>
-          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data>
-        </OrigResetItems>
-      </ToolBar>
-      <ControlBarsSummary>
-        <Bars>0</Bars>
-        <ScreenCX>1920</ScreenCX>
-        <ScreenCY>1200</ScreenCY>
-      </ControlBarsSummary>
-    </ViewEx>
-    <ViewEx>
-      <ViewType>1</ViewType>
-      <ViewName>Debug</ViewName>
-      <Window>
-        <RegID>-1</RegID>
-        <PaneID>-1</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>6C0100004B00000090060000F5000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>6C0100005E0000009006000008010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1005</RegID>
-        <PaneID>1005</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000006501000073030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>109</RegID>
-        <PaneID>109</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000006501000073030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>220100003501000040020000D1030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1465</RegID>
-        <PaneID>1465</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1466</RegID>
-        <PaneID>1466</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1467</RegID>
-        <PaneID>1467</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1468</RegID>
-        <PaneID>1468</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1506</RegID>
-        <PaneID>1506</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>16384</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1913</RegID>
-        <PaneID>1913</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>6F010000620000008D060000DC000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1935</RegID>
-        <PaneID>1935</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1936</RegID>
-        <PaneID>1936</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1937</RegID>
-        <PaneID>1937</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1939</RegID>
-        <PaneID>1939</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1940</RegID>
-        <PaneID>1940</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1941</RegID>
-        <PaneID>1941</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>1942</RegID>
-        <PaneID>1942</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>195</RegID>
-        <PaneID>195</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000006501000073030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>220100003501000040020000D1030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>196</RegID>
-        <PaneID>196</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000006501000073030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>220100003501000040020000D1030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>197</RegID>
-        <PaneID>197</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000A00200009505000016030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>198</RegID>
-        <PaneID>198</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>0000000090030000C00300006E040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>199</RegID>
-        <PaneID>199</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000A00200009505000016030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>203</RegID>
-        <PaneID>203</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>6F010000620000008D060000DC000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>204</RegID>
-        <PaneID>204</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>6F010000620000008D060000DC000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>221</RegID>
-        <PaneID>221</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>00000000000000000000000000000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>2506</RegID>
-        <PaneID>2506</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>2507</RegID>
-        <PaneID>2507</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>343</RegID>
-        <PaneID>343</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>6F010000620000008D060000DC000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>346</RegID>
-        <PaneID>346</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>6F010000620000008D060000DC000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35824</RegID>
-        <PaneID>35824</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>6F010000620000008D060000DC000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35885</RegID>
-        <PaneID>35885</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35886</RegID>
-        <PaneID>35886</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35887</RegID>
-        <PaneID>35887</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35888</RegID>
-        <PaneID>35888</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35889</RegID>
-        <PaneID>35889</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35890</RegID>
-        <PaneID>35890</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35891</RegID>
-        <PaneID>35891</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35892</RegID>
-        <PaneID>35892</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35893</RegID>
-        <PaneID>35893</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35894</RegID>
-        <PaneID>35894</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35895</RegID>
-        <PaneID>35895</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35896</RegID>
-        <PaneID>35896</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35897</RegID>
-        <PaneID>35897</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35898</RegID>
-        <PaneID>35898</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35899</RegID>
-        <PaneID>35899</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35900</RegID>
-        <PaneID>35900</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35901</RegID>
-        <PaneID>35901</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35902</RegID>
-        <PaneID>35902</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35903</RegID>
-        <PaneID>35903</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35904</RegID>
-        <PaneID>35904</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>35905</RegID>
-        <PaneID>35905</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>AB04000062000000950500006C020000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000120200001B020000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>38003</RegID>
-        <PaneID>38003</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000620000006501000073030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>220100003501000040020000D1030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>38007</RegID>
-        <PaneID>38007</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000A00200009505000016030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>2201000035010000EE030000DB010000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>436</RegID>
-        <PaneID>436</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>03000000A00200009505000016030000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>220100003501000040020000D1030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>437</RegID>
-        <PaneID>437</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>440</RegID>
-        <PaneID>440</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>32768</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>C7030000A70300007D07000055040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>F601000069020000B2050000B0030000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59392</RegID>
-        <PaneID>59392</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>882</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>00000000000000007D0300001A000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59393</RegID>
-        <PaneID>0</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>32767</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>4096</RecentFrameAlignment>
-        <RecentRowIndex>0</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>000000006E0400008007000081040000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59399</RegID>
-        <PaneID>59399</PaneID>
-        <IsVisible>0</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>439</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>1</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>000000001A000000C201000034000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <Window>
-        <RegID>59400</RegID>
-        <PaneID>59400</PaneID>
-        <IsVisible>1</IsVisible>
-        <IsFloating>0</IsFloating>
-        <IsTabbed>0</IsTabbed>
-        <IsActivated>0</IsActivated>
-        <MRUWidth>572</MRUWidth>
-        <PinState>0</PinState>
-        <RecentFrameAlignment>8192</RecentFrameAlignment>
-        <RecentRowIndex>2</RecentRowIndex>
-        <RectRecentDocked>
-          <Len>16</Len>
-          <Data>040000001A0000004B02000034000000</Data>
-        </RectRecentDocked>
-        <RectRecentFloat>
-          <Len>16</Len>
-          <Data>0A0000000A0000006E0000006E000000</Data>
-        </RectRecentFloat>
-      </Window>
-      <DockMan>
-        <Len>2694</Len>
-        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF6C010000F500000090060000F900000000000000010000000400000001000000C2FEFFFFB4000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E6500200000000000006C0100005E00000090060000080100006C0100004B00000090060000F50000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFA40400004B000000A804000085020000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000A80400005E0000009805000098020000A80400004B00000098050000850200000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF680100004B0000006C0100008C0300000100000002000010040000000100000012FFFFFF87060000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000005E000000680100009F030000000000004B000000680100008C0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000008C03000080070000900300000100000001000010040000000100000008FEFFFF2701000000000000000000000000000001000000000000000000000001000000000000000000000001000000FFFFFFFFC003000094020000C40300006E04000000000000020000000400000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000001000000C4030000A30300008007000081040000C403000090030000800700006E04000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF050000000000000002000000000000000100000002000000FFFFFFFFC003000090030000C40300006E0400000100000002000010040000000000000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000850200009805000089020000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000000000000000000009C02000098050000420300000000000089020000980500002F0300000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
-      </DockMan>
-      <ToolBar>
-        <RegID>59392</RegID>
-        <Name>File</Name>
-        <Buttons>
-          <Len>2234</Len>
-          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C636F6E66696741535345525496000000000000000B000C636F6E6669674153534552540008546F44656C65746511707276526169736550726976696C6567650870727652616973650B706F727452455345545F501476506F7274526573657450726976696C6567656413706F727452455345545F50524956494C4547451378506F7274526169736550726976696C656765237374617469632042617365547970655F7420707276526169736550726976696C65676510706F72744E5649435F5356435F5052490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020001001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6572030000</Data>
-        </Buttons>
-        <OriginalItems>
-          <Len>1423</Len>
-          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
-        </OriginalItems>
-        <OrigResetItems>
-          <Len>1423</Len>
-          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data>
-        </OrigResetItems>
-      </ToolBar>
-      <ToolBar>
-        <RegID>59399</RegID>
-        <Name>Build</Name>
-        <Buttons>
-          <Len>657</Len>
-          <Data>00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000</Data>
-        </Buttons>
-        <OriginalItems>
-          <Len>583</Len>
-          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
-        </OriginalItems>
-        <OrigResetItems>
-          <Len>583</Len>
-          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data>
-        </OrigResetItems>
-      </ToolBar>
-      <ToolBar>
-        <RegID>59400</RegID>
-        <Name>Debug</Name>
-        <Buttons>
-          <Len>2236</Len>
-          <Data>00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B000000000000310000000857617463682026320000000000000000000000000100000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F727920263400000000000000000000000001000000010000000000000000000000010000000000138010010000020000003300000008554152542023263100000000000000000000000001000000010000000000000000000000010000000400138093070000000000003300000008554152542023263100000000000000000000000001000000010000000000000000000000010000000000138094070000000000003300000008554152542023263200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000008554152542023263300000000000000000000000001000000010000000000000000000000010000000000138096070000000000003300000015446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F7201000000000000000100000000000000010000000000000000000000010000000000000000000544656275673C020000</Data>
-        </Buttons>
-        <OriginalItems>
-          <Len>898</Len>
-          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
-        </OriginalItems>
-        <OrigResetItems>
-          <Len>898</Len>
-          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data>
-        </OrigResetItems>
-      </ToolBar>
-      <ControlBarsSummary>
-        <Bars>0</Bars>
-        <ScreenCX>1920</ScreenCX>
-        <ScreenCY>1200</ScreenCY>
-      </ControlBarsSummary>
-    </ViewEx>
-  </WinLayoutEx>
-
-  <MDIGroups>
-    <Orientation>1</Orientation>
-    <ActiveMDIGroup>0</ActiveMDIGroup>
-    <MDIGroup>
-      <Size>100</Size>
-      <ActiveTab>2</ActiveTab>
-      <Doc>
-        <Name>..\..\..\Source\portable\Common\mpu_wrappers.c</Name>
-        <ColumnNumber>2</ColumnNumber>
-        <TopLine>1071</TopLine>
-        <CurrentLine>1136</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>..\FreeRTOSConfig.h</Name>
-        <ColumnNumber>68</ColumnNumber>
-        <TopLine>147</TopLine>
-        <CurrentLine>194</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>..\main.c</Name>
-        <ColumnNumber>0</ColumnNumber>
-        <TopLine>510</TopLine>
-        <CurrentLine>382</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>..\..\..\Source\portable\GCC\ARM_CM3_MPU\port.c</Name>
-        <ColumnNumber>23</ColumnNumber>
-        <TopLine>382</TopLine>
-        <CurrentLine>424</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>.\startup_ARMCM4.S</Name>
-        <ColumnNumber>0</ColumnNumber>
-        <TopLine>125</TopLine>
-        <CurrentLine>139</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>C:\E\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Source\portable\GCC\ARM_CM3_MPU\portmacro.h</Name>
-        <ColumnNumber>49</ColumnNumber>
-        <TopLine>241</TopLine>
-        <CurrentLine>253</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-    </MDIGroup>
-  </MDIGroups>
-
-</ProjectGui>
index c7515cb470941460f93c742f17a44d18ff2acf0a..ac94a5d11bb9a6a35ad62fa29c5fb913fd2216f4 100644 (file)
@@ -5,22 +5,6 @@ MEMORY
   RAM (rw)         : ORIGIN = 0x20000000, LENGTH = 0x8000\r
 }\r
 \r
-/* Variables required by FreeRTOS MPU. */\r
-_Privileged_Functions_Region_Size = 16K;\r
-_Privileged_Data_Region_Size = 256;\r
-\r
-__FLASH_segment_start__ = ORIGIN( ROM );\r
-__FLASH_segment_end__ = __FLASH_segment_start__ + LENGTH( ROM );\r
-\r
-__privileged_functions_start__ = ORIGIN( ROM );\r
-__privileged_functions_end__ = __privileged_functions_start__ + _Privileged_Functions_Region_Size;\r
-\r
-__SRAM_segment_start__ = ORIGIN( RAM );\r
-__SRAM_segment_end__ = __SRAM_segment_start__ + LENGTH( RAM );\r
-\r
-__privileged_data_start__ = ORIGIN( RAM );\r
-__privileged_data_end__ = ORIGIN( RAM ) + _Privileged_Data_Region_Size;\r
-\r
 /* Variables used by FreeRTOS-MPU. */\r
 _Privileged_Functions_Region_Size = 16K;\r
 _Privileged_Data_Region_Size = 256;\r
index 567026d67ad1769ad4c29d833e54618df16adfa6..cfd4639128194592672fc13b2f9bdd7867c4cb35 100644 (file)
@@ -70,7 +70,7 @@ void vLwipAppsReleaseTxBuffer( void );
 #define LWIP_SO_RCVTIMEO                               1
 #define LWIP_SO_RCVBUF                                 1
 
-#define LWIP_DEBUG
+#define NOT_LWIP_DEBUG
 #ifdef LWIP_DEBUG
 
 #define LWIP_DBG_MIN_LEVEL        LWIP_DBG_LEVEL_ALL // LWIP_DBG_LEVEL_SERIOUS
@@ -112,7 +112,7 @@ void vLwipAppsReleaseTxBuffer( void );
    byte alignment -> define MEM_ALIGNMENT to 2. */
 /* MSVC port: intel processors don't need 4-byte alignment,
    but are faster that way! */
-#define MEM_ALIGNMENT                  4
+#define MEM_ALIGNMENT                  64 /* For Eth lite. */
 
 /* MEM_SIZE: the size of the heap memory. If the application will send
 a lot of data that needs to be copied, this should be set high. */
@@ -159,8 +159,8 @@ a lot of data that needs to be copied, this should be set high. */
 /* MEMP_NUM_TCPIP_MSG_*: the number of struct tcpip_msg, which is used
    for sequential API communication and incoming packets. Used in
    src/api/tcpip.c. */
-#define MEMP_NUM_TCPIP_MSG_API   8
-#define MEMP_NUM_TCPIP_MSG_INPKT 8
+#define MEMP_NUM_TCPIP_MSG_API   16
+#define MEMP_NUM_TCPIP_MSG_INPKT 16
 
 #define MEMP_NUM_ARP_QUEUE             10
 
@@ -169,7 +169,7 @@ a lot of data that needs to be copied, this should be set high. */
 #define PBUF_POOL_SIZE                 40
 
 /* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
-#define PBUF_POOL_BUFSIZE              512
+#define PBUF_POOL_BUFSIZE              1518 /* Max eth frame size so no chaining. */
 
 /* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
    link level header. */
index 18435cb2f794e932fc1492a9fff6ec550fbea132..06a53802cb4cd71ff9425f70c63bd8fabb772976 100644 (file)
@@ -337,7 +337,7 @@ BaseType_t xRunningPrivileged = xPortRaisePrivilege();
 #endif\r
 /*-----------------------------------------------------------*/\r
 \r
-#if ( configUSE_TRACE_FACILITY == 1 )\r
+#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )\r
        void MPU_vTaskList( char *pcWriteBuffer )\r
        {\r
        BaseType_t xRunningPrivileged = xPortRaisePrivilege();\r
index 9997e5642ce14d04e4461c478f6d3eb48bdd9f13..61268361a8274f6d904333f891d06e5f5bc77c87 100644 (file)
@@ -384,7 +384,17 @@ BaseType_t xPortStartScheduler( void )
        uxCriticalNesting = 0;\r
 \r
        /* Start the first task. */\r
-       __asm volatile( "       svc %0                  \n"\r
+       __asm volatile(\r
+                                       " ldr r0, =0xE000ED08   \n" /* Use the NVIC offset register to locate the stack. */\r
+                                       " ldr r0, [r0]                  \n"\r
+                                       " ldr r0, [r0]                  \n"\r
+                                       " msr msp, r0                   \n" /* Set the msp back to the start of the stack. */\r
+                                       " cpsie i                               \n" /* Globally enable interrupts. */\r
+                                       " cpsie f                               \n"\r
+                                       " dsb                                   \n"\r
+                                       " isb                                   \n"\r
+                                       " svc %0                                \n" /* System call to start first task. */\r
+                                       " nop                                   \n"\r
                                        :: "i" (portSVC_START_SCHEDULER) );\r
 \r
        /* Should not get here! */\r
diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/port.c b/FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/port.c
new file mode 100644 (file)
index 0000000..842a9c5
--- /dev/null
@@ -0,0 +1,819 @@
+/*\r
+    FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
+\r
+    ***************************************************************************\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+    ***************************************************************************\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that is more than just the market leader, it     *\r
+     *    is the industry's de facto standard.                               *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly while simultaneously helping     *\r
+     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
+     *    tutorial book, reference manual, or both:                          *\r
+     *    http://www.FreeRTOS.org/Documentation                              *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+    the FAQ page "My application does not run, what could be wrong?".  Have you\r
+    defined configASSERT()?\r
+\r
+    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+    embedded software for free we request you assist our global community by\r
+    participating in the support forum.\r
+\r
+    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+    be as productive as possible as early as possible.  Now you can receive\r
+    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+    Ltd, and the world's leading authority on the world's leading RTOS.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
+    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
+    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and commercial middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/*-----------------------------------------------------------\r
+ * Implementation of functions defined in portable.h for the ARM CM3 port.\r
+ *----------------------------------------------------------*/\r
+\r
+/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\r
+all the API functions to use the MPU wrappers.  That should only be done when\r
+task.h is included from an application file. */\r
+#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "queue.h"\r
+#include "event_groups.h"\r
+#include "mpu_prototypes.h"\r
+\r
+#ifndef __VFP_FP__\r
+       #error This port can only be used when the project options are configured to enable hardware floating point support.\r
+#endif\r
+\r
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r
+\r
+/* Constants required to access and manipulate the NVIC. */\r
+#define portNVIC_SYSTICK_CTRL_REG                              ( * ( ( volatile uint32_t * ) 0xe000e010 ) )\r
+#define portNVIC_SYSTICK_LOAD_REG                              ( * ( ( volatile uint32_t * ) 0xe000e014 ) )\r
+#define portNVIC_SYSPRI2_REG                                   ( *     ( ( volatile uint32_t * ) 0xe000ed20 ) )\r
+#define portNVIC_SYSPRI1_REG                                   ( * ( ( volatile uint32_t * ) 0xe000ed1c ) )\r
+#define portNVIC_SYS_CTRL_STATE_REG                            ( * ( ( volatile uint32_t * ) 0xe000ed24 ) )\r
+#define portNVIC_MEM_FAULT_ENABLE                              ( 1UL << 16UL )\r
+\r
+/* Constants required to access and manipulate the MPU. */\r
+#define portMPU_TYPE_REG                                               ( * ( ( volatile uint32_t * ) 0xe000ed90 ) )\r
+#define portMPU_REGION_BASE_ADDRESS_REG                        ( * ( ( volatile uint32_t * ) 0xe000ed9C ) )\r
+#define portMPU_REGION_ATTRIBUTE_REG                   ( * ( ( volatile uint32_t * ) 0xe000edA0 ) )\r
+#define portMPU_CTRL_REG                                               ( * ( ( volatile uint32_t * ) 0xe000ed94 ) )\r
+#define portEXPECTED_MPU_TYPE_VALUE                            ( 8UL << 8UL ) /* 8 regions, unified. */\r
+#define portMPU_ENABLE                                                 ( 0x01UL )\r
+#define portMPU_BACKGROUND_ENABLE                              ( 1UL << 2UL )\r
+#define portPRIVILEGED_EXECUTION_START_ADDRESS ( 0UL )\r
+#define portMPU_REGION_VALID                                   ( 0x10UL )\r
+#define portMPU_REGION_ENABLE                                  ( 0x01UL )\r
+#define portPERIPHERALS_START_ADDRESS                  0x40000000UL\r
+#define portPERIPHERALS_END_ADDRESS                            0x5FFFFFFFUL\r
+\r
+/* Constants required to access and manipulate the SysTick. */\r
+#define portNVIC_SYSTICK_CLK                                   ( 0x00000004UL )\r
+#define portNVIC_SYSTICK_INT                                   ( 0x00000002UL )\r
+#define portNVIC_SYSTICK_ENABLE                                        ( 0x00000001UL )\r
+#define portNVIC_PENDSV_PRI                                            ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL )\r
+#define portNVIC_SYSTICK_PRI                                   ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL )\r
+#define portNVIC_SVC_PRI                                               ( ( ( uint32_t ) configMAX_SYSCALL_INTERRUPT_PRIORITY - 1UL ) << 24UL )\r
+\r
+/* Constants required to manipulate the VFP. */\r
+#define portFPCCR                                                              ( ( volatile uint32_t * ) 0xe000ef34UL ) /* Floating point context control register. */\r
+#define portASPEN_AND_LSPEN_BITS                               ( 0x3UL << 30UL )\r
+\r
+/* Constants required to set up the initial stack. */\r
+#define portINITIAL_XPSR                                               ( 0x01000000UL )\r
+#define portINITIAL_EXEC_RETURN                                        ( 0xfffffffdUL )\r
+#define portINITIAL_CONTROL_IF_UNPRIVILEGED            ( 0x03 )\r
+#define portINITIAL_CONTROL_IF_PRIVILEGED              ( 0x02 )\r
+\r
+/* Constants required to check the validity of an interrupt priority. */\r
+#define portFIRST_USER_INTERRUPT_NUMBER                ( 16 )\r
+#define portNVIC_IP_REGISTERS_OFFSET_16        ( 0xE000E3F0 )\r
+#define portAIRCR_REG                                          ( * ( ( volatile uint32_t * ) 0xE000ED0C ) )\r
+#define portMAX_8_BIT_VALUE                                    ( ( uint8_t ) 0xff )\r
+#define portTOP_BIT_OF_BYTE                                    ( ( uint8_t ) 0x80 )\r
+#define portMAX_PRIGROUP_BITS                          ( ( uint8_t ) 7 )\r
+#define portPRIORITY_GROUP_MASK                                ( 0x07UL << 8UL )\r
+#define portPRIGROUP_SHIFT                                     ( 8UL )\r
+\r
+/* Offsets in the stack to the parameters when inside the SVC handler. */\r
+#define portOFFSET_TO_PC                                               ( 6 )\r
+\r
+/* For strict compliance with the Cortex-M spec the task start address should\r
+have bit-0 clear, as it is loaded into the PC on exit from an ISR. */\r
+#define portSTART_ADDRESS_MASK                         ( ( StackType_t ) 0xfffffffeUL )\r
+\r
+/* Each task maintains its own interrupt status in the critical nesting\r
+variable.  Note this is not saved as part of the task context as context\r
+switches can only occur when uxCriticalNesting is zero. */\r
+static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;\r
+\r
+/*\r
+ * Setup the timer to generate the tick interrupts.\r
+ */\r
+static void prvSetupTimerInterrupt( void ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Configure a number of standard MPU regions that are used by all tasks.\r
+ */\r
+static void prvSetupMPU( void ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Return the smallest MPU region size that a given number of bytes will fit\r
+ * into.  The region size is returned as the value that should be programmed\r
+ * into the region attribute register for that region.\r
+ */\r
+static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Checks to see if being called from the context of an unprivileged task, and\r
+ * if so raises the privilege level and returns false - otherwise does nothing\r
+ * other than return true.\r
+ */\r
+BaseType_t xPortRaisePrivilege( void ) __attribute__(( naked ));\r
+\r
+/*\r
+ * Standard FreeRTOS exception handlers.\r
+ */\r
+void xPortPendSVHandler( void ) __attribute__ (( naked )) PRIVILEGED_FUNCTION;\r
+void xPortSysTickHandler( void )  __attribute__ ((optimize("3"))) PRIVILEGED_FUNCTION;\r
+void vPortSVCHandler( void ) __attribute__ (( naked )) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Starts the scheduler by restoring the context of the first task to run.\r
+ */\r
+static void prvRestoreContextOfFirstTask( void ) __attribute__(( naked )) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * C portion of the SVC handler.  The SVC handler is split between an asm entry\r
+ * and a C wrapper for simplicity of coding and maintenance.\r
+ */\r
+static void prvSVCHandler( uint32_t *pulRegisters ) __attribute__(( noinline )) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Function to enable the VFP.\r
+ */\r
+ static void vPortEnableVFP( void ) __attribute__ (( naked ));\r
\r
+/*\r
+ * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure\r
+ * FreeRTOS API functions are not called from interrupts that have been assigned\r
+ * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.\r
+ */\r
+#if ( configASSERT_DEFINED == 1 )\r
+        static uint8_t ucMaxSysCallPriority = 0;\r
+        static uint32_t ulMaxPRIGROUPValue = 0;\r
+        static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const volatile uint8_t * const ) portNVIC_IP_REGISTERS_OFFSET_16;\r
+#endif /* configASSERT_DEFINED */\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * See header file for description.\r
+ */\r
+StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged )\r
+{\r
+       /* Simulate the stack frame as it would be created by a context switch\r
+       interrupt. */\r
+       pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */\r
+       *pxTopOfStack = portINITIAL_XPSR;       /* xPSR */\r
+       pxTopOfStack--;\r
+       *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK;    /* PC */\r
+       pxTopOfStack--;\r
+       *pxTopOfStack = 0;      /* LR */\r
+       pxTopOfStack -= 5;      /* R12, R3, R2 and R1. */\r
+       *pxTopOfStack = ( StackType_t ) pvParameters;   /* R0 */\r
+       \r
+       /* A save method is being used that requires each task to maintain its\r
+       own exec return value. */\r
+       pxTopOfStack--;\r
+       *pxTopOfStack = portINITIAL_EXEC_RETURN;\r
+       \r
+       pxTopOfStack -= 9;      /* R11, R10, R9, R8, R7, R6, R5 and R4. */\r
+\r
+       if( xRunPrivileged == pdTRUE )\r
+       {\r
+               *pxTopOfStack = portINITIAL_CONTROL_IF_PRIVILEGED;\r
+       }\r
+       else\r
+       {\r
+               *pxTopOfStack = portINITIAL_CONTROL_IF_UNPRIVILEGED;\r
+       }\r
+\r
+       return pxTopOfStack;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortSVCHandler( void )\r
+{\r
+       /* Assumes psp was in use. */\r
+       __asm volatile\r
+       (\r
+               #ifndef USE_PROCESS_STACK       /* Code should not be required if a main() is using the process stack. */\r
+                       "       tst lr, #4                                              \n"\r
+                       "       ite eq                                                  \n"\r
+                       "       mrseq r0, msp                                   \n"\r
+                       "       mrsne r0, psp                                   \n"\r
+               #else\r
+                       "       mrs r0, psp                                             \n"\r
+               #endif\r
+                       "       b %0                                                    \n"\r
+                       ::"i"(prvSVCHandler):"r0"\r
+       );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSVCHandler(     uint32_t *pulParam )\r
+{\r
+uint8_t ucSVCNumber;\r
+\r
+       /* The stack contains: r0, r1, r2, r3, r12, r14, the return address and\r
+       xPSR.  The first argument (r0) is pulParam[ 0 ]. */\r
+       ucSVCNumber = ( ( uint8_t * ) pulParam[ portOFFSET_TO_PC ] )[ -2 ];\r
+       switch( ucSVCNumber )\r
+       {\r
+               case portSVC_START_SCHEDULER    :       portNVIC_SYSPRI1_REG |= portNVIC_SVC_PRI;\r
+                                                                                       prvRestoreContextOfFirstTask();\r
+                                                                                       break;\r
+\r
+               case portSVC_YIELD                              :       portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r
+                                                                                       /* Barriers are normally not required\r
+                                                                                       but do ensure the code is completely\r
+                                                                                       within the specified behaviour for the\r
+                                                                                       architecture. */\r
+                                                                                       __asm volatile( "dsb" );\r
+                                                                                       __asm volatile( "isb" );\r
+\r
+                                                                                       break;\r
+\r
+               case portSVC_RAISE_PRIVILEGE    :       __asm volatile\r
+                                                                                       (\r
+                                                                                               "       mrs r1, control         \n" /* Obtain current control value. */\r
+                                                                                               "       bic r1, #1                      \n" /* Set privilege bit. */\r
+                                                                                               "       msr control, r1         \n" /* Write back new control value. */\r
+                                                                                               :::"r1"\r
+                                                                                       );\r
+                                                                                       break;\r
+\r
+               default                                                 :       /* Unknown SVC call. */\r
+                                                                                       break;\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvRestoreContextOfFirstTask( void )\r
+{\r
+       __asm volatile\r
+       (\r
+               "       ldr r0, =0xE000ED08                             \n" /* Use the NVIC offset register to locate the stack. */\r
+               "       ldr r0, [r0]                                    \n"\r
+               "       ldr r0, [r0]                                    \n"\r
+               "       msr msp, r0                                             \n" /* Set the msp back to the start of the stack. */\r
+               "       ldr     r3, pxCurrentTCBConst2          \n" /* Restore the context. */\r
+               "       ldr r1, [r3]                                    \n"\r
+               "       ldr r0, [r1]                                    \n" /* The first item in the TCB is the task top of stack. */\r
+               "       add r1, r1, #4                                  \n" /* Move onto the second item in the TCB... */\r
+               "       ldr r2, =0xe000ed9c                             \n" /* Region Base Address register. */\r
+               "       ldmia r1!, {r4-r11}                             \n" /* Read 4 sets of MPU registers. */\r
+               "       stmia r2!, {r4-r11}                             \n" /* Write 4 sets of MPU registers. */\r
+               "       ldmia r0!, {r3-r11, r14}                \n" /* Pop the registers that are not automatically saved on exception entry. */\r
+               "       msr control, r3                                 \n"\r
+               "       msr psp, r0                                             \n" /* Restore the task stack pointer. */\r
+               "       mov r0, #0                                              \n"\r
+               "       msr     basepri, r0                                     \n"\r
+               "       bx r14                                                  \n"\r
+               "                                                                       \n"\r
+               "       .align 4                                                \n"\r
+               "pxCurrentTCBConst2: .word pxCurrentTCB \n"\r
+       );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * See header file for description.\r
+ */\r
+BaseType_t xPortStartScheduler( void )\r
+{\r
+       /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See\r
+       http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\r
+       configASSERT( ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) );\r
+\r
+       #if( configASSERT_DEFINED == 1 )\r
+       {\r
+               volatile uint32_t ulOriginalPriority;\r
+               volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );\r
+               volatile uint8_t ucMaxPriorityValue;\r
+\r
+               /* Determine the maximum priority from which ISR safe FreeRTOS API\r
+               functions can be called.  ISR safe functions are those that end in\r
+               "FromISR".  FreeRTOS maintains separate thread and ISR API functions to\r
+               ensure interrupt entry is as fast and simple as possible.\r
+\r
+               Save the interrupt priority value that is about to be clobbered. */\r
+               ulOriginalPriority = *pucFirstUserPriorityRegister;\r
+\r
+               /* Determine the number of priority bits available.  First write to all\r
+               possible bits. */\r
+               *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;\r
+\r
+               /* Read the value back to see how many bits stuck. */\r
+               ucMaxPriorityValue = *pucFirstUserPriorityRegister;\r
+\r
+               /* Use the same mask on the maximum system call priority. */\r
+               ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;\r
+\r
+               /* Calculate the maximum acceptable priority group value for the number\r
+               of bits read back. */\r
+               ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;\r
+               while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )\r
+               {\r
+                       ulMaxPRIGROUPValue--;\r
+                       ucMaxPriorityValue <<= ( uint8_t ) 0x01;\r
+               }\r
+\r
+               /* Shift the priority group value back to its position within the AIRCR\r
+               register. */\r
+               ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;\r
+               ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;\r
+\r
+               /* Restore the clobbered interrupt priority register to its original\r
+               value. */\r
+               *pucFirstUserPriorityRegister = ulOriginalPriority;\r
+       }\r
+       #endif /* conifgASSERT_DEFINED */\r
+\r
+       /* Make PendSV and SysTick the same priority as the kernel, and the SVC\r
+       handler higher priority so it can be used to exit a critical section (where\r
+       lower priorities are masked). */\r
+       portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;\r
+       portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;\r
+\r
+       /* Configure the regions in the MPU that are common to all tasks. */\r
+       prvSetupMPU();\r
+\r
+       /* Start the timer that generates the tick ISR.  Interrupts are disabled\r
+       here already. */\r
+       prvSetupTimerInterrupt();\r
+\r
+       /* Initialise the critical nesting count ready for the first task. */\r
+       uxCriticalNesting = 0;\r
+\r
+       /* Ensure the VFP is enabled - it should be anyway. */\r
+       vPortEnableVFP();\r
+\r
+       /* Lazy save always. */\r
+       *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS;\r
+\r
+       /* Start the first task. */\r
+       __asm volatile(\r
+                                       " ldr r0, =0xE000ED08   \n" /* Use the NVIC offset register to locate the stack. */\r
+                                       " ldr r0, [r0]                  \n"\r
+                                       " ldr r0, [r0]                  \n"\r
+                                       " msr msp, r0                   \n" /* Set the msp back to the start of the stack. */\r
+                                       " cpsie i                               \n" /* Globally enable interrupts. */\r
+                                       " cpsie f                               \n"\r
+                                       " dsb                                   \n"\r
+                                       " isb                                   \n"\r
+                                       " svc %0                                \n" /* System call to start first task. */\r
+                                       " nop                                   \n"\r
+                                       :: "i" (portSVC_START_SCHEDULER) );\r
+\r
+       /* Should not get here! */\r
+       return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortEndScheduler( void )\r
+{\r
+       /* Not implemented in ports where there is nothing to return to.\r
+       Artificially force an assert. */\r
+       configASSERT( uxCriticalNesting == 1000UL );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortEnterCritical( void )\r
+{\r
+BaseType_t xRunningPrivileged = xPortRaisePrivilege();\r
+\r
+       portDISABLE_INTERRUPTS();\r
+       uxCriticalNesting++;\r
+\r
+       vPortResetPrivilege( xRunningPrivileged );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortExitCritical( void )\r
+{\r
+BaseType_t xRunningPrivileged = xPortRaisePrivilege();\r
+\r
+       configASSERT( uxCriticalNesting );\r
+       uxCriticalNesting--;\r
+       if( uxCriticalNesting == 0 )\r
+       {\r
+               portENABLE_INTERRUPTS();\r
+       }\r
+       vPortResetPrivilege( xRunningPrivileged );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void xPortPendSVHandler( void )\r
+{\r
+       /* This is a naked function. */\r
+\r
+       __asm volatile\r
+       (\r
+               "       mrs r0, psp                                                     \n"\r
+               "                                                                               \n"\r
+               "       ldr     r3, pxCurrentTCBConst                   \n" /* Get the location of the current TCB. */\r
+               "       ldr     r2, [r3]                                                \n"\r
+               "                                                                               \n"\r
+               "       tst r14, #0x10                                          \n" /* Is the task using the FPU context?  If so, push high vfp registers. */\r
+               "       it eq                                                           \n"\r
+               "       vstmdbeq r0!, {s16-s31}                         \n"\r
+               "                                                                               \n"\r
+               "       mrs r1, control                                         \n"\r
+               "       stmdb r0!, {r1, r4-r11, r14}            \n" /* Save the remaining registers. */\r
+               "       str r0, [r2]                                            \n" /* Save the new top of stack into the first member of the TCB. */\r
+               "                                                                               \n"\r
+               "       stmdb sp!, {r3}                                         \n"\r
+               "       mov r0, %0                                                      \n"\r
+               "       msr basepri, r0                                         \n"\r
+               "       dsb                                                                     \n"\r
+               "       isb                                                                     \n"\r
+               "       bl vTaskSwitchContext                           \n"\r
+               "       mov r0, #0                                                      \n"\r
+               "       msr basepri, r0                                         \n"\r
+               "       ldmia sp!, {r3}                                         \n"\r
+               "                                                                               \n"     /* Restore the context. */\r
+               "       ldr r1, [r3]                                            \n"\r
+               "       ldr r0, [r1]                                            \n" /* The first item in the TCB is the task top of stack. */\r
+               "       add r1, r1, #4                                          \n" /* Move onto the second item in the TCB... */\r
+               "       ldr r2, =0xe000ed9c                                     \n" /* Region Base Address register. */\r
+               "       ldmia r1!, {r4-r11}                                     \n" /* Read 4 sets of MPU registers. */\r
+               "       stmia r2!, {r4-r11}                                     \n" /* Write 4 sets of MPU registers. */\r
+               "       ldmia r0!, {r3-r11, r14}                        \n" /* Pop the registers that are not automatically saved on exception entry. */\r
+               "       msr control, r3                                         \n"\r
+               "                                                                               \n"\r
+               "       tst r14, #0x10                                          \n" /* Is the task using the FPU context?  If so, pop the high vfp registers too. */\r
+               "       it eq                                                           \n"\r
+               "       vldmiaeq r0!, {s16-s31}                         \n"\r
+               "                                                                               \n"\r
+               "       msr psp, r0                                                     \n"\r
+               "       bx r14                                                          \n"\r
+               "                                                                               \n"\r
+               "       .align 4                                                        \n"\r
+               "pxCurrentTCBConst: .word pxCurrentTCB  \n"\r
+               ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)\r
+       );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void xPortSysTickHandler( void )\r
+{\r
+uint32_t ulDummy;\r
+\r
+       ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();\r
+       {\r
+               /* Increment the RTOS tick. */\r
+               if( xTaskIncrementTick() != pdFALSE )\r
+               {\r
+                       /* Pend a context switch. */\r
+                       portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r
+               }\r
+       }\r
+       portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Setup the systick timer to generate the tick interrupts at the required\r
+ * frequency.\r
+ */\r
+static void prvSetupTimerInterrupt( void )\r
+{\r
+       /* Configure SysTick to interrupt at the requested rate. */\r
+       portNVIC_SYSTICK_LOAD_REG = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;\r
+       portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* This is a naked function. */\r
+static void vPortEnableVFP( void )\r
+{\r
+       __asm volatile\r
+       (\r
+               "       ldr.w r0, =0xE000ED88           \n" /* The FPU enable bits are in the CPACR. */\r
+               "       ldr r1, [r0]                            \n"\r
+               "                                                               \n"\r
+               "       orr r1, r1, #( 0xf << 20 )      \n" /* Enable CP10 and CP11 coprocessors, then save back. */\r
+               "       str r1, [r0]                            \n"\r
+               "       bx r14                                          "\r
+       );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSetupMPU( void )\r
+{\r
+extern uint32_t __privileged_functions_end__[];\r
+extern uint32_t __FLASH_segment_start__[];\r
+extern uint32_t __FLASH_segment_end__[];\r
+extern uint32_t __privileged_data_start__[];\r
+extern uint32_t __privileged_data_end__[];\r
+\r
+       /* Check the expected MPU is present. */\r
+       if( portMPU_TYPE_REG == portEXPECTED_MPU_TYPE_VALUE )\r
+       {\r
+               /* First setup the entire flash for unprivileged read only access. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portUNPRIVILEGED_FLASH_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_READ_ONLY ) |\r
+                                                                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                                                               ( prvGetMPURegionSizeSetting( ( uint32_t ) __FLASH_segment_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Setup the first 16K for privileged only access (even though less\r
+               than 10K is actually being used).  This is where the kernel code is\r
+               placed. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portPRIVILEGED_FLASH_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_PRIVILEGED_READ_ONLY ) |\r
+                                                                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                                                               ( prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_functions_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Setup the privileged data RAM region.  This is where the kernel data\r
+               is placed. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portPRIVILEGED_RAM_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_PRIVILEGED_READ_WRITE ) |\r
+                                                                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                                                               prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* By default allow everything to access the general peripherals.  The\r
+               system peripherals and registers are protected. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( portPERIPHERALS_START_ADDRESS ) |\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portGENERAL_PERIPHERALS_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_READ_WRITE | portMPU_REGION_EXECUTE_NEVER ) |\r
+                                                                               ( prvGetMPURegionSizeSetting( portPERIPHERALS_END_ADDRESS - portPERIPHERALS_START_ADDRESS ) ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Enable the memory fault exception. */\r
+               portNVIC_SYS_CTRL_STATE_REG |= portNVIC_MEM_FAULT_ENABLE;\r
+\r
+               /* Enable the MPU with the background region configured. */\r
+               portMPU_CTRL_REG |= ( portMPU_ENABLE | portMPU_BACKGROUND_ENABLE );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes )\r
+{\r
+uint32_t ulRegionSize, ulReturnValue = 4;\r
+\r
+       /* 32 is the smallest region size, 31 is the largest valid value for\r
+       ulReturnValue. */\r
+       for( ulRegionSize = 32UL; ulReturnValue < 31UL; ( ulRegionSize <<= 1UL ) )\r
+       {\r
+               if( ulActualSizeInBytes <= ulRegionSize )\r
+               {\r
+                       break;\r
+               }\r
+               else\r
+               {\r
+                       ulReturnValue++;\r
+               }\r
+       }\r
+\r
+       /* Shift the code by one before returning so it can be written directly\r
+       into the the correct bit position of the attribute register. */\r
+       return ( ulReturnValue << 1UL );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+BaseType_t xPortRaisePrivilege( void )\r
+{\r
+       __asm volatile\r
+       (\r
+               "       mrs r0, control                                         \n"\r
+               "       tst r0, #1                                                      \n" /* Is the task running privileged? */\r
+               "       itte ne                                                         \n"\r
+               "       movne r0, #0                                            \n" /* CONTROL[0]!=0, return false. */\r
+               "       svcne %0                                                        \n" /* Switch to privileged. */\r
+               "       moveq r0, #1                                            \n" /* CONTROL[0]==0, return true. */\r
+               "       bx lr                                                           \n"\r
+               :: "i" (portSVC_RAISE_PRIVILEGE) : "r0"\r
+       );\r
+\r
+       return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth )\r
+{\r
+extern uint32_t __SRAM_segment_start__[];\r
+extern uint32_t __SRAM_segment_end__[];\r
+extern uint32_t __privileged_data_start__[];\r
+extern uint32_t __privileged_data_end__[];\r
+int32_t lIndex;\r
+uint32_t ul;\r
+\r
+       if( xRegions == NULL )\r
+       {\r
+               /* No MPU regions are specified so allow access to all RAM. */\r
+               xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress =\r
+                               ( ( uint32_t ) __SRAM_segment_start__ ) | /* Base address. */\r
+                               ( portMPU_REGION_VALID ) |\r
+                               ( portSTACK_REGION );\r
+\r
+               xMPUSettings->xRegion[ 0 ].ulRegionAttribute =\r
+                               ( portMPU_REGION_READ_WRITE ) |\r
+                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                               ( prvGetMPURegionSizeSetting( ( uint32_t ) __SRAM_segment_end__ - ( uint32_t ) __SRAM_segment_start__ ) ) |\r
+                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Re-instate the privileged only RAM region as xRegion[ 0 ] will have\r
+               just removed the privileged only parameters. */\r
+               xMPUSettings->xRegion[ 1 ].ulRegionBaseAddress =\r
+                               ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */\r
+                               ( portMPU_REGION_VALID ) |\r
+                               ( portSTACK_REGION + 1 );\r
+\r
+               xMPUSettings->xRegion[ 1 ].ulRegionAttribute =\r
+                               ( portMPU_REGION_PRIVILEGED_READ_WRITE ) |\r
+                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                               prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) |\r
+                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Invalidate all other regions. */\r
+               for( ul = 2; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ )\r
+               {\r
+                       xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID;\r
+                       xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               /* This function is called automatically when the task is created - in\r
+               which case the stack region parameters will be valid.  At all other\r
+               times the stack parameters will not be valid and it is assumed that the\r
+               stack region has already been configured. */\r
+               if( ulStackDepth > 0 )\r
+               {\r
+                       /* Define the region that allows access to the stack. */\r
+                       xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress =\r
+                                       ( ( uint32_t ) pxBottomOfStack ) |\r
+                                       ( portMPU_REGION_VALID ) |\r
+                                       ( portSTACK_REGION ); /* Region number. */\r
+\r
+                       xMPUSettings->xRegion[ 0 ].ulRegionAttribute =\r
+                                       ( portMPU_REGION_READ_WRITE ) | /* Read and write. */\r
+                                       ( prvGetMPURegionSizeSetting( ulStackDepth * ( uint32_t ) sizeof( StackType_t ) ) ) |\r
+                                       ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                       ( portMPU_REGION_ENABLE );\r
+               }\r
+\r
+               lIndex = 0;\r
+\r
+               for( ul = 1; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ )\r
+               {\r
+                       if( ( xRegions[ lIndex ] ).ulLengthInBytes > 0UL )\r
+                       {\r
+                               /* Translate the generic region definition contained in\r
+                               xRegions into the CM3 specific MPU settings that are then\r
+                               stored in xMPUSettings. */\r
+                               xMPUSettings->xRegion[ ul ].ulRegionBaseAddress =\r
+                                               ( ( uint32_t ) xRegions[ lIndex ].pvBaseAddress ) |\r
+                                               ( portMPU_REGION_VALID ) |\r
+                                               ( portSTACK_REGION + ul ); /* Region number. */\r
+\r
+                               xMPUSettings->xRegion[ ul ].ulRegionAttribute =\r
+                                               ( prvGetMPURegionSizeSetting( xRegions[ lIndex ].ulLengthInBytes ) ) |\r
+                                               ( xRegions[ lIndex ].ulParameters ) |\r
+                                               ( portMPU_REGION_ENABLE );\r
+                       }\r
+                       else\r
+                       {\r
+                               /* Invalidate the region. */\r
+                               xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID;\r
+                               xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL;\r
+                       }\r
+\r
+                       lIndex++;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+#if( configASSERT_DEFINED == 1 )\r
+\r
+       void vPortValidateInterruptPriority( void )\r
+       {\r
+       uint32_t ulCurrentInterrupt;\r
+       uint8_t ucCurrentPriority;\r
+\r
+               /* Obtain the number of the currently executing interrupt. */\r
+               __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) );\r
+\r
+               /* Is the interrupt number a user defined interrupt? */\r
+               if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )\r
+               {\r
+                       /* Look up the interrupt's priority. */\r
+                       ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];\r
+\r
+                       /* The following assertion will fail if a service routine (ISR) for\r
+                       an interrupt that has been assigned a priority above\r
+                       configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API\r
+                       function.  ISR safe FreeRTOS API functions must *only* be called\r
+                       from interrupts that have been assigned a priority at or below\r
+                       configMAX_SYSCALL_INTERRUPT_PRIORITY.\r
+\r
+                       Numerically low interrupt priority numbers represent logically high\r
+                       interrupt priorities, therefore the priority of the interrupt must\r
+                       be set to a value equal to or numerically *higher* than\r
+                       configMAX_SYSCALL_INTERRUPT_PRIORITY.\r
+\r
+                       Interrupts that use the FreeRTOS API must not be left at their\r
+                       default priority of     zero as that is the highest possible priority,\r
+                       which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY,\r
+                       and     therefore also guaranteed to be invalid.\r
+\r
+                       FreeRTOS maintains separate thread and ISR API functions to ensure\r
+                       interrupt entry is as fast and simple as possible.\r
+\r
+                       The following links provide detailed information:\r
+                       http://www.freertos.org/RTOS-Cortex-M3-M4.html\r
+                       http://www.freertos.org/FAQHelp.html */\r
+                       configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );\r
+               }\r
+\r
+               /* Priority grouping:  The interrupt controller (NVIC) allows the bits\r
+               that define each interrupt's priority to be split between bits that\r
+               define the interrupt's pre-emption priority bits and bits that define\r
+               the interrupt's sub-priority.  For simplicity all bits must be defined\r
+               to be pre-emption priority bits.  The following assertion will fail if\r
+               this is not the case (if some bits represent a sub-priority).\r
+\r
+               If the application only uses CMSIS libraries for interrupt\r
+               configuration then the correct setting can be achieved on all Cortex-M\r
+               devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the\r
+               scheduler.  Note however that some vendor specific peripheral libraries\r
+               assume a non-zero priority group setting, in which cases using a value\r
+               of zero will result in unpredicable behaviour. */\r
+               configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );\r
+       }\r
+\r
+#endif /* configASSERT_DEFINED */\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/portmacro.h b/FreeRTOS/Source/portable/GCC/ARM_CM4_MPU/portmacro.h
new file mode 100644 (file)
index 0000000..3ffd383
--- /dev/null
@@ -0,0 +1,332 @@
+/*\r
+    FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
+\r
+    ***************************************************************************\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+    ***************************************************************************\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that is more than just the market leader, it     *\r
+     *    is the industry's de facto standard.                               *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly while simultaneously helping     *\r
+     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
+     *    tutorial book, reference manual, or both:                          *\r
+     *    http://www.FreeRTOS.org/Documentation                              *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+    the FAQ page "My application does not run, what could be wrong?".  Have you\r
+    defined configASSERT()?\r
+\r
+    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+    embedded software for free we request you assist our global community by\r
+    participating in the support forum.\r
+\r
+    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+    be as productive as possible as early as possible.  Now you can receive\r
+    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+    Ltd, and the world's leading authority on the world's leading RTOS.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
+    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
+    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and commercial middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+\r
+#ifndef PORTMACRO_H\r
+#define PORTMACRO_H\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*-----------------------------------------------------------\r
+ * Port specific definitions.\r
+ *\r
+ * The settings in this file configure FreeRTOS correctly for the\r
+ * given hardware and compiler.\r
+ *\r
+ * These settings should not be altered.\r
+ *-----------------------------------------------------------\r
+ */\r
+\r
+/* Type definitions. */\r
+#define portCHAR               char\r
+#define portFLOAT              float\r
+#define portDOUBLE             double\r
+#define portLONG               long\r
+#define portSHORT              short\r
+#define portSTACK_TYPE uint32_t\r
+#define portBASE_TYPE  long\r
+\r
+typedef portSTACK_TYPE StackType_t;\r
+typedef long BaseType_t;\r
+typedef unsigned long UBaseType_t;\r
+\r
+#if( configUSE_16_BIT_TICKS == 1 )\r
+       typedef uint16_t TickType_t;\r
+       #define portMAX_DELAY ( TickType_t ) 0xffff\r
+#else\r
+       typedef uint32_t TickType_t;\r
+       #define portMAX_DELAY ( TickType_t ) 0xffffffffUL\r
+\r
+       /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r
+       not need to be guarded with a critical section. */\r
+       #define portTICK_TYPE_IS_ATOMIC 1\r
+#endif\r
+/*-----------------------------------------------------------*/\r
+\r
+/* MPU specific constants. */\r
+#define portUSING_MPU_WRAPPERS         1\r
+#define portPRIVILEGE_BIT                      ( 0x80000000UL )\r
+\r
+#define portMPU_REGION_READ_WRITE                              ( 0x03UL << 24UL )\r
+#define portMPU_REGION_PRIVILEGED_READ_ONLY            ( 0x05UL << 24UL )\r
+#define portMPU_REGION_READ_ONLY                               ( 0x06UL << 24UL )\r
+#define portMPU_REGION_PRIVILEGED_READ_WRITE   ( 0x01UL << 24UL )\r
+#define portMPU_REGION_CACHEABLE_BUFFERABLE            ( 0x07UL << 16UL )\r
+#define portMPU_REGION_EXECUTE_NEVER                   ( 0x01UL << 28UL )\r
+\r
+#define portUNPRIVILEGED_FLASH_REGION          ( 0UL )\r
+#define portPRIVILEGED_FLASH_REGION                    ( 1UL )\r
+#define portPRIVILEGED_RAM_REGION                      ( 2UL )\r
+#define portGENERAL_PERIPHERALS_REGION         ( 3UL )\r
+#define portSTACK_REGION                                       ( 4UL )\r
+#define portFIRST_CONFIGURABLE_REGION      ( 5UL )\r
+#define portLAST_CONFIGURABLE_REGION           ( 7UL )\r
+#define portNUM_CONFIGURABLE_REGIONS           ( ( portLAST_CONFIGURABLE_REGION - portFIRST_CONFIGURABLE_REGION ) + 1 )\r
+#define portTOTAL_NUM_REGIONS                          ( portNUM_CONFIGURABLE_REGIONS + 1 ) /* Plus one to make space for the stack region. */\r
+\r
+#define portSWITCH_TO_USER_MODE() __asm volatile ( " mrs r0, control \n orr r0, #1 \n msr control, r0 " :::"r0" )\r
+\r
+typedef struct MPU_REGION_REGISTERS\r
+{\r
+       uint32_t ulRegionBaseAddress;\r
+       uint32_t ulRegionAttribute;\r
+} xMPU_REGION_REGISTERS;\r
+\r
+/* Plus 1 to create space for the stack region. */\r
+typedef struct MPU_SETTINGS\r
+{\r
+       xMPU_REGION_REGISTERS xRegion[ portTOTAL_NUM_REGIONS ];\r
+} xMPU_SETTINGS;\r
+\r
+/* Architecture specifics. */\r
+#define portSTACK_GROWTH                       ( -1 )\r
+#define portTICK_PERIOD_MS                     ( ( TickType_t ) 1000 / configTICK_RATE_HZ )\r
+#define portBYTE_ALIGNMENT                     8\r
+/*-----------------------------------------------------------*/\r
+\r
+/* SVC numbers for various services. */\r
+#define portSVC_START_SCHEDULER                                0\r
+#define portSVC_YIELD                                          1\r
+#define portSVC_RAISE_PRIVILEGE                                2\r
+\r
+/* Scheduler utilities. */\r
+\r
+#define portYIELD()                            __asm volatile ( "      SVC     %0      \n" :: "i" (portSVC_YIELD) )\r
+#define portYIELD_WITHIN_API()                                                                                                         \\r
+{                                                                                                                                                              \\r
+       /* Set a PendSV to request a context switch. */                                                         \\r
+       portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;                                                         \\r
+                                                                                                                                                               \\r
+       /* Barriers are normally not required but do ensure the code is completely      \\r
+       within the specified behaviour for the architecture. */                                         \\r
+       __asm volatile( "dsb" );                                                                                                        \\r
+       __asm volatile( "isb" );                                                                                                        \\r
+}\r
+\r
+#define portNVIC_INT_CTRL_REG          ( * ( ( volatile uint32_t * ) 0xe000ed04 ) )\r
+#define portNVIC_PENDSVSET_BIT         ( 1UL << 28UL )\r
+#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET\r
+#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Critical section management. */\r
+extern void vPortEnterCritical( void );\r
+extern void vPortExitCritical( void );\r
+#define portSET_INTERRUPT_MASK_FROM_ISR()              ulPortRaiseBASEPRI()\r
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)   vPortSetBASEPRI(x)\r
+#define portDISABLE_INTERRUPTS()                               vPortRaiseBASEPRI()\r
+#define portENABLE_INTERRUPTS()                                        vPortSetBASEPRI(0)\r
+#define portENTER_CRITICAL()                                   vPortEnterCritical()\r
+#define portEXIT_CRITICAL()                                            vPortExitCritical()\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Task function macros as described on the FreeRTOS.org WEB site.  These are\r
+not necessary for to use this port.  They are defined so the common demo files\r
+(which build with all the ports) will build. */\r
+#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )\r
+#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Architecture specific optimisations. */\r
+#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION\r
+       #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r
+#endif\r
+\r
+#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1\r
+\r
+       /* Generic helper function. */\r
+       __attribute__( ( always_inline ) ) static inline uint8_t ucPortCountLeadingZeros( uint32_t ulBitmap )\r
+       {\r
+       uint8_t ucReturn;\r
+\r
+               __asm volatile ( "clz %0, %1" : "=r" ( ucReturn ) : "r" ( ulBitmap ) );\r
+               return ucReturn;\r
+       }\r
+\r
+       /* Check the configuration. */\r
+       #if( configMAX_PRIORITIES > 32 )\r
+               #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32.  It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.\r
+       #endif\r
+\r
+       /* Store/clear the ready priorities in a bit map. */\r
+       #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )\r
+       #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) )\r
+\r
+       /*-----------------------------------------------------------*/\r
+\r
+       #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) ucPortCountLeadingZeros( ( uxReadyPriorities ) ) )\r
+\r
+#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+#ifdef configASSERT\r
+       void vPortValidateInterruptPriority( void );\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID()      vPortValidateInterruptPriority()\r
+#endif\r
+\r
+/* portNOP() is not required by this port. */\r
+#define portNOP()\r
+\r
+#define portINLINE     __inline\r
+\r
+#ifndef portFORCE_INLINE\r
+       #define portFORCE_INLINE inline __attribute__(( always_inline))\r
+#endif\r
+\r
+/* Set the privilege level to user mode if xRunningPrivileged is false. */\r
+portFORCE_INLINE static void vPortResetPrivilege( BaseType_t xRunningPrivileged )\r
+{\r
+       if( xRunningPrivileged != pdTRUE ) \r
+       {\r
+               __asm volatile ( " mrs r0, control      \n" \\r
+                                                " orr r0, #1           \n" \\r
+                                                " msr control, r0      \n"     \\r
+                                                :::"r0" );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void )\r
+{\r
+uint32_t ulCurrentInterrupt;\r
+BaseType_t xReturn;\r
+\r
+       /* Obtain the number of the currently executing interrupt. */\r
+       __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) );\r
+\r
+       if( ulCurrentInterrupt == 0 )\r
+       {\r
+               xReturn = pdFALSE;\r
+       }\r
+       else\r
+       {\r
+               xReturn = pdTRUE;\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static void vPortRaiseBASEPRI( void )\r
+{\r
+uint32_t ulNewBASEPRI;\r
+\r
+       __asm volatile\r
+       (\r
+               "       mov %0, %1                                                                                              \n"     \\r
+               "       msr basepri, %0                                                                                 \n" \\r
+               "       isb                                                                                                             \n" \\r
+               "       dsb                                                                                                             \n" \\r
+               :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+       );\r
+}\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )\r
+{\r
+uint32_t ulOriginalBASEPRI, ulNewBASEPRI;\r
+\r
+       __asm volatile\r
+       (\r
+               "       mrs %0, basepri                                                                                 \n" \\r
+               "       mov %1, %2                                                                                              \n"     \\r
+               "       msr basepri, %1                                                                                 \n" \\r
+               "       isb                                                                                                             \n" \\r
+               "       dsb                                                                                                             \n" \\r
+               :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+       );\r
+\r
+       /* This return will not be reached but is necessary to prevent compiler\r
+       warnings. */\r
+       return ulOriginalBASEPRI;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )\r
+{\r
+       __asm volatile\r
+       (\r
+               "       msr basepri, %0 " :: "r" ( ulNewMaskValue )\r
+       );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* PORTMACRO_H */\r
+\r
index 6c73906293e481bd0ad847809274e511dcf298b1..fbdaafe8d47e78304a517da889282565f8e83b30 100644 (file)
@@ -99,6 +99,7 @@ FSR register is saved as part of the task context.  portINITIAL_FSR is the value
 given to the FSR register when the initial context is set up for a task being\r
 created. */\r
 #define portINITIAL_FSR                                ( 0U )\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /*\r
@@ -150,6 +151,7 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
 extern void *_SDA2_BASE_, *_SDA_BASE_;\r
 const uint32_t ulR2 = ( uint32_t ) &_SDA2_BASE_;\r
 const uint32_t ulR13 = ( uint32_t ) &_SDA_BASE_;\r
+extern void _start1( void );\r
 \r
        /* Place a few bytes of known values on the bottom of the stack.\r
        This is essential for the Microblaze port and these lines must\r
@@ -204,7 +206,7 @@ const uint32_t ulR13 = ( uint32_t ) &_SDA_BASE_;
                pxTopOfStack--;\r
                *pxTopOfStack = ( StackType_t ) 0x07;   /* R7 - other parameters and temporaries. */\r
                pxTopOfStack--;\r
-               *pxTopOfStack = ( StackType_t ) 0x08;   /* R8 - other parameters and temporaries. */\r
+               *pxTopOfStack = ( StackType_t ) NULL;   /* R8 - other parameters and temporaries. */\r
                pxTopOfStack--;\r
                *pxTopOfStack = ( StackType_t ) 0x09;   /* R9 - other parameters and temporaries. */\r
                pxTopOfStack--;\r
@@ -222,7 +224,7 @@ const uint32_t ulR13 = ( uint32_t ) &_SDA_BASE_;
        pxTopOfStack--;\r
        *pxTopOfStack = ( StackType_t ) pxCode; /* R14 - return address for interrupt. */\r
        pxTopOfStack--;\r
-       *pxTopOfStack = ( StackType_t ) NULL;   /* R15 - return address for subroutine. */\r
+       *pxTopOfStack = ( StackType_t ) _start1;        /* R15 - return address for subroutine. */\r
 \r
        #ifdef portPRE_LOAD_STACK_FOR_DEBUGGING\r
                pxTopOfStack--;\r
diff --git a/FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/port.c b/FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/port.c
new file mode 100644 (file)
index 0000000..599c589
--- /dev/null
@@ -0,0 +1,845 @@
+/*\r
+    FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
+\r
+    ***************************************************************************\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+    ***************************************************************************\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that is more than just the market leader, it     *\r
+     *    is the industry's de facto standard.                               *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly while simultaneously helping     *\r
+     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
+     *    tutorial book, reference manual, or both:                          *\r
+     *    http://www.FreeRTOS.org/Documentation                              *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+    the FAQ page "My application does not run, what could be wrong?".  Have you\r
+    defined configASSERT()?\r
+\r
+    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+    embedded software for free we request you assist our global community by\r
+    participating in the support forum.\r
+\r
+    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+    be as productive as possible as early as possible.  Now you can receive\r
+    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+    Ltd, and the world's leading authority on the world's leading RTOS.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
+    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
+    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and commercial middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+/*-----------------------------------------------------------\r
+ * Implementation of functions defined in portable.h for the ARM CM3 port.\r
+ *----------------------------------------------------------*/\r
+\r
+/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\r
+all the API functions to use the MPU wrappers.  That should only be done when\r
+task.h is included from an application file. */\r
+#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "queue.h"\r
+#include "event_groups.h"\r
+#include "mpu_prototypes.h"\r
+\r
+#ifndef __TARGET_FPU_VFP\r
+       #error This port can only be used when the project options are configured to enable hardware floating point support.\r
+#endif\r
+\r
+#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r
+\r
+/* Constants required to access and manipulate the NVIC. */\r
+#define portNVIC_SYSTICK_CTRL_REG                              ( * ( ( volatile uint32_t * ) 0xe000e010 ) )\r
+#define portNVIC_SYSTICK_LOAD_REG                              ( * ( ( volatile uint32_t * ) 0xe000e014 ) )\r
+#define portNVIC_SYSPRI2_REG                                   ( *     ( ( volatile uint32_t * ) 0xe000ed20 ) )\r
+#define portNVIC_SYSPRI1_REG                                   ( * ( ( volatile uint32_t * ) 0xe000ed1c ) )\r
+#define portNVIC_SYS_CTRL_STATE_REG                            ( * ( ( volatile uint32_t * ) 0xe000ed24 ) )\r
+#define portNVIC_MEM_FAULT_ENABLE                              ( 1UL << 16UL )\r
+\r
+/* Constants required to access and manipulate the MPU. */\r
+#define portMPU_TYPE_REG                                               ( * ( ( volatile uint32_t * ) 0xe000ed90 ) )\r
+#define portMPU_REGION_BASE_ADDRESS_REG                        ( * ( ( volatile uint32_t * ) 0xe000ed9C ) )\r
+#define portMPU_REGION_ATTRIBUTE_REG                   ( * ( ( volatile uint32_t * ) 0xe000edA0 ) )\r
+#define portMPU_CTRL_REG                                               ( * ( ( volatile uint32_t * ) 0xe000ed94 ) )\r
+#define portEXPECTED_MPU_TYPE_VALUE                            ( 8UL << 8UL ) /* 8 regions, unified. */\r
+#define portMPU_ENABLE                                                 ( 0x01UL )\r
+#define portMPU_BACKGROUND_ENABLE                              ( 1UL << 2UL )\r
+#define portPRIVILEGED_EXECUTION_START_ADDRESS ( 0UL )\r
+#define portMPU_REGION_VALID                                   ( 0x10UL )\r
+#define portMPU_REGION_ENABLE                                  ( 0x01UL )\r
+#define portPERIPHERALS_START_ADDRESS                  0x40000000UL\r
+#define portPERIPHERALS_END_ADDRESS                            0x5FFFFFFFUL\r
+\r
+/* Constants required to access and manipulate the SysTick. */\r
+#define portNVIC_SYSTICK_CLK                                   ( 0x00000004UL )\r
+#define portNVIC_SYSTICK_INT                                   ( 0x00000002UL )\r
+#define portNVIC_SYSTICK_ENABLE                                        ( 0x00000001UL )\r
+#define portNVIC_PENDSV_PRI                                            ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 16UL )\r
+#define portNVIC_SYSTICK_PRI                                   ( ( ( uint32_t ) configKERNEL_INTERRUPT_PRIORITY ) << 24UL )\r
+#define portNVIC_SVC_PRI                                               ( ( ( uint32_t ) configMAX_SYSCALL_INTERRUPT_PRIORITY - 1UL ) << 24UL )\r
+\r
+/* Constants required to manipulate the VFP. */\r
+#define portFPCCR                                                              ( ( volatile uint32_t * ) 0xe000ef34UL ) /* Floating point context control register. */\r
+#define portASPEN_AND_LSPEN_BITS                               ( 0x3UL << 30UL )\r
+\r
+/* Constants required to set up the initial stack. */\r
+#define portINITIAL_XPSR                                               ( 0x01000000UL )\r
+#define portINITIAL_EXEC_RETURN                                        ( 0xfffffffdUL )\r
+#define portINITIAL_CONTROL_IF_UNPRIVILEGED            ( 0x03 )\r
+#define portINITIAL_CONTROL_IF_PRIVILEGED              ( 0x02 )\r
+\r
+/* Constants required to check the validity of an interrupt priority. */\r
+#define portFIRST_USER_INTERRUPT_NUMBER                ( 16 )\r
+#define portNVIC_IP_REGISTERS_OFFSET_16        ( 0xE000E3F0 )\r
+#define portAIRCR_REG                                          ( * ( ( volatile uint32_t * ) 0xE000ED0C ) )\r
+#define portMAX_8_BIT_VALUE                                    ( ( uint8_t ) 0xff )\r
+#define portTOP_BIT_OF_BYTE                                    ( ( uint8_t ) 0x80 )\r
+#define portMAX_PRIGROUP_BITS                          ( ( uint8_t ) 7 )\r
+#define portPRIORITY_GROUP_MASK                                ( 0x07UL << 8UL )\r
+#define portPRIGROUP_SHIFT                                     ( 8UL )\r
+\r
+/* Offsets in the stack to the parameters when inside the SVC handler. */\r
+#define portOFFSET_TO_PC                                               ( 6 )\r
+\r
+/* For strict compliance with the Cortex-M spec the task start address should\r
+have bit-0 clear, as it is loaded into the PC on exit from an ISR. */\r
+#define portSTART_ADDRESS_MASK                         ( ( StackType_t ) 0xfffffffeUL )\r
+\r
+/* Each task maintains its own interrupt status in the critical nesting\r
+variable.  Note this is not saved as part of the task context as context\r
+switches can only occur when uxCriticalNesting is zero. */\r
+static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;\r
+\r
+/*\r
+ * Setup the timer to generate the tick interrupts.\r
+ */\r
+static void prvSetupTimerInterrupt( void ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Configure a number of standard MPU regions that are used by all tasks.\r
+ */\r
+static void prvSetupMPU( void ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Start first task is a separate function so it can be tested in isolation.\r
+ */\r
+static void prvStartFirstTask( void ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Return the smallest MPU region size that a given number of bytes will fit\r
+ * into.  The region size is returned as the value that should be programmed\r
+ * into the region attribute register for that region.\r
+ */\r
+static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Checks to see if being called from the context of an unprivileged task, and\r
+ * if so raises the privilege level and returns false - otherwise does nothing\r
+ * other than return true.\r
+ */\r
+BaseType_t xPortRaisePrivilege( void );\r
+\r
+/*\r
+ * Standard FreeRTOS exception handlers.\r
+ */\r
+void xPortPendSVHandler( void ) PRIVILEGED_FUNCTION;\r
+void xPortSysTickHandler( void ) PRIVILEGED_FUNCTION;\r
+void vPortSVCHandler( void ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Starts the scheduler by restoring the context of the first task to run.\r
+ */\r
+static void prvRestoreContextOfFirstTask( void ) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * C portion of the SVC handler.  The SVC handler is split between an asm entry\r
+ * and a C wrapper for simplicity of coding and maintenance.\r
+ */\r
+void prvSVCHandler( uint32_t *pulRegisters ) __attribute__((used)) PRIVILEGED_FUNCTION;\r
+\r
+/*\r
+ * Function to enable the VFP.\r
+ */\r
+static void vPortEnableVFP( void );\r
+\r
+/*\r
+ * Utility function.\r
+ */\r
+static uint32_t prvPortGetIPSR( void );\r
+       \r
+/*\r
+ * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure\r
+ * FreeRTOS API functions are not called from interrupts that have been assigned\r
+ * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.\r
+ */\r
+#if ( configASSERT_DEFINED == 1 )\r
+        static uint8_t ucMaxSysCallPriority = 0;\r
+        static uint32_t ulMaxPRIGROUPValue = 0;\r
+        static const volatile uint8_t * const pcInterruptPriorityRegisters = ( const uint8_t * ) portNVIC_IP_REGISTERS_OFFSET_16;\r
+#endif /* configASSERT_DEFINED */\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * See header file for description.\r
+ */\r
+StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged )\r
+{\r
+       /* Simulate the stack frame as it would be created by a context switch\r
+       interrupt. */\r
+       pxTopOfStack--; /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */\r
+       *pxTopOfStack = portINITIAL_XPSR;       /* xPSR */\r
+       pxTopOfStack--;\r
+       *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK;    /* PC */\r
+       pxTopOfStack--;\r
+       *pxTopOfStack = 0;      /* LR */\r
+       pxTopOfStack -= 5;      /* R12, R3, R2 and R1. */\r
+       *pxTopOfStack = ( StackType_t ) pvParameters;   /* R0 */\r
+\r
+       /* A save method is being used that requires each task to maintain its\r
+       own exec return value. */\r
+       pxTopOfStack--;\r
+       *pxTopOfStack = portINITIAL_EXEC_RETURN;\r
+\r
+       pxTopOfStack -= 9;      /* R11, R10, R9, R8, R7, R6, R5 and R4. */\r
+\r
+       if( xRunPrivileged == pdTRUE )\r
+       {\r
+               *pxTopOfStack = portINITIAL_CONTROL_IF_PRIVILEGED;\r
+       }\r
+       else\r
+       {\r
+               *pxTopOfStack = portINITIAL_CONTROL_IF_UNPRIVILEGED;\r
+       }\r
+\r
+       return pxTopOfStack;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void prvSVCHandler( uint32_t *pulParam )\r
+{\r
+uint8_t ucSVCNumber;\r
+uint32_t ulReg;\r
+\r
+       /* The stack contains: r0, r1, r2, r3, r12, r14, the return address and\r
+       xPSR.  The first argument (r0) is pulParam[ 0 ]. */\r
+       ucSVCNumber = ( ( uint8_t * ) pulParam[ portOFFSET_TO_PC ] )[ -2 ];\r
+       switch( ucSVCNumber )\r
+       {\r
+               case portSVC_START_SCHEDULER    :       portNVIC_SYSPRI1_REG |= portNVIC_SVC_PRI;\r
+                                                                                       prvRestoreContextOfFirstTask();\r
+                                                                                       break;\r
+\r
+               case portSVC_YIELD                              :       portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r
+                                                                                       /* Barriers are normally not required\r
+                                                                                       but do ensure the code is completely\r
+                                                                                       within the specified behaviour for the\r
+                                                                                       architecture. */\r
+                                                                                       __asm volatile( "dsb" );\r
+                                                                                       __asm volatile( "isb" );\r
+\r
+                                                                                       break;\r
+\r
+               case portSVC_RAISE_PRIVILEGE    :       __asm\r
+                                                                                       {\r
+                                                                                               mrs ulReg, control      /* Obtain current control value. */\r
+                                                                                               bic ulReg, #1           /* Set privilege bit. */\r
+                                                                                               msr control, ulReg      /* Write back new control value. */\r
+                                                                                       }\r
+                                                                                       break;\r
+\r
+               default                                                 :       /* Unknown SVC call. */\r
+                                                                                       break;\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+__asm void vPortSVCHandler( void )\r
+{\r
+       extern prvSVCHandler\r
+               \r
+       PRESERVE8\r
+\r
+       /* Assumes psp was in use. */\r
+       #ifndef USE_PROCESS_STACK       /* Code should not be required if a main() is using the process stack. */\r
+               tst lr, #4\r
+               ite eq\r
+               mrseq r0, msp\r
+               mrsne r0, psp\r
+       #else\r
+               mrs r0, psp\r
+       #endif\r
+               b prvSVCHandler\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+__asm void prvRestoreContextOfFirstTask( void )\r
+{\r
+       PRESERVE8\r
+\r
+       ldr r0, =0xE000ED08                             /* Use the NVIC offset register to locate the stack. */\r
+       ldr r0, [r0]\r
+       ldr r0, [r0]\r
+       msr msp, r0                                             /* Set the msp back to the start of the stack. */\r
+       ldr     r3, =pxCurrentTCB                       /* Restore the context. */\r
+       ldr r1, [r3]\r
+       ldr r0, [r1]                                    /* The first item in the TCB is the task top of stack. */\r
+       add r1, r1, #4                                  /* Move onto the second item in the TCB... */\r
+       ldr r2, =0xe000ed9c                             /* Region Base Address register. */\r
+       ldmia r1!, {r4-r11}                             /* Read 4 sets of MPU registers. */\r
+       stmia r2!, {r4-r11}                             /* Write 4 sets of MPU registers. */\r
+       ldmia r0!, {r3-r11, r14}        /* Pop the registers that are not automatically saved on exception entry. */\r
+       msr control, r3\r
+       msr psp, r0                                             /* Restore the task stack pointer. */\r
+       mov r0, #0\r
+       msr     basepri, r0\r
+       bx r14\r
+       nop\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * See header file for description.\r
+ */\r
+BaseType_t xPortStartScheduler( void )\r
+{\r
+       /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.  See\r
+       http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\r
+       configASSERT( ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) );\r
+\r
+       #if( configASSERT_DEFINED == 1 )\r
+       {\r
+               volatile uint32_t ulOriginalPriority;\r
+               volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );\r
+               volatile uint8_t ucMaxPriorityValue;\r
+\r
+               /* Determine the maximum priority from which ISR safe FreeRTOS API\r
+               functions can be called.  ISR safe functions are those that end in\r
+               "FromISR".  FreeRTOS maintains separate thread and ISR API functions to\r
+               ensure interrupt entry is as fast and simple as possible.\r
+\r
+               Save the interrupt priority value that is about to be clobbered. */\r
+               ulOriginalPriority = *pucFirstUserPriorityRegister;\r
+\r
+               /* Determine the number of priority bits available.  First write to all\r
+               possible bits. */\r
+               *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;\r
+\r
+               /* Read the value back to see how many bits stuck. */\r
+               ucMaxPriorityValue = *pucFirstUserPriorityRegister;\r
+\r
+               /* Use the same mask on the maximum system call priority. */\r
+               ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;\r
+\r
+               /* Calculate the maximum acceptable priority group value for the number\r
+               of bits read back. */\r
+               ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;\r
+               while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )\r
+               {\r
+                       ulMaxPRIGROUPValue--;\r
+                       ucMaxPriorityValue <<= ( uint8_t ) 0x01;\r
+               }\r
+\r
+               /* Shift the priority group value back to its position within the AIRCR\r
+               register. */\r
+               ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;\r
+               ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;\r
+\r
+               /* Restore the clobbered interrupt priority register to its original\r
+               value. */\r
+               *pucFirstUserPriorityRegister = ulOriginalPriority;\r
+       }\r
+       #endif /* conifgASSERT_DEFINED */\r
+\r
+       /* Make PendSV and SysTick the same priority as the kernel, and the SVC\r
+       handler higher priority so it can be used to exit a critical section (where\r
+       lower priorities are masked). */\r
+       portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;\r
+       portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;\r
+\r
+       /* Configure the regions in the MPU that are common to all tasks. */\r
+       prvSetupMPU();\r
+\r
+       /* Start the timer that generates the tick ISR.  Interrupts are disabled\r
+       here already. */\r
+       prvSetupTimerInterrupt();\r
+\r
+       /* Initialise the critical nesting count ready for the first task. */\r
+       uxCriticalNesting = 0;\r
+\r
+       /* Ensure the VFP is enabled - it should be anyway. */\r
+       vPortEnableVFP();\r
+\r
+       /* Lazy save always. */\r
+       *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS;\r
+\r
+       /* Start the first task. */\r
+       prvStartFirstTask();\r
+\r
+       /* Should not get here! */\r
+       return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+__asm void prvStartFirstTask( void )\r
+{\r
+       PRESERVE8\r
+       \r
+       ldr r0, =0xE000ED08     /* Use the NVIC offset register to locate the stack. */\r
+       ldr r0, [r0]\r
+       ldr r0, [r0]\r
+       msr msp, r0                     /* Set the msp back to the start of the stack. */\r
+       cpsie i                         /* Globally enable interrupts. */\r
+       cpsie f\r
+       dsb\r
+       isb\r
+       svc portSVC_START_SCHEDULER     /* System call to start first task. */\r
+       nop\r
+       nop\r
+}\r
+\r
+void vPortEndScheduler( void )\r
+{\r
+       /* Not implemented in ports where there is nothing to return to.\r
+       Artificially force an assert. */\r
+       configASSERT( uxCriticalNesting == 1000UL );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortEnterCritical( void )\r
+{\r
+BaseType_t xRunningPrivileged = xPortRaisePrivilege();\r
+\r
+       portDISABLE_INTERRUPTS();\r
+       uxCriticalNesting++;\r
+\r
+       vPortResetPrivilege( xRunningPrivileged );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortExitCritical( void )\r
+{\r
+BaseType_t xRunningPrivileged = xPortRaisePrivilege();\r
+\r
+       configASSERT( uxCriticalNesting );\r
+       uxCriticalNesting--;\r
+       if( uxCriticalNesting == 0 )\r
+       {\r
+               portENABLE_INTERRUPTS();\r
+       }\r
+       vPortResetPrivilege( xRunningPrivileged );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+__asm void xPortPendSVHandler( void )\r
+{\r
+       extern uxCriticalNesting;\r
+       extern pxCurrentTCB;\r
+       extern vTaskSwitchContext;\r
+\r
+       PRESERVE8\r
+\r
+       mrs r0, psp\r
+\r
+       ldr     r3, =pxCurrentTCB                       /* Get the location of the current TCB. */\r
+       ldr     r2, [r3]\r
+\r
+       tst r14, #0x10                                  /* Is the task using the FPU context?  If so, push high vfp registers. */\r
+       it eq\r
+       vstmdbeq r0!, {s16-s31}\r
+\r
+       mrs r1, control\r
+       stmdb r0!, {r1, r4-r11, r14}    /* Save the remaining registers. */\r
+       str r0, [r2]                                    /* Save the new top of stack into the first member of the TCB. */\r
+\r
+       stmdb sp!, {r3}\r
+       mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY\r
+       msr basepri, r0\r
+       dsb\r
+       isb\r
+       bl vTaskSwitchContext\r
+       mov r0, #0\r
+       msr basepri, r0\r
+       ldmia sp!, {r3}\r
+                                                                       /* Restore the context. */\r
+       ldr r1, [r3]\r
+       ldr r0, [r1]                                    /* The first item in the TCB is the task top of stack. */\r
+       add r1, r1, #4                                  /* Move onto the second item in the TCB... */\r
+       ldr r2, =0xe000ed9c                             /* Region Base Address register. */\r
+       ldmia r1!, {r4-r11}                             /* Read 4 sets of MPU registers. */\r
+       stmia r2!, {r4-r11}                             /* Write 4 sets of MPU registers. */\r
+       ldmia r0!, {r3-r11, r14}                /* Pop the registers that are not automatically saved on exception entry. */\r
+       msr control, r3\r
+\r
+       tst r14, #0x10                                  /* Is the task using the FPU context?  If so, pop the high vfp registers too. */\r
+       it eq\r
+       vldmiaeq r0!, {s16-s31}\r
+\r
+       msr psp, r0\r
+       bx r14\r
+       nop\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void xPortSysTickHandler( void )\r
+{\r
+uint32_t ulDummy;\r
+\r
+       ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();\r
+       {\r
+               /* Increment the RTOS tick. */\r
+               if( xTaskIncrementTick() != pdFALSE )\r
+               {\r
+                       /* Pend a context switch. */\r
+                       portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r
+               }\r
+       }\r
+       portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/*\r
+ * Setup the systick timer to generate the tick interrupts at the required\r
+ * frequency.\r
+ */\r
+static void prvSetupTimerInterrupt( void )\r
+{\r
+       /* Configure SysTick to interrupt at the requested rate. */\r
+       portNVIC_SYSTICK_LOAD_REG = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;\r
+       portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+__asm void vPortSwitchToUserMode( void )\r
+{\r
+       PRESERVE8\r
+       \r
+       mrs r0, control\r
+       orr r0, #1\r
+       msr control, r0\r
+       bx r14\r
+}\r
+/*-----------------------------------------------------------*/\r
+       \r
+__asm void vPortEnableVFP( void )\r
+{\r
+       PRESERVE8\r
+       \r
+       ldr.w r0, =0xE000ED88           /* The FPU enable bits are in the CPACR. */\r
+       ldr r1, [r0]\r
+\r
+       orr r1, r1, #( 0xf << 20 )      /* Enable CP10 and CP11 coprocessors, then save back. */\r
+       str r1, [r0]\r
+       bx r14\r
+       nop\r
+       nop\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSetupMPU( void )\r
+{\r
+extern uint32_t __privileged_functions_end__;\r
+extern uint32_t __FLASH_segment_start__;\r
+extern uint32_t __FLASH_segment_end__;\r
+extern uint32_t __privileged_data_start__;\r
+extern uint32_t __privileged_data_end__;\r
+\r
+       /* Check the expected MPU is present. */\r
+       if( portMPU_TYPE_REG == portEXPECTED_MPU_TYPE_VALUE )\r
+       {\r
+               /* First setup the entire flash for unprivileged read only access. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portUNPRIVILEGED_FLASH_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_READ_ONLY ) |\r
+                                                                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                                                               ( prvGetMPURegionSizeSetting( ( uint32_t ) __FLASH_segment_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Setup the first 16K for privileged only access (even though less\r
+               than 10K is actually being used).  This is where the kernel code is\r
+               placed. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( ( uint32_t ) __FLASH_segment_start__ ) | /* Base address. */\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portPRIVILEGED_FLASH_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_PRIVILEGED_READ_ONLY ) |\r
+                                                                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                                                               ( prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_functions_end__ - ( uint32_t ) __FLASH_segment_start__ ) ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Setup the privileged data RAM region.  This is where the kernel data\r
+               is placed. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portPRIVILEGED_RAM_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_PRIVILEGED_READ_WRITE ) |\r
+                                                                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                                                               prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* By default allow everything to access the general peripherals.  The\r
+               system peripherals and registers are protected. */\r
+               portMPU_REGION_BASE_ADDRESS_REG =       ( portPERIPHERALS_START_ADDRESS ) |\r
+                                                                                       ( portMPU_REGION_VALID ) |\r
+                                                                                       ( portGENERAL_PERIPHERALS_REGION );\r
+\r
+               portMPU_REGION_ATTRIBUTE_REG =  ( portMPU_REGION_READ_WRITE | portMPU_REGION_EXECUTE_NEVER ) |\r
+                                                                               ( prvGetMPURegionSizeSetting( portPERIPHERALS_END_ADDRESS - portPERIPHERALS_START_ADDRESS ) ) |\r
+                                                                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Enable the memory fault exception. */\r
+               portNVIC_SYS_CTRL_STATE_REG |= portNVIC_MEM_FAULT_ENABLE;\r
+\r
+               /* Enable the MPU with the background region configured. */\r
+               portMPU_CTRL_REG |= ( portMPU_ENABLE | portMPU_BACKGROUND_ENABLE );\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static uint32_t prvGetMPURegionSizeSetting( uint32_t ulActualSizeInBytes )\r
+{\r
+uint32_t ulRegionSize, ulReturnValue = 4;\r
+\r
+       /* 32 is the smallest region size, 31 is the largest valid value for\r
+       ulReturnValue. */\r
+       for( ulRegionSize = 32UL; ulReturnValue < 31UL; ( ulRegionSize <<= 1UL ) )\r
+       {\r
+               if( ulActualSizeInBytes <= ulRegionSize )\r
+               {\r
+                       break;\r
+               }\r
+               else\r
+               {\r
+                       ulReturnValue++;\r
+               }\r
+       }\r
+\r
+       /* Shift the code by one before returning so it can be written directly\r
+       into the the correct bit position of the attribute register. */\r
+       return ( ulReturnValue << 1UL );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+__asm BaseType_t xPortRaisePrivilege( void )\r
+{\r
+       mrs r0, control\r
+       tst r0, #1                                              /* Is the task running privileged? */\r
+       itte ne\r
+       movne r0, #0                                    /* CONTROL[0]!=0, return false. */\r
+       svcne portSVC_RAISE_PRIVILEGE   /* Switch to privileged. */\r
+       moveq r0, #1                                    /* CONTROL[0]==0, return true. */\r
+       bx lr\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vPortStoreTaskMPUSettings( xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION * const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth )\r
+{\r
+extern uint32_t __SRAM_segment_start__;\r
+extern uint32_t __SRAM_segment_end__;\r
+extern uint32_t __privileged_data_start__;\r
+extern uint32_t __privileged_data_end__;\r
+\r
+       \r
+int32_t lIndex;\r
+uint32_t ul;\r
+\r
+       if( xRegions == NULL )\r
+       {\r
+               /* No MPU regions are specified so allow access to all RAM. */\r
+               xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress =\r
+                               ( ( uint32_t ) __SRAM_segment_start__ ) | /* Base address. */\r
+                               ( portMPU_REGION_VALID ) |\r
+                               ( portSTACK_REGION );\r
+\r
+               xMPUSettings->xRegion[ 0 ].ulRegionAttribute =\r
+                               ( portMPU_REGION_READ_WRITE ) |\r
+                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                               ( prvGetMPURegionSizeSetting( ( uint32_t ) __SRAM_segment_end__ - ( uint32_t ) __SRAM_segment_start__ ) ) |\r
+                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Re-instate the privileged only RAM region as xRegion[ 0 ] will have\r
+               just removed the privileged only parameters. */\r
+               xMPUSettings->xRegion[ 1 ].ulRegionBaseAddress =\r
+                               ( ( uint32_t ) __privileged_data_start__ ) | /* Base address. */\r
+                               ( portMPU_REGION_VALID ) |\r
+                               ( portSTACK_REGION + 1 );\r
+\r
+               xMPUSettings->xRegion[ 1 ].ulRegionAttribute =\r
+                               ( portMPU_REGION_PRIVILEGED_READ_WRITE ) |\r
+                               ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                               prvGetMPURegionSizeSetting( ( uint32_t ) __privileged_data_end__ - ( uint32_t ) __privileged_data_start__ ) |\r
+                               ( portMPU_REGION_ENABLE );\r
+\r
+               /* Invalidate all other regions. */\r
+               for( ul = 2; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ )\r
+               {\r
+                       xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID;\r
+                       xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               /* This function is called automatically when the task is created - in\r
+               which case the stack region parameters will be valid.  At all other\r
+               times the stack parameters will not be valid and it is assumed that the\r
+               stack region has already been configured. */\r
+               if( ulStackDepth > 0 )\r
+               {\r
+                       /* Define the region that allows access to the stack. */\r
+                       xMPUSettings->xRegion[ 0 ].ulRegionBaseAddress =\r
+                                       ( ( uint32_t ) pxBottomOfStack ) |\r
+                                       ( portMPU_REGION_VALID ) |\r
+                                       ( portSTACK_REGION ); /* Region number. */\r
+\r
+                       xMPUSettings->xRegion[ 0 ].ulRegionAttribute =\r
+                                       ( portMPU_REGION_READ_WRITE ) | /* Read and write. */\r
+                                       ( prvGetMPURegionSizeSetting( ulStackDepth * ( uint32_t ) sizeof( StackType_t ) ) ) |\r
+                                       ( portMPU_REGION_CACHEABLE_BUFFERABLE ) |\r
+                                       ( portMPU_REGION_ENABLE );\r
+               }\r
+\r
+               lIndex = 0;\r
+\r
+               for( ul = 1; ul <= portNUM_CONFIGURABLE_REGIONS; ul++ )\r
+               {\r
+                       if( ( xRegions[ lIndex ] ).ulLengthInBytes > 0UL )\r
+                       {\r
+                               /* Translate the generic region definition contained in\r
+                               xRegions into the CM3 specific MPU settings that are then\r
+                               stored in xMPUSettings. */\r
+                               xMPUSettings->xRegion[ ul ].ulRegionBaseAddress =\r
+                                               ( ( uint32_t ) xRegions[ lIndex ].pvBaseAddress ) |\r
+                                               ( portMPU_REGION_VALID ) |\r
+                                               ( portSTACK_REGION + ul ); /* Region number. */\r
+\r
+                               xMPUSettings->xRegion[ ul ].ulRegionAttribute =\r
+                                               ( prvGetMPURegionSizeSetting( xRegions[ lIndex ].ulLengthInBytes ) ) |\r
+                                               ( xRegions[ lIndex ].ulParameters ) |\r
+                                               ( portMPU_REGION_ENABLE );\r
+                       }\r
+                       else\r
+                       {\r
+                               /* Invalidate the region. */\r
+                               xMPUSettings->xRegion[ ul ].ulRegionBaseAddress = ( portSTACK_REGION + ul ) | portMPU_REGION_VALID;\r
+                               xMPUSettings->xRegion[ ul ].ulRegionAttribute = 0UL;\r
+                       }\r
+\r
+                       lIndex++;\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+__asm uint32_t prvPortGetIPSR( void )\r
+{\r
+       PRESERVE8\r
+\r
+       mrs r0, ipsr\r
+       bx r14\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+#if( configASSERT_DEFINED == 1 )\r
+\r
+       void vPortValidateInterruptPriority( void )\r
+       {\r
+       uint32_t ulCurrentInterrupt;\r
+       uint8_t ucCurrentPriority;\r
+\r
+               /* Obtain the number of the currently executing interrupt. */\r
+               ulCurrentInterrupt = prvPortGetIPSR();\r
+\r
+               /* Is the interrupt number a user defined interrupt? */\r
+               if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )\r
+               {\r
+                       /* Look up the interrupt's priority. */\r
+                       ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];\r
+\r
+                       /* The following assertion will fail if a service routine (ISR) for\r
+                       an interrupt that has been assigned a priority above\r
+                       configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API\r
+                       function.  ISR safe FreeRTOS API functions must *only* be called\r
+                       from interrupts that have been assigned a priority at or below\r
+                       configMAX_SYSCALL_INTERRUPT_PRIORITY.\r
+\r
+                       Numerically low interrupt priority numbers represent logically high\r
+                       interrupt priorities, therefore the priority of the interrupt must\r
+                       be set to a value equal to or numerically *higher* than\r
+                       configMAX_SYSCALL_INTERRUPT_PRIORITY.\r
+\r
+                       Interrupts that use the FreeRTOS API must not be left at their\r
+                       default priority of     zero as that is the highest possible priority,\r
+                       which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY,\r
+                       and     therefore also guaranteed to be invalid.\r
+\r
+                       FreeRTOS maintains separate thread and ISR API functions to ensure\r
+                       interrupt entry is as fast and simple as possible.\r
+\r
+                       The following links provide detailed information:\r
+                       http://www.freertos.org/RTOS-Cortex-M3-M4.html\r
+                       http://www.freertos.org/FAQHelp.html */\r
+                       configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );\r
+               }\r
+\r
+               /* Priority grouping:  The interrupt controller (NVIC) allows the bits\r
+               that define each interrupt's priority to be split between bits that\r
+               define the interrupt's pre-emption priority bits and bits that define\r
+               the interrupt's sub-priority.  For simplicity all bits must be defined\r
+               to be pre-emption priority bits.  The following assertion will fail if\r
+               this is not the case (if some bits represent a sub-priority).\r
+\r
+               If the application only uses CMSIS libraries for interrupt\r
+               configuration then the correct setting can be achieved on all Cortex-M\r
+               devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the\r
+               scheduler.  Note however that some vendor specific peripheral libraries\r
+               assume a non-zero priority group setting, in which cases using a value\r
+               of zero will result in unpredicable behaviour. */\r
+               configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );\r
+       }\r
+\r
+#endif /* configASSERT_DEFINED */\r
+\r
+\r
diff --git a/FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/portmacro.h b/FreeRTOS/Source/portable/RVDS/ARM_CM4_MPU/portmacro.h
new file mode 100644 (file)
index 0000000..bbe3c53
--- /dev/null
@@ -0,0 +1,348 @@
+/*\r
+    FreeRTOS V9.0.0rc2 - Copyright (C) 2016 Real Time Engineers Ltd.\r
+    All rights reserved\r
+\r
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
+\r
+    This file is part of the FreeRTOS distribution.\r
+\r
+    FreeRTOS is free software; you can redistribute it and/or modify it under\r
+    the terms of the GNU General Public License (version 2) as published by the\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
+\r
+    ***************************************************************************\r
+    >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
+    >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
+    >>!   obliged to provide the source code for proprietary components     !<<\r
+    >>!   outside of the FreeRTOS kernel.                                   !<<\r
+    ***************************************************************************\r
+\r
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+    FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
+    link: http://www.freertos.org/a00114.html\r
+\r
+    ***************************************************************************\r
+     *                                                                       *\r
+     *    FreeRTOS provides completely free yet professionally developed,    *\r
+     *    robust, strictly quality controlled, supported, and cross          *\r
+     *    platform software that is more than just the market leader, it     *\r
+     *    is the industry's de facto standard.                               *\r
+     *                                                                       *\r
+     *    Help yourself get started quickly while simultaneously helping     *\r
+     *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r
+     *    tutorial book, reference manual, or both:                          *\r
+     *    http://www.FreeRTOS.org/Documentation                              *\r
+     *                                                                       *\r
+    ***************************************************************************\r
+\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+    the FAQ page "My application does not run, what could be wrong?".  Have you\r
+    defined configASSERT()?\r
+\r
+    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+    embedded software for free we request you assist our global community by\r
+    participating in the support forum.\r
+\r
+    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+    be as productive as possible as early as possible.  Now you can receive\r
+    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+    Ltd, and the world's leading authority on the world's leading RTOS.\r
+\r
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.\r
+\r
+    http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
+    Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
+\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
+    Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
+    licenses offer ticketed support, indemnification and commercial middleware.\r
+\r
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r
+    engineered and independently SIL3 certified version for use in safety and\r
+    mission critical applications that require provable dependability.\r
+\r
+    1 tab == 4 spaces!\r
+*/\r
+\r
+\r
+#ifndef PORTMACRO_H\r
+#define PORTMACRO_H\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*-----------------------------------------------------------\r
+ * Port specific definitions.\r
+ *\r
+ * The settings in this file configure FreeRTOS correctly for the\r
+ * given hardware and compiler.\r
+ *\r
+ * These settings should not be altered.\r
+ *-----------------------------------------------------------\r
+ */\r
+\r
+/* Type definitions. */\r
+#define portCHAR               char\r
+#define portFLOAT              float\r
+#define portDOUBLE             double\r
+#define portLONG               long\r
+#define portSHORT              short\r
+#define portSTACK_TYPE uint32_t\r
+#define portBASE_TYPE  long\r
+\r
+typedef portSTACK_TYPE StackType_t;\r
+typedef long BaseType_t;\r
+typedef unsigned long UBaseType_t;\r
+\r
+#if( configUSE_16_BIT_TICKS == 1 )\r
+       typedef uint16_t TickType_t;\r
+       #define portMAX_DELAY ( TickType_t ) 0xffff\r
+#else\r
+       typedef uint32_t TickType_t;\r
+       #define portMAX_DELAY ( TickType_t ) 0xffffffffUL\r
+\r
+       /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r
+       not need to be guarded with a critical section. */\r
+       #define portTICK_TYPE_IS_ATOMIC 1\r
+#endif\r
+/*-----------------------------------------------------------*/\r
+\r
+/* MPU specific constants. */\r
+#define portUSING_MPU_WRAPPERS         1\r
+#define portPRIVILEGE_BIT                      ( 0x80000000UL )\r
+\r
+#define portMPU_REGION_READ_WRITE                              ( 0x03UL << 24UL )\r
+#define portMPU_REGION_PRIVILEGED_READ_ONLY            ( 0x05UL << 24UL )\r
+#define portMPU_REGION_READ_ONLY                               ( 0x06UL << 24UL )\r
+#define portMPU_REGION_PRIVILEGED_READ_WRITE   ( 0x01UL << 24UL )\r
+#define portMPU_REGION_CACHEABLE_BUFFERABLE            ( 0x07UL << 16UL )\r
+#define portMPU_REGION_EXECUTE_NEVER                   ( 0x01UL << 28UL )\r
+\r
+#define portUNPRIVILEGED_FLASH_REGION          ( 0UL )\r
+#define portPRIVILEGED_FLASH_REGION                    ( 1UL )\r
+#define portPRIVILEGED_RAM_REGION                      ( 2UL )\r
+#define portGENERAL_PERIPHERALS_REGION         ( 3UL )\r
+#define portSTACK_REGION                                       ( 4UL )\r
+#define portFIRST_CONFIGURABLE_REGION      ( 5UL )\r
+#define portLAST_CONFIGURABLE_REGION           ( 7UL )\r
+#define portNUM_CONFIGURABLE_REGIONS           ( ( portLAST_CONFIGURABLE_REGION - portFIRST_CONFIGURABLE_REGION ) + 1 )\r
+#define portTOTAL_NUM_REGIONS                          ( portNUM_CONFIGURABLE_REGIONS + 1 ) /* Plus one to make space for the stack region. */\r
+\r
+void vPortSwitchToUserMode( void );\r
+#define portSWITCH_TO_USER_MODE()      vPortSwitchToUserMode()\r
+\r
+typedef struct MPU_REGION_REGISTERS\r
+{\r
+       uint32_t ulRegionBaseAddress;\r
+       uint32_t ulRegionAttribute;\r
+} xMPU_REGION_REGISTERS;\r
+\r
+/* Plus 1 to create space for the stack region. */\r
+typedef struct MPU_SETTINGS\r
+{\r
+       xMPU_REGION_REGISTERS xRegion[ portTOTAL_NUM_REGIONS ];\r
+} xMPU_SETTINGS;\r
+\r
+/* Architecture specifics. */\r
+#define portSTACK_GROWTH                       ( -1 )\r
+#define portTICK_PERIOD_MS                     ( ( TickType_t ) 1000 / configTICK_RATE_HZ )\r
+#define portBYTE_ALIGNMENT                     8\r
+\r
+/* Constants used with memory barrier intrinsics. */\r
+#define portSY_FULL_READ_WRITE         ( 15 )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* SVC numbers for various services. */\r
+#define portSVC_START_SCHEDULER                                0\r
+#define portSVC_YIELD                                          1\r
+#define portSVC_RAISE_PRIVILEGE                                2\r
+\r
+/* Scheduler utilities. */\r
+\r
+#define portYIELD()                            __asm{ SVC portSVC_YIELD }\r
+#define portYIELD_WITHIN_API()                                                                                                         \\r
+{                                                                                                                                                              \\r
+       /* Set a PendSV to request a context switch. */                                                         \\r
+       portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;                                                         \\r
+                                                                                                                                                               \\r
+       /* Barriers are normally not required but do ensure the code is completely      \\r
+       within the specified behaviour for the architecture. */                                         \\r
+       __dsb( portSY_FULL_READ_WRITE );                                                                                        \\r
+       __isb( portSY_FULL_READ_WRITE );                                                                                        \\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+#define portNVIC_INT_CTRL_REG          ( * ( ( volatile uint32_t * ) 0xe000ed04 ) )\r
+#define portNVIC_PENDSVSET_BIT         ( 1UL << 28UL )\r
+#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET\r
+#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Critical section management. */\r
+extern void vPortEnterCritical( void );\r
+extern void vPortExitCritical( void );\r
+\r
+#define portDISABLE_INTERRUPTS()                               vPortRaiseBASEPRI()\r
+#define portENABLE_INTERRUPTS()                                        vPortSetBASEPRI(0)\r
+#define portENTER_CRITICAL()                                   vPortEnterCritical()\r
+#define portEXIT_CRITICAL()                                            vPortExitCritical()\r
+#define portSET_INTERRUPT_MASK_FROM_ISR()              ulPortRaiseBASEPRI()\r
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)   vPortSetBASEPRI(x)\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Architecture specific optimisations. */\r
+#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION\r
+       #define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r
+#endif\r
+\r
+#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1\r
+\r
+       /* Check the configuration. */\r
+       #if( configMAX_PRIORITIES > 32 )\r
+               #error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32.  It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.\r
+       #endif\r
+\r
+       /* Store/clear the ready priorities in a bit map. */\r
+       #define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )\r
+       #define portRESET_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) &= ~( 1UL << ( uxPriority ) )\r
+\r
+       /*-----------------------------------------------------------*/\r
+\r
+       #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities ) uxTopPriority = ( 31UL - ( uint32_t ) __clz( ( uxReadyPriorities ) ) )\r
+\r
+#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Task function macros as described on the FreeRTOS.org WEB site.  These are\r
+not necessary for to use this port.  They are defined so the common demo files\r
+(which build with all the ports) will build. */\r
+#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )\r
+#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )\r
+/*-----------------------------------------------------------*/\r
+\r
+#ifdef configASSERT\r
+       void vPortValidateInterruptPriority( void );\r
+       #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID()      vPortValidateInterruptPriority()\r
+#endif\r
+\r
+/* portNOP() is not required by this port. */\r
+#define portNOP()\r
+\r
+#define portINLINE __inline\r
+\r
+#ifndef portFORCE_INLINE\r
+       #define portFORCE_INLINE __forceinline\r
+#endif\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )\r
+{\r
+       __asm\r
+       {\r
+               /* Barrier instructions are not used as this function is only used to\r
+               lower the BASEPRI value. */\r
+               msr basepri, ulBASEPRI\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static portFORCE_INLINE void vPortRaiseBASEPRI( void )\r
+{\r
+uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;\r
+\r
+       __asm\r
+       {\r
+               /* Set BASEPRI to the max syscall priority to effect a critical\r
+               section. */\r
+               msr basepri, ulNewBASEPRI\r
+               dsb\r
+               isb\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static portFORCE_INLINE void vPortClearBASEPRIFromISR( void )\r
+{\r
+       __asm\r
+       {\r
+               /* Set BASEPRI to 0 so no interrupts are masked.  This function is only\r
+               used to lower the mask in an interrupt, so memory barriers are not \r
+               used. */\r
+               msr basepri, #0\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static portFORCE_INLINE uint32_t ulPortRaiseBASEPRI( void )\r
+{\r
+uint32_t ulReturn, ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;\r
+\r
+       __asm\r
+       {\r
+               /* Set BASEPRI to the max syscall priority to effect a critical\r
+               section. */\r
+               mrs ulReturn, basepri\r
+               msr basepri, ulNewBASEPRI\r
+               dsb\r
+               isb\r
+       }\r
+\r
+       return ulReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static portFORCE_INLINE BaseType_t xPortIsInsideInterrupt( void )\r
+{\r
+uint32_t ulCurrentInterrupt;\r
+BaseType_t xReturn;\r
+\r
+       /* Obtain the number of the currently executing interrupt. */\r
+       __asm\r
+       {\r
+               mrs ulCurrentInterrupt, ipsr\r
+       }\r
+\r
+       if( ulCurrentInterrupt == 0 )\r
+       {\r
+               xReturn = pdFALSE;\r
+       }\r
+       else\r
+       {\r
+               xReturn = pdTRUE;\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Set the privilege level to user mode if xRunningPrivileged is false. */\r
+portFORCE_INLINE static void vPortResetPrivilege( BaseType_t xRunningPrivileged )\r
+{\r
+uint32_t ulReg;\r
+       \r
+       if( xRunningPrivileged != pdTRUE ) \r
+       {\r
+               __asm \r
+               {\r
+                       mrs ulReg, control\r
+                       orr ulReg, #1\r
+                       msr control, ulReg\r
+               }\r
+       }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* PORTMACRO_H */\r
+\r