<?xml version="1.0" encoding="UTF-8"?>

<office:document xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:class="text" office:version="1.0">
 <office:meta>
  <meta:generator>StarOffice 7 (Win32)
  </meta:generator><!--645m20(Build:8701),645m22s1(Build:8715)-->
  <dc:title>Advanced UNO</dc:title>
  <meta:initial-creator>Jörg Budischewski</meta:initial-creator>
  <meta:creation-date>2002-06-06T09:05:08</meta:creation-date>
  <dc:creator>Jürgen Schmidt</dc:creator>
  <dc:date>2004-01-16T17:39:02</dc:date>
  <meta:printed-by>Dietrich Schulten</meta:printed-by>
  <meta:print-date>2002-08-21T11:54:17</meta:print-date>
  <dc:language>en-US</dc:language>
  <meta:editing-cycles>402</meta:editing-cycles>
  <meta:editing-duration>P3DT18H37M42S</meta:editing-duration>
  <meta:user-defined meta:name="Info 1"/>
  <meta:user-defined meta:name="Info 2"/>
  <meta:user-defined meta:name="Info 3"/>
  <meta:user-defined meta:name="Info 4"/>
  <meta:document-statistic meta:table-count="14" meta:image-count="8" meta:object-count="0" meta:page-count="29" meta:paragraph-count="839" meta:word-count="10307" meta:character-count="71785"/>
 </office:meta>
 <office:settings>
  <config:config-item-set config:name="view-settings">
   <config:config-item config:name="ViewAreaTop" config:type="int">552152</config:config-item>
   <config:config-item config:name="ViewAreaLeft" config:type="int">16</config:config-item>
   <config:config-item config:name="ViewAreaWidth" config:type="int">23587</config:config-item>
   <config:config-item config:name="ViewAreaHeight" config:type="int">14409</config:config-item>
   <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
   <config:config-item config:name="ShowHeaderWhileBrowsing" config:type="boolean">false</config:config-item>
   <config:config-item config:name="ShowFooterWhileBrowsing" config:type="boolean">false</config:config-item>
   <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
   <config:config-item-map-indexed config:name="Views">
    <config:config-item-map-entry>
     <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
     <config:config-item config:name="ViewLeft" config:type="int">15677</config:config-item>
     <config:config-item config:name="ViewTop" config:type="int">564901</config:config-item>
     <config:config-item config:name="VisibleLeft" config:type="int">16</config:config-item>
     <config:config-item config:name="VisibleTop" config:type="int">552152</config:config-item>
     <config:config-item config:name="VisibleRight" config:type="int">23601</config:config-item>
     <config:config-item config:name="VisibleBottom" config:type="int">566559</config:config-item>
     <config:config-item config:name="ZoomType" config:type="short">3</config:config-item>
     <config:config-item config:name="ZoomFactor" config:type="short">128</config:config-item>
     <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
    </config:config-item-map-entry>
   </config:config-item-map-indexed>
  </config:config-item-set>
  <config:config-item-set config:name="configuration-settings">
   <config:config-item config:name="AddParaTableSpacing" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
   <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
   <config:config-item-map-indexed config:name="ForbiddenCharacters">
    <config:config-item-map-entry>
     <config:config-item config:name="Language" config:type="string">de</config:config-item>
     <config:config-item config:name="Country" config:type="string">DE</config:config-item>
     <config:config-item config:name="Variant" config:type="string"/>
     <config:config-item config:name="BeginLine" config:type="string"/>
     <config:config-item config:name="EndLine" config:type="string"/>
    </config:config-item-map-entry>
    <config:config-item-map-entry>
     <config:config-item config:name="Language" config:type="string">zh</config:config-item>
     <config:config-item config:name="Country" config:type="string">CN</config:config-item>
     <config:config-item config:name="Variant" config:type="string"/>
     <config:config-item config:name="BeginLine" config:type="string">﹀﹂﹄﹏､～￠々‖•·ˇˉ―--′</config:config-item>
     <config:config-item config:name="EndLine" config:type="string">.([{£¥&apos;&quot;‵〈《「『【〔〖（［｛￡￥〝︵︷︹︻︽︿﹁﹃﹙﹛﹝（｛</config:config-item>
    </config:config-item-map-entry>
   </config:config-item-map-indexed>
   <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
   <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
   <config:config-item config:name="UpdateFromTemplate" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
   <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
   <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrinterSetup" config:type="base64Binary"> </config:config-item>
   <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
   <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
   <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
   <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
   <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
   <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
   <config:config-item config:name="AlignTabStopPosition" config:type="boolean">false</config:config-item>
   <config:config-item config:name="CurrentDatabaseDataSource" config:type="string">Adreßbuch</config:config-item>
   <config:config-item config:name="PrinterName" config:type="string">Xerox DocuPrint N24</config:config-item>
   <config:config-item config:name="PrintFaxName" config:type="string"/>
   <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
   <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
   <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
   <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
   <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
   <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
   <config:config-item config:name="PrinterIndependentLayout" config:type="string">disabled</config:config-item>
   <config:config-item config:name="UseOldNumbering" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
   <config:config-item config:name="CurrentDatabaseCommand" config:type="string">adressen</config:config-item>
   <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
   <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
  </config:config-item-set>
 </office:settings>
 <office:script/>
 <office:font-decls>
  <style:font-decl style:name="ZapfDingbats" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable" style:font-charset="x-symbol"/>
  <style:font-decl style:name="Palatino2" fo:font-family="Palatino" style:font-style-name="Bold"/>
  <style:font-decl style:name="Palatino1" fo:font-family="Palatino" style:font-style-name="Italic"/>
  <style:font-decl style:name="Palatino3" fo:font-family="Palatino" style:font-style-name="Regular"/>
  <style:font-decl style:name="Times New Roman" fo:font-family="&apos;Times New Roman&apos;"/>
  <style:font-decl style:name="Arial1" fo:font-family="Arial" style:font-family-generic="swiss"/>
  <style:font-decl style:name="Courier New" fo:font-family="&apos;Courier New&apos;" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New5" fo:font-family="&apos;Courier New&apos;" style:font-style-name="Fett" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New1" fo:font-family="&apos;Courier New&apos;" style:font-style-name="Regular" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New2" fo:font-family="&apos;Courier New&apos;" style:font-style-name="Standard" style:font-family-generic="modern" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier" fo:font-family="Courier" style:font-family-generic="roman" style:font-pitch="fixed"/>
  <style:font-decl style:name="Courier New3" fo:font-family="&apos;Courier New&apos;" style:font-family-generic="roman" style:font-pitch="fixed"/>
  <style:font-decl style:name="Arial Unicode MS" fo:font-family="&apos;Arial Unicode MS&apos;" style:font-pitch="variable"/>
  <style:font-decl style:name="HG Mincho Light J" fo:font-family="&apos;HG Mincho Light J&apos;" style:font-pitch="variable"/>
  <style:font-decl style:name="Palatino" fo:font-family="Palatino" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times" fo:font-family="Times" style:font-style-name="Fett Kursiv" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times New Roman3" fo:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times New Roman2" fo:font-family="&apos;Times New Roman&apos;" style:font-style-name="Regular" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Times New Roman1" fo:font-family="&apos;Times New Roman&apos;" style:font-style-name="Standard" style:font-family-generic="roman" style:font-pitch="variable"/>
  <style:font-decl style:name="Arial" fo:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Courier New4" fo:font-family="&apos;Courier New&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica2" fo:font-family="Helvetica" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica3" fo:font-family="Helvetica" style:font-style-name="Fett" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica1" fo:font-family="Helvetica" style:font-style-name="Kursiv" style:font-family-generic="swiss" style:font-pitch="variable"/>
  <style:font-decl style:name="Helvetica" fo:font-family="Helvetica" style:font-style-name="Standard" style:font-family-generic="swiss" style:font-pitch="variable"/>
 </office:font-decls>
 <office:styles>
  <draw:marker draw:name="Pfeil offen" svg:viewBox="0 0 8000 10010" svg:d="m0 10010 3974-10010 4026 9990-8000 20 1497-1003 5000-14-2517-6993-2483 7007z"/>
  <draw:marker draw:name="Raute geschlossen" svg:viewBox="0 0 458 458" svg:d="m229 458c-76-76-152-152-229-229 76-76 152-152 229-229 76 76 152 152 229 229-76 76-152 152-229 229z"/>
  <draw:marker draw:name="Raute offen" svg:viewBox="0 0 10000 10000" svg:d="m0 5000 5000-5000 5000 5000-5000 5000-5000-5000h1500l3500 3500 3500-3500-3500-3500-3500 3500z"/>
  <style:default-style style:family="graphics">
   <style:properties draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="HG Mincho Light J" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb">
    <style:tab-stops/>
   </style:properties>
  </style:default-style>
  <style:default-style style:family="paragraph">
   <style:properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="HG Mincho Light J" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.245cm" style:writing-mode="page"/>
  </style:default-style>
  <style:style style:name="Standard" style:family="paragraph" style:class="text">
   <style:properties fo:color="#000000" style:font-name="Times New Roman1" fo:language="en" fo:country="US"/>
  </style:style>
  <style:style style:name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0.212cm" fo:color="#000000"/>
  </style:style>
  <style:style style:name="First line indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0.499cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Hanging indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="-0.499cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="0cm"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Text body indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Salutation" style:family="paragraph" style:parent-style-name="Standard" style:class="text"/>
  <style:style style:name="Signature" style:family="paragraph" style:parent-style-name="Standard" style:class="text"/>
  <style:style style:name="List Indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:text-indent="-4.5cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="0cm"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Marginalia" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
   <style:properties fo:margin-left="4.001cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text body" style:class="text">
   <style:properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:color="#000000" style:font-name="Arial" fo:font-size="14pt" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="115%" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="14pt" fo:font-style="italic" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="14pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="85%" fo:font-style="italic" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 5" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="85%" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 6" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
   <style:properties fo:font-size="75%" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Heading 7" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="Heading 8" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="Heading 9" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="Heading 10" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text" style:master-page-name="">
   <style:properties fo:font-size="75%" fo:font-weight="bold" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text body" style:class="list">
   <style:properties style:font-name="Times New Roman"/>
  </style:style>
  <style:style style:name="Numbering 1 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 1" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 1 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 1 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 2 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 3 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 4 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Numbering 5 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 1 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="1.251cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 2 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 3 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="3.75cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 4 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5 Start" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5 End" style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="-0.497cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="List 5 Cont." style:family="paragraph" style:parent-style-name="List" style:class="list" style:master-page-name="">
   <style:properties fo:margin-left="6.249cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Header" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.499cm" fo:margin-bottom="0cm" fo:font-size="12pt" fo:text-indent="0cm" style:auto-text-indent="false" fo:padding="0cm" fo:border="none">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Header left" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties text:number-lines="false" text:line-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Header right" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties>
    <style:tab-stops>
     <style:tab-stop style:position="8.5cm" style:type="center"/>
     <style:tab-stop style:position="17.002cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Footer" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties>
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Footer left" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="0.199cm" fo:margin-right="0cm" style:font-name="Helvetica" fo:font-size="9pt" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Footer right" style:family="paragraph" style:parent-style-name="Standard" style:class="extra" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0.199cm" style:font-name="Helvetica" fo:font-size="8.5pt" fo:text-align="end" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="7.721cm" style:type="center"/>
     <style:tab-stop style:position="15.443cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Table Contents" style:family="paragraph" style:parent-style-name="Text body" style:class="extra"/>
  <style:style style:name="Table Heading" style:family="paragraph" style:parent-style-name="Table Contents" style:class="extra">
   <style:properties fo:font-style="italic" fo:font-weight="bold" fo:text-align="center" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:font-name="Times New Roman" fo:font-size="10pt" fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Illustration" style:family="paragraph" style:parent-style-name="Caption" style:class="extra">
   <style:properties style:font-name="Palatino1" fo:font-size="9pt" fo:line-height="100%"/>
  </style:style>
  <style:style style:name="Table" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
  <style:style style:name="Text" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
  <style:style style:name="Frame contents" style:family="paragraph" style:parent-style-name="Text body" style:class="extra">
   <style:properties style:font-name="Helvetica" fo:font-size="18pt" fo:line-height="100%"/>
  </style:style>
  <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:font-size="10pt" fo:text-indent="-0.499cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Addressee" style:family="paragraph" style:parent-style-name="Standard" style:class="extra" style:master-page-name="">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0.349cm" fo:font-style="italic" style:page-number="0"/>
  </style:style>
  <style:style style:name="Sender" style:family="paragraph" style:parent-style-name="Standard" style:class="extra" style:master-page-name="">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:font-style="italic" style:page-number="0"/>
  </style:style>
  <style:style style:name="Endnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:font-size="10pt" fo:text-indent="-0.499cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Drawing" style:family="paragraph" style:parent-style-name="Caption" style:class="extra"/>
  <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
   <style:properties style:font-name="Times New Roman" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Index Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index" style:master-page-name="">
   <style:properties fo:margin-left="0.3cm" fo:margin-right="0cm" fo:margin-top="0.049cm" fo:margin-bottom="0.049cm" style:font-name="Palatino" fo:font-size="9pt" fo:text-indent="-0.3cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Index 2" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index 3" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index Separator" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Contents Heading" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Under_Head1" style:class="index" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0.838cm" fo:margin-top="2.499cm" fo:margin-bottom="0cm" fo:font-size="20pt" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:padding="3.59cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #ffffff" fo:border-bottom="none"/>
  </style:style>
  <style:style style:name="Contents 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.499cm" fo:margin-right="0cm" fo:margin-top="0.61cm" fo:margin-bottom="0.254cm" style:font-name="Palatino" fo:font-size="10pt" fo:font-weight="bold" fo:text-indent="-0.54cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 2" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.279cm" style:font-name="Palatino" fo:font-size="10pt" fo:font-weight="normal" fo:text-indent="-1.041cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="14.944cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 3" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.279cm" style:font-name="Palatino" fo:font-size="10pt" fo:text-indent="-0.54cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="14.444cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 4" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.001cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.505cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 5" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.5cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.005cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="User Index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="17.002cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 2" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="16.503cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 3" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0.998cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="16.004cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 4" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="1.498cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.505cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 5" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="1.997cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.005cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 6" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="5.001cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.947cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 7" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.995cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.448cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 8" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.494cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.949cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 9" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.993cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.449cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Contents 10" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.493cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="10.95cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Illustration Index Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Illustration Index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Object index heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Object index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Table index heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Table index 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Bibliography Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="16pt" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
  </style:style>
  <style:style style:name="Bibliography 1" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="15.443cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 6" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.496cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.947cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 7" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="2.995cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="12.448cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 8" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.494cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.949cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 9" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="3.993cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="11.449cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="User Index 10" style:family="paragraph" style:parent-style-name="Index" style:class="index">
   <style:properties fo:margin-left="4.493cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops>
     <style:tab-stop style:position="10.95cm" style:type="right" style:leader-char="."/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Title" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Subtitle" style:class="chapter">
   <style:properties fo:font-size="18pt" fo:font-weight="bold" fo:text-align="start" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="Subtitle" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="chapter">
   <style:properties fo:font-size="14pt" fo:font-style="italic" fo:text-align="center" style:justify-single-word="false"/>
  </style:style>
  <style:style style:name="Quotations" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
   <style:properties fo:margin-left="1cm" fo:margin-right="1cm" fo:margin-top="0cm" fo:margin-bottom="0.349cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text body" style:class="html">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0.499cm" fo:font-size="6pt" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.039cm double #808080"/>
  </style:style>
  <style:style style:name="List Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
   <style:properties fo:margin-left="0.998cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="List Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="List Contents" style:class="html">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Texttable" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:font-size="9.5pt" fo:line-height="0.39cm" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" style:page-number="0"/>
  </style:style>
  <style:style style:name="HeadlineIndex" style:family="paragraph" style:parent-style-name="Header">
   <style:properties fo:font-size="20pt" fo:padding="3.191cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #ffffff" fo:border-bottom="none"/>
  </style:style>
  <style:style style:name="PartNumText" style:family="paragraph" style:parent-style-name="Illustration">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Helvetica1" fo:font-size="7pt" fo:font-style="normal"/>
  </style:style>
  <style:style style:name="TitelText" style:family="paragraph" style:parent-style-name="Frame contents" style:master-page-name="">
   <style:properties fo:font-size="24pt" fo:text-align="end" style:justify-single-word="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="SubTitelText" style:family="paragraph" style:parent-style-name="Frame contents" style:master-page-name="">
   <style:properties fo:font-size="16pt" fo:text-align="end" style:justify-single-word="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Code" style:family="paragraph" style:parent-style-name="Paragraph" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New" fo:font-size="70%" style:text-underline="none" fo:orphans="4" fo:widows="4" fo:hyphenate="false" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="1" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:background-color="#e6e6e6" fo:keep-with-next="false">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Reference Header" style:family="paragraph" style:parent-style-name="Heading 5" style:next-style-name="Text body" style:auto-update="true" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.379cm" fo:margin-bottom="0.25cm" fo:text-align="start" style:justify-single-word="false" fo:orphans="2" fo:widows="2" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:break-before="auto" fo:break-after="auto"/>
  </style:style>
  <style:style style:name="Table Title" style:family="paragraph" style:parent-style-name="Table" style:next-style-name="Table Heading" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" style:font-name="Palatino2" fo:font-style="normal" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="CopyrightText" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.15cm" fo:margin-bottom="0cm" style:font-name="Palatino" fo:font-size="9pt" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Figure Code" style:family="paragraph" style:parent-style-name="Code" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.102cm" style:font-name="Courier New1" fo:font-size="9pt" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="6.35cm"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Figure Code Map" style:family="paragraph" style:parent-style-name="Figure Code">
   <style:properties style:font-name="Times New Roman2"/>
  </style:style>
  <style:style style:name="ReviewComment" style:family="paragraph" style:parent-style-name="Standard">
   <style:properties fo:font-size="10pt" fo:background-color="#ffcc99">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="CodeInLists" style:family="paragraph" style:parent-style-name="Numbering 1" style:master-page-name="">
   <style:properties fo:margin-left="3.048cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New1" fo:font-size="7pt" fo:line-height="100%" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="ParagraphInList" style:family="paragraph" style:parent-style-name="Numbering 1">
   <style:properties fo:margin-left="3.048cm" fo:margin-right="0cm" fo:margin-top="0.28cm" fo:margin-bottom="0.28cm" style:font-name="Palatino3" fo:font-size="9.5pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Figure Code 2" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.051cm" fo:font-size="8pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Head 1" style:family="paragraph" style:parent-style-name="Heading 1" style:next-style-name="Under_Head1" style:master-page-name="Chapter_Start">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="2.499cm" fo:margin-bottom="0cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="24pt" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0" fo:break-before="auto" fo:break-after="auto"/>
  </style:style>
  <style:style style:name="Under_Head1" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Paragraph">
   <style:properties fo:font-size="9.5pt" fo:padding="0.15cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="ChapterText" style:family="paragraph" style:parent-style-name="Heading 2" style:master-page-name="">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-transform="uppercase" style:font-name="Helvetica" fo:font-size="10pt" fo:font-style="normal" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0">
    <style:tab-stops>
     <style:tab-stop style:position="2.2cm" style:type="right"/>
    </style:tab-stops>
   </style:properties>
  </style:style>
  <style:style style:name="Paragraph" style:family="paragraph" style:parent-style-name="Text body" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.229cm" fo:margin-bottom="0.229cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="10pt" fo:orphans="2" fo:widows="2" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Head 2" style:family="paragraph" style:parent-style-name="Heading 2" style:next-style-name="Paragraph" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="1cm" fo:margin-bottom="0.4cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="18pt" fo:font-style="normal" fo:font-weight="bold" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Head 3" style:family="paragraph" style:parent-style-name="Heading 3" style:next-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="1cm" fo:margin-bottom="0.3cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="16pt" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Head 4" style:family="paragraph" style:parent-style-name="Heading 4" style:next-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.891cm" fo:margin-bottom="0.199cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="14pt" fo:font-style="normal" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Head 5" style:family="paragraph" style:parent-style-name="Heading 5" style:next-style-name="Paragraph" style:master-page-name="">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.589cm" fo:margin-bottom="0.101cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="12pt" fo:font-style="italic" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="0"/>
  </style:style>
  <style:style style:name="Head 6" style:family="paragraph" style:parent-style-name="Heading 6" style:next-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0.589cm" fo:margin-bottom="0.101cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="10pt" fo:font-style="italic" fo:font-weight="normal" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="TextInTable" style:family="paragraph" style:parent-style-name="Table Contents" style:master-page-name="">
   <style:properties fo:margin-top="0.28cm" fo:margin-bottom="0.28cm" fo:color="#000000" style:font-name="Palatino" fo:font-size="9pt" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" style:page-number="0"/>
  </style:style>
  <style:style style:name="TableHead" style:family="paragraph" style:parent-style-name="Table Heading" style:master-page-name="">
   <style:properties fo:color="#000000" style:font-name="Palatino" fo:font-size="10pt" fo:font-style="normal" fo:text-align="start" style:justify-single-word="false" fo:hyphenate="true" fo:hyphenation-remain-char-count="4" fo:hyphenation-push-char-count="4" fo:hyphenation-ladder-count="no-limit" style:page-number="0"/>
  </style:style>
  <style:style style:name="PropText" style:family="paragraph" style:parent-style-name="Preformatted Text">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:color="#000000" style:font-name="Courier New2" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="TOC_Head" style:family="paragraph" style:parent-style-name="Contents Heading" style:next-style-name="Under_Head1" style:master-page-name="TOC_Start">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Palatino" style:page-number="0" fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="TOC_Level1" style:family="paragraph" style:parent-style-name="Contents 1"/>
  <style:style style:name="TOC_Level2" style:family="paragraph" style:parent-style-name="Contents 2"/>
  <style:style style:name="TOC_Level3" style:family="paragraph" style:parent-style-name="Contents 3"/>
  <style:style style:name="Index_Head" style:family="paragraph" style:parent-style-name="Index Heading" style:master-page-name="Index_Start">
   <style:properties style:page-number="0"/>
  </style:style>
  <style:style style:name="Index_Separation" style:family="paragraph" style:parent-style-name="Index Separator" style:master-page-name="">
   <style:properties fo:margin-top="0.499cm" fo:margin-bottom="0cm" style:font-name="Helvetica2" fo:font-weight="bold" style:page-number="0" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="Index_Level1" style:family="paragraph" style:parent-style-name="Index 1">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="10pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Index_Level2" style:family="paragraph" style:parent-style-name="Index 2">
   <style:properties style:font-name="Palatino" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Copyright" style:family="paragraph" style:parent-style-name="Head 2">
   <style:properties fo:margin-left="0cm" fo:margin-right="0.838cm" fo:font-size="16pt" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="BottomTitelLine" style:family="paragraph" style:parent-style-name="Frame contents">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:font-size="8pt" fo:text-indent="0cm" style:auto-text-indent="false" fo:padding="0.049cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table_Note" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="2.799cm" fo:margin-right="0cm" fo:margin-top="0.079cm" fo:margin-bottom="0cm" fo:font-size="8pt" fo:font-style="normal" fo:text-indent="-0.259cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="TableCode" style:family="paragraph" style:parent-style-name="TextInTable">
   <style:properties style:font-name="Courier New1" fo:font-size="90%"/>
  </style:style>
  <style:style style:name="TitledListBody" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="3.05cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.28cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="TitledListHead" style:family="paragraph" style:parent-style-name="Paragraph" style:next-style-name="TitledListBody" style:master-page-name="">
   <style:properties fo:margin-top="0.28cm" fo:margin-bottom="0cm" fo:font-style="italic" style:page-number="0" fo:keep-with-next="true"/>
  </style:style>
  <style:style style:name="TipInTable" style:family="paragraph" style:parent-style-name="TextInTable"/>
  <style:style style:name="TitledListCode" style:family="paragraph" style:parent-style-name="TitledListBody">
   <style:properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New1" fo:font-size="70%" fo:background-color="#e6e6e6">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="MethodSignatures" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="3.039cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:font-name="Courier New1" fo:font-size="7pt" fo:text-indent="0cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="TableHeadLeft" style:family="paragraph" style:parent-style-name="TableHead">
   <style:properties fo:margin-left="0.3cm" fo:margin-right="0cm" fo:text-align="start" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="Listing" style:family="paragraph" style:parent-style-name="Paragraph" style:next-style-name="Paragraph">
   <style:properties fo:margin-top="0.101cm" fo:margin-bottom="0.28cm" fo:font-size="9pt" fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Output" style:family="paragraph" style:parent-style-name="Code">
   <style:properties fo:background-color="#ffffff" fo:padding="0.049cm" fo:border="0.002cm solid #000000">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="TableFootnote" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="2.799cm" fo:margin-right="0cm" fo:margin-top="0.079cm" fo:margin-bottom="0cm" style:font-name="Palatino3" fo:font-size="8pt" fo:text-indent="-0.259cm" style:auto-text-indent="false">
    <style:tab-stops/>
   </style:properties>
  </style:style>
  <style:style style:name="Normal" style:family="paragraph" style:parent-style-name="Standard">
   <style:properties fo:color="#000000" fo:font-size="10pt" style:text-background-color="#ffffff" style:font-size-asian="10pt" style:font-size-complex="10pt" style:text-autospace="none"/>
  </style:style>
  <style:style style:name="Footnote Symbol" style:family="text"/>
  <style:style style:name="Caption characters" style:family="text"/>
  <style:style style:name="Numbering Symbols" style:family="text"/>
  <style:style style:name="Bullet Symbols" style:family="text">
   <style:properties style:font-name="ZapfDingbats" fo:font-size="6pt"/>
  </style:style>
  <style:style style:name="Internet link" style:family="text">
   <style:properties fo:color="#000080" style:text-underline="single" style:text-underline-color="font-color"/>
  </style:style>
  <style:style style:name="Visited Internet Link" style:family="text">
   <style:properties fo:color="#800000" style:text-underline="single" style:text-underline-color="font-color"/>
  </style:style>
  <style:style style:name="Placeholder" style:family="text">
   <style:properties fo:font-variant="small-caps" fo:color="#008080" style:text-underline="dotted" style:text-underline-color="font-color"/>
  </style:style>
  <style:style style:name="Footnote anchor" style:family="text">
   <style:properties style:text-position="super 58%"/>
  </style:style>
  <style:style style:name="Emphasis" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Citation" style:family="text">
   <style:properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
  </style:style>
  <style:style style:name="Strong Emphasis" style:family="text">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Source Text" style:family="text">
   <style:properties style:font-name="Courier New3"/>
  </style:style>
  <style:style style:name="Example" style:family="text">
   <style:properties style:font-name="Courier New3"/>
  </style:style>
  <style:style style:name="User Entry" style:family="text">
   <style:properties style:font-name="Courier New3"/>
  </style:style>
  <style:style style:name="Definition" style:family="text"/>
  <style:style style:name="PageNumber" style:family="text">
   <style:properties style:font-name="Helvetica3" fo:font-size="9pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="ChapterNummer" style:family="text">
   <style:properties style:font-name="Helvetica3" fo:font-size="18pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="White" style:family="text"/>
  <style:style style:name="Code (in text)" style:family="text">
   <style:properties fo:color="#000000" style:font-name="Courier New1" fo:font-size="9pt"/>
  </style:style>
  <style:style style:name="Default Paragraph Font" style:family="text" style:parent-style-name="Normal">
   <style:properties style:font-name="Times New Roman" fo:font-size="12pt"/>
  </style:style>
  <style:style style:name="Normal" style:family="text">
   <style:properties style:font-name="Arial1" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="Page_Number" style:family="text">
   <style:properties style:font-name="Helvetica3" fo:font-size="9pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Enumeration_1" style:family="text" style:parent-style-name="Bullet Symbols"/>
  <style:style style:name="CITE" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="CODE" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="EM" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="KBD" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="SAMP" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="STRONG" style:family="text">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="VAR" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="TT" style:family="text">
   <style:properties style:font-name="Courier New4"/>
  </style:style>
  <style:style style:name="DFN" style:family="text"/>
  <style:style style:name="Q" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="LANG" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="AU" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="PERSON" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="ACRONYM" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="ABBREV" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="INS" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="DEL" style:family="text">
   <style:properties fo:color="#000000" style:text-outline="false" style:text-crossing-out="none" style:text-position="0% 100%" style:font-name="Times New Roman3" fo:font-size="12pt" fo:letter-spacing="normal" fo:language="de" fo:country="DE" fo:font-style="normal" fo:text-shadow="none" style:text-underline="none" fo:font-weight="normal" fo:score-spaces="true" style:letter-kerning="false"/>
  </style:style>
  <style:style style:name="BLINK" style:family="text">
   <style:properties fo:color="#ffff00" fo:text-shadow="1pt 1pt"/>
  </style:style>
  <style:style style:name="Kapitälchen" style:family="text">
   <style:properties fo:font-variant="small-caps" fo:font-size="11pt"/>
  </style:style>
  <style:style style:name="Tasten" style:family="text">
   <style:properties style:font-name="Times" fo:font-size="11pt" fo:font-style="italic" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Großbuch" style:family="text">
   <style:properties fo:text-transform="uppercase"/>
  </style:style>
  <style:style style:name="www/ftp/email" style:family="text" style:parent-style-name="Emphasis"/>
  <style:style style:name="Buttons/Menus" style:family="text">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="CodeEmphasis" style:family="text" style:parent-style-name="DefaultCode">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="Reference" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="DefaultParagraph" style:family="text">
   <style:properties style:font-name="Palatino3" fo:font-size="10pt"/>
  </style:style>
  <style:style style:name="MethodSignatureEmphasis" style:family="text" style:parent-style-name="DefaultParagraph">
   <style:properties style:font-name="Courier New5" fo:font-size="7pt" fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="DefaultCode" style:family="text" style:parent-style-name="DefaultParagraph">
   <style:properties style:font-name="Courier New1" fo:font-size="7pt"/>
  </style:style>
  <style:style style:name="ChapterRef" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="Frame" style:family="graphics">
   <style:properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" fo:margin-left="0.201cm" fo:margin-right="0.201cm" fo:margin-top="0.201cm" fo:margin-bottom="0.201cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:background-color="transparent" style:background-transparency="100%" fo:padding="0cm" fo:border="none">
    <style:background-image/>
   </style:properties>
  </style:style>
  <style:style style:name="Graphics" style:family="graphics">
   <style:properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
  </style:style>
  <style:style style:name="OLE" style:family="graphics">
   <style:properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
  </style:style>
  <style:style style:name="Formula" style:family="graphics">
   <style:properties text:anchor-type="as-char" svg:y="0cm" style:vertical-pos="top" style:vertical-rel="baseline"/>
  </style:style>
  <style:style style:name="Labels" style:family="graphics" style:auto-update="true">
   <style:properties text:anchor-type="as-char" svg:y="0cm" fo:margin-left="0.201cm" fo:margin-right="0.201cm" style:protect="size position" style:vertical-pos="top" style:vertical-rel="baseline"/>
  </style:style>
  <style:style style:name="ChapterFrame" style:family="graphics">
   <style:properties svg:width="2.54cm" fo:min-height="0.801cm" text:anchor-type="page" svg:x="0cm" svg:y="0cm" style:wrap="run-through" style:vertical-pos="top" style:vertical-rel="page-content" style:horizontal-pos="left" style:horizontal-rel="page-content" fo:padding="0.049cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Illustration" style:family="graphics">
   <style:properties text:anchor-type="page" svg:x="0cm" svg:y="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.499cm" fo:margin-bottom="0.499cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="page-content" style:horizontal-pos="from-left" style:horizontal-rel="page-content" fo:background-color="transparent" style:background-transparency="100%" fo:padding="0cm" fo:border="none">
    <style:background-image/>
    <style:columns fo:column-count="0" fo:column-gap="0cm"/>
   </style:properties>
  </style:style>
  <text:outline-style>
   <text:outline-level-style text:level="1" text:style-name="White" style:num-format="1" text:start-value="5">
    <style:properties text:min-label-width="2.54cm"/>
   </text:outline-level-style>
   <text:outline-level-style text:level="2" style:num-suffix=" " style:num-format="1" text:display-levels="2"/>
   <text:outline-level-style text:level="3" style:num-suffix=" " style:num-format="1" text:display-levels="3"/>
   <text:outline-level-style text:level="4" style:num-format=""/>
   <text:outline-level-style text:level="5" style:num-format=""/>
   <text:outline-level-style text:level="6" style:num-format=""/>
   <text:outline-level-style text:level="7" style:num-format=""/>
   <text:outline-level-style text:level="8" style:num-format=""/>
   <text:outline-level-style text:level="9" style:num-format=""/>
   <text:outline-level-style text:level="10" style:num-format=""/>
  </text:outline-style>
  <text:list-style style:name="Numbering 1">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.499cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.999cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.498cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.997cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.496cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.995cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.494cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.994cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" text:style-name="Numbering Symbols" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.493cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="List 1">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="0.395cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="0.79cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="1.186cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="1.581cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="1.976cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="2.371cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="2.766cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="3.161cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" text:bullet-char="n">
    <style:properties text:space-before="3.556cm" text:min-label-width="0.499cm" fo:font-family="ZapfDingbats" style:font-family-generic="decorative" style:font-pitch="variable"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="List 2">
   <text:list-level-style-bullet text:level="1" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="0.297cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="0.593cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="0.889cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="1.186cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="1.482cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="1.778cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="2.075cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="2.371cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Numbering Symbols" text:bullet-char="–">
    <style:properties text:space-before="2.667cm" text:min-label-width="0.296cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="Enumeration_1">
   <text:list-level-style-bullet text:level="1" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="0.499cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="0.999cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="1.498cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="1.997cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="2.496cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="2.995cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="3.494cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="3.994cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Enumeration_1" style:num-suffix="." text:bullet-char="">
    <style:properties text:space-before="4.493cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:footnotes-configuration text:citation-style-name="Footnote Symbol" text:citation-body-style-name="Footnote anchor" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
  <text:endnotes-configuration style:num-format="i" text:start-value="0"/>
  <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
 </office:styles>
 <office:automatic-styles>
  <style:style style:name="Table3" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table3.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Table3.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Table3.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table3.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="supported_languages" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="supported_languages.A" style:family="table-column">
   <style:properties style:column-width="3.119cm" style:rel-column-width="13241*"/>
  </style:style>
  <style:style style:name="supported_languages.B" style:family="table-column">
   <style:properties style:column-width="3.808cm" style:rel-column-width="16162*"/>
  </style:style>
  <style:style style:name="supported_languages.C" style:family="table-column">
   <style:properties style:column-width="4.256cm" style:rel-column-width="18065*"/>
  </style:style>
  <style:style style:name="supported_languages.D" style:family="table-column">
   <style:properties style:column-width="4.256cm" style:rel-column-width="18067*"/>
  </style:style>
  <style:style style:name="supported_languages.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="supported_languages.D1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="supported_languages.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="supported_languages.D2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table1" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table1.A" style:family="table-column">
   <style:properties style:column-width="4.717cm" style:rel-column-width="20022*"/>
  </style:style>
  <style:style style:name="Table1.B" style:family="table-column">
   <style:properties style:column-width="4.697cm" style:rel-column-width="19940*"/>
  </style:style>
  <style:style style:name="Table1.C" style:family="table-column">
   <style:properties style:column-width="3.6cm" style:rel-column-width="15283*"/>
  </style:style>
  <style:style style:name="Table1.D" style:family="table-column">
   <style:properties style:column-width="2.424cm" style:rel-column-width="10290*"/>
  </style:style>
  <style:style style:name="Table1.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table1.D1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table1.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table1.D2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table6" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table6.A" style:family="table-column">
   <style:properties style:column-width="15.439cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table6.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table6.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table7" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table7.A" style:family="table-column">
   <style:properties style:column-width="3.265cm" style:rel-column-width="13858*"/>
  </style:style>
  <style:style style:name="Table7.B" style:family="table-column">
   <style:properties style:column-width="12.174cm" style:rel-column-width="51677*"/>
  </style:style>
  <style:style style:name="Table7.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table7.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table7.B2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table8" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table8.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table8.A1" style:family="table-cell">
   <style:properties fo:padding-left="0cm" fo:padding-right="0cm" fo:padding-top="0.101cm" fo:padding-bottom="0.101cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table9" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table9.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table9.A1" style:family="table-cell">
   <style:properties fo:padding-left="0cm" fo:padding-right="0cm" fo:padding-top="0.101cm" fo:padding-bottom="0.101cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table10" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table10.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table10.A1" style:family="table-cell">
   <style:properties fo:padding-left="0cm" fo:padding-right="0cm" fo:padding-top="0.101cm" fo:padding-bottom="0.101cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table11" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table11.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table11.A1" style:family="table-cell">
   <style:properties fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table12" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table12.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table12.A1" style:family="table-cell">
   <style:properties fo:padding-left="0cm" fo:padding-right="0cm" fo:padding-top="0.101cm" fo:padding-bottom="0.101cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table5" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table5.A" style:family="table-column">
   <style:properties style:column-width="17.979cm" style:rel-column-width="65535*"/>
  </style:style>
  <style:style style:name="Table5.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table2" style:family="table">
   <style:properties style:width="15.439cm" fo:margin-left="2.54cm" fo:margin-right="0cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table2.A" style:family="table-column">
   <style:properties style:column-width="10.097cm" style:rel-column-width="42858*"/>
  </style:style>
  <style:style style:name="Table2.B" style:family="table-column">
   <style:properties style:column-width="1.743cm" style:rel-column-width="7398*"/>
  </style:style>
  <style:style style:name="Table2.C" style:family="table-column">
   <style:properties style:column-width="1.677cm" style:rel-column-width="7121*"/>
  </style:style>
  <style:style style:name="Table2.D" style:family="table-column">
   <style:properties style:column-width="1.923cm" style:rel-column-width="8158*"/>
  </style:style>
  <style:style style:name="Table2.A1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table2.D1" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table2.A2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table2.D2" style:family="table-cell">
   <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Table4" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Table4.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Table4.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Table4.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Table4.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="Tabelle2" style:family="table">
   <style:properties style:width="17.979cm" table:align="margins"/>
  </style:style>
  <style:style style:name="Tabelle2.A" style:family="table-column">
   <style:properties style:column-width="2.45cm" style:rel-column-width="8933*"/>
  </style:style>
  <style:style style:name="Tabelle2.B" style:family="table-column">
   <style:properties style:column-width="15.529cm" style:rel-column-width="56602*"/>
  </style:style>
  <style:style style:name="Tabelle2.A1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border="none"/>
  </style:style>
  <style:style style:name="Tabelle2.B1" style:family="table-cell">
   <style:properties fo:padding="0.099cm" fo:border-left="none" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
  </style:style>
  <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Footer right">
   <style:properties fo:font-weight="bold"/>
  </style:style>
  <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Head 1" style:master-page-name="Chapter_Start">
   <style:properties style:page-number="0"/>
  </style:style>
  <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L1"/>
  <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L2"/>
  <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L3"/>
  <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L4"/>
  <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L5"/>
  <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L6"/>
  <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L7"/>
  <style:style style:name="P10" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L7">
   <style:properties fo:margin-left="3.736cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L8">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P12" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L9"/>
  <style:style style:name="P13" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="P14" style:family="paragraph" style:parent-style-name="Paragraph">
   <style:properties fo:margin-left="2.54cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
  </style:style>
  <style:style style:name="P15" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L10"/>
  <style:style style:name="P16" style:family="paragraph" style:parent-style-name="Head 2">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="P17" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L11"/>
  <style:style style:name="P18" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L11">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="P19" style:family="paragraph" style:parent-style-name="Paragraph" style:list-style-name="L12"/>
  <style:style style:name="T1" style:family="text">
   <style:properties fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T2" style:family="text">
   <style:properties fo:language="en" fo:country="US"/>
  </style:style>
  <style:style style:name="T3" style:family="text">
   <style:properties fo:font-style="normal" fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T4" style:family="text">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="T5" style:family="text">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="T6" style:family="text" style:parent-style-name="Emphasis">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="T7" style:family="text" style:parent-style-name="Emphasis">
   <style:properties fo:font-style="italic" fo:font-weight="normal"/>
  </style:style>
  <style:style style:name="T8" style:family="text" style:parent-style-name="Code (in text)">
   <style:properties fo:font-style="normal"/>
  </style:style>
  <style:style style:name="T9" style:family="text" style:parent-style-name="www/ftp/email">
   <style:properties fo:font-style="italic"/>
  </style:style>
  <style:style style:name="fr1" style:family="graphics" style:parent-style-name="ChapterFrame">
   <style:properties fo:padding="0.049cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.018cm solid #000000"/>
  </style:style>
  <style:style style:name="fr2" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties style:wrap="right" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr3" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="run-through" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none"/>
  </style:style>
  <style:style style:name="fr4" style:family="graphics" style:parent-style-name="Graphics">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.101cm" fo:margin-bottom="0.101cm" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="0%" draw:color-mode="standard"/>
  </style:style>
  <style:style style:name="fr5" style:family="graphics" style:parent-style-name="Frame">
   <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="run-through" style:horizontal-pos="left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none"/>
  </style:style>
  <text:list-style style:name="L1">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix=")" style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L2">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L3">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L4">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L5">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L6">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L7">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L8">
   <text:list-level-style-number text:level="1" style:num-suffix=")" style:num-format="A">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L9">
   <text:list-level-style-number text:level="1" text:style-name="Numbering Symbols" style:num-suffix=")" style:num-format="1">
    <style:properties text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="2" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="3" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="4" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="5" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="6" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="7" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="8" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="9" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
   <text:list-level-style-number text:level="10" style:num-suffix="." style:num-format="1">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm"/>
   </text:list-level-style-number>
  </text:list-style>
  <text:list-style style:name="L10">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L11">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <text:list-style style:name="L12">
   <text:list-level-style-bullet text:level="1" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="2" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="0.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="3" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="4" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="1.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="5" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="6" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="2.501cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="7" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="8" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="3.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="9" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.001cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
   <text:list-level-style-bullet text:level="10" text:style-name="Bullet Symbols" style:num-suffix="." text:bullet-char="•">
    <style:properties text:space-before="4.502cm" text:min-label-width="0.499cm" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
   </text:list-level-style-bullet>
  </text:list-style>
  <style:page-master style:name="pm1">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm2">
   <style:properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm3" style:page-usage="left">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm4" style:page-usage="right">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm5">
   <style:properties fo:page-width="22.721cm" fo:page-height="11.4cm" style:num-format="1" style:print-orientation="landscape" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm6">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm7">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="0" fo:column-gap="0cm"/>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm8" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="0.699cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.199cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm9" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm10" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style/>
  </style:page-master>
  <style:page-master style:name="pm11" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style>
    <style:properties svg:height="3.59cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0cm"/>
   </style:header-style>
   <style:footer-style>
    <style:properties fo:min-height="0.699cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.199cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm12" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm13" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.016cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.508cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm14">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style>
    <style:properties svg:height="3.59cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0cm"/>
   </style:header-style>
   <style:footer-style>
    <style:properties fo:min-height="0.699cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.199cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm15" style:page-usage="left">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm16" style:page-usage="right">
   <style:properties fo:page-width="19.05cm" fo:page-height="22.86cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm17" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="1.27cm" fo:margin-right="2.337cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="2" fo:column-gap="0.84cm">
     <style:column style:rel-width="32767*" fo:margin-left="0cm" fo:margin-right="0.42cm"/>
     <style:column style:rel-width="32768*" fo:margin-left="0.42cm" fo:margin-right="0cm"/>
    </style:columns>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm18" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.905cm" fo:margin-bottom="1.905cm" fo:margin-left="2.337cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="2" fo:column-gap="0.84cm">
     <style:column style:rel-width="32767*" fo:margin-left="0cm" fo:margin-right="0.42cm"/>
     <style:column style:rel-width="32768*" fo:margin-left="0.42cm" fo:margin-right="0cm"/>
    </style:columns>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm19" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" fo:border="none" fo:padding="0cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:columns fo:column-count="2" fo:column-gap="0.84cm">
     <style:column style:rel-width="32767*" fo:margin-left="0cm" fo:margin-right="0.42cm"/>
     <style:column style:rel-width="32768*" fo:margin-left="0.42cm" fo:margin-right="0cm"/>
    </style:columns>
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style>
    <style:properties svg:height="5.881cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.801cm" fo:border-top="none" fo:border-bottom="0.035cm solid #000000" fo:border-left="none" fo:border-right="none" fo:padding="0.499cm"/>
   </style:header-style>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm20" style:page-usage="right">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="2.341cm" fo:margin-right="1.27cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
  <style:page-master style:name="pm21" style:page-usage="left">
   <style:properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.91cm" fo:margin-bottom="1.91cm" fo:margin-left="1.27cm" fo:margin-right="2.341cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
    <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
   </style:properties>
   <style:header-style/>
   <style:footer-style>
    <style:properties fo:min-height="1.02cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.51cm"/>
   </style:footer-style>
  </style:page-master>
 </office:automatic-styles>
 <office:master-styles>
  <style:master-page style:name="Standard" style:page-master-name="pm1">
   <style:footer>
    <text:p text:style-name="Footer"/>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="First Page" style:page-master-name="pm2" style:next-style-name="Standard"/>
  <style:master-page style:name="Left Page" style:page-master-name="pm3" style:next-style-name="Right Page">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">29</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Right Page" style:page-master-name="pm4" style:next-style-name="Left Page">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Chapter" text:name="KapitelTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="KapitelTitel">Chapter</text:user-field-get> <text:s/><text:chapter text:display="number" text:outline-level="1"/> <text:s text:c="4"/><text:chapter text:display="name" text:outline-level="1"/> <text:s text:c="3"/><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Envelope" style:page-master-name="pm5"/>
  <style:master-page style:name="Index" style:page-master-name="pm6"/>
  <style:master-page style:name="HTML" style:page-master-name="pm7"/>
  <style:master-page style:name="Vakat" style:page-master-name="pm8">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">29</text:page-number> <text:span text:style-name="PageNumber"><text:s text:c="4"/></text:span><text:s/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s text:c="2"/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="CopyrightPage" style:page-master-name="pm9"/>
  <style:master-page style:name="BookPage1" style:page-master-name="pm10" style:next-style-name="CopyrightPage"/>
  <style:master-page style:name="NoChapter" style:page-master-name="pm11" style:next-style-name="Page_Left">
   <style:header>
    <text:p text:style-name="Header"/>
   </style:header>
   <style:footer>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="NoChapter left" style:page-master-name="pm12" style:next-style-name="No chapter right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">29</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s text:c="2"/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="No chapter right" style:page-master-name="pm13" style:next-style-name="NoChapter left">
   <style:footer>
    <text:p text:style-name="Footer right"><text:s text:c="5"/><text:chapter text:display="name" text:outline-level="1"/> <text:s text:c="3"/><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="TOC_Start" style:page-master-name="pm14" style:next-style-name="TOC_Left">
   <style:header>
    <text:p text:style-name="Header"/>
   </style:header>
   <style:header-left>
    <text:p text:style-name="Header left"/>
   </style:header-left>
   <style:footer>
    <text:p text:style-name="Footer right"><text:s text:c="5"/><text:page-number style:num-format="1" text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="TOC_Left" style:page-master-name="pm15" style:next-style-name="TOC_Right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">29</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get> </text:p>
   </style:footer>
   <style:footer-left>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">29</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="TOC_Right" style:page-master-name="pm16" style:next-style-name="TOC_Left">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Contents" text:name="InhaltsverzTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="InhaltsverzTitel">Contents</text:user-field-get> <text:s text:c="4"/><text:page-number style:num-format="1" text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Contents" text:name="InhaltsverzTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="InhaltsverzTitel">Contents</text:user-field-get> <text:span text:style-name="Page_Number"><text:s text:c="4"/></text:span><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="Index_Left" style:page-master-name="pm17" style:next-style-name="Index_Right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">29</text:page-number> <text:span text:style-name="T1"><text:s text:c="3"/></text:span><text:s/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Index_Right" style:page-master-name="pm18" style:next-style-name="Index_Left">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Index" text:name="IndexTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="IndexTitel">Index</text:user-field-get> <text:s text:c="4"/><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Chapter_Start" style:page-master-name="pm11" style:next-style-name="Page_Left">
   <style:header>
    <text:p text:style-name="Header"><draw:text-box draw:style-name="fr1" draw:name="Rahmen2" text:anchor-type="paragraph" svg:width="2.54cm" fo:min-height="0.801cm" draw:z-index="0">
      <text:p text:style-name="ChapterText"><text:user-field-get text:name="KapitelTitel">Chapter</text:user-field-get> <text:tab-stop/> <text:chapter text:display="number" text:outline-level="1">5</text:chapter> </text:p>
     </draw:text-box> </text:p>
   </style:header>
   <style:footer>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:p text:style-name="Footer right"><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="Index_Start" style:page-master-name="pm19" style:next-style-name="Index_Left">
   <style:header>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Index" text:name="IndexTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="HeadlineIndex"><text:user-field-get text:name="IndexTitel">Index</text:user-field-get> </text:p>
   </style:header>
   <style:footer>
    <text:p text:style-name="P1"><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
  </style:master-page>
  <style:master-page style:name="Page_Right" style:page-master-name="pm20" style:next-style-name="Page_Left">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Chapter" text:name="KapitelTitel"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer right"><text:user-field-get text:name="KapitelTitel">Chapter</text:user-field-get> <text:s/><text:chapter text:display="number" text:outline-level="1">5</text:chapter> <text:s text:c="4"/><text:chapter text:display="name" text:outline-level="1">Advanced UNO</text:chapter> <text:s text:c="3"/><text:page-number text:select-page="current">29</text:page-number> </text:p>
   </style:footer>
   <style:footer-left>
    <text:p text:style-name="Footer"/>
   </style:footer-left>
  </style:master-page>
  <style:master-page style:name="Page_Left" style:page-master-name="pm21" style:next-style-name="Page_Right">
   <style:footer>
    <text:user-field-decls>
     <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
     <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
     <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
    </text:user-field-decls>
    <text:p text:style-name="Footer left"><text:page-number text:select-page="current">29</text:page-number> <text:s text:c="4"/><text:user-field-get text:name="SOVersion">Product name and Release number</text:user-field-get> <text:s/><text:user-field-get text:name="BuchTitel">Manual Title</text:user-field-get>  <text:user-field-get text:name="ReleaseDate">March 2001</text:user-field-get> </text:p>
   </style:footer>
  </style:master-page>
 </office:master-styles>
 <office:body>
  <text:variable-decls>
   <text:variable-decl text:value-type="string" text:name="Version"/>
   <text:variable-decl text:value-type="string" text:name="HTML_ON"/>
   <text:variable-decl text:value-type="string" text:name="HTML_OFF"/>
   <text:variable-decl text:value-type="float" text:name="lala"/>
   <text:variable-decl text:value-type="string" text:name="TITEL"/>
   <text:variable-decl text:value-type="string" text:name="END"/>
   <text:variable-decl text:value-type="string" text:name="NAME"/>
   <text:variable-decl text:value-type="string" text:name="HREF"/>
   <text:variable-decl text:value-type="string" text:name="HelpID"/>
   <text:variable-decl text:value-type="string" text:name="MODIFY"/>
   <text:variable-decl text:value-type="string" text:name="REFNR"/>
   <text:variable-decl text:value-type="string" text:name="OS2"/>
   <text:variable-decl text:value-type="string" text:name="ELSE"/>
   <text:variable-decl text:value-type="string" text:name="UNIX"/>
   <text:variable-decl text:value-type="string" text:name="MAC"/>
   <text:variable-decl text:value-type="string" text:name="INDEX"/>
   <text:variable-decl text:value-type="string" text:name="DOKENDE"/>
   <text:variable-decl text:value-type="string" text:name="WIN"/>
   <text:variable-decl text:value-type="string" text:name="KEY"/>
   <text:variable-decl text:value-type="string" text:name="HFELD"/>
   <text:variable-decl text:value-type="string" text:name="AKTHLP"/>
   <text:variable-decl text:value-type="string" text:name="TabelleAnfang"/>
  </text:variable-decls>
  <text:sequence-decls>
   <text:sequence-decl text:display-outline-level="1" text:separation-character="." text:name="Illustration"/>
   <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
   <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
   <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
   <text:sequence-decl text:display-outline-level="0" text:name="CapterNumber"/>
   <text:sequence-decl text:display-outline-level="1" text:separation-character="." text:name="Figure"/>
   <text:sequence-decl text:display-outline-level="1" text:separation-character="." text:name="Tables"/>
  </text:sequence-decls>
  <text:user-field-decls>
   <text:user-field-decl text:value-type="string" text:string-value="Manual Title" text:name="BuchTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="March 2001" text:name="ReleaseDate"/>
   <text:user-field-decl text:value-type="string" text:string-value="Product name and Release number" text:name="SOVersion"/>
   <text:user-field-decl text:value-type="string" text:string-value="Chapter" text:name="KapitelTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="Contents" text:name="InhaltsverzTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="Index" text:name="IndexTitel"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="EinFeld"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="nocheins"/>
   <text:user-field-decl text:value-type="string" text:string-value="StarOffice 5.1" text:name="Version_renamed_3"/>
   <text:user-field-decl text:value-type="string" text:string-value="Setup &amp; Administration Guide" text:name="Titel_renamed_4"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="fuer"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="Anhang"/>
   <text:user-field-decl text:value-type="string" text:string-value="" text:name="Notizen"/>
  </text:user-field-decls>
  <text:h text:style-name="P2" text:level="1">Advanced UNO</text:h>
  <text:p text:style-name="Under_Head1"/>
  <text:h text:style-name="Head 2" text:level="2">Choosing an Implementation Language</text:h>
  <text:p text:style-name="Paragraph">The UNO technology provides a framework for cross-platform and language independent programming. All the [PRODUCTNAME] components can be implemented in any language supported by UNO, as long as they only communicate with other components through their IDL interfaces.</text:p>
  <table:table table:name="Table3" table:style-name="Table3">
   <table:table-column table:style-name="Table3.A"/>
   <table:table-column table:style-name="Table3.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table3.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr2" draw:name="Note" text:anchor-type="paragraph" svg:x="0.071cm" svg:y="0.03cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="1" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image> </text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table3.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">Note: The condition &quot;as long as they only communicate with other components through their IDL interfaces&quot; is to be strictly taken. In fact, a lot of implementations within [PRODUCTNAME] export UNO interfaces and still use private C++ interfaces. This is a tribute to older implementations that cannot be rewritten in an acceptable timeframe.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">A developer can customize the office to their needs with this flexibility, but they will have to decide which implementation language should be selected for a specific problem.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Supported Programming Environments</text:h>
  <text:p text:style-name="Paragraph">The support for programming languages in UNO and [PRODUCTNAME] is divided into three different categories. </text:p>
  <text:ordered-list text:style-name="L1">
   <text:list-item>
    <text:p text:style-name="P3">Languages that invoke calls on existing UNO objects are possibly implemented in other programming languages. Additionally, it may be possible to implement certain UNO interfaces, but not UNO components that can be instantiated by the service manager.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P3">Languages that implement UNO components. UNO objects implemented in such a language are accessible from any other language that UNO supports, just by instantiating a service by name at the servicemanager. For instance, the developer can implement a [PRODUCTNAME] Calc addin (see <text:span text:style-name="ChapterRef">[CHAPTER:Spreadsheet]</text:span>).</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P3">Languages that are used to write code to be delivered within [PRODUCTNAME] documents and utilize dialogs designed with the [PRODUCTNAME] dialog editor.</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="Paragraph">The following table lists programming languages currently supported by UNO. &apos;Yes&apos; in the table columns denotes full support, &apos;no&apos; denotes that there is no support and is not even planned in the future. &apos;Maybe in future&apos; means there is currently no support, but this may change with future releases. </text:p>
  <table:table table:name="supported_languages" table:style-name="supported_languages">
   <table:table-column table:style-name="supported_languages.A"/>
   <table:table-column table:style-name="supported_languages.B"/>
   <table:table-column table:style-name="supported_languages.C"/>
   <table:table-column table:style-name="supported_languages.D"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="supported_languages.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Language</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="supported_languages.A1" table:value-type="string">
      <text:p text:style-name="TableHead">UNO scripting</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="supported_languages.A1" table:value-type="string">
      <text:p text:style-name="TableHead">UNO components</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="supported_languages.D1" table:value-type="string">
      <text:p text:style-name="TableHead">Deployment with<text:line-break/> [PRODUCTNAME] documents</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">C++</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">C</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Java</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">StarBasic</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">OLE automation (win32 only)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Python</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future<text:line-break/> (under development)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future<text:line-break/> (under development)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="supported_languages.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">maybe in future</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark-start text:id="IMark43678420"/>Java<text:alphabetical-index-mark-end text:id="IMark43678420"/></text:h>
  <text:p text:style-name="Paragraph"><text:alphabetical-index-mark-start text:id="IMark43678420" text:key1="UNO"/>Java<text:alphabetical-index-mark-end text:id="IMark43678420"/> is a an accepted programming language offering a standard library with a large set of features and available extensions. Additional extensions will be available in the future, such as JAX-RPC for calling webservices. It is a typesafe language with a typesafe UNO binding. Although interfaces have to be <text:span text:style-name="T2">queried</text:span> explicitly, the type safety makes it suitable for larger projects. UNO components can be implemented with Java, that is, the Java VM is started on demand inside the office process when a Java component is instantiated. The OfficeBean allows embedding [PRODUCTNAME] documents in Java Applets and Applications.</text:p>
  <text:p text:style-name="Paragraph">There is a constant runtime overhead of about 1 to 2 ms per call that is caused by the bridge conversion routines when calling UNO objects implemented in other language bindings. Since [PRODUCTNAME] consists of C++ code, every Java call into the office needs to be bridged. This poses no problems if there are a few calls per user interaction. The runtime overhead will hurt the application when routines produce hundreds or thousands of calls.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark-start text:id="IMark43691716"/>C++<text:alphabetical-index-mark-end text:id="IMark43691716"/></text:h>
  <text:p text:style-name="Paragraph"><text:alphabetical-index-mark-start text:id="IMark43663468" text:key1="UNO"/>C++<text:alphabetical-index-mark-end text:id="IMark43663468"/> is an accepted programming language offering third-party products. In addition to C++ being fast since it is compiled locally, it offers the fastest communication with [PRODUCTNAME] because most of the essential parts of office have been developed in C++. This advantage becomes less important as you call into the office through the interprocess bridge, because every remote call means a constant loss of 1 to2 ms. The fastest code to extend the office can be implemented as a C++ UNO component. It is appropriate for larger projects due to its strong type safety at compile time.</text:p>
  <text:p text:style-name="Paragraph">C++ is difficult to learn and coding, in general, takes longer, for example, in Java. The components must be built for every platform, that leads to a higher level of complexity during development and deployment. </text:p>
  <text:h text:style-name="Head 4" text:level="4">[PRODUCTNAME] <text:alphabetical-index-mark-start text:id="IMark43691716"/>Basic<text:alphabetical-index-mark-end text:id="IMark43691716"/></text:h>
  <text:p text:style-name="Paragraph">[PRODUCTNAME] <text:alphabetical-index-mark-start text:id="IMark43691716" text:key1="UNO"/>Basic<text:alphabetical-index-mark-end text:id="IMark43691716"/> is the scripting language developed for and integrated directly into [PRODUCTNAME]. It currently offers the best integration with [PRODUCTNAME], because you can insert code into documents, attach arbitrary office events, such as document loading, keyboard shortcuts or menu entries, to Basic code and use dialogs designed within the [PRODUCTNAME] IDE. In Basic, calls are invoked on an object rather than on a specific interface. Interfaces, such as <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XPropertySet]</text:span> are integrated as Basic object properties. Basic always runs in the office process and thus avoids costly interprocess calls.</text:p>
  <text:p text:style-name="Paragraph">The language is type unsafe, that is, only a minimal number of errors are found during compilation. Most errors appear at runtime, therefore it is not the best choice for large projects. The language is [PRODUCTNAME] specific and only offers a small set of runtime functionality with little third-party support. All office functionality is used through UNO. UNO components cannot be implemented with Basic. The only UNO objects that can be implemented are listeners. Finally, Basic does not offer any thread support.</text:p>
  <text:h text:style-name="Head 4" text:level="4"><text:alphabetical-index-mark-start text:id="IMark43678420"/>OLE Automation Bridge<text:alphabetical-index-mark-end text:id="IMark43678420"/></text:h>
  <text:p text:style-name="Paragraph">The OLE Automation bridge opens the UNO world to programming environments that support OLE automation, such as Visual Basic, JScript, Delphi or C++ Builder. Programmers working on the Windows platform can write programs for [PRODUCTNAME] without leaving their language by learning a new API. These programmers have access to the libraries provided by their language. It is possible to implement UNO objects, if the programming language supports object implementation.</text:p>
  <text:p text:style-name="Paragraph">This bridge is only useful on a Win32 machine, thereby being a disadvantage . Scripts always run in a different process so that every UNO call has at least the usual interprocess overhead of 1 to 2 ms. Currently Automation UNO components cannot be implemented for the service manager, but this may change in the future.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Python</text:h>
  <text:p text:style-name="Paragraph">A Python scripting bridge (<text:alphabetical-index-mark-start text:id="IMark43663468"/>PyUNO<text:alphabetical-index-mark-end text:id="IMark43663468"/>) is currently developed by Ralph Thomas. It is available in an experimental alpha state with known limitations. For details, see PyUNO on <text:span text:style-name="www/ftp/email">udk.openoffice.org</text:span>.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Use Cases</text:h>
  <text:p text:style-name="Paragraph">The following list gives typical UNO applications for the various language environments.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Java</text:h>
  <text:unordered-list text:style-name="L2">
   <text:list-item>
    <text:p text:style-name="P4">Servlets creating Office Documents on the fly, Java Server Pages</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P4">Server-Based Collaboration Platforms, Document Management Systems</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P4">Calc add-ins</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P4">Chart add-ins</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P4">Database Drivers</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 4" text:level="4">C++</text:h>
  <text:unordered-list text:style-name="L3">
   <text:list-item>
    <text:p text:style-name="P5">Filters reading document data and generating Office Documents through UNO calls</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P5">Database Drivers</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P5">Database Drivers</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P5">Calc add-ins</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P5">Chart add-ins</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 4" text:level="4">[PRODUCTNAME] Basic</text:h>
  <text:unordered-list text:style-name="L4">
   <text:list-item>
    <text:p text:style-name="P6">Office Automation</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P6">Event-driven data-aware forms</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 4" text:level="4">OLE Automation</text:h>
  <text:unordered-list text:style-name="L5">
   <text:list-item>
    <text:p text:style-name="P7">Office Automation, creating and controlling Office Documents from other applications and from Active Server Pages</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 4" text:level="4">Python</text:h>
  <text:unordered-list text:style-name="L6">
   <text:list-item>
    <text:p text:style-name="P8">Calc add-ins</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 3" text:level="3">Recommendation</text:h>
  <text:p text:style-name="Paragraph">All languages have their advantages and disadvantages as previously discussed , but there is not one language for all purposes, depending on your use. Consider carefully before starting a new project and evaluate the language to use so that it saves you time.</text:p>
  <text:p text:style-name="Paragraph">Sometimes it may be useful to use multiple languages to gain the advantages of both languages. For instance, currently it is not possible to attach a keyboard event to a java method, therefore, write a small basic function, which forwards the event to a java component. </text:p>
  <text:p text:style-name="Paragraph">The number of languages supported by UNO may increase and some of the limitations shown in the table above may disappear.</text:p>
  <text:h text:style-name="Head 2" text:level="2"><text:alphabetical-index-mark text:string-value="language bindings" text:key1="UNO"/>Language Bindings</text:h>
  <text:p text:style-name="Paragraph">UNO language bindings enable developers to use and implement UNO objects in arbitrary programming languages. Thus, the existing language bindings connect between implementation environments, such as Java, C++, [PRODUCTNAME] Basic and OLE Automation. The connection is accomplished by <text:span text:style-name="Emphasis">bridges</text:span>. The following terms are used in our discussion about the implementation of language bindings.</text:p>
  <text:p text:style-name="Paragraph">In our context, the <text:alphabetical-index-mark-start text:id="IMark43678420" text:key1="UNO"/><text:span text:style-name="Emphasis">target language</text:span><text:alphabetical-index-mark-end text:id="IMark43678420"/> or <text:alphabetical-index-mark-start text:id="IMark43693524" text:key1="UNO"/><text:span text:style-name="Emphasis">target environment</text:span><text:alphabetical-index-mark-end text:id="IMark43693524"/> denotes the language or environment from which the UNO component model is accessed. <text:span text:style-name="T3">The </text:span><text:alphabetical-index-mark-start text:id="IMark43695516" text:key1="UNO"/><text:span text:style-name="Emphasis">bridging language</text:span><text:alphabetical-index-mark-end text:id="IMark43695516"/> is the language used for writing the bridge code.</text:p>
  <text:p text:style-name="Paragraph">An object-oriented language determines the layout of its objects in memory. We call an object that is based on this layout a <text:alphabetical-index-mark-start text:id="IMark43663468" text:key1="UNO"/><text:span text:style-name="Emphasis">language object</text:span><text:alphabetical-index-mark-end text:id="IMark43663468"/>. The layout along with everything that relates to it, such as creation, destruction, and interaction, is the <text:span text:style-name="Emphasis">object model </text:span>of a language<text:span text:style-name="Emphasis">. </text:span></text:p>
  <text:p text:style-name="Paragraph">A <text:span text:style-name="Emphasis">UNO </text:span><text:alphabetical-index-mark-start text:id="IMark43686812" text:key1="UNO"/><text:span text:style-name="Emphasis">proxy</text:span> <text:alphabetical-index-mark-end text:id="IMark43686812"/>(short: <text:span text:style-name="Emphasis">proxy</text:span>) is created by a bridge and it is a language object that represents a UNO object in the target language. It provides the same functionality as the original UNO object. There are two terms which further specialize a <text:span text:style-name="T4">UNO proxy.</text:span> <text:span text:style-name="T5">The </text:span>UNO<text:span text:style-name="Emphasis"> </text:span><text:alphabetical-index-mark-start text:id="IMark43696044" text:key1="UNO"/><text:span text:style-name="Emphasis">interface </text:span>proxy<text:alphabetical-index-mark-end text:id="IMark43696044"/> <text:span text:style-name="T5">is a</text:span> UNO proxy <text:span text:style-name="T5">representing exactly </text:span><text:span text:style-name="T6">one</text:span> <text:span text:style-name="T5">interface of a UNO object, whereas a </text:span>UNO<text:span text:style-name="Emphasis"> </text:span><text:alphabetical-index-mark-start text:id="IMark43691244" text:key1="UNO"/><text:span text:style-name="Emphasis">object </text:span>proxy<text:alphabetical-index-mark-end text:id="IMark43691244"/> <text:span text:style-name="T3">represents an uno object with </text:span><text:span text:style-name="T7">all</text:span> <text:span text:style-name="T3">its interfaces.</text:span> </text:p>
  <text:p text:style-name="Paragraph">An <text:alphabetical-index-mark-start text:id="IMark43691716" text:key1="UNO"/><text:span text:style-name="Emphasis">interface bridge</text:span> <text:alphabetical-index-mark-end text:id="IMark43691716"/>bridges one UNO interface to one interface of the target language, that is, to a UNO interface proxy. When the proxy is queried for another interface that is implemented by the UNO object, then another interface proxy is returned. In contrast, an <text:alphabetical-index-mark-start text:id="IMark43693700" text:key1="UNO"/><text:span text:style-name="Emphasis">object bridge</text:span><text:alphabetical-index-mark-end text:id="IMark43693700"/> bridges entire UNO objects into UNO object proxies of the target language. The object proxy receives calls for all interfaces of the UNO object.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Implementing UNO Language Bindings</text:h>
  <text:p text:style-name="Paragraph">This section introduces the basic steps to create a new language binding. The steps required depend on the target language. The section provides an overview of existing language bindings to help you to decide what is necessary for your case. It is recommended that you read the sources for available language bindings and transfer the solutions they offer to the new circumstances of your target language. </text:p>
  <text:h text:style-name="Head 4" text:level="4">Overview of Language Bindings and Bridges</text:h>
  <text:p text:style-name="Paragraph">Creating a language binding for UNO involves the following tasks:</text:p>
  <text:h text:style-name="Head 5" text:level="5">Language Specification and UNO Feature Support</text:h>
  <text:p text:style-name="Paragraph">When writing a language binding, consider how to map UNOIDL types to your target language, treat simple types and handle complex types, such as <text:span text:style-name="Code (in text)">struct</text:span>, <text:span text:style-name="Code (in text)">sequence</text:span>, <text:span text:style-name="Code (in text)">interface</text:span> and <text:span text:style-name="Code (in text)">any</text:span>. Furthermore, UNOIDL features, such as services, properties and exceptions must be matched to the capabilities of the target language and accommodated, if need be.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Code Generator</text:h>
  <text:p text:style-name="Paragraph">If the target language requires type definitions at compile time, a code generator must translate UNOIDL type definitions to the target language type definitions according to the language specification, so that the types defined in UNOIDL can be used.</text:p>
  <text:h text:style-name="Head 5" text:level="5">UNO <text:alphabetical-index-mark-start text:id="IMark43663468" text:key1="UNO"/>Bridge<text:alphabetical-index-mark-end text:id="IMark43663468"/></text:h>
  <text:p text:style-name="Paragraph">UNO communication is based on calls to interfaces. Bridges supply the necessary means to use interfaces of UNO objects between implementation environments. The key for bridging is an intermediate environment called <text:alphabetical-index-mark-start text:id="IMark43691716" text:key1="UNO"/>binary UNO<text:alphabetical-index-mark-end text:id="IMark43691716"/>,that consists of binary data formats for parameters and return values, and a C dispatch method used to call arbitrary operations on UNO interfaces. A bridge must be capable of the following tasks:</text:p>
  <text:unordered-list text:style-name="L7">
   <text:list-item>
    <text:p text:style-name="P9">Between the target language and [PRODUCTNAME]: </text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">a) Converting operation parameters from the target language to binary UNO.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">b) Transforming operation calls in the target language to calls in binary UNO in a different environment.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">c) Transporting the operation call with its parameters to [PRODUCTNAME] and the return values back to the target language.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">d) Mapping return values from binary UNO to the target language.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P9">Between [PRODUCTNAME] and the target language, that is, during callbacks or when using a component in the target language: </text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">a) Converting operation parameters from binary UNO to the target language.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">b) Transforming operation calls in binary UNO to calls in the target language.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">c) Transporting the operation call with its parameters to the target language and the return values back to [PRODUCTNAME].</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P10">d) Converting return values from the target language to binary UNO.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="Paragraph">The Reflection API delivers information about UNO types and is used by bridges to support type conversions (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Converter]</text:span>), and method invocations (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation]</text:span>). Furthermore, it supplies runtime type information and creates instances of certain UNO types, such as structs (<text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.CoreReflection]</text:span>).</text:p>
  <text:h text:style-name="Head 5" text:level="5">UNO <text:alphabetical-index-mark text:string-value="component loader" text:key1="UNO"/>Component Loader</text:h>
  <text:p text:style-name="Paragraph">An <text:s/>implementation loader is required to load and activate code produced by the target language if implementations in the target language are to be instantiated. This involves locating the component files produced by the target language, and mechanisms to load and execute the code produced by the target language, such as launching a runtime environment. Currently there are implementation loaders for jar files and locally shared libraries on the platforms supported by UNO.</text:p>
  <text:h text:style-name="Head 5" text:level="5"><text:alphabetical-index-mark text:string-value="bootstrapping" text:key1="UNO"/>Bootstrapping</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.bridge.UnoUrlResolver;com.sun.star.lang.ServiceManager]A UNO language binding must prepare itself so that it can bridge to the UNO environments. It depends on the target environment how this is achieved. In Java, C++, and Python, a local service manager in the target environment is used to instantiate a [IDL:com.sun.star.bridge.UnoUrlResolver] that connects to [PRODUCTNAME]. In the Automation bridge, the object com.sun.star.ServiceManager is obtained <text:s/>from the COM runtime system and in [PRODUCTNAME] Basic the service manager is available from a special method of the Basic runtime environment, <text:span text:style-name="Code (in text)">getProcessServiceManager()</text:span>.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Implementation Options</text:h>
  <text:p text:style-name="Paragraph">There are two different approaches when creating a UNO language binding.</text:p>
  <text:ordered-list text:style-name="L8">
   <text:list-item>
    <text:p text:style-name="P11">Programming languages checking types at compile time. <text:line-break/>Examples are the languages Java or C++. In these environments, it is necessary to query for interfaces at certain objects and then invoke calls compile-time-typesafe on these interfaces. </text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P11">Programming languages checking types at runtime.<text:line-break/>Examples are the languages StarBasic, Python or Perl. In these languages, the interfaces are not queried explicitly as there is no compiler to check the signature of a certain method. Instead, methods are directly invoked on objects. During execution, the runtime engine checks if a method is available at one of the exported interfaces, and if not, a runtime error is raised. Typically, such a binding has a slight performance disadvantage compared to the solution above.</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="Paragraph">You can achieve different levels of integration with both types of language binding.</text:p>
  <text:ordered-list text:style-name="L9">
   <text:list-item>
    <text:p text:style-name="P12">Call existing UNO interfaces implemented in different bindings.<text:line-break/>This is the normal scripting use case, for example, connect to a remote running office, instantiate some services and invoke calls on these services (<text:span text:style-name="Emphasis">unidirectional binding</text:span>).</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P12">Implement UNO interfaces and let them be called from different bindings.<text:line-break/>In addition to 1) above, a language binding is able to implement UNO interfaces, for example, for instance listener interfaces, so that your code is notified of certain events (<text:span text:style-name="Emphasis">limited bidirectional binding</text:span>).</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P12">Implement a UNO component that is instantiated on demand from any other language at the global service manager.<text:line-break/>In addition to 2) above, a binding must provide the code which starts up the runtime engine of the target environment. For example, when a Java UNO component is instantiated by the [PRODUCTNAME] process, the Java VM must be loaded and initialized, before the actual component is loaded (<text:span text:style-name="Emphasis">bidirectional binding</text:span>).</text:p>
   </text:list-item>
  </text:ordered-list>
  <text:p text:style-name="Paragraph">A language binding should always be bidirectional. That is, it should be possible to access UNO components implemented <text:span text:style-name="Emphasis">in the </text:span><text:span text:style-name="T4">target language</text:span> <text:span text:style-name="T5">from [PRODUCTNAME], as well as accessing UNO components that are implemented in a different language </text:span><text:span text:style-name="T6">from the ta</text:span><text:span text:style-name="T4">rget language. </text:span></text:p>
  <text:p text:style-name="Paragraph">The following table provides an overview about the capabilities of the different language bindings currently available for [PRODUCTNAME]:</text:p>
  <table:table table:name="Table1" table:style-name="Table1">
   <table:table-column table:style-name="Table1.A"/>
   <table:table-column table:style-name="Table1.B"/>
   <table:table-column table:style-name="Table1.C"/>
   <table:table-column table:style-name="Table1.D"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table1.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Language</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table1.A1" table:value-type="string">
      <text:p text:style-name="TableHead">scripting <text:line-break/> (accessing office objects)</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table1.A1" table:value-type="string">
      <text:p text:style-name="TableHead">interface<text:line-break/> implementation</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table1.D1" table:value-type="string">
      <text:p text:style-name="TableHead">component<text:line-break/> development</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">C++ (platform dependent)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">Java</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">StarBasic</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">(only listener interfaces)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">OLE automation <text:line-break/>(Win32 only)</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table1.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no (maybe in the future)</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The next section outlines the implementation of a C++ language binding. The C++ binding itself is extremely platform and compiler dependent, which provides a barrierwhen porting [PRODUCTNAME] to a new platform. Although this chapter focuses on C++ topics, the chapter can be applied for other typesafe languages that store their code in a shared library, for instance, Delphi, because the same concepts apply. </text:p>
  <text:p text:style-name="Paragraph">The section <text:span text:style-name="ChapterRef">[CHAPTER:AdvancedUNO.LangBind.Reflection]</text:span> considers the UNO reflection and invocation API, which offers generic functionality to inspect and call UNO objects. The section <text:span text:style-name="ChapterRef">[CHAPTER:AdvancedUNO.LangBind.XInvocation]</text:span> explains how the Reflection API is used to implement a runtime type-checking language binding.</text:p>
  <text:p text:style-name="Paragraph">The final chapter <text:span text:style-name="ChapterRef">[CHAPTER:AdvancedUNO.LangBind.ImplLoader]</text:span> briefly describes the concept of <text:span text:style-name="T4">implementation loaders</text:span> that instantiates components on demand independently of the <text:span text:style-name="T5">client and the implementation language.The integration of a new programming language into the UNO component framework is completed once you have a loader.</text:span> </text:p>
  <text:h text:style-name="Head 3" text:level="3">UNO C++ bridges</text:h>
  <text:p text:style-name="Paragraph">This chapter focuses on writing a UNO bridge locally, specifically writing a C++ UNO bridge to connect to code compiled with the C++ compiler. This is an introduction for bridge implementers.. It is assumed that the reader has a general understanding of compilers and a of 80x86 assembly language. Refer to the section <text:span text:style-name="ChapterRef">[CHAPTER:AdvancedUNO.LangBind.ImplLoader]</text:span> for additional information.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Binary UNO Interfaces</text:h>
  <text:p text:style-name="Paragraph">A primary goal when using a new compiler is to adjust the C++-UNO data type generator (<text:span text:style-name="www/ftp/email">cppumaker</text:span> tool) to produce binary compatible declarations for the target language. The tested cppu core functions can be used when there are similar sizes and alignment of UNO data types. The layout of C++ data types, as well as implementing C++-UNO objects is explained in <text:span text:style-name="ChapterRef">[CHAPTER:ProfUNO.LangBind.Cpp]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">When writing C++ UNO objects, you are implementing UNO interfaces by inheriting from pure virtual C++ classes, that is, the generated cppumaker classes (see .<text:span text:style-name="www/ftp/email">hdl</text:span> files). When you provide an interface, you are providing a pure virtual class pointer. The following paragraph describes how the memory layout of a C++ object looks.</text:p>
  <text:p text:style-name="Paragraph">A C++-UNO interface pointer is always a pointer to a virtual function table (vftable), that is, a C++ <text:span text:style-name="Code (in text)">this</text:span> pointer. The equivalent binary UNO interface is a pointer to a struct<text:span text:style-name="Code (in text)"> _uno_Interface</text:span> that contains function pointers. This struct holds a function pointer to a <text:span text:style-name="Code (in text)">uno_DispatchMethod()</text:span> and also a function pointer to <text:span text:style-name="Code (in text)">acquire()</text:span> and <text:span text:style-name="Code (in text)">release()</text:span>:</text:p>
  <text:p text:style-name="Code">// forward declaration of uno_DispatchMethod()</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">typedef void (SAL_CALL * uno_DispatchMethod)(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:span text:style-name="CodeEmphasis">struct _uno_Interface</text:span> * pUnoI, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> const struct _typelib_TypeDescription * pMemberType,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> void * pReturn,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> void * pArgs[],</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> uno_Any ** ppException );</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">// Binary UNO interface</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">typedef <text:span text:style-name="CodeEmphasis">struct _uno_Interface</text:span> </text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> /** Acquires uno interface.</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:s text:c="3"/>@param pInterface uno interface</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> */</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> void (SAL_CALL * <text:span text:style-name="CodeEmphasis">acquire</text:span> )( struct _uno_Interface * pInterface );</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> /** Releases uno interface.</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/></text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:s text:c="3"/>@param pInterface uno interface</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> */</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> void (SAL_CALL * <text:span text:style-name="CodeEmphasis">release</text:span> )( struct _uno_Interface * pInterface );</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> /** dispatch function</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> */</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:span text:style-name="CodeEmphasis">uno_DispatchMethod pDispatcher</text:span> ;</text:p>
  <text:p text:style-name="Code">} uno_Interface;</text:p>
  <text:p text:style-name="Paragraph"/>
  <text:p text:style-name="Paragraph">Similar to <text:span text:style-name="Code (in text)">[IDL:com.sun.star.uno.XInterface]</text:span>, the life-cycle of an interface is controlled using the <text:span text:style-name="Code (in text)">acquire()</text:span> and <text:span text:style-name="Code (in text)">release()</text:span> functions of the binary UNO interface. Any other method is called through the dispatch function pointer <text:span text:style-name="Code (in text)">pDispatcher</text:span>. The dispatch function expects the binary UNO interface pointer (<text:span text:style-name="Code (in text)">this</text:span>), the interface member type of the function to be called, an optional pointer for a return value, the argument list and finally a pointer to signal an exception has occurred.</text:p>
  <text:p text:style-name="Paragraph">The caller of the dispatch function provides memory for the return value and the exception holder (<text:span text:style-name="Code (in text)">uno_Any</text:span>).</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">pArgs</text:span> array provides pointers to binary UNO values, for example, a pointer to an interface reference (<text:span text:style-name="Code (in text)">_uno_Interface **</text:span>) or a pointer to a SAL 32 bit integer (<text:span text:style-name="Code (in text)">sal_Int32 *</text:span>).</text:p>
  <text:p text:style-name="Paragraph">A bridge to binary UNO maps interfaces from C++ to binary UNO and conversely. To achieve this, implement a mechanism to produce proxy interfaces for both ends of the bridge.</text:p>
  <text:h text:style-name="Head 4" text:level="4">C++ Proxy</text:h>
  <text:p text:style-name="Paragraph">A C++ interface proxy carries its interface type (reflection), as well as its destination binary UNO interface (<text:span text:style-name="Code (in text)">this</text:span> pointer). The proxy&apos;s vftable pointer is patched to a generated vftable that is capable of determining the index that was called ,as well as the <text:span text:style-name="Code (in text)">this</text:span> pointer of the proxy object to get the interface type.</text:p>
  <text:p text:style-name="Paragraph">The vftable requires an assembly code. The rest is programmed in C/C++. You are not allowed to trash the registers. On many compilers, the <text:span text:style-name="Code (in text)">this </text:span>pointer and parameters are provided through stack space. The following provides an example of a Visual C++ 80x86:</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">vftable slot0:</text:p>
  <text:p text:style-name="Code">mov eax, 0</text:p>
  <text:p text:style-name="Code">jmp cpp_vftable_call</text:p>
  <text:p text:style-name="Code">vftable slot0:</text:p>
  <text:p text:style-name="Code">mov eax, 1</text:p>
  <text:p text:style-name="Code">jmp cpp_vftable_call</text:p>
  <text:p text:style-name="Code">vftable slot0:</text:p>
  <text:p text:style-name="Code">mov eax, 2</text:p>
  <text:p text:style-name="Code">jmp cpp_vftable_call</text:p>
  <text:p text:style-name="Code">...</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">static __declspec(naked) void __cdecl cpp_vftable_call(void)</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code">__asm</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> sub<text:tab-stop/> <text:tab-stop/> esp, 8<text:tab-stop/> <text:tab-stop/> // space for immediate return type</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> push<text:tab-stop/> <text:tab-stop/> esp</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> push<text:tab-stop/> <text:tab-stop/> eax<text:tab-stop/> <text:tab-stop/> // vtable index</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> eax, esp</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> eax, 16</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> push<text:tab-stop/> eax<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // original stack ptr</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> call<text:tab-stop/> <text:tab-stop/> cpp_mediate<text:tab-stop/> // proceed in C/C++</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> esp, 12</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> // depending on return value, fill registers</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> eax, typelib_TypeClass_FLOAT</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lfloat</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> eax, typelib_TypeClass_DOUBLE</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Ldouble</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> eax, typelib_TypeClass_HYPER</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lhyper</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> eax, typelib_TypeClass_UNSIGNED_HYPER</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lhyper</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> // rest is eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> pop<text:tab-stop/> <text:tab-stop/> eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> esp, 4</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> ret</text:p>
  <text:p text:style-name="Code">Lhyper:<text:tab-stop/> <text:tab-stop/> pop<text:tab-stop/> <text:tab-stop/> eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> pop<text:tab-stop/> <text:tab-stop/> edx</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> ret</text:p>
  <text:p text:style-name="Code">Lfloat:<text:tab-stop/> <text:tab-stop/> fld<text:tab-stop/> <text:tab-stop/> dword ptr [esp]</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> esp, 8</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> ret</text:p>
  <text:p text:style-name="Code">Ldouble:<text:tab-stop/> <text:tab-stop/> fld<text:tab-stop/> <text:tab-stop/> qword ptr [esp]</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> esp, 8</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> ret</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> }</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The vftable is filled with pointers to the different slot code (snippets). The snippet code recognizes the table index being called and calls <text:span text:style-name="Code (in text)">cpp_vftable_call()</text:span>. That function calls a C/C++ function (<text:span text:style-name="Code (in text)">cpp_mediate()</text:span>) and sets output registers upon return, for example, for floating point numbers depending on the return value type.</text:p>
  <text:p text:style-name="Paragraph">Remember that the vftable handling described above follows the Microsoft calling convention, that is, the <text:span text:style-name="Code (in text)">this</text:span> pointer is always the first parameter on the stack. This is currently not the case for gcc that prepends a pointer to a complex return value before the this pointer on the stack if a method returns a struct. This complicates the (static) vftable treatment, because different vftable slots have to be generated for different interface types, adjusting the offset to the proxy <text:span text:style-name="Code (in text)">this</text:span> pointer:</text:p>
  <table:table table:name="Table6" table:style-name="Table6">
   <table:table-column table:style-name="Table6.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table6.A1" table:value-type="string">
      <text:p text:style-name="TableHead">Microsoft Visual C++ call stack layout (esp offset [byte]):</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table6.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">0: return address</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table6.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">4: this pointer</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table6.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">8: optional pointer, if return value is complex (i.e. struct to be copy-constructed)</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table6.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">12: param0</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table6.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">16: param1</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table6.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">20: ...</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph"><text:s/>This is usually the hardest part for stack-oriented compilers. Afterwards proceed in C/C++ (<text:span text:style-name="Code (in text)">cpp_mediate()</text:span>) to examine the proxy interface type, read out parameters from the stack and prepare the call on the binary UNO destination interface.</text:p>
  <text:p text:style-name="Paragraph">Each parameter is read from the stack and converted into binary UNO. Use cppu core functions if you have adjusted the <text:span text:style-name="www/ftp/email">cppumaker</text:span> code generation (alignment, sizes) to the binary UNO layout (see <text:span text:style-name="www/ftp/email">cppu/inc/uno/data.h</text:span>).</text:p>
  <text:p text:style-name="Paragraph">After calling the destination <text:span text:style-name="Code (in text)">uno_dispatch()</text:span> method, convert any <text:span text:style-name="Code (in text)">out/inout</text:span> and return the values back to C++-UNO, and return to the caller. If an exception is signalled (<text:span text:style-name="Code (in text)">*ppException != 0</text:span>), throw the exception provided to you in <text:span text:style-name="Code (in text)">ppException</text:span>. In most cases, you can utilize Runtime Type Information (RTTI) from your compiler framework to throw exceptions in a generic manner. Disassemble code throwing a C++ exception, and observe what the compiler generates.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Binary UNO Proxy</text:h>
  <text:p text:style-name="Paragraph">The proxy code is simple for binary UNO. Convert any <text:span text:style-name="Code (in text)">in/inout</text:span> parameters to C++-UNO values, preparing a call stack. Then perform a virtual function call that is similar to the following example for Microsoft Visual C++:</text:p>
  <text:p text:style-name="Code">void callVirtualMethod(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> void * pThis, sal_Int32 nVtableIndex,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> void * pRegisterReturn, typelib_TypeClass eReturnTypeClass,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> sal_Int32 * pStackLongs, sal_Int32 nStackLongs )</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> // parameter list is mixed list of * and values</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> // reference parameters are pointers</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">__asm</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> {</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> eax, nStackLongs</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> test<text:tab-stop/> <text:tab-stop/> eax, eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lcall</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> // copy values</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> ecx, eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> shl<text:tab-stop/> <text:tab-stop/> eax, 2<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // sizeof(sal_Int32) == 4</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> eax, pStackLongs <text:tab-stop/> // params stack space</text:p>
  <text:p text:style-name="Code">Lcopy:<text:tab-stop/> <text:tab-stop/> sub<text:tab-stop/> <text:tab-stop/> eax, 4</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> push<text:tab-stop/> <text:tab-stop/> dword ptr [eax]</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> dec<text:tab-stop/> <text:tab-stop/> ecx</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jne<text:tab-stop/> <text:tab-stop/> Lcopy</text:p>
  <text:p text:style-name="Code">Lcall:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> // call</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> ecx, pThis</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> push<text:tab-stop/> <text:tab-stop/> ecx<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // this ptr</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> edx, [ecx]<text:tab-stop/> <text:tab-stop/> // pvft</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> eax, nVtableIndex</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> shl<text:tab-stop/> <text:tab-stop/> eax, 2<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // sizeof(void *) == 4</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> edx, eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> call<text:tab-stop/> <text:tab-stop/> [edx]<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // interface method call must be __cdecl!!!</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> // register return</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> ecx, eReturnTypeClass</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_VOID</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lcleanup</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> ebx, pRegisterReturn</text:p>
  <text:p text:style-name="Code">// int32</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_LONG</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint32</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_UNSIGNED_LONG</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint32</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_ENUM</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint32</text:p>
  <text:p text:style-name="Code">// int8</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_BOOLEAN</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint8</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_BYTE</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint8</text:p>
  <text:p text:style-name="Code">// int16</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_CHAR</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint16</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_SHORT</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint16</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_UNSIGNED_SHORT</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint16</text:p>
  <text:p text:style-name="Code">// float</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_FLOAT</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lfloat</text:p>
  <text:p text:style-name="Code">// double</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_DOUBLE</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Ldouble</text:p>
  <text:p text:style-name="Code">// int64</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_HYPER</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint64</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> cmp<text:tab-stop/> <text:tab-stop/> ecx, typelib_TypeClass_UNSIGNED_HYPER</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/><text:tab-stop/> <text:tab-stop/> je<text:tab-stop/> <text:tab-stop/> Lint64</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jmp<text:tab-stop/> <text:tab-stop/> Lcleanup // no simple type</text:p>
  <text:p text:style-name="Code">Lint8:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> byte ptr [ebx], al</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jmp<text:tab-stop/> <text:tab-stop/> Lcleanup</text:p>
  <text:p text:style-name="Code">Lint16:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> word ptr [ebx], ax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jmp<text:tab-stop/> <text:tab-stop/> Lcleanup</text:p>
  <text:p text:style-name="Code">Lfloat:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> fstp<text:tab-stop/> <text:tab-stop/> dword ptr [ebx]</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jmp<text:tab-stop/> <text:tab-stop/> Lcleanup</text:p>
  <text:p text:style-name="Code">Ldouble:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> fstp<text:tab-stop/> <text:tab-stop/> qword ptr [ebx]</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jmp<text:tab-stop/> <text:tab-stop/> Lcleanup</text:p>
  <text:p text:style-name="Code">Lint64:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> dword ptr [ebx], eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> dword ptr [ebx+4], edx</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jmp<text:tab-stop/> <text:tab-stop/> Lcleanup</text:p>
  <text:p text:style-name="Code">Lint32:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> dword ptr [ebx], eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> jmp<text:tab-stop/> <text:tab-stop/> Lcleanup</text:p>
  <text:p text:style-name="Code">Lcleanup:</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> // cleanup stack</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> mov<text:tab-stop/> <text:tab-stop/> eax, nStackLongs</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> shl<text:tab-stop/> <text:tab-stop/> eax, 2<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // sizeof(sal_Int32) == 4</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> eax, 4<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> // this ptr</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> add<text:tab-stop/> <text:tab-stop/> esp, eax</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> }</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">First stack data is pushed to the stack., including a <text:span text:style-name="Code (in text)">this</text:span> pointer, then the virtual function&apos;s pointer is retrieved and called. When the call returns, the return register values are copied back. It is also necessary to catch all exceptions generically and retrieve information about type and data of a thrown exception. In this case, look at your compiler framework functions also.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Additional Hints</text:h>
  <text:p text:style-name="Paragraph">Every local bridge is different, because of the compiler framework and code generation and register allocation. Before starting, look at your existing bridge code for the processor, compiler, and the platform in module <text:span text:style-name="www/ftp/email">bridges/source/cpp_uno</text:span> that is part of the OpenOffice.org source tree on <text:span text:style-name="www/ftp/email">www.openoffice.org</text:span>.</text:p>
  <text:p text:style-name="Paragraph">Also test your bridge code extensively and build the module <text:span text:style-name="www/ftp/email">cppu</text:span> with debug symbols before implementing the bridge, because cppu contains alignment and size tests for the compiler.</text:p>
  <text:p text:style-name="Paragraph">For quick development, use the executable build in <text:span text:style-name="www/ftp/email">cppu/test</text:span> raising your bridge library, doing lots of calls with all kinds of data on mapped interfaces.</text:p>
  <text:p text:style-name="P13">Also test your bridge in a non-debug build. Often, bugs in assembly code only occur in non-debug versions, because of trashed registers. In most cases, optimized code allocates or uses more processor registers than non-optimized (debug) code.</text:p>
  <text:h text:style-name="Head 3" text:level="3">UNO <text:alphabetical-index-mark-start text:id="IMark43663468" text:key1="UNO"/>Reflection API<text:alphabetical-index-mark-end text:id="IMark43663468"/></text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.lang.XTypeProvider;com.sun.star.reflection.CoreReflection;com.sun.star.script.Converter;com.sun.star.beans.Introspection;com.sun.star.beans.XIntrospection;com.sun.star.script.Invocation;com.sun.star.script.InvocationAdapterFactory;com.sun.star.reflection.XTypeDescription]This section describes the UNO Reflection API. This API includes services and interfaces that can be used to get information about interfaces and objects at runtime.</text:p>
  <text:h text:style-name="Head 4" text:level="4">XTypeProvider Interface</text:h>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XTypeProvider]</text:span> allows the developer to retrieve all types provided by an object. These types are usually interface types and the <text:span text:style-name="Code (in text)">XTypeProvider</text:span> interface can be used at runtime to detect which interfaces are supported by an object. This interface should be supported by every object to make it scriptable from [PRODUCTNAME] Basic.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Converter Service</text:h>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Converter]</text:span> supporting the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XTypeConverter]</text:span> provides basic functionality that is important in the reflection context. It converts values to a particular type. For the method <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XTypeConverter:convertTo]()</text:span>, the target type is specified as <text:span text:style-name="Code (in text)">type</text:span>, allowing any type available in the UNO type system. The method <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XTypeConverter:convertToSimpleType]()</text:span> converts a value into a simple type that is specified by the corresponding <text:span text:style-name="Code (in text)">[IDL:com.sun.star.uno.TypeClass]</text:span>. If the requested conversion is not feasible, both methods throw a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.CannotConvertException]</text:span>. </text:p>
  <text:h text:style-name="Head 4" text:level="4">CoreReflection Service</text:h>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.CoreReflection]</text:span> supporting the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XIdlReflection]</text:span> is an important entry point for the Uno Reflection API. The <text:span text:style-name="Code (in text)">XIdlReflection</text:span> interface has two methods that each return a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XIdlClass]</text:span> interface for a given name (method <text:span text:style-name="Code (in text)">forName()</text:span>) or <text:span text:style-name="Code (in text)">any</text:span> value (method <text:span text:style-name="Code (in text)">getType()</text:span>).</text:p>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">XIdlClass</text:span> is one of the central interfaces of the Reflection API. It provides information about types, especially about class or interface, and struct types. Besides general information, for example, to check type identity through the method <text:span text:style-name="Code (in text)">equals()</text:span> or to determine a type or class name by means of the method <text:span text:style-name="Code (in text)">getName()</text:span>, it is possible to ask for the fields or members, and methods supported by an interface type (method <text:span text:style-name="Code (in text)">getFields()</text:span> returning a sequence of <text:span text:style-name="Code (in text)">XIdlField</text:span> interfaces and method <text:span text:style-name="Code (in text)">getMethods()</text:span> returning a sequence of <text:span text:style-name="Code (in text)">XIdlMethod</text:span> interfaces). </text:p>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">XIdlField</text:span> is deprecated and should not be used. Instead the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XIdlField2]</text:span> is available by querying it from an <text:span text:style-name="Code (in text)">XIdlField</text:span> interface returned by an <text:span text:style-name="Code (in text)">XIdlClass</text:span> method.</text:p>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">XIdlField</text:span> or <text:span text:style-name="Code (in text)">XIdlField2</text:span> represents a struct member of a struct or get or set accessor methods of an interface type. It provides information about the field (methods <text:span text:style-name="Code (in text)">getType()</text:span> and <text:span text:style-name="Code (in text)">getAccessMode()</text:span>) and reads and – if allowed by the access mode – modifies its value for a given instance of the corresponding type (methods <text:span text:style-name="Code (in text)">get()</text:span> and <text:span text:style-name="Code (in text)">set()</text:span>).</text:p>
  <text:p text:style-name="Paragraph">The interface <text:span text:style-name="Code (in text)">XIdlMethod</text:span> represents a method of an interface type. It provides information about the method (methods <text:span text:style-name="Code (in text)">getReturnType()</text:span>, <text:span text:style-name="Code (in text)">getParameterTypes()</text:span>, <text:span text:style-name="Code (in text)">getParameterInfos()</text:span>, <text:span text:style-name="Code (in text)">getExceptionTypes()</text:span> and <text:span text:style-name="Code (in text)">getMode()</text:span>) and invokes the method for a given instance of the corresponding type (method <text:span text:style-name="Code (in text)">invoke()</text:span>).</text:p>
  <text:h text:style-name="Head 5" text:level="5">Introspection</text:h>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.Introspection]</text:span> supporting the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XIntrospection]</text:span> is used to inspect an object of interface or struct type to obtain information about its members and methods. Unlike the <text:span text:style-name="Code (in text)">CoreReflection</text:span> service, and the <text:span text:style-name="Code (in text)">XIdlClass</text:span> interface ,the inspection is not limited to one interface type but to all interfaces supported by an object. To detect the interfaces supported by an object, the <text:span text:style-name="Code (in text)">Introspection</text:span> service queries for the <text:span text:style-name="Code (in text)">XTypeProvider</text:span> interface. If an object does not support this interface, the introspection does not work correctly.</text:p>
  <text:p text:style-name="Paragraph">To inspect an object, pass it as an <text:span text:style-name="Code (in text)">any</text:span> value to the <text:span text:style-name="Code (in text)">inspect()</text:span> method of <text:span text:style-name="Code (in text)">XIntrospection</text:span>. The result of the introspection process is returned as <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XIntrospectionAccess]</text:span> interface. This interface is used to obtain information about the inspected object. All information returned refers to the complete object as a combination of several interfaces. When accessing an object through <text:span text:style-name="Code (in text)">XIntrospectionAccess,</text:span> it is impossible to distinguish between the different interfaces.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XIntrospectionAccess]</text:span> interface provides a list of all properties (method <text:span text:style-name="Code (in text)">getProperties()</text:span>) and methods (method <text:span text:style-name="Code (in text)">getMethods()</text:span>) supported by the object. The introspection maps methods matching the pattern </text:p>
  <text:p text:style-name="Code">FooType getFoo() <text:s/><text:line-break/> setFoo(FooType) </text:p>
  <text:p text:style-name="Paragraph">to a property <text:span text:style-name="Code (in text)">Foo</text:span> of type <text:span text:style-name="Code (in text)">FooType</text:span>.</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XIntrospectionAccess]</text:span> also supports a categorization of properties and methods. For instance, it is possible to exclude &quot;dangerous&quot; methods ,such as the reference counting methods <text:span text:style-name="Code (in text)">[IDL:com.sun.star.uno.XInterface:acquire]()</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.uno.XInterface:release]() </text:span>from the set of methods returned by <text:span text:style-name="Code (in text)">getMethods()</text:span>. When the <text:span text:style-name="Code (in text)">Introspection</text:span> service is used to bind a new scripting language, it is useful to block the access to functionality that could crash the entire [PRODUCTNAME] application when used in an incorrect manner.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">XIntrospectionAccess</text:span> interface does not allow the developer to invoke methods and access properties directly. To invoke methods, the <text:span text:style-name="Code (in text)">invoke()</text:span> method of the <text:span text:style-name="Code (in text)">XIdlMethod</text:span> interfaces returned by the methods <text:span text:style-name="Code (in text)">getMethods()</text:span> and <text:span text:style-name="Code (in text)">getMethod()</text:span> are used. To access properties, a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XPropertySet]</text:span> interface is used that can be queried from the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XIntrospectionAccess:queryAdapter]()</text:span> method. This method also provides adapter interfaces for other generic access interfaces like <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XNameAccess]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XIndexAccess]</text:span>, if these interfaces are also supported by the original object.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Invocation</text:h>
  <text:p text:style-name="P14">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> supporting the interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XSingleServiceFactory]</text:span> provides a generic, high-level access (higher compared to the <text:span text:style-name="Code (in text)">Introspection</text:span> service) to the properties and methods of an object. The object that should be accessed through <text:span text:style-name="Code (in text)">Introspection</text:span> is passed to the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XSingleServiceFactory:createInstanceWithArguments]()</text:span> method. The returned <text:span text:style-name="Code (in text)">XInterface</text:span> can then be queried for <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation2]</text:span> derived from <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation]</text:span>. </text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">XInvocation</text:span> interface invokes methods and access properties directly by passing their names and additional parameters to the corresponding methods (method <text:span text:style-name="Code (in text)">invoke()</text:span>, <text:span text:style-name="Code (in text)">getValue()</text:span> and <text:span text:style-name="Code (in text)">setValue()</text:span>). It is also possible to ask if a method or property exists with the methods <text:span text:style-name="Code (in text)">hasMethod()</text:span> and <text:span text:style-name="Code (in text)">hasProperty()</text:span>.</text:p>
  <text:p text:style-name="Paragraph">When invoking a method with <text:span text:style-name="Code (in text)">invoke()</text:span>, the parameters are passed as a sequence of <text:span text:style-name="Code (in text)">any</text:span> values. The <text:span text:style-name="Code (in text)">Invocation</text:span> service automatically converts these arguments, if possible to the appropriate target types using the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Converter]</text:span> service that is further described below. The <text:span text:style-name="Code (in text)">Introspection</text:span> functionality is suitable for binding scripting languages to UNO that are not or only weakly typed.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">XInvocation2</text:span> interface extends the <text:span text:style-name="Code (in text)">Invocation</text:span> functionality by methods to ask for further information about the properties and methods of the object represented by the <text:span text:style-name="Code (in text)">Invocation</text:span> instance. It is possible to ask for the names of all the properties and methods (method <text:span text:style-name="Code (in text)">getMemberNames()</text:span>) and detailed information about them represented by the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.InvocationInfo]</text:span> struct type (methods <text:span text:style-name="Code (in text)">getInfo()</text:span> and <text:span text:style-name="Code (in text)">getInfoForName()</text:span>).</text:p>
  <table:table table:name="Table7" table:style-name="Table7">
   <table:table-column table:style-name="Table7.A"/>
   <table:table-column table:style-name="Table7.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table7.A1" table:number-columns-spanned="2" table:value-type="string">
      <text:p text:style-name="TableHead">Members of struct <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.InvocationInfo]</text:span></text:p>
     </table:table-cell>
     <table:covered-table-cell/>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table7.A2" table:value-type="string">
     <text:p text:style-name="TableCode">aName</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table7.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Name of the method or property.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table7.A2" table:value-type="string">
     <text:p text:style-name="TableCode">eMemberType</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table7.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Kind of the member (method or property).</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table7.A2" table:value-type="string">
     <text:p text:style-name="TableCode">PropertyAttribute</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table7.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Only for property members: This field may contain zero or more constants of the com::sun::star::beans::PropertyAttribute constants group. It is not guaranteed that all necessary constants are set to describe the property completely, but a flag will be set if the corresponding characteristic really exists. For example,iIf the READONLY flag is set, the property is read only. If it is not set, the property nevertheless can be read only. This field is irrelevant for methods and is set to 0.</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table7.A2" table:value-type="string">
     <text:p text:style-name="TableCode">aType</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table7.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Type of the member, when referring to methods, the return type</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table7.A2" table:value-type="string">
     <text:p text:style-name="TableCode">aParamTypes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table7.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Types of method parameters, for properties this sequence is empty</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table7.A2" table:value-type="string">
     <text:p text:style-name="TableCode">aParamModes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table7.B2" table:value-type="string">
     <text:p text:style-name="TextInTable">Mode of method parameters (<text:span text:style-name="Code (in text)">in, out, inout</text:span>), for properties this sequence is empty.</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">Invocation</text:span> service is based on the <text:span text:style-name="Code (in text)">Introspection</text:span> service. The <text:span text:style-name="Code (in text)">XInvocation</text:span> interface has a method <text:span text:style-name="Code (in text)">getIntrospection()</text:span> to ask for the corresponding <text:span text:style-name="Code (in text)">XIntrospectionAccess</text:span> interface. The <text:span text:style-name="Code (in text)">Invocation</text:span> implementation currently implemented in [PRODUCTNAME] supports this, but in general, an implementation of <text:span text:style-name="Code (in text)">XInvocation</text:span> does not provide access to an <text:span text:style-name="Code (in text)">XInvocationAccess</text:span> interface. </text:p>
  <text:h text:style-name="Head 5" text:level="5">InvocationAdapterFactory</text:h>
  <text:p text:style-name="Paragraph">The service <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.InvocationAdapterFactory]</text:span> supporting the interfaces <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocationAdapterFactory]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocationAdapterFactory2]</text:span> are used to create adapters that map a generic <text:span text:style-name="Code (in text)">XInvocation</text:span> interface to specific interfaces. This functionality is especially essential for creating scripting language bindings that do not only access UNO from the scripting language, but also to implement UNO objects using the scripting language. Without the <text:span text:style-name="Code (in text)">InvocationAdapterFactory</text:span> functionality, this would only be possible if the scripting language supported the implementation of interfaces directly.</text:p>
  <text:p text:style-name="Paragraph">By means of the <text:span text:style-name="Code (in text)">InvocationAdapterFactory</text:span> functionality it is only necessary to map the scripting language specific native invocation interface, for example, realized by an OLE <text:span text:style-name="Code (in text)">IDispatch</text:span> interface, to the UNO <text:span text:style-name="Code (in text)">XInvocation</text:span> interface. Then, any combination of interfaces needed to represent the services supported by a UNO object are provided as an adapter using the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocationAdapterFactory2:createAdapter]()</text:span> method. </text:p>
  <text:p text:style-name="Paragraph">Another important use of the invocation adapter is to create listener interfaces that are passed to the corresponding <text:span text:style-name="Code (in text)">add...Listener()</text:span> method of an UNO interface and maps to the methods of an interface to <text:span text:style-name="Code (in text)">XInvocation</text:span>. In this case, usually the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocationAdapterFactory:createAdapter]()</text:span> method is used.</text:p>
  <text:h text:style-name="Head 5" text:level="5">XTypeDescription</text:h>
  <text:p text:style-name="P14">Internally, types in UNO are represented by the type <text:span text:style-name="Code (in text)">type</text:span>. This type also has an interface representation <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XTypeDescription]</text:span>. A number of interfaces derived from <text:span text:style-name="Code (in text)">XTypeDescription</text:span> represent types. These interfaces are:</text:p>
  <text:unordered-list text:style-name="L10">
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XArrayTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XCompoundTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XEnumTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XIndirectTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XUnionTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XInterfaceTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XInterfaceAttributeTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XInterfaceMemberTypeDescription]</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P15"><text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.XInterfaceMethodTypeDescription]</text:span></text:p>
   </text:list-item>
  </text:unordered-list>
  <text:p text:style-name="P14">The corresponding services are <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.TypeDescriptionManager]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.TypeDescriptionProvider]</text:span>. These services support <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XHierarchicalNameAccess]</text:span> and asks for a type description interface by passing the fully qualified type name to the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.container.XHierarchicalNameAccess:getByHierarchicalName]()</text:span> method.</text:p>
  <text:p text:style-name="P14">The <text:span text:style-name="Code (in text)">TypeDescription</text:span> services and interfaces are listed here for completeness. Ordinarily this functionality would not be used when binding a scripting language to UNO, because the high-level services <text:span text:style-name="Code (in text)">Invocation</text:span>, <text:span text:style-name="Code (in text)">Introspection</text:span> and <text:span text:style-name="Code (in text)">Reflection</text:span> provide all the functionality required. If the binding is implemented in C++, the type <text:span text:style-name="Code (in text)">type</text:span> and the corresponding C API are used directly.</text:p>
  <text:p text:style-name="Paragraph">The following illustration provides an overview of how the described services and interfaces work together. Each arrow expresses a &quot;uses&quot; relationship. The interfaces listed for a service are not necessarily supported by the service directly, but contain interfaces that are strongly related to the services.</text:p>
  <table:table table:name="Table8" table:style-name="Table8">
   <table:table-column table:style-name="Table8.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table8.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr3" draw:name="Rahmen3" text:anchor-type="paragraph" svg:y="0.019cm" svg:width="10.968cm" fo:min-height="14.554cm" draw:z-index="2">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr4" draw:name="UML diagram of a Scripting Language Binding" text:anchor-type="paragraph" svg:x="0.004cm" svg:y="0.002cm" svg:width="10.86cm" svg:height="14.071cm" draw:z-index="3" xlink:href="Reflection1.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>UML diagram showing the a Scripting Language Binding</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration0" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">5.1</text:sequence> </text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 3" text:level="3">XInvocation Bridge</text:h>
  <text:h text:style-name="Head 4" text:level="4">Scripting Existing UNO Objects</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.script.Invocation]This section describes UNO bridges for type-unsafe (scripting) programming languages. These bridges are based on the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> service.</text:p>
  <text:p text:style-name="Paragraph">The most common starting point for a new scripting language binding is that you want to control [PRODUCTNAME] from a script running externally. To accomplish this, you need to know what your scripting language offers to extend the language, for example, Python or Perl extend the language with a module concept using locally shared libraries. </text:p>
  <text:p text:style-name="Paragraph">In general, your bridge must offer a static method that is called from a script. Within this method, bootstrap a UNO C++ component context as described in <text:span text:style-name="ChapterRef">[Chapter:Components.Deployment.Bootstrapping]</text:span>.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Proxying a UNO Object</text:h>
  <text:p text:style-name="Paragraph">Next, this component context must be passed to the script programmer, so that you can instantiate a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.bridge.UnoUrlResolver]</text:span> and connect to a running office within the script. </text:p>
  <text:p text:style-name="Paragraph">The component context can not be passed directly as a C++ UNO reference, because the scripting engine does not recognize it, therefore build a language dependent proxy object around the C++ object Reference. </text:p>
  <table:table table:name="Table9" table:style-name="Table9">
   <table:table-column table:style-name="Table9.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table9.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr5" draw:name="Rahmen31" text:anchor-type="paragraph" svg:width="11.462cm" fo:min-height="5.281cm" draw:z-index="4">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr4" draw:name="Scripting call over a proxy" text:anchor-type="paragraph" svg:x="-4.979cm" svg:y="0cm" svg:width="11.37cm" svg:height="4.8cm" draw:z-index="5" xlink:href="xinvocation_bridge1.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>A graphic showing a scripting call over a proxy instance</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration1" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">5.2</text:sequence> </text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">For example, Python offers an API to create a proxy. Typically calls invoked on the proxy from a script are narrowed into one single C function. The Python runtime passes method names and an array containing the arguments to this C function. </text:p>
  <text:p text:style-name="Paragraph">If a proxy is implemented for a concrete interface, the method names that you received could in theory be compared to all method names offered by the UNO interface. This is not feasible, because of all the interfaces used in [PRODUCTNAME]. The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> service exists for this purpose. It offers a simple interface <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XSingleServiceFactory]</text:span> that creates a proxy for an arbitrary UNO object using the <text:span text:style-name="Code (in text)">createInstanceWithArguments()</text:span> method and passing the object the proxy acts for. Use the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation]</text:span> interface that is exported by this proxy to invoke a method on the UNO object. </text:p>
  <table:table table:name="Table10" table:style-name="Table10">
   <table:table-column table:style-name="Table10.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table10.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr5" draw:name="Rahmen4" text:anchor-type="paragraph" svg:width="11.22cm" fo:min-height="11.361cm" draw:z-index="6">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr4" draw:name="Scripting call over XInvocation" text:anchor-type="paragraph" svg:x="-4.979cm" svg:y="0cm" svg:width="11.111cm" svg:height="10.88cm" draw:z-index="7" xlink:href="xinvocation_bridge2.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>a graphic showing a scripting call using over XInvocation</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration2" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">5.3</text:sequence> </text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 5" text:level="5">Argument Conversion</text:h>
  <text:p text:style-name="Paragraph">In addition, argument conversion must be c onsidered by specifying how each UNO type should be mapped to your target language.</text:p>
  <text:p text:style-name="Paragraph">Convert the language dependent data types to UNO data types before calling <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation:invoke]()</text:span> and convert the UNO datatypes (return value and out parameters) to language dependent types after the call has been exectuted. The conversion routines are typically recursive functions, because data values are nested in complex types, such as <text:span text:style-name="Code (in text)">struct</text:span> or <text:span text:style-name="Code (in text)">any</text:span>. </text:p>
  <text:p text:style-name="Paragraph">When UNO object references are returned by method calls to UNO objects, create new language dependent proxies as discussed above. When passing a previously returned UNO object as a parameter to a new method call, the language binding must recognize that it is a proxied object and pass the original UNO object reference to the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation:invoke]()</text:span> call instead.</text:p>
  <text:p text:style-name="Paragraph">A special case for conversions are UNOIDL structs. You want to call a method that takes a struct as an argument. The first problem is the struct must be created by the bridge and the script programmer must be able to set members at the struct. One solution is that the bridge implementer creates a UNO struct using core C functions from the <text:span text:style-name="Code (in text)">cppu</text:span> library, but this is complicated and results in a lot of difficulty. </text:p>
  <text:p text:style-name="Paragraph">Therefore, a solution has been created that accesses structs through the <text:span text:style-name="Code (in text)">XInvocation</text:span> interface, as if they were UNO objects. This simplifies struct handling for bridge programmers. Refer to the reference documentation of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.CoreReflection]</text:span> and the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> service and the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.beans.XMaterialHolder]</text:span> interface.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Exception Handling</text:h>
  <text:p text:style-name="Paragraph">UNO method calls may throw exceptions and must be mapped to the desired target language appropriately, depending on the capabilities of your target language. Ideally, the target language supports an exception concept, but error handlers, such as in [PRODUCTNAME] Basic can be used also. A third way and worst case scenario is to check after every API call if an exception has been thrown,. In case the UNO object throws an excception, the <text:span text:style-name="Code (in text)">XInvocation</text:span> proxy throws a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.reflection.InvocationTargetException]</text:span>. The exception has an additional <text:span text:style-name="Code (in text)">any </text:span>member, that contains the exception that was really thrown.</text:p>
  <text:p text:style-name="Paragraph">Note that the <text:span text:style-name="Code (in text)">XInvocation</text:span> proxy may throw a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.CannotConvertException]</text:span> indicating that the arguments passed by the script programmer cannot be matched to the arguments of the desired function. For example, there are missing arguments or the types are incompatible. This must be reported as an error to the script programmer.</text:p>
  <text:h text:style-name="Head 5" text:level="5">Property Support</text:h>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> has special <text:span text:style-name="Code (in text)">getProperty()</text:span> and <text:span text:style-name="Code (in text)">setProperty()</text:span> methods. These methods are used when the UNO object supports a property set and your target language, for example, supports something similar to the following: </text:p>
  <text:p text:style-name="Code">object.propname = &apos;foo&apos;;. </text:p>
  <text:p text:style-name="Paragraph">Note that every property is also reachable by <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation:invoke](&apos;setPropertyValue&apos;, ...)</text:span>, so these set or getProperty functions are optional.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Implementing UNO objects</text:h>
  <text:p text:style-name="Paragraph">When it is possible to implement classes in your target language, consider offering support for implementation of UNO objects. This is useful for callbacks, for example, event listeners. Another typical use case is to provide a datasource through a <text:span text:style-name="Code (in text)">[IDL:com.sun.star.io.XInputStream]</text:span>.</text:p>
  <text:p text:style-name="Paragraph">The script programmer determines which UNOIDL types the developed class implements, such as flagged by a special member name, for example, such as <text:span text:style-name="Code (in text)">__supportedUnoTypes</text:span>. </text:p>
  <text:p text:style-name="Paragraph">When an instance of a class is passed as an argument to a call on an external UNO object, the bridge code creates a new language dependent proxy that additionally supports the <text:span text:style-name="Code (in text)">XInvocation</text:span> interface. the bridge code hands the <text:span text:style-name="Code (in text)">XInvocation</text:span> reference of the bridge&apos;s proxy to the called object. This works as long as the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.XInvocation:invoke]()</text:span> method is used directly, for instance [PRODUCTNAME] Basic, except if the called object expects an <text:span text:style-name="Code (in text)">XInputStream</text:span>. </text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.InvocationAdapterFactory]</text:span> service helps by creating a proxy for a certain object that implements <text:span text:style-name="Code (in text)">XInvocation</text:span> and a set of interfaces, for example, given by the <text:span text:style-name="Code (in text)">__supportedUnoTypes</text:span> variable. The proxy returned by the <text:span text:style-name="Code (in text)">createAdapater()</text:span> method must be passed to the called object instead of the bridge&apos;s <text:span text:style-name="Code (in text)">XInvocation</text:span> implementation. When the <text:span text:style-name="Code (in text)">Adapter</text:span> is queried for one of the supported types, an appropriate proxy supporting that interface is created.</text:p>
  <text:p text:style-name="Paragraph">If a UNO object invokes a call on the object, the bridge proxy&apos;s<text:span text:style-name="Code (in text)"> [IDL:com.sun.star.script.XInvocation:invoke]()</text:span> method is called. It converts the passed arguments from UNO types to language dependent types and conversely using the same routines you have for the other calling direction. Finally, it delegates the call to the implementation within the script.</text:p>
  <table:table table:name="Table11" table:style-name="Table11">
   <table:table-column table:style-name="Table11.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table11.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr5" draw:name="Rahmen5" text:anchor-type="paragraph" svg:width="12.326cm" fo:min-height="8.001cm" draw:z-index="8">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr4" draw:name="Call sequence" text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" svg:width="12.19cm" svg:height="7.519cm" draw:z-index="9" xlink:href="xinvocation_bridge3.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>A graphic showing a call sequence</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration3" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">5.4</text:sequence> </text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">It may become difficult if you do not want to start with an external scripting engine, but want to use the scripting engine inside the [PRODUCTNAME] process instead. This must be supported by the target language. Often it is possible to load some library dynamically and access the scripting runtime engine through a C API. It should be implemented as a UNO C++ component. There are currently no generic UNO interfaces for this case, except for the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.loader.XImplementationLoader]</text:span>. Define your own interfaces that best match your requirements. You might instantiate from Basic and retrieve an initial object or start a script. Future versions of [PRODUCTNAME] may have a more comprehensive solution.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Example: Python Bridge <text:alphabetical-index-mark-start text:id="IMark43691716"/>PyUNO<text:alphabetical-index-mark-end text:id="IMark43691716"/></text:h>
  <text:p text:style-name="Paragraph">This section provides an example of how the Python UNO bridge PyUNO bootstraps a service manager and how it makes use of the <text:span text:style-name="Code (in text)">Invocation</text:span> service to realize method invocation. While some parts are implementation or Python specific, the example provides a general understanding of language bindings.</text:p>
  <text:p text:style-name="Paragraph">The Python bridge PyUNO uses the cppu helper library to bootstrap a local service manager that is asked for a <text:span text:style-name="Code (in text)">UnoUrlResolver</text:span> service in Python.</text:p>
  <text:p text:style-name="Paragraph">In <text:span text:style-name="www/ftp/email">UNO.py</text:span>, Python calls <text:span text:style-name="Code (in text)">PyUNO.bootstrap()</text:span> and receives a local component context. Note the parameter setup in that, it points to an ini file that configures the bootstrapped service manager with a type library. The file <text:span text:style-name="www/ftp/email">setup.ini</text:span> corresponds to the <text:span text:style-name="www/ftp/email">uno.ini</text:span> file that is used with the global service manager of the office.</text:p>
  <text:p text:style-name="Code">import PyUNO</text:p>
  <text:p text:style-name="Code">import os</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:span text:style-name="CodeEmphasis">setup_ini = &apos;file:///%s/setup.ini&apos; % os.getenv (&apos;PWD&apos;)</text:span> </text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">class UNO:</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> def __init__ ( self, connection=&apos;socket,host=localhost,port=2083;urp&apos;, setup=setup_ini ):</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> &quot;&quot;&quot; do the bootstrap </text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> connection can be one or more of the following:</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> socket,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> host = localhost | &lt;hostname&gt; | &lt;ip-addr&gt;,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> port = &lt;port&gt;,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> service = soffice,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> user = &lt;username&gt;,</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> password = &lt;password&gt;</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> ;urp</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> &quot;&quot;&quot;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> self.XComponentContext = PyUNO.<text:span text:style-name="CodeEmphasis">bootstrap</text:span> ( <text:span text:style-name="CodeEmphasis">setup</text:span> )</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> self.XUnoUrlResolver, o = \</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> self.XComponentContext.ServiceManager.createInstanceWithContext (</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> &apos;com.sun.star.bridge.UnoUrlResolver&apos;, self.XComponentContext )</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> self.XNamingService, o = self.XUnoUrlResolver.resolve (</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> &apos;uno:%s;StarOffice.NamingService&apos; % connection )</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> self.XMultiServiceFactory, o = self.XNamingService.getRegisteredObject (</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> <text:tab-stop/> &apos;StarOffice.ServiceManager&apos;)</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> self.XComponentLoader, o = \</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> self.XMultiServiceFactory.createInstance ( &apos;com.sun.star.frame.Desktop&apos; )</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> ...</text:p>
  <text:p text:style-name="Paragraph">Python uses function tables to map Python to C functions. <text:span text:style-name="www/ftp/email">PyUNO_module.cc</text:span> defines a table with the mappings for the PyUNO object. As shown in the following example, <text:span text:style-name="Code (in text)">PyUNO.bootstrap()</text:span> is mapped to the C function <text:span text:style-name="Code (in text)">newBootstrapPyUNO()</text:span>:</text:p>
  <text:p text:style-name="Code">static struct PyMethodDef PyUNOModule_methods [] =</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{&quot;bootstrapPyUNO&quot;, bootstrapPyUNO, 1},</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{&quot;<text:span text:style-name="CodeEmphasis">bootstrap</text:span> &quot;, <text:span text:style-name="CodeEmphasis">newBootstrapPyUNO</text:span> , 1}, </text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{&quot;createIdlStruct&quot;, createIdlStruct, 1},</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{&quot;true&quot;, createTrueBool, 1},</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{&quot;false&quot;, createFalseBool, 1},</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{NULL, NULL}</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>};</text:p>
  <text:p text:style-name="Paragraph">The function <text:span text:style-name="Code (in text)">newBootstrapPyUNO()</text:span> calls <text:span text:style-name="Code (in text)">Util::bootstrap()</text:span> in <text:span text:style-name="www/ftp/email">PyUNO_Util.cc</text:span> and passes the location of the <text:span text:style-name="www/ftp/email">setup.ini</text:span> file.</text:p>
  <text:p text:style-name="Code">static PyObject* newBootstrapPyUNO (PyObject* self, PyObject* args)</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>char* ini_file_location;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;XComponentContext&gt; tmp_cc;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Any a;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="2"/>if (!PyArg_ParseTuple (args, &quot;s&quot;, &amp;ini_file_location))</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return NULL;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>tmp_cc = Util::<text:span text:style-name="CodeEmphasis">bootstrap</text:span> (ini_file_location);</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>...</text:p>
  <text:p text:style-name="Paragraph"><text:span text:style-name="Code (in text)">Util::bootstrap()</text:span> uses <text:span text:style-name="Code (in text)">defaultBootstrap_InitialComponentContext(iniFile)</text:span> from <text:span text:style-name="www/ftp/email">cppuhelper/bootstrap.hxx</text:span> to create a local component context and its parameter <text:span text:style-name="Code (in text)">iniFile</text:span> points to the <text:span text:style-name="www/ftp/email">setup.ini</text:span> file that configures the local service manager to use <text:span text:style-name="www/ftp/email">applicat.rdb</text:span>. This local component context instantiates services, such as the <text:span text:style-name="Code (in text)">UnoUrlResolver</text:span>.</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;XComponentContext&gt; bootstrap (char* ini_file_location)</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>Reference&lt;XComponentContext&gt; my_component_context;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>try</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>{</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> my_component_context = <text:span text:style-name="CodeEmphasis">defaultBootstrap_InitialComponentContext</text:span> (</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> OUString::createFromAscii (<text:span text:style-name="CodeEmphasis">ini_file_location</text:span> ));</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>catch (com::sun::star::uno::Exception e)</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>{</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> printf (OUStringToOString (e.Message, osl_getThreadTextEncoding ()).getStr ());</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return my_component_context;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>}</text:p>
  <text:p text:style-name="Paragraph">Now <text:span text:style-name="Code (in text)">newBootstrapPyUNO()</text:span> continues to set up a UNO proxy. It creates local instances of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> and <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Converter]</text:span>, and calls <text:span text:style-name="Code (in text)">PyUNO_new()</text:span>, passing the local <text:span text:style-name="Code (in text)">ComponentContext</text:span>, a reference to the <text:span text:style-name="Code (in text)">XSingleServiceFactory</text:span> interface of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Invocation]</text:span> and a reference to the <text:span text:style-name="Code (in text)">XTypeConverter</text:span> interface of <text:span text:style-name="Code (in text)">[IDL:com.sun.star.script.Converter]</text:span>.</text:p>
  <text:p text:style-name="Code">static PyObject* newBootstrapPyUNO (PyObject* self, PyObject* args)</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>char* ini_file_location;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;XComponentContext&gt; tmp_cc;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Any a;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="2"/>if (!PyArg_ParseTuple (args, &quot;s&quot;, &amp;ini_file_location))</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return NULL;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>tmp_cc = <text:span text:style-name="CodeEmphasis">Util::bootstrap (ini_file_location)</text:span> ;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;XMultiServiceFactory&gt; tmp_msf (tmp_cc-&gt;getServiceManager (), UNO_QUERY);</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>if (!tmp_msf.is ())</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>PyErr_SetString (PyExc_RuntimeError, &quot;Couldn&apos;t bootstrap from inifile&quot;);</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>return NULL;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;XSingleServiceFactory&gt; tmp_ssf (tmp_msf-&gt;<text:span text:style-name="CodeEmphasis">createInstance</text:span> (</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> OUString (RTL_CONSTASCII_USTRINGPARAM (&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.script.Invocation</text:span> &quot;))), UNO_QUERY);</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;XTypeConverter&gt; tmp_tc (tmp_msf-&gt;<text:span text:style-name="CodeEmphasis">createInstance</text:span> (</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> OUString (RTL_CONSTASCII_USTRINGPARAM (&quot;<text:span text:style-name="CodeEmphasis">com.sun.star.script.Converter</text:span> &quot;))), UNO_QUERY);</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>if (!tmp_tc.is ())</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>PyErr_SetString (PyExc_RuntimeError, &quot;Couldn&apos;t create XTypeConverter&quot;);</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>return NULL;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>if (!tmp_ssf.is ())</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>PyErr_SetString (PyExc_RuntimeError, &quot;Couldn&apos;t create XInvocation&quot;);</text:p>
  <text:p text:style-name="Code"><text:s text:c="6"/>return NULL;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>a &lt;&lt;= tmp_cc;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="2"/>return <text:span text:style-name="CodeEmphasis">PyUNO_new (a, tmp_ssf, tmp_tc)</text:span> ;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/></text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="P14"><text:span text:style-name="Code (in text)">PyUNO_new()</text:span> in <text:span text:style-name="www/ftp/email">PyUNO.cc</text:span> is the function responsible for building all Python proxies. The call to <text:span text:style-name="Code (in text)">PyUNO_new()</text:span> here in <text:span text:style-name="Code (in text)">newBootstrapPyUno()</text:span> builds the first local PyUNO proxy for the ComponentContext object <text:span text:style-name="Code (in text)">a</text:span> which has been returned by <text:span text:style-name="Code (in text)">Util::bootstrap()</text:span>. </text:p>
  <text:p text:style-name="P14">For this purpose, <text:span text:style-name="Code (in text)">PyUNO_new()</text:span> uses the <text:span text:style-name="Code (in text)">Invocation</text:span> service to retrieve an <text:span text:style-name="Code (in text)">XInvocation2</text:span> interface to the <text:span text:style-name="Code (in text)">ComponentContext</text:span> service passed in the parameter <text:span text:style-name="Code (in text)">a</text:span>:</text:p>
  <text:p text:style-name="Code">// PyUNO_new</text:p>
  <text:p text:style-name="Code">//</text:p>
  <text:p text:style-name="Code">// creates Python object proxies for the given target UNO interfaces</text:p>
  <text:p text:style-name="Code">// <text:s text:c="3"/>targetInterface<text:tab-stop/> given UNO interface</text:p>
  <text:p text:style-name="Code">// <text:s text:c="3"/>ssf<text:tab-stop/> <text:tab-stop/> XSingleServiceFactory interface of com.sun.star.script.Invocation service</text:p>
  <text:p text:style-name="Code">// <text:s text:c="3"/>tc<text:tab-stop/> <text:tab-stop/> <text:tab-stop/> XTypeConverter interface of com.sun.star.script.Converter service</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">PyObject* <text:span text:style-name="CodeEmphasis">PyUNO_new</text:span> (Any targetInterface, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> Reference&lt;XSingleServiceFactory&gt; ssf, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> Reference&lt;XTypeConverter&gt; tc)</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>...</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Sequence&lt;Any&gt; arguments (1);</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;XInterface&gt; tmp_interface;</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>...</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>// put the target object into a sequence of Any for the call to </text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>// ssf-&gt;createInstanceWithArguments()</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>// ssf is the XSingleServiceFactory interface of the com.sun.star.script.Invocation service</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>arguments[0] &lt;&lt;= targetInterface;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:s text:c="2"/>// obtain com.sun.star.script.XInvocation2 for target object from Invocation</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>// let Invocation create an XInvocation object for the Any in arguments</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>tmp_interface = <text:span text:style-name="CodeEmphasis">ssf-&gt;createInstanceWithArguments</text:span> (arguments);</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>// query XInvocation2 interface</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>Reference&lt;<text:span text:style-name="CodeEmphasis">XInvocation2</text:span> &gt; tmp_invocation (tmp_interface, UNO_QUERY);</text:p>
  <text:p text:style-name="Code"><text:s text:c="2"/>...</text:p>
  <text:p text:style-name="P14">The Python proxy invokes methods, and creates and converts UNO types. This Python specific and involves the implementation of several functions according to the Python API.</text:p>
  <text:p text:style-name="P14">Finally <text:span text:style-name="Code (in text)">__init__()</text:span> in <text:span text:style-name="www/ftp/email">UNO.py</text:span> in the above example uses the PyUNO object to obtain a local <text:span text:style-name="Code (in text)">UnoUrlResolver</text:span> that retrieves the initial object from the office.</text:p>
  <text:h text:style-name="Head 3" text:level="3">Implementation Loader</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.loader.XImplementationLoader]When you are raising a service by name using the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.ServiceManager]</text:span> service, the service manager decides an implementation name, code location and an appropriate loader to raise the code. It is commonly reading out of a persistent registry storage, for example, <text:span text:style-name="www/ftp/email">applicat.rdb</text:span>, for this purpose. Previously, the <text:alphabetical-index-mark text:string-value="regcomp (tool)"/><text:span text:style-name="www/ftp/email">regcomp</text:span> tool has registered components into that registry during the [PRODUCTNAME] setup. The tool uses a service called <text:span text:style-name="Code (in text)">[IDL:com.sun.star.registry.ImplementationRegistration]</text:span> for this task.</text:p>
  <text:p text:style-name="Paragraph">A loader knows how to load a component from a shared library, a .jar or script file and is able to obtain the service object factory for an implementation and retrieve information being written to the registry. A specific loader defines how a component implementer has to package code so that it is recognized by UNO. For instance in C++, a component is a shared library and in Java it is a .jar file. In a yet to be developed loader, the implementer of the loader has to decide, what a component is in that particular language – it <text:s/>might as well be a single script file.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">[IDL:com.sun.star.loader.XImplementationLoader]</text:span> interface looks like the following:</text:p>
  <text:p text:style-name="Code">interface XImplementationLoader: com::sun::star::uno::XInterface</text:p>
  <text:p text:style-name="Code">{ </text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> com::sun::star::uno::XInterface <text:span text:style-name="CodeEmphasis">activate</text:span> ( [in] string implementationName, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> [in] string implementationLoaderUrl, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> [in] string locationUrl, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> [in] com::sun::star::registry::XRegistryKey xKey ) </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> raises( com::sun::star::loader::CannotActivateFactoryException ); </text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code"><text:tab-stop/> boolean <text:span text:style-name="CodeEmphasis">writeRegistryInfo</text:span> ( [in] com::sun::star::registry::XRegistryKey xKey, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> [in] string implementationLoaderUrl, </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> [in] string locationUrl ) </text:p>
  <text:p text:style-name="Code"><text:tab-stop/> <text:tab-stop/> <text:tab-stop/> raises( com::sun::star::registry::CannotRegisterImplementationException ); <text:s/></text:p>
  <text:p text:style-name="Code">}; </text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">locationUrl</text:span> argument describes the location of the implementation file,for example, a jar file or a shared library. The <text:span text:style-name="Code (in text)">implementationLoaderUrl</text:span> argument is not used and is obsolete. The registry key <text:span text:style-name="Code (in text)">xKey</text:span> writes information about the implementations within a component into a persistent storage. Refer to <text:span text:style-name="ChapterRef">[CHAPTER:Components.Cpp.RegistrationInfoHelper]</text:span> for additional information.</text:p>
  <text:p text:style-name="Paragraph">The method <text:span text:style-name="Code (in text)">writeRegistryMethod() </text:span>is called by the <text:span text:style-name="www/ftp/email">regcomp</text:span> tool to register a component into a registry.</text:p>
  <text:p text:style-name="Paragraph">The <text:span text:style-name="Code (in text)">activate()</text:span> method returns a factory <text:span text:style-name="Code (in text)">[IDL:com.sun.star.lang.XSingleComponentFactory]</text:span> for a concrete implementation name.</text:p>
  <table:table table:name="Table12" table:style-name="Table12">
   <table:table-column table:style-name="Table12.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table12.A1" table:value-type="string">
      <text:p text:style-name="Paragraph"><draw:text-box draw:style-name="fr5" draw:name="Rahmen6" text:anchor-type="paragraph" svg:width="10.472cm" fo:min-height="9.631cm" draw:z-index="10">
        <text:p text:style-name="Illustration"><draw:image draw:style-name="fr4" draw:name="Implmentastion loaders" text:anchor-type="paragraph" svg:x="-4.979cm" svg:y="0cm" svg:width="10.351cm" svg:height="9.149cm" draw:z-index="11" xlink:href="implloader.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
          <svg:desc>Implmentastion loaders</svg:desc>
         </draw:image>Illustration <text:sequence text:ref-name="refIllustration4" text:name="Illustration" text:formula="Illustration+1" style:num-format="1">5.5</text:sequence> </text:p>
       </draw:text-box> </text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">The loader is often implemented in C/C++. When the loader is instantiated, it is responsible for starting up the language runtime, for example, Java VM, Python interpreter, through implementation. After starting up the runtime, the loader starts up the UNO language binding as discussed in the previous chapter, and bridge the <text:span text:style-name="Code (in text)">XRegistryKey</text:span> interface and the initial factory interface.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Shared Library Loader</text:h>
  <text:p text:style-name="Paragraph">[TOPIC:com.sun.star.loader.SharedLibrary]This section discusses the loader for local components written in C++ that are loaded by the <text:span text:style-name="Code (in text)">[IDL:com.sun.star.loader.SharedLibrary]</text:span> service. Every type safe programming language that stores its code in shared libraries should implement the bridge with environments and mappings as discussed in chapters <text:span text:style-name="ChapterRef">[CHAPTER:AdvancedUNO.LangBind.Impl.Overview.Bridge]</text:span> and <text:span text:style-name="ChapterRef">[CHAPTER:AdvancedUNO.LangBind.CppBridges]</text:span>. These programming languages can reuse the existing loader without creating a new one.</text:p>
  <text:p text:style-name="Paragraph">When the shared library is mapped into the running process, for example, using <text:span text:style-name="Code (in text)">osl</text:span> <text:span text:style-name="Code (in text)">_loadModule()</text:span>, the shared library loader retrieves defined C symbols out of the library to determine the compiler that built the code . This function symbol is called <text:span text:style-name="Code (in text)">component_getImplementationEnvironment()</text:span>. When the code is compiled with the Microsoft Visual C++ compiler, it sets a pointer to a string called <text:span text:style-name="Code (in text)">&quot;msci&quot;</text:span>, with gcc 3.0.1 a string <text:span text:style-name="Code (in text)">&quot;gcc3&quot;</text:span> which is a UNO environment type name. A UNO environment is connected with the code that runs in it, for example, the code compiled with gcc3 runs in the UNO environment with type name gcc3.</text:p>
  <text:p text:style-name="Paragraph">In addition to the environment type name, a UNO environment defines a context pointer. The context pointer and environment type name define a unique UNO environment. Although the context pointer is mostly null, it is required to identify the environments apart for the same type, for example, to identify different Java virtual machine environments when running a UNO object in two different Java virtual machines within the same process. Both environments have the same type name <text:span text:style-name="Code (in text)">&quot;java&quot;</text:span>, but different context pointers. In local (C++) code, the context pointer is irrelevant , that is, set to null.The type name determines the UNO runtime environment.</text:p>
  <text:p text:style-name="Paragraph">When the loader knows the environment the code comes from, it decides if bridging is required. Bridging is needed if the loader code is compiled with a different compiler, thus running in a different environment. In this case, the loader raises a bridge to speak UNO with the component code. </text:p>
  <text:p text:style-name="Paragraph">The loader calls on two more functions related to the above <text:span text:style-name="Code (in text)">XimplementationLoader</text:span> interface. All of these symbols are C functions and have the following signatures:</text:p>
  <text:p text:style-name="Code">extern &quot;C&quot; void SAL_CALL component_getImplementationEnvironment(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv );</text:p>
  <text:p text:style-name="Code">extern &quot;C&quot; sal_Bool SAL_CALL component_writeInfo(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> void * pServiceManager, void * pRegistryKey );</text:p>
  <text:p text:style-name="Code">extern &quot;C&quot; void SAL_CALL component_getFactory(</text:p>
  <text:p text:style-name="Code"><text:tab-stop/> const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey );</text:p>
  <text:p text:style-name="Paragraph">The latter two functions expect incoming C++-UNO interfaces, therefore the loader needs to bridge interfaces before calling the functions as stated above.</text:p>
  <text:h text:style-name="Head 4" text:level="4">Bridges</text:h>
  <text:p text:style-name="Paragraph">The loader uses the cppu core runtime to map an interface, specifying the UNO runtime environment that needs the interface mapping. The cppu core runtime raises and connects the appropriate bridges, and provides a unidirectional mapping that uses underlying bidirectional bridges. Under Unix, the name of the bridge library follows the naming convention <text:span text:style-name="www/ftp/email">lib&lt;SourceEnvironment&gt;_&lt;TargetEnvironment&gt;., </text:span>Under Windows, <text:span text:style-name="www/ftp/email">&lt;SourceEnvironment&gt;_&lt;TargetEnvironment&gt;.dll</text:span> is used. For instance, <text:span text:style-name="www/ftp/email">libgcc3_uno.so</text:span> is the bridge library for mappings from gcc3 to binary UNO,and <text:span text:style-name="www/ftp/email">msci_uno.dll</text:span> maps from MS Visual C++ to binary UNO. The bridges mentioned above all bridge to binary UNO. Binary UNO is only used as an intermediate environment. In general, do not program binary UNO in clients. The purpose is to reduce the number of necessary bridge implementations. New bridges have to map only to binary UNO instead of all conceivable bridge combinations.</text:p>
  <table:table table:name="Table5" table:style-name="Table5">
   <table:table-column table:style-name="Table5.A"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table5.A1" table:value-type="string">
      <text:p text:style-name="Standard"/>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:h text:style-name="Head 3" text:level="3">Help with New Language Bindings</text:h>
  <text:p text:style-name="Paragraph"><text:span text:style-name="T5">Every UNO language binding is different, therefore only most important points were stressed, that is, those that are likely to appear in almost every language binding implementation. Object issues, such as lifetime, object identity, </text:span><text:span text:style-name="T8">any</text:span> <text:span text:style-name="T5">handling, and bootstrapping were not discussed, because they are too language dependent. For more information on these issues, subscribe to the </text:span><text:span text:style-name="T9">dev@udk.openoffice.org</text:span><text:span text:style-name="T5"> mailing list to discuss these issues for your programming language.</text:span> </text:p>
  <text:h text:style-name="P16" text:level="2">Differences Between UNO and <text:alphabetical-index-mark-start text:id="IMark43687212"/>Corba<text:alphabetical-index-mark-end text:id="IMark43687212"/></text:h>
  <text:p text:style-name="Paragraph">This subsection discusses the differences between UNO and CORBA by providing the fundamental differences and if the different concepts could be mapped into the world of the other model. Consider the following feature comparison. The <text:span text:style-name="T5">column titled &quot;</text:span>Mapping possible&quot;<text:span text:style-name="T5"> states if a feature could be mapped by a (yet to be developed) generic bridge.</text:span> </text:p>
  <table:table table:name="Table2" table:style-name="Table2">
   <table:table-column table:style-name="Table2.A"/>
   <table:table-column table:style-name="Table2.B"/>
   <table:table-column table:style-name="Table2.C"/>
   <table:table-column table:style-name="Table2.D"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table2.A1" table:value-type="string">
      <text:p text:style-name="TableHead"/>
     </table:table-cell>
     <table:table-cell table:style-name="Table2.A1" table:value-type="string">
      <text:p text:style-name="TableHead">UNO</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table2.A1" table:value-type="string">
      <text:p text:style-name="TableHead">CORBA</text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table2.D1" table:value-type="string">
      <text:p text:style-name="TableHead">Mapping possible</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">multiple inheritance of interfaces</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">inheritance of structs</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">inheritance of exceptions</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">mandatory base interface for all interfaces</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">mandatory base exception for all exceptions</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">context of methods</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">char</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">8 bit string</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">array</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">union</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">assigned values for enum</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">meta type &apos;type&apos;</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">object identity</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">lifetime mechanism</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">succession of oneway calls</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">in process communication</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">thread identity</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">customized calls</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
   </table:table-row>
   <table:table-row>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">less code generation</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">yes</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.A2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
    <table:table-cell table:style-name="Table2.D2" table:value-type="string">
     <text:p text:style-name="TextInTable">no</text:p>
    </table:table-cell>
   </table:table-row>
  </table:table>
  <text:unordered-list text:style-name="L11">
   <text:list-item>
    <text:p text:style-name="P17">Multiple Inheritance<text:line-break/>CORBA supports multiple inheritance of interfaces, whereas UNO only supports single inheritance.<text:line-break/>Mapping: Generates an additional interface with all methods and attributes of the inherited interfaces that must be implemented in addition to the other interfaces.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Inheritance of Structs<text:line-break/>In contrast to CORBA, UNO supports inheritance of struct types. This is useful to define general types and more detailed subtypes.<text:line-break/>Mapping: Generate a struct with all members, plus all members of the inherited structs.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Inheritance of Exceptions<text:line-break/>CORBA does not support inheritance for exceptions, whereas UNO does. Inheritance of exceptions allows the specification of a complex exception concept. It is possible to make fine granular concepts using the detailed exceptions in the layer where they are useful and the base exception in higher levels. The UNO error handling is based on exceptions and with inheritance of exceptions it is possible to specify &apos;error classes&apos; with a base exception and more detailed errors of the same &apos;error class&apos; that inherit from this base exception. On higher level APIs it is enough to declare the base exception to specify the &apos;error class&apos; and it is possible to support all errors of this &apos;error class&apos;. <text:line-break/>Mapping: Generates an exception with all members, plus all members of the inherited exceptions. This is the same solution as for structs.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Mandatory Base Interfaces<text:line-break/>UNO specifies a mandatory base interface for all interfaces. This interface provides <text:span text:style-name="Code (in text)">acquire()</text:span> and <text:span text:style-name="Code (in text)">release()</text:span> functions for reference counting. The minimum life time of an object is managed by means of reference counting.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Mandatory Base Exception<text:line-break/>UNO specifies a mandatory base exception for all exceptions. This base exception contains a string member <text:span text:style-name="Code (in text)">Message</text:span>that describes the reason for the exception in readable format. The base exception makes it also possible to catch all UNO exceptions separately.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Method Context<text:line-break/>CORBA supports a request context. This context consists of a name-value pair which is specified for methods in UNOIDL. The context is used for describing the current state of the caller object. A request context provides additional, operation-specific information that may affect the performance of a request.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Type <text:span text:style-name="Code (in text)">char</text:span> <text:line-break/>UNO does not support 8-bit characters. In UNO, <text:span text:style-name="Code (in text)">char</text:span> represents a 16-bit unicode character.<text:line-break/>Mapping: To support 8-bit characters it is possible to expand the <text:span text:style-name="Code (in text)">TypeClass</text:span> enum to support 8-bit characters and strings. The internal representation does not change anything, the <text:span text:style-name="Code (in text)">TypeClass</text:span> is only relevant for mapping.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">8 bit string<text:line-break/>UNO does not support 8-bit strings. In UNO, <text:span text:style-name="Code (in text)">string</text:span> represents a 16-bit unicode string.<text:line-break/>Mapping: The same possibility as for <text:span text:style-name="Code (in text)">char.</text:span></text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Type <text:span text:style-name="Code (in text)">array</text:span> <text:line-break/>UNO does not support arrays at the moment, but is planned for the future.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P17">Type <text:span text:style-name="Code (in text)">union</text:span> <text:line-break/>UNO does not support unions at the moment, but is planned for the future.</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P18">Assigned Values for <text:span text:style-name="Code (in text)">enums</text:span> <text:line-break/>UNO supports the assignment of values for enum values in IDL. This means that it is possible to use these values directly to specify or operate with the required enum value in target languages supporting this feature, for example, . C, C++.<text:line-break/>Mapping: Possible by using the names of the values.</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 2" text:level="2">UNO <text:alphabetical-index-mark text:string-value="design patterns"/><text:alphabetical-index-mark text:string-value="design patterns" text:key1="UNO"/>Design Patterns and <text:alphabetical-index-mark text:string-value="coding styles" text:key1="UNO"/><text:alphabetical-index-mark text:string-value="coding styles"/>Coding Styles</text:h>
  <text:p text:style-name="Paragraph">This chapter discusses design patterns and coding recommendations for [PRODUCTNAME]. Possible candidates are:</text:p>
  <text:unordered-list text:style-name="L12">
   <text:list-item>
    <text:p text:style-name="P19">Singleton: global service manager, Desktop, UCB</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Factory: decouple specification and implementation, cross-environment instantiation, context-specific instances</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Listener: eliminate polling</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Element access: it is arguable if that is a design pattern or just an API</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Properties: solves remote batch access, but incurs the problem of compile-time type indifference</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">UCB commands: universal dispatching of content specific operations</text:p>
   </text:list-item>
   <text:list-item>
    <text:p text:style-name="P19">Dispatch commands: universal dispatching of object specific operations, chain of responsibility</text:p>
   </text:list-item>
  </text:unordered-list>
  <text:h text:style-name="Head 3" text:level="3"><text:alphabetical-index-mark text:string-value="double-checked locking"/>Double-<text:alphabetical-index-mark text:string-value="locking (double-checked)"/>Checked <text:alphabetical-index-mark text:string-value="double-checked locking"/>Locking</text:h>
  <text:p text:style-name="Paragraph">The double-checked locking idiom is sometimes used in C/C++ code to speed up creation of a single-instance resource. In a <text:alphabetical-index-mark-start text:id="IMark43687212"/>multi-threaded<text:alphabetical-index-mark-end text:id="IMark43687212"/> environment, typical C++ code that creates a single-instance resource might look like the following example:</text:p>
  <text:p text:style-name="Code">#include &quot;osl/mutex.hxx&quot;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">T * getInstance1()</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>static T * pInstance = 0;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>::osl::MutexGuard aGuard(::osl::Mutex::getGlobalMutex());</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (pInstance == 0)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>static T aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>pInstance = &amp;aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return pInstance;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">A <text:alphabetical-index-mark-start text:id="IMark43687212"/>mutex<text:alphabetical-index-mark-end text:id="IMark43687212"/> guards against multiple <text:alphabetical-index-mark-start text:id="IMark43681716"/>thread<text:alphabetical-index-mark-end text:id="IMark43681716"/>s simultaneously updating <text:span text:style-name="Code (in text)">pInstance</text:span>, and the nested static <text:span text:style-name="Code (in text)">aInstance</text:span> is guaranteed to be created only when first needed, and destroyed when the program terminates.</text:p>
  <text:p text:style-name="Paragraph">The disadvantage of the above function is that it must acquire and release the mutex every time it is called. The double-checked locking idiom was developed to reduce the need for locking, leading to the following modified function. Do not use.:</text:p>
  <text:p text:style-name="Code">#include &quot;osl/mutex.hxx&quot;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">T * getInstance2()</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>static T * pInstance = 0;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (pInstance == 0)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>::osl::MutexGuard aGuard(::osl::Mutex::getGlobalMutex());</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>if (pInstance == 0)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>static T aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>pInstance = &amp;aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return pInstance;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">This version needs to acquire and release the mutex only when <text:span text:style-name="Code (in text)">pInstance</text:span> has not yet been initialized, resulting in a possible performance improvement. The mutex is still needed to avoid race conditions when multiple threads simultaneously see that <text:span text:style-name="Code (in text)">pInstance</text:span> is not yet initialized, and all want to update it at the same time. The problem with <text:span text:style-name="Code (in text)">getInstance2</text:span> is that it does not work.</text:p>
  <text:p text:style-name="Paragraph">Assume that thread 1 calls <text:span text:style-name="Code (in text)">getInstance2</text:span> first, finding <text:span text:style-name="Code (in text)">pInstance</text:span> uninitialized. It acquires the mutex, creates <text:span text:style-name="Code (in text)">aInstance</text:span> that results in writing data into <text:span text:style-name="Code (in text)">aInstance</text:span>&apos;s memory, updates <text:span text:style-name="Code (in text)">pInstance</text:span> that results in writing data into <text:span text:style-name="Code (in text)">pIntance</text:span>&apos;s memory, and releases the mutex. Some hardware memory models a write the operations that transfer <text:span text:style-name="Code (in text)">aInstance</text:span>&apos;s and <text:span text:style-name="Code (in text)">pInstance</text:span>&apos;s data to main memory to be re-ordered by the processor executing thread 1. Now, if thread 2 enters <text:span text:style-name="Code (in text)">getInstance2</text:span> when <text:span text:style-name="Code (in text)">pInstance</text:span>&apos;s data has already been written to main memory by thread 1, but <text:span text:style-name="Code (in text)">aInstance</text:span>&apos;s data has not been written yet (remember that write operations may be done out of order), then thread 2 sees that <text:span text:style-name="Code (in text)">pInstance</text:span> has already been initialized and exits from <text:span text:style-name="Code (in text)">getInstance2</text:span> directly. Thread 2 dereferences <text:span text:style-name="Code (in text)">pInstance</text:span> thereafter, accessing <text:span text:style-name="Code (in text)">aInstance</text:span>&apos;s memory that has not yet been written into. Anything may happen in this situation.</text:p>
  <text:p text:style-name="Paragraph">In Java, double-checked locking can never be used, because it is broken and cannot be fixed.</text:p>
  <text:p text:style-name="Paragraph">In C and C++, the problem can be solved, but only by using platform-specific instructions, typically some sort of memory-barrier instructions. There is a macro <text:span text:style-name="Code (in text)">OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER</text:span> in <text:span text:style-name="www/ftp/email">osl/doublecheckedlocking.h</text:span> that uses the double-checked locking idiom in a way that actually works in C and C++.</text:p>
  <text:p text:style-name="Code">#include &quot;osl/doublecheckedlocking.h&quot;</text:p>
  <text:p text:style-name="Code">#include &quot;osl/mutex.hxx&quot;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">T * getInstance3()</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>static T * p = 0;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>T * pInstance = p;</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>if (p == 0)</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>::osl::MutexGuard aGuard(osl::Mutex::getGlobalMutex());</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>p = pInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>if (p == 0)</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>static T aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>p = &amp;aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>pInstance = p;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>else</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return p;</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">The first (inner) use of <text:span text:style-name="Code (in text)">OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER</text:span> ensures that <text:span text:style-name="Code (in text)">aInstance</text:span>&apos;s data has been written to main memory before <text:span text:style-name="Code (in text)">pInstance</text:span>&apos;s data is written, therefore a thread can not see <text:span text:style-name="Code (in text)">pInstance</text:span> to be initialized when <text:span text:style-name="Code (in text)">aInstance</text:span>&apos;s data has not yet reached main memory. This solves the problem described above. </text:p>
  <text:p text:style-name="Paragraph">The second (outer) usage of <text:span text:style-name="Code (in text)">OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER</text:span> is required to solve a problem concerning the reordering on Alpha processors. </text:p>
  <table:table table:name="Table4" table:style-name="Table4">
   <table:table-column table:style-name="Table4.A"/>
   <table:table-column table:style-name="Table4.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Table4.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr2" draw:name="Note2" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="12" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Table4.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">For more information about this problem, see <text:a xlink:type="simple" xlink:href="../OfficeDev/﻿http://www.cs.umd.edu/~pugh/java/memoryModel/AlphaReordering.html"><text:span text:style-name="www/ftp/email">Reordering on an Alpha processor</text:span></text:a><text:span text:style-name="www/ftp/email"> </text:span>by Bill Pugh (<text:span text:style-name="www/ftp/email">www.cs.umd.edu/~pugh/java/memoryModel/AlphaReordering.htm</text:span>l) and <text:span text:style-name="Citation">Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects</text:span> by Douglas C. Schmidt et al (Wiley, 2000). Also see the Usenet article <text:a xlink:type="simple" xlink:href="../OfficeDev/﻿http://groups.google.com/groups%3Fq=g:thl3619352568d&amp;dq=&amp;hl=en&amp;lr=&amp;ie=UTF-8&amp;oe=UTF-8&amp;selm=RKAp9.4%24AL4.369752%40news.cpqcorp.net"><text:span text:style-name="Citation">Re:Talking about volatile and threads synchronization</text:span></text:a> by Davide Butenhof (October 2002) on why the outer barrier can be moved into an <text:span text:style-name="Code (in text)">else</text:span> clause.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph">If you are coding in C++, there is an easier way to use double-checked locking without worrying about the fine points. Use the <text:span text:style-name="Code (in text)">rtl_Instance</text:span> template from <text:span text:style-name="www/ftp/email">rtl/instance.hxx</text:span><text:span text:style-name="Code (in text)">:</text:span></text:p>
  <text:p text:style-name="Code">#include &quot;osl/getglobalmutex.hxx&quot;</text:p>
  <text:p text:style-name="Code">#include &quot;osl/mutex.hxx&quot;</text:p>
  <text:p text:style-name="Code">#include &quot;rtl/instance.hxx&quot;</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">namespace {</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>struct Init()</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>T * operator()()</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>{</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>static T aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="12"/>return &amp;aInstance;</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>}</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>};</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Code"/>
  <text:p text:style-name="Code">T * getInstance4()</text:p>
  <text:p text:style-name="Code">{</text:p>
  <text:p text:style-name="Code"><text:s text:c="4"/>return rtl_Instance&lt; T, Init, ::osl::MutexGuard, ::osl::GetGlobalMutex &gt;::create(</text:p>
  <text:p text:style-name="Code"><text:s text:c="8"/>Init(), ::osl::GetGlobalMutex());</text:p>
  <text:p text:style-name="Code">}</text:p>
  <text:p text:style-name="Paragraph">Note that an extra function class is required in this case. The documentation of <text:span text:style-name="Code (in text)">rtl_Instance</text:span> contains further examples of how this template can be used.</text:p>
  <table:table table:name="Tabelle2" table:style-name="Tabelle2">
   <table:table-column table:style-name="Tabelle2.A"/>
   <table:table-column table:style-name="Tabelle2.B"/>
   <table:table-header-rows>
    <table:table-row>
     <table:table-cell table:style-name="Tabelle2.A1" table:value-type="string">
      <text:p text:style-name="Table Contents"><draw:image draw:style-name="fr2" draw:name="Note3" text:anchor-type="paragraph" svg:x="0.065cm" svg:y="0.026cm" svg:width="0.847cm" svg:height="0.847cm" draw:z-index="13" xlink:href="../interesting.gif" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad">
        <svg:desc>Note graphics marks a special text section</svg:desc>
       </draw:image></text:p>
     </table:table-cell>
     <table:table-cell table:style-name="Tabelle2.B1" table:value-type="string">
      <text:p text:style-name="TextInTable">If you are looking for more general information, the article <text:a xlink:type="simple" xlink:href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html"><text:span text:style-name="www/ftp/email">The &quot;Double-Checked Locking is Broken&quot; Declaration</text:span></text:a> (<text:span text:style-name="www/ftp/email">http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.htm</text:span>l) is a good source on double-checked locking, while <text:span text:style-name="www/ftp/email">Computer Architecture: A Quantitative Approach</text:span>, Third Edition by John L. Hennessy and David A. Patterson (Morgan Kaufmann, 2002) and <text:span text:style-name="www/ftp/email">UNIX® Systems for Modern Architectures: Symmetric Multiprocessing and Caching for Kernel Programmers</text:span> by Curt Schimmel (Addison-Wesley, 1994) offer detailed information about hardware memory models.</text:p>
     </table:table-cell>
    </table:table-row>
   </table:table-header-rows>
  </table:table>
  <text:p text:style-name="Paragraph"/>
 </office:body>
</office:document>