editeng/source/editeng/impedit3.cxx                                |    5 
 include/vcl/glyphitemcache.hxx                                     |    5 
 include/vcl/metaact.hxx                                            |   15 
 include/vcl/outdev.hxx                                             |   27 
 include/vcl/pdfwriter.hxx                                          |    8 
 include/vcl/rendercontext/SalLayoutFlags.hxx                       |    3 
 include/vcl/vcllayout.hxx                                          |    2 
 sw/source/core/text/guess.cxx                                      |   21 
 sw/source/core/text/itradj.cxx                                     |   39 -
 sw/source/core/txtnode/fntcache.cxx                                |    4 
 vcl/CppunitTest_vcl_text.mk                                        |    1 
 vcl/Library_vcl.mk                                                 |    4 
 vcl/inc/ImplLayoutArgs.hxx                                         |   13 
 vcl/inc/impglyphitem.hxx                                           |    7 
 vcl/inc/justificationdata.hxx                                      |  125 +++
 vcl/inc/pdf/pdfwriter_impl.hxx                                     |    4 
 vcl/inc/sallayout.hxx                                              |   17 
 vcl/qa/cppunit/justificationdata.cxx                               |  113 +++
 vcl/qa/cppunit/pdfexport/data/tdf124116-hebrew-track-untrack.odt   |binary
 vcl/qa/cppunit/pdfexport/data/tdf134226-shadda-in-hidden-span.fodt |  328 
++++++++++
 vcl/qa/cppunit/pdfexport/data/tdf71956-styled-diacritics.fodt      |  320 
+++++++++
 vcl/qa/cppunit/pdfexport/pdfexport2.cxx                            |  179 +++++
 vcl/qa/cppunit/svm/data/textarraycontext.svm                       |binary
 vcl/qa/cppunit/svm/svmtest.cxx                                     |   31 
 vcl/source/filter/svm/SvmReader.cxx                                |   28 
 vcl/source/filter/svm/SvmWriter.cxx                                |   11 
 vcl/source/gdi/CommonSalLayout.cxx                                 |  212 
+++++-
 vcl/source/gdi/gdimtf.cxx                                          |    6 
 vcl/source/gdi/impglyphitem.cxx                                    |   28 
 vcl/source/gdi/metaact.cxx                                         |   44 +
 vcl/source/gdi/mtfxmldump.cxx                                      |    8 
 vcl/source/gdi/pdfwriter.cxx                                       |   16 
 vcl/source/gdi/pdfwriter_impl.cxx                                  |   27 
 vcl/source/gdi/pdfwriter_impl2.cxx                                 |    5 
 vcl/source/gdi/sallayout.cxx                                       |   46 -
 vcl/source/outdev/font.cxx                                         |   45 -
 vcl/source/outdev/text.cxx                                         |  164 +++--
 vcl/source/outdev/transparent.cxx                                  |   23 
 vcl/source/text/ImplLayoutArgs.cxx                                 |   22 
 39 files changed, 1761 insertions(+), 195 deletions(-)

New commits:
commit ab0a4543cab77ae0c7c0a79feb8aebab71163dd7
Author:     Jonathan Clark <jonat...@libreoffice.org>
AuthorDate: Tue May 7 02:43:00 2024 -0600
Commit:     Jonathan Clark <jonat...@libreoffice.org>
CommitDate: Wed May 22 19:20:38 2024 +0200

    tdf#124116 Correct Writer text shaping across formatting changes
    
    Previously, Writer performed shaping for each span of text separately.
    In certain situations, this caused incorrect glyph use, or incorrect
    glyph positioning. This change updates Writer so it will also consider
    neighboring text while performing shaping.
    
    This change resolves the outstanding duplicates filed against tdf#61444.
    As a side effect, this change also fixes tdf#134226.
    
    In addition to the shaping fix, this change implements rendering for
    individually-styled glyphs, which is required to fix tdf#71956. However,
    this change does not implement diacritic selection, which is also
    required for that issue.
    
    Change-Id: Iab4774ffaab5ad6113778c54d02cb260a70c1010
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167699
    Reviewed-by: Jonathan Clark <jonat...@libreoffice.org>
    Tested-by: Jenkins

diff --git a/editeng/source/editeng/impedit3.cxx 
b/editeng/source/editeng/impedit3.cxx
index ffd47d95f56a..b28532ae46d0 100644
--- a/editeng/source/editeng/impedit3.cxx
+++ b/editeng/source/editeng/impedit3.cxx
@@ -2596,11 +2596,12 @@ void ImpEditEngine::ImpFindKashidas( ContentNode* 
pNode, sal_Int32 nStart, sal_I
     }
 
     // Validate
-    std::vector<sal_Int32> aDropped(aKashidaArray.size());
+    std::vector<sal_Int32> aDropped;
     auto nOldLayout = GetRefDevice()->GetLayoutMode();
     GetRefDevice()->SetLayoutMode(nOldLayout | 
vcl::text::ComplexTextLayoutFlags::BiDiRtl);
     GetRefDevice()->ValidateKashidas(pNode->GetString(), nStart, nEnd - nStart,
-            aKashidaArray.size(), aKashidaArray.data(), aDropped.data());
+                                     /*nPartIdx=*/nStart, /*nPartLen=*/nEnd - 
nStart, aKashidaArray,
+                                     &aDropped);
     GetRefDevice()->SetLayoutMode(nOldLayout);
 
     for (auto const& pos : aKashidaArray)
diff --git a/include/vcl/glyphitemcache.hxx b/include/vcl/glyphitemcache.hxx
index ffe9bb7eb0c4..79f05e606550 100644
--- a/include/vcl/glyphitemcache.hxx
+++ b/include/vcl/glyphitemcache.hxx
@@ -53,6 +53,11 @@ public:
                                            const OUString& text, sal_Int32 
nIndex, sal_Int32 nLen,
                                            tools::Long nLogicWidth = 0,
                                            const vcl::text::TextLayoutCache* 
layoutCache = nullptr);
+    const SalLayoutGlyphs* GetLayoutGlyphs(const VclPtr<const OutputDevice>& 
outputDevice,
+                                           const OUString& text, sal_Int32 
nIndex, sal_Int32 nLen,
+                                           sal_Int32 nDrawMinCharPos, 
sal_Int32 nDrawEndCharPos,
+                                           tools::Long nLogicWidth = 0,
+                                           const vcl::text::TextLayoutCache* 
layoutCache = nullptr);
     void clear();
 
     /// Normally, we cannot cache glyphs when doing font fallback, because the 
font fallbacks
diff --git a/include/vcl/metaact.hxx b/include/vcl/metaact.hxx
index 71869689dc55..79a91a629783 100644
--- a/include/vcl/metaact.hxx
+++ b/include/vcl/metaact.hxx
@@ -510,6 +510,8 @@ private:
     std::vector<sal_Bool> maKashidaAry;
     sal_Int32   mnIndex;
     sal_Int32   mnLen;
+    sal_Int32 mnLayoutContextIndex = -1;
+    sal_Int32 mnLayoutContextLen = -1;
 
     SAL_DLLPRIVATE virtual             ~MetaTextArrayAction() override;
 
@@ -526,6 +528,9 @@ public:
                          std::span<const sal_Bool> pKashidaAry,
                          sal_Int32 nIndex,
                          sal_Int32 nLen );
+    MetaTextArrayAction(const Point& rStartPt, OUString aStr, KernArraySpan 
pDXAry,
+                        std::span<const sal_Bool> pKashidaAry, sal_Int32 
nIndex, sal_Int32 nLen,
+                        sal_Int32 nLayoutContextIndex, sal_Int32 
nLayoutContextLen);
 
     SAL_DLLPRIVATE virtual void        Execute( OutputDevice* pOut ) override;
 
@@ -538,12 +543,22 @@ public:
     const OUString& GetText() const { return maStr; }
     sal_Int32       GetIndex() const { return mnIndex; }
     sal_Int32       GetLen() const { return mnLen; }
+    sal_Int32 GetLayoutContextIndex() const { return mnLayoutContextIndex; }
+    sal_Int32 GetLayoutContextLen() const { return mnLayoutContextLen; }
     const KernArray& GetDXArray() const { return maDXAry; }
     const std::vector<sal_Bool> & GetKashidaArray() const { return 
maKashidaAry; }
     void            SetPoint(const Point& rPt) { maStartPt = rPt; }
     void            SetText(const OUString& rStr) { maStr = rStr; }
     void            SetIndex(sal_Int32 rIndex) { mnIndex = rIndex; }
     void            SetLen(sal_Int32 rLen) { mnLen = rLen; }
+    void SetLayoutContextIndex(sal_Int32 nLayoutContextIndex)
+    {
+        mnLayoutContextIndex = nLayoutContextIndex;
+    }
+    void SetLayoutContextLen(sal_Int32 nLayoutContextLen)
+    {
+        mnLayoutContextLen = nLayoutContextLen;
+    }
     SAL_DLLPRIVATE void            SetDXArray(KernArray aArray);
     SAL_DLLPRIVATE void            SetKashidaArray(std::vector<sal_Bool> 
aArray);
 };
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index 6dbb9acf7f32..347d5bb82226 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -1160,11 +1160,12 @@ public:
     // i60594
     // validate kashida positions against the current font
     // returns count of invalid kashida positions
-    sal_Int32                   ValidateKashidas( const OUString& rTxt, 
sal_Int32 nIdx, sal_Int32 nLen,
-                                                  sal_Int32 nKashCount, // 
number of suggested kashida positions (in)
-                                                  const sal_Int32* 
pKashidaPos, // suggested kashida positions (in)
-                                                  sal_Int32* 
pKashidaPosDropped // invalid kashida positions (out)
-                                                ) const;
+    sal_Int32
+    ValidateKashidas(const OUString& rTxt, sal_Int32 nIdx, sal_Int32 nLen, 
sal_Int32 nPartIdx,
+                     sal_Int32 nPartLen,
+                     std::span<const sal_Int32> pKashidaPos, // suggested 
kashida positions (in)
+                     std::vector<sal_Int32>* pKashidaPosDropped // invalid 
kashida positions (out)
+    ) const;
 
     static void                 BeginFontSubstitution();
     static void                 EndFontSubstitution();
@@ -1235,14 +1236,14 @@ public:
     SAL_DLLPRIVATE void         ReMirror( vcl::Region &rRegion ) const;
     SAL_DLLPRIVATE bool         ImplIsRecordLayout() const;
     virtual bool                HasMirroredGraphics() const;
-    std::unique_ptr<SalLayout>
-                                ImplLayout( const OUString&, sal_Int32 nIndex, 
sal_Int32 nLen,
-                                            const Point& rLogicPos = 
Point(0,0), tools::Long nLogicWidth=0,
-                                            KernArraySpan aKernArray = 
KernArraySpan(),
-                                            std::span<const sal_Bool> 
pKashidaArray={},
-                                            SalLayoutFlags flags = 
SalLayoutFlags::NONE,
-                                            vcl::text::TextLayoutCache const* 
= nullptr,
-                                            const SalLayoutGlyphs* pGlyphs = 
nullptr) const;
+    std::unique_ptr<SalLayout> ImplLayout(
+        const OUString&, sal_Int32 nIndex, sal_Int32 nLen, const Point& 
rLogicPos = Point(0, 0),
+        tools::Long nLogicWidth = 0, KernArraySpan aKernArray = 
KernArraySpan(),
+        std::span<const sal_Bool> pKashidaArray = {}, SalLayoutFlags flags = 
SalLayoutFlags::NONE,
+        vcl::text::TextLayoutCache const* = nullptr, const SalLayoutGlyphs* 
pGlyphs = nullptr,
+        std::optional<sal_Int32> nDrawOriginCluster = std::nullopt,
+        std::optional<sal_Int32> nDrawMinCharPos = std::nullopt,
+        std::optional<sal_Int32> nDrawEndCharPos = std::nullopt) const;
 
     SAL_DLLPRIVATE vcl::text::ImplLayoutArgs ImplPrepareLayoutArgs( OUString&, 
const sal_Int32 nIndex, const sal_Int32 nLen,
                                                          double nPixelWidth,
diff --git a/include/vcl/pdfwriter.hxx b/include/vcl/pdfwriter.hxx
index f4599154e465..34d44525b4d4 100644
--- a/include/vcl/pdfwriter.hxx
+++ b/include/vcl/pdfwriter.hxx
@@ -790,11 +790,9 @@ The following structure describes the permissions used in 
PDF security
                                       FontStrikeout eStrikeout,
                                       FontLineStyle eUnderline,
                                       FontLineStyle eOverline );
-    void                DrawTextArray( const Point& rStartPt, const OUString& 
rStr,
-                                       KernArraySpan aKernArray,
-                                       std::span<const sal_Bool> pKashidaAry,
-                                       sal_Int32 nIndex,
-                                       sal_Int32 nLen );
+    void DrawTextArray(const Point& rStartPt, const OUString& rStr, 
KernArraySpan aKernArray,
+                       std::span<const sal_Bool> pKashidaAry, sal_Int32 
nIndex, sal_Int32 nLen,
+                       sal_Int32 nLayoutContextIndex, sal_Int32 
nLayoutContextLen);
     void                DrawStretchText( const Point& rStartPt, sal_Int32 
nWidth,
                                          const OUString& rStr,
                                          sal_Int32 nIndex, sal_Int32 nLen );
diff --git a/include/vcl/rendercontext/SalLayoutFlags.hxx 
b/include/vcl/rendercontext/SalLayoutFlags.hxx
index 576a4abd8fbd..3424fa2a1de4 100644
--- a/include/vcl/rendercontext/SalLayoutFlags.hxx
+++ b/include/vcl/rendercontext/SalLayoutFlags.hxx
@@ -33,10 +33,11 @@ enum class SalLayoutFlags
     DisableLigatures = 0x0200,
     ForFallback = 0x2000,
     GlyphItemsOnly = 0x4000,
+    UnclusteredGlyphs = 0x8000,
 };
 namespace o3tl
 {
-template <> struct typed_flags<SalLayoutFlags> : 
is_typed_flags<SalLayoutFlags, 0x6277>
+template <> struct typed_flags<SalLayoutFlags> : 
is_typed_flags<SalLayoutFlags, 0xE277>
 {
 };
 }
diff --git a/include/vcl/vcllayout.hxx b/include/vcl/vcllayout.hxx
index 9370c69ded2e..58ca11b876ef 100644
--- a/include/vcl/vcllayout.hxx
+++ b/include/vcl/vcllayout.hxx
@@ -137,6 +137,8 @@ private:
 protected:
     int             mnMinCharPos;
     int             mnEndCharPos;
+    int mnDrawMinCharPos = std::numeric_limits<int>::min();
+    int mnDrawEndCharPos = std::numeric_limits<int>::max();
     LanguageTag     maLanguageTag;
 
     Degree10        mnOrientation;
diff --git a/sw/source/core/text/guess.cxx b/sw/source/core/text/guess.cxx
index af41e0971090..789cae852921 100644
--- a/sw/source/core/text/guess.cxx
+++ b/sw/source/core/text/guess.cxx
@@ -248,7 +248,7 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
          ( bUnbreakableNumberings && rPor.IsNumberPortion() ) )
     {
         // call GetTextSize with maximum compression (for kanas)
-        rInf.GetTextSize(&rSI, rInf.GetIdx(), nMaxLen, 
rPor.GetLayoutContext(), nMaxComp,
+        rInf.GetTextSize(&rSI, rInf.GetIdx(), nMaxLen, 
rInf.GetLayoutContext(), nMaxComp,
                          m_nBreakWidth, nMaxSizeDiff);
 
         if ( ( m_nBreakWidth <= nLineWidth ) || ( bUnbreakableNumberings && 
rPor.IsNumberPortion() ) )
@@ -259,7 +259,7 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
                         || maybeAdjustPositionsForBlockAdjust(m_nCutPos, 
m_nBreakPos, m_nBreakStart,
                                                               m_nBreakWidth, 
m_nExtraBlankWidth,
                                                               nMaxSizeDiff, 
rInf, rSI, nMaxComp,
-                                                              
rPor.GetLayoutContext());
+                                                              
rInf.GetLayoutContext());
             if( nItalic &&
                 (m_nCutPos >= TextFrameIndex(rInf.GetText().getLength()) ||
                   // #i48035# Needed for CalcFitToContent
@@ -421,8 +421,8 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
         if ( TextFrameIndex(COMPLETE_STRING) != m_nCutPos )
         {
             sal_uInt16 nMinSize;
-            rInf.GetTextSize(&rSI, rInf.GetIdx(), m_nCutPos - rInf.GetIdx(),
-                             rPor.GetLayoutContext(), nMaxComp, nMinSize, 
nMaxSizeDiff);
+            rInf.GetTextSize(&rSI, rInf.GetIdx(), m_nCutPos - rInf.GetIdx(), 
std::nullopt, nMaxComp,
+                             nMinSize, nMaxSizeDiff);
             OSL_ENSURE( nMinSize <= nLineWidth, "What a Guess!!!" );
         }
 #endif
@@ -432,7 +432,7 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
     {
         // second check if everything fits to line
         m_nCutPos = m_nBreakPos = rInf.GetIdx() + nMaxLen - TextFrameIndex(1);
-        rInf.GetTextSize(&rSI, rInf.GetIdx(), nMaxLen, 
rPor.GetLayoutContext(), nMaxComp,
+        rInf.GetTextSize(&rSI, rInf.GetIdx(), nMaxLen, 
rInf.GetLayoutContext(), nMaxComp,
                          m_nBreakWidth, nMaxSizeDiff);
 
         // The following comparison should always give true, otherwise
@@ -443,7 +443,7 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
                         || maybeAdjustPositionsForBlockAdjust(m_nCutPos, 
m_nBreakPos, m_nBreakStart,
                                                               m_nBreakWidth, 
m_nExtraBlankWidth,
                                                               nMaxSizeDiff, 
rInf, rSI, nMaxComp,
-                                                              
rPor.GetLayoutContext());
+                                                              
rInf.GetLayoutContext());
 
             if (nItalic && (m_nBreakPos + TextFrameIndex(1)) >= 
TextFrameIndex(rInf.GetText().getLength()))
                 m_nBreakWidth += nItalic;
@@ -734,8 +734,8 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
 
     if( nPorLen )
     {
-        rInf.GetTextSize(&rSI, rInf.GetIdx(), nPorLen, 
rPor.GetLayoutContext(), nMaxComp,
-                         m_nBreakWidth, nMaxSizeDiff, 
rInf.GetCachedVclData().get());
+        rInf.GetTextSize(&rSI, rInf.GetIdx(), nPorLen, std::nullopt, nMaxComp, 
m_nBreakWidth,
+                         nMaxSizeDiff, rInf.GetCachedVclData().get());
 
         // save maximum width for later use
         if ( nMaxSizeDiff )
@@ -749,9 +749,8 @@ bool SwTextGuess::Guess( const SwTextPortion& rPor, 
SwTextFormatInfo &rInf,
     if (m_nBreakStart > rInf.GetIdx() + nPorLen + m_nFieldDiff)
     {
         rInf.GetTextSize(&rSI, rInf.GetIdx() + nPorLen,
-                         m_nBreakStart - rInf.GetIdx() - nPorLen - 
m_nFieldDiff,
-                         rPor.GetLayoutContext(), nMaxComp, 
m_nExtraBlankWidth, nMaxSizeDiff,
-                         rInf.GetCachedVclData().get());
+                         m_nBreakStart - rInf.GetIdx() - nPorLen - 
m_nFieldDiff, std::nullopt,
+                         nMaxComp, m_nExtraBlankWidth, nMaxSizeDiff, 
rInf.GetCachedVclData().get());
     }
 
     if( m_pHanging )
diff --git a/sw/source/core/text/itradj.cxx b/sw/source/core/text/itradj.cxx
index 4dcaf03df1f8..c5e24b0913f5 100644
--- a/sw/source/core/text/itradj.cxx
+++ b/sw/source/core/text/itradj.cxx
@@ -129,10 +129,18 @@ static bool lcl_CheckKashidaPositions( SwScriptInfo& rSI, 
SwTextSizeInfo& rInf,
 
     // kashida positions found in SwScriptInfo are not necessarily valid in 
every font
     // if two characters are replaced by a ligature glyph, there will be no 
place for a kashida
-    std::vector<TextFrameIndex> aKashidaPos;
-    rSI.GetKashidaPositions(nIdx, rItr.GetLength(), aKashidaPos);
-    assert(aKashidaPos.size() >= o3tl::make_unsigned(rKashidas));
-    std::vector<TextFrameIndex> aKashidaPosDropped(aKashidaPos.size());
+    std::vector<TextFrameIndex> aUncastKashidaPos;
+    rSI.GetKashidaPositions(nIdx, rItr.GetLength(), aUncastKashidaPos);
+    assert(aUncastKashidaPos.size() >= o3tl::make_unsigned(rKashidas));
+
+    std::vector<sal_Int32> aKashidaPos;
+    std::transform(std::cbegin(aUncastKashidaPos), 
std::cend(aUncastKashidaPos),
+                   std::back_inserter(aKashidaPos),
+                   [](TextFrameIndex nPos) { return 
static_cast<sal_Int32>(nPos); });
+
+    std::vector<sal_Int32> aKashidaPosDropped;
+    std::vector<TextFrameIndex> aCastKashidaPosDropped;
+
     sal_Int32 nKashidaIdx = 0;
     while ( rKashidas && nIdx < nEnd )
     {
@@ -147,6 +155,14 @@ static bool lcl_CheckKashidaPositions( SwScriptInfo& rSI, 
SwTextSizeInfo& rInf,
 
         if (nNext == TextFrameIndex(COMPLETE_STRING) || nNext > nEnd)
             nNext = nEnd;
+
+        // Use an expanded context to validate kashida insertions between spans
+        TextFrameIndex nWholeNext = nNextScript;
+        if (nWholeNext == TextFrameIndex(COMPLETE_STRING) || nWholeNext > nEnd)
+        {
+            nWholeNext = nEnd;
+        }
+
         sal_Int32 nKashidasInAttr = rSI.KashidaJustify(nullptr, nullptr, nIdx, 
nNext - nIdx);
         if (nKashidasInAttr > 0)
         {
@@ -167,14 +183,19 @@ static bool lcl_CheckKashidaPositions( SwScriptInfo& rSI, 
SwTextSizeInfo& rInf,
                 vcl::text::ComplexTextLayoutFlags nOldLayout = 
rInf.GetOut()->GetLayoutMode();
                 rInf.GetOut()->SetLayoutMode ( nOldLayout | 
vcl::text::ComplexTextLayoutFlags::BiDiRtl );
                 nKashidasDropped = rInf.GetOut()->ValidateKashidas(
-                    rInf.GetText(), sal_Int32(nIdx), sal_Int32(nNext - nIdx),
-                    nKashidasInAttr,
-                    reinterpret_cast<sal_Int32*>(aKashidaPos.data() + 
nKashidaIdx),
-                    reinterpret_cast<sal_Int32*>(aKashidaPosDropped.data()));
+                    rInf.GetText(), /*nIdx=*/sal_Int32{ nIdx },
+                    /*nLen=*/sal_Int32{ nWholeNext - nIdx },
+                    /*nPartIdx=*/sal_Int32{ nIdx }, /*nPartLen=*/sal_Int32{ 
nNext - nIdx },
+                    std::span(aKashidaPos).subspan(nKashidaIdx, 
nKashidasInAttr),
+                    &aKashidaPosDropped);
                 rInf.GetOut()->SetLayoutMode ( nOldLayout );
                 if ( nKashidasDropped )
                 {
-                    rSI.MarkKashidasInvalid(nKashidasDropped, 
aKashidaPosDropped.data());
+                    aCastKashidaPosDropped.clear();
+                    std::transform(std::cbegin(aKashidaPosDropped), 
std::cend(aKashidaPosDropped),
+                                   std::back_inserter(aCastKashidaPosDropped),
+                                   [](sal_Int32 nPos) { return TextFrameIndex{ 
nPos }; });
+                    rSI.MarkKashidasInvalid(nKashidasDropped, 
aCastKashidaPosDropped.data());
                     rKashidas -= nKashidasDropped;
                     nGluePortion -= TextFrameIndex(nKashidasDropped);
                 }
diff --git a/sw/source/core/txtnode/fntcache.cxx 
b/sw/source/core/txtnode/fntcache.cxx
index b91f73756c58..fd42378b1bdc 100644
--- a/sw/source/core/txtnode/fntcache.cxx
+++ b/sw/source/core/txtnode/fntcache.cxx
@@ -751,12 +751,12 @@ static void GetTextArray(const OutputDevice& rDevice, 
const OUString& rStr, Kern
     if (nLayoutContext.has_value())
     {
         auto nStrEnd = nIndex + nLen;
-        auto nContextBegin = std::clamp(nLayoutContext->m_nBegin, 
sal_Int32{0}, nIndex);
+        auto nContextBegin = std::clamp(nLayoutContext->m_nBegin, sal_Int32{ 0 
}, nIndex);
         auto nContextEnd = std::clamp(nLayoutContext->m_nEnd, nStrEnd, 
rStr.getLength());
         auto nContextLen = nContextEnd - nContextBegin;
 
         const SalLayoutGlyphs* pLayoutCache = 
SalLayoutGlyphsCache::self()->GetLayoutGlyphs(
-            &rDevice, rStr, nContextBegin, nContextLen, 0, layoutCache);
+            &rDevice, rStr, nContextBegin, nContextLen, nIndex, nIndex + nLen, 
0, layoutCache);
         rDevice.GetPartialTextArray(rStr, &rDXAry, nContextBegin, nContextLen, 
nIndex, nLen, bCaret,
                                     layoutCache, pLayoutCache);
     }
diff --git a/vcl/CppunitTest_vcl_text.mk b/vcl/CppunitTest_vcl_text.mk
index 4ffa3b1990ca..d829c3fc24b5 100644
--- a/vcl/CppunitTest_vcl_text.mk
+++ b/vcl/CppunitTest_vcl_text.mk
@@ -17,6 +17,7 @@ $(eval $(call gb_CppunitTest_set_include,vcl_text,\
 $(eval $(call gb_CppunitTest_add_exception_objects,vcl_text, \
        vcl/qa/cppunit/canvasbitmaptest \
        vcl/qa/cppunit/complextext \
+       vcl/qa/cppunit/justificationdata \
        vcl/qa/cppunit/text \
 ))
 
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index c832e712e22f..a92d6281e0b0 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -242,6 +242,8 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/source/outdev/nativecontrols \
     vcl/source/outdev/map \
     vcl/source/text/ImplLayoutArgs \
+    vcl/source/text/ImplLayoutRuns \
+    vcl/source/text/mnemonic \
     vcl/source/text/TextLayoutCache \
     vcl/source/text/textlayout \
     vcl/source/treelist/headbar \
@@ -261,8 +263,6 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/source/treelist/svimpbox \
     vcl/source/treelist/svlbitm \
     vcl/source/treelist/uiobject \
-    vcl/source/text/ImplLayoutRuns \
-    vcl/source/text/mnemonic \
     vcl/source/gdi/formpdfexport \
     vcl/source/gdi/configsettings \
     vcl/source/gdi/cvtgrf \
diff --git a/vcl/inc/ImplLayoutArgs.hxx b/vcl/inc/ImplLayoutArgs.hxx
index faf170ca72b3..804fe28c3c3f 100644
--- a/vcl/inc/ImplLayoutArgs.hxx
+++ b/vcl/inc/ImplLayoutArgs.hxx
@@ -22,6 +22,9 @@
 
 #include "impglyphitem.hxx"
 #include "ImplLayoutRuns.hxx"
+#include "justificationdata.hxx"
+
+#include <span>
 
 namespace vcl::text
 {
@@ -34,13 +37,15 @@ public:
     const OUString& mrStr;
     int mnMinCharPos;
     int mnEndCharPos;
+    int mnDrawOriginCluster = std::numeric_limits<int>::min();
+    int mnDrawMinCharPos = std::numeric_limits<int>::min();
+    int mnDrawEndCharPos = std::numeric_limits<int>::max();
 
     // performance hack
     vcl::text::TextLayoutCache const* m_pTextLayoutCache;
 
     // positioning related inputs
-    const double* mpDXArray; // in floating point pixel units
-    const sal_Bool* mpKashidaArray;
+    JustificationData mstJustification;
     double mnLayoutWidth; // in pixel units
     Degree10 mnOrientation; // in 0-3600 system
 
@@ -52,15 +57,13 @@ public:
                    LanguageTag aLanguageTag, vcl::text::TextLayoutCache const* 
pLayoutCache);
 
     void SetLayoutWidth(double nWidth);
-    void SetDXArray(const double* pDXArray);
-    void SetKashidaArray(const sal_Bool* pKashidaArray);
+    void SetJustificationData(JustificationData stJustification);
     void SetOrientation(Degree10 nOrientation);
 
     void ResetPos();
     bool GetNextPos(int* nCharPos, bool* bRTL);
     bool GetNextRun(int* nMinRunPos, int* nEndRunPos, bool* bRTL);
     void AddFallbackRun(int nMinRunPos, int nEndRunPos, bool bRTL);
-    bool HasDXArray() const { return mpDXArray; }
 
     // methods used by BiDi and glyph fallback
     bool HasFallbackRun() const;
diff --git a/vcl/inc/impglyphitem.hxx b/vcl/inc/impglyphitem.hxx
index bb08031f3ab6..320adc27f667 100644
--- a/vcl/inc/impglyphitem.hxx
+++ b/vcl/inc/impglyphitem.hxx
@@ -53,7 +53,8 @@ class VCL_DLLPUBLIC GlyphItem
 {
     basegfx::B2DPoint m_aLinearPos; // absolute position of non rotated string
     double m_nOrigWidth; // original glyph width
-    sal_Int32 m_nCharPos; // index in string
+    sal_Int32 m_nCharPos; // index in string (by grapheme cluster)
+    sal_Int32 m_nOrigCharPos; // original index in string, if available
     double m_nXOffset;
     double m_nYOffset;
     double m_nNewWidth; // width after adjustments
@@ -64,10 +65,11 @@ class VCL_DLLPUBLIC GlyphItem
 public:
     GlyphItem(int nCharPos, int nCharCount, sal_GlyphId aGlyphId,
               const basegfx::B2DPoint& rLinearPos, GlyphItemFlags nFlags, 
double nOrigWidth,
-              double nXOffset, double nYOffset)
+              double nXOffset, double nYOffset, int nOrigCharPos)
         : m_aLinearPos(rLinearPos)
         , m_nOrigWidth(nOrigWidth)
         , m_nCharPos(nCharPos)
+        , m_nOrigCharPos(nOrigCharPos)
         , m_nXOffset(nXOffset)
         , m_nYOffset(nYOffset)
         , m_nNewWidth(nOrigWidth)
@@ -97,6 +99,7 @@ public:
     int charCount() const { return m_nCharCount; }
     double origWidth() const { return m_nOrigWidth; }
     int charPos() const { return m_nCharPos; }
+    int origCharPos() const { return m_nOrigCharPos; }
     double xOffset() const { return m_nXOffset; }
     double yOffset() const { return m_nYOffset; }
     double newWidth() const { return m_nNewWidth; }
diff --git a/vcl/inc/justificationdata.hxx b/vcl/inc/justificationdata.hxx
new file mode 100644
index 000000000000..b8fff6149851
--- /dev/null
+++ b/vcl/inc/justificationdata.hxx
@@ -0,0 +1,125 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#pragma once
+
+#include <sal/types.h>
+#include <o3tl/typed_flags_set.hxx>
+
+#include <optional>
+#include <vector>
+
+enum class ClusterJustificationFlags
+{
+    NONE = 0x0000,
+    KashidaPosition = 0x0001,
+};
+
+namespace o3tl
+{
+template <>
+struct typed_flags<ClusterJustificationFlags> : 
is_typed_flags<ClusterJustificationFlags, 0x0001>
+{
+};
+}
+
+class ClusterJustification
+{
+public:
+    double m_nTotalAdvance = 0.0;
+    ClusterJustificationFlags m_nFlags = ClusterJustificationFlags::NONE;
+};
+
+class JustificationData
+{
+private:
+    std::vector<ClusterJustification> m_aClusters;
+    sal_Int32 m_nBaseIndex = 0;
+    sal_Int32 m_nEndIndex = 0;
+    bool m_bContainsAdvances = false;
+    bool m_bContainsKashidaPositions = false;
+
+    [[nodiscard]] inline std::optional<size_t> GetIndex(sal_Int32 nClusterId) 
const
+    {
+        auto nIndex = nClusterId - m_nBaseIndex;
+        if (nIndex >= 0 && nIndex < static_cast<sal_Int32>(m_aClusters.size()))
+        {
+            return static_cast<size_t>(nIndex);
+        }
+
+        return std::nullopt;
+    }
+
+public:
+    JustificationData() = default;
+    JustificationData(sal_Int32 nBaseIndex, sal_Int32 nSize)
+        : m_nBaseIndex(nBaseIndex)
+        , m_nEndIndex(nBaseIndex + nSize)
+    {
+        m_aClusters.resize(nSize);
+    }
+
+    [[nodiscard]] bool empty() const { return m_aClusters.empty(); }
+
+    [[nodiscard]] bool ContainsAdvances() const { return m_bContainsAdvances; }
+    [[nodiscard]] bool ContainsKashidaPositions() const { return 
m_bContainsKashidaPositions; }
+
+    [[nodiscard]] double GetTotalAdvance(sal_Int32 nClusterId) const
+    {
+        if (nClusterId < m_nBaseIndex || m_aClusters.empty())
+        {
+            return 0.0;
+        }
+
+        if (nClusterId < m_nEndIndex)
+        {
+            return m_aClusters.at(nClusterId - m_nBaseIndex).m_nTotalAdvance;
+        }
+
+        return m_aClusters.back().m_nTotalAdvance;
+    }
+
+    [[nodiscard]] std::optional<bool> GetPositionHasKashida(sal_Int32 
nClusterId) const
+    {
+        if (auto nIndex = GetIndex(nClusterId); nIndex.has_value())
+        {
+            return std::optional<bool>{ m_aClusters.at(*nIndex).m_nFlags
+                                        & 
ClusterJustificationFlags::KashidaPosition };
+        }
+
+        return std::nullopt;
+    }
+
+    void SetTotalAdvance(sal_Int32 nClusterId, double nValue)
+    {
+        if (auto nIndex = GetIndex(nClusterId); nIndex.has_value())
+        {
+            m_aClusters.at(*nIndex).m_nTotalAdvance = nValue;
+            m_bContainsAdvances = true;
+        }
+    }
+
+    void SetKashidaPosition(sal_Int32 nClusterId, bool bValue)
+    {
+        if (auto nIndex = GetIndex(nClusterId); nIndex.has_value())
+        {
+            if (bValue)
+            {
+                m_aClusters.at(*nIndex).m_nFlags |= 
ClusterJustificationFlags::KashidaPosition;
+            }
+            else
+            {
+                m_aClusters.at(*nIndex).m_nFlags &= 
~ClusterJustificationFlags::KashidaPosition;
+            }
+
+            m_bContainsKashidaPositions = true;
+        }
+    }
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/inc/pdf/pdfwriter_impl.hxx b/vcl/inc/pdf/pdfwriter_impl.hxx
index 483201f624fd..b0388ecd27a1 100644
--- a/vcl/inc/pdf/pdfwriter_impl.hxx
+++ b/vcl/inc/pdf/pdfwriter_impl.hxx
@@ -1256,7 +1256,9 @@ public:
 
     /* actual drawing functions */
     void drawText( const Point& rPos, const OUString& rText, sal_Int32 nIndex, 
sal_Int32 nLen, bool bTextLines = true );
-    void drawTextArray( const Point& rPos, const OUString& rText, 
KernArraySpan pDXArray, std::span<const sal_Bool> pKashidaArray, sal_Int32 
nIndex, sal_Int32 nLen );
+    void drawTextArray(const Point& rPos, const OUString& rText, KernArraySpan 
pDXArray,
+                       std::span<const sal_Bool> pKashidaArray, sal_Int32 
nIndex, sal_Int32 nLen,
+                       sal_Int32 nLayoutContextIndex, sal_Int32 
nLayoutContextLen);
     void drawStretchText( const Point& rPos, sal_Int32 nWidth, const OUString& 
rText,
                           sal_Int32 nIndex, sal_Int32 nLen  );
     void drawText( const tools::Rectangle& rRect, const OUString& rOrigStr, 
DrawTextFlags nStyle );
diff --git a/vcl/inc/sallayout.hxx b/vcl/inc/sallayout.hxx
index 43b59e91a30c..49eb0c4ce93a 100644
--- a/vcl/inc/sallayout.hxx
+++ b/vcl/inc/sallayout.hxx
@@ -29,6 +29,7 @@
 #include <vcl/vclenum.hxx> // for typedef sal_UCS4
 #include <vcl/vcllayout.hxx>
 
+#include "justificationdata.hxx"
 #include "ImplLayoutRuns.hxx"
 #include "impglyphitem.hxx"
 
@@ -37,6 +38,7 @@
 #include <hb.h>
 
 #include <memory>
+#include <span>
 #include <vector>
 
 #define MAX_FALLBACK 16
@@ -81,9 +83,9 @@ public:
 
     SAL_DLLPRIVATE void SetIncomplete(bool bIncomplete);
 
-    SAL_DLLPRIVATE void            
ImplAdjustMultiLayout(vcl::text::ImplLayoutArgs& rArgs,
-                                          vcl::text::ImplLayoutArgs& 
rMultiArgs,
-                                          const double* pMultiDXArray);
+    SAL_DLLPRIVATE void ImplAdjustMultiLayout(vcl::text::ImplLayoutArgs& rArgs,
+                                              vcl::text::ImplLayoutArgs& 
rMultiArgs,
+                                              const JustificationData& 
rstJustification);
 
     SAL_DLLPRIVATE ImplLayoutRuns* GetFallbackRuns() { return maFallbackRuns; }
 
@@ -101,10 +103,9 @@ private:
 
 class VCL_DLLPUBLIC GenericSalLayout : public SalLayout
 {
-    friend void MultiSalLayout::ImplAdjustMultiLayout(
-            vcl::text::ImplLayoutArgs& rArgs,
-            vcl::text::ImplLayoutArgs& rMultiArgs,
-            const double* pMultiDXArray);
+    friend void 
MultiSalLayout::ImplAdjustMultiLayout(vcl::text::ImplLayoutArgs& rArgs,
+                                                      
vcl::text::ImplLayoutArgs& rMultiArgs,
+                                                      const JustificationData& 
rstJustification);
 
 public:
                     GenericSalLayout(LogicalFontInstance&);
@@ -144,7 +145,7 @@ private:
                     GenericSalLayout( const GenericSalLayout& ) = delete;
                     GenericSalLayout& operator=( const GenericSalLayout& ) = 
delete;
 
-    SAL_DLLPRIVATE void ApplyDXArray(const double*, const sal_Bool*);
+    SAL_DLLPRIVATE void ApplyJustificationData(const JustificationData& 
rstJustification);
     SAL_DLLPRIVATE void Justify(double nNewWidth);
     SAL_DLLPRIVATE void ApplyAsianKerning(std::u16string_view rStr);
 
diff --git a/vcl/qa/cppunit/justificationdata.cxx 
b/vcl/qa/cppunit/justificationdata.cxx
new file mode 100644
index 000000000000..1c01e3ed00c5
--- /dev/null
+++ b/vcl/qa/cppunit/justificationdata.cxx
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <justificationdata.hxx>
+
+class JustificationDataTest : public CppUnit::TestFixture
+{
+public:
+    void testEmpty()
+    {
+        JustificationData stJust;
+        CPPUNIT_ASSERT(stJust.empty());
+
+        JustificationData stJust2{ /*nBaseIndex*/ 100, /*nSize*/ 5 };
+        CPPUNIT_ASSERT(!stJust2.empty());
+    }
+
+    void testContainsAdvances()
+    {
+        JustificationData stJust{ /*nBaseIndex*/ 100, /*nSize*/ 5 };
+        CPPUNIT_ASSERT(!stJust.ContainsAdvances());
+
+        // Try to set advances out of bounds
+        stJust.SetTotalAdvance(10, 1.0);
+        CPPUNIT_ASSERT(!stJust.ContainsAdvances());
+
+        stJust.SetTotalAdvance(200, 1.0);
+        CPPUNIT_ASSERT(!stJust.ContainsAdvances());
+
+        // Insert in bounds
+        stJust.SetTotalAdvance(102, 1.0);
+        CPPUNIT_ASSERT(stJust.ContainsAdvances());
+    }
+
+    void testAdvances()
+    {
+        JustificationData stJust{ /*nBaseIndex*/ 100, /*nSize*/ 3 };
+        stJust.SetTotalAdvance(99, 1.0);
+        stJust.SetTotalAdvance(100, 2.0);
+        stJust.SetTotalAdvance(101, 3.0);
+        stJust.SetTotalAdvance(102, 4.0);
+        stJust.SetTotalAdvance(103, 5.0);
+
+        // Total advance before the valid range must be 0
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, stJust.GetTotalAdvance(99), 0.05);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(2.0, stJust.GetTotalAdvance(100), 0.05);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(3.0, stJust.GetTotalAdvance(101), 0.05);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(4.0, stJust.GetTotalAdvance(102), 0.05);
+
+        // Total advance after the valid range must be the last advance
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(4.0, stJust.GetTotalAdvance(103), 0.05);
+    }
+
+    void testContainsKashidaPositions()
+    {
+        JustificationData stJust{ /*nBaseIndex*/ 100, /*nSize*/ 5 };
+        CPPUNIT_ASSERT(!stJust.ContainsKashidaPositions());
+
+        // Try to set kashida positions out of bounds
+        stJust.SetKashidaPosition(10, true);
+        CPPUNIT_ASSERT(!stJust.ContainsKashidaPositions());
+
+        stJust.SetKashidaPosition(200, true);
+        CPPUNIT_ASSERT(!stJust.ContainsKashidaPositions());
+
+        // Insert in bounds
+        stJust.SetKashidaPosition(102, true);
+        CPPUNIT_ASSERT(stJust.ContainsKashidaPositions());
+    }
+
+    void testKashidaPositions()
+    {
+        JustificationData stJust{ /*nBaseIndex*/ 100, /*nSize*/ 1 };
+
+        CPPUNIT_ASSERT(!stJust.GetPositionHasKashida(99).has_value());
+        CPPUNIT_ASSERT(!stJust.GetPositionHasKashida(100).value_or(true));
+        CPPUNIT_ASSERT(!stJust.GetPositionHasKashida(101).has_value());
+
+        stJust.SetKashidaPosition(99, true);
+        stJust.SetKashidaPosition(100, true);
+        stJust.SetKashidaPosition(101, true);
+
+        CPPUNIT_ASSERT(!stJust.GetPositionHasKashida(99).has_value());
+        CPPUNIT_ASSERT(stJust.GetPositionHasKashida(100).value_or(false));
+        CPPUNIT_ASSERT(!stJust.GetPositionHasKashida(101).has_value());
+
+        stJust.SetKashidaPosition(100, false);
+
+        CPPUNIT_ASSERT(!stJust.GetPositionHasKashida(100).value_or(true));
+    }
+
+    CPPUNIT_TEST_SUITE(JustificationDataTest);
+    CPPUNIT_TEST(testEmpty);
+    CPPUNIT_TEST(testContainsAdvances);
+    CPPUNIT_TEST(testAdvances);
+    CPPUNIT_TEST(testContainsKashidaPositions);
+    CPPUNIT_TEST(testKashidaPositions);
+    CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(JustificationDataTest);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/qa/cppunit/pdfexport/data/tdf124116-hebrew-track-untrack.odt 
b/vcl/qa/cppunit/pdfexport/data/tdf124116-hebrew-track-untrack.odt
new file mode 100644
index 000000000000..e3f3becee3a8
Binary files /dev/null and 
b/vcl/qa/cppunit/pdfexport/data/tdf124116-hebrew-track-untrack.odt differ
diff --git a/vcl/qa/cppunit/pdfexport/data/tdf134226-shadda-in-hidden-span.fodt 
b/vcl/qa/cppunit/pdfexport/data/tdf134226-shadda-in-hidden-span.fodt
new file mode 100644
index 000000000000..635ffc86883c
--- /dev/null
+++ b/vcl/qa/cppunit/pdfexport/data/tdf134226-shadda-in-hidden-span.fodt
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ 
<office:meta><meta:creation-date>2024-05-17T12:26:58.973389885</meta:creation-date><dc:date>2024-05-17T13:33:16.344029125</dc:date><meta:editing-duration>PT12M29S</meta:editing-duration><meta:editing-cycles>16</meta:editing-cycles><meta:generator>LibreOffice/24.2.3.2$Linux_X86_64
 
LibreOffice_project/4f88f79086d18691a72ac668802d5bc5b5a88122</meta:generator><meta:document-statistic
 meta:table-count="0" meta:image-count="0" meta:object-count="0" 
meta:page-count="1" meta:paragraph-count="2" meta:word-count="2" 
meta:character-count="6" meta:non-whitespace-character-count="6"/></office:meta>
+ <office:settings>
+  <config:config-item-set config:name="ooo:view-settings">
+   <config:config-item config:name="ViewAreaTop" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaLeft" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaWidth" 
config:type="long">46651</config:config-item>
+   <config:config-item config:name="ViewAreaHeight" 
config:type="long">29386</config:config-item>
+   <config:config-item config:name="ShowRedlineChanges" 
config:type="boolean">true</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="long">26141</config:config-item>
+     <config:config-item config:name="ViewTop" 
config:type="long">9654</config:config-item>
+     <config:config-item config:name="VisibleLeft" 
config:type="long">0</config:config-item>
+     <config:config-item config:name="VisibleTop" 
config:type="long">0</config:config-item>
+     <config:config-item config:name="VisibleRight" 
config:type="long">46650</config:config-item>
+     <config:config-item config:name="VisibleBottom" 
config:type="long">29385</config:config-item>
+     <config:config-item config:name="ZoomType" 
config:type="short">0</config:config-item>
+     <config:config-item config:name="ViewLayoutColumns" 
config:type="short">1</config:config-item>
+     <config:config-item config:name="ViewLayoutBookMode" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="ZoomFactor" 
config:type="short">160</config:config-item>
+     <config:config-item config:name="IsSelectedFrame" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="KeepRatio" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="AnchoredTextOverflowLegacy" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="LegacySingleLineFontwork" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="ConnectorUseSnapRect" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="IgnoreBreakAfterMultilineField" 
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="ooo:configuration-settings">
+   <config:config-item config:name="PrintProspectRTL" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintPageBackground" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintDrawings" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintFaxName" config:type="string"/>
+   <config:config-item config:name="PrintReversed" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintAnnotationMode" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="PrintHiddenText" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintEmptyPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintGraphics" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="NoNumberingShowFollowBy" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HyphenateURLs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ImagePreferredDPI" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="FootnoteInColumnToPageEnd" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="GutterAtTop" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ContinuousEndnotes" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="FrameAutowidthWithMorePara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SubtractFlysAnchoredAtFlys" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SurroundTextWrapSmall" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintControls" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabOverMargin" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedComplexScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedAsianScriptFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTextPlaceholder" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedSystemFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DisableOffPagePositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="BackgroundParaOverDrawings" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverflow" 
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="AddVerticalFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ProtectBookmarks" 
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="PrintBlackFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TableRowKeep" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterIndependentLayout" 
config:type="string">high-resolution</config:config-item>
+   <config:config-item config:name="JustifyLinesWithShrinking" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RsidRoot" 
config:type="int">200646</config:config-item>
+   <config:config-item config:name="PrintProspect" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CollapseEmptyCellPara" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommand" 
config:type="string"/>
+   <config:config-item config:name="CurrentDatabaseDataSource" 
config:type="string"/>
+   <config:config-item config:name="SaveThumbnail" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbeddedDatabaseName" 
config:type="string"/>
+   <config:config-item config:name="UnbreakableNumberings" 
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="MsWordCompTrailingBlanks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTables" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintLeftPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddParaTableSpacing" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrinterPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommandType" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="ChartAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="OutlineLevelYieldsNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseOldNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaSpacingToTableCells" 
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="PropLineSpacingShrinksFirstLine" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabAtLeftIndentForParagraphsInList" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintRightPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DoNotCaptureDrawObjsOnPage" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LoadReadonly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HeaderSpacingBelowLastPara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SaveVersionOnClose" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClippedPictures" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MathBaselineAlignment" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AlignTabStopPosition" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseFormerLineSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintSingleJobs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterName" config:type="string"/>
+   <config:config-item config:name="AddParaLineSpacingToTableCells" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="IsKernAsianPunctuation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DoNotJustifyLinesWithManualBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CharacterCompressionType" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="IsLabelDocument" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedLatinScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+   <config:config-item config:name="UseVariableWidthNBSP" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedOnlyUsedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyUserData" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddParaTableSpacingAtStart" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="InvertBorderSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ProtectFields" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddExternalLeading" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="LinkUpdateMode" 
config:type="short">1</config:config-item>
+   <config:config-item config:name="UseFormerObjectPositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UnxForceZeroExtLeading" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerTextWrapping" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ConsiderTextWrapOnObjPos" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="StylesNoDefault" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreFirstLineIndentInNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="NoGapAfterNoteNumber" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmptyDbFieldHidesPara" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DoNotResetParaAttrsForNumFont" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DropCapPunctuation" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseOldPrinterMetrics" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RedlineProtectionKey" 
config:type="base64Binary"/>
+   <config:config-item config:name="TabsRelativeToIndent" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="Rsid" 
config:type="int">754914</config:config-item>
+   <config:config-item config:name="UpdateFromTemplate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ProtectForm" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MsWordCompMinLineHeightByFly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SmallCapsPercentage66" 
config:type="boolean">false</config:config-item>
+  </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+  <office:script script:language="ooo:Basic">
+   <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:xlink="http://www.w3.org/1999/xlink";>
+    <ooo:library-embedded ooo:name="Standard"/>
+   </ooo:libraries>
+  </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+  <style:font-face style:name="Liberation Mono" 
svg:font-family="&apos;Liberation Mono&apos;" 
style:font-family-generic="modern" style:font-pitch="fixed"/>
+  <style:font-face style:name="Liberation Sans" 
svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" 
style:font-pitch="variable"/>
+  <style:font-face style:name="Liberation Serif" 
svg:font-family="&apos;Liberation Serif&apos;" 
style:font-family-generic="roman" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Sans" svg:font-family="&apos;Noto 
Sans&apos;" style:font-adornments="Regular" style:font-family-generic="swiss" 
style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Sans Arabic" svg:font-family="&apos;Noto 
Sans Arabic&apos;" style:font-adornments="Regular" 
style:font-family-generic="swiss" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Sans Mono" svg:font-family="&apos;Noto 
Sans Mono&apos;" style:font-adornments="Regular" 
style:font-family-generic="swiss" style:font-pitch="variable"/>
+  <style:font-face style:name="Tahoma" svg:font-family="Tahoma" 
style:font-family-generic="swiss"/>
+  <style:font-face style:name="Tahoma1" svg:font-family="Tahoma" 
style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+  <style:default-style style:family="graphic">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" 
draw:shadow-offset-y="0.3cm" 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" style:writing-mode="lr-tb" 
style:flow-with-text="false"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0cm" 
style:font-independent-line-spacing="false">
+    <style:tab-stops/>
+   </style:paragraph-properties>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="en" fo:country="US" style:letter-kerning="true" 
style:font-name-asian="Noto Sans" style:font-size-asian="10.5pt" 
style:font-name-complex="Tahoma1" style:font-size-complex="12pt" 
style:language-complex="ar" style:country-complex="SA"/>
+  </style:default-style>
+  <style:default-style style:family="paragraph">
+   <style:paragraph-properties fo:orphans="2" fo:widows="2" 
fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" 
style:punctuation-wrap="hanging" style:line-break="strict" 
style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="en" fo:country="US" style:letter-kerning="true" 
style:font-name-asian="Noto Sans" style:font-size-asian="10.5pt" 
style:font-name-complex="Tahoma1" style:font-size-complex="12pt" 
style:language-complex="ar" style:country-complex="SA" fo:hyphenate="false" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+  </style:default-style>
+  <style:default-style style:family="table">
+   <style:table-properties table:border-model="collapsing"/>
+  </style:default-style>
+  <style:default-style style:family="table-row">
+   <style:table-row-properties fo:keep-together="auto"/>
+  </style:default-style>
+  <style:style style:name="Standard" style:family="paragraph" 
style:class="text">
+   <style:text-properties style:font-name-asian="Noto Sans" 
style:font-family-asian="&apos;Noto Sans&apos;" 
style:font-style-name-asian="Regular" style:font-family-generic-asian="swiss" 
style:font-pitch-asian="variable" style:language-asian="zxx" 
style:country-asian="none" style:font-name-complex="Noto Sans Arabic" 
style:font-family-complex="&apos;Noto Sans Arabic&apos;" 
style:font-style-name-complex="Regular" 
style:font-family-generic-complex="swiss" style:font-pitch-complex="variable" 
style:font-size-complex="96pt" style:language-complex="ar" 
style:country-complex="SA"/>
+  </style:style>
+  <style:style style:name="Heading" style:family="paragraph" 
style:parent-style-name="Standard" style:next-style-name="Text_20_body" 
style:class="text">
+   <style:paragraph-properties fo:margin-top="0.423cm" 
fo:margin-bottom="0.212cm" style:contextual-spacing="false" 
fo:keep-with-next="always"/>
+   <style:text-properties style:font-name="Liberation Sans" 
fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" 
style:font-pitch="variable" fo:font-size="14pt" 
style:font-name-complex="Tahoma1" style:font-family-complex="Tahoma" 
style:font-family-generic-complex="system" style:font-pitch-complex="variable" 
style:font-size-complex="14pt"/>
+  </style:style>
+  <style:style style:name="Text_20_body" style:display-name="Text body" 
style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+   <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" 
style:contextual-spacing="false" fo:line-height="115%"/>
+  </style:style>
+  <style:style style:name="List" style:family="paragraph" 
style:parent-style-name="Text_20_body" style:class="list">
+   <style:text-properties style:font-name-complex="Tahoma" 
style:font-family-complex="Tahoma" style:font-family-generic-complex="swiss"/>
+  </style:style>
+  <style:style style:name="Caption" style:family="paragraph" 
style:parent-style-name="Standard" style:class="extra">
+   <style:paragraph-properties fo:margin-top="0.212cm" 
fo:margin-bottom="0.212cm" style:contextual-spacing="false" 
text:number-lines="false" text:line-number="0"/>
+   <style:text-properties fo:font-size="12pt" fo:font-style="italic" 
style:font-name-complex="Tahoma" style:font-family-complex="Tahoma" 
style:font-family-generic-complex="swiss" style:font-size-complex="12pt" 
style:font-style-complex="italic"/>
+  </style:style>
+  <style:style style:name="Index" style:family="paragraph" 
style:parent-style-name="Standard" style:class="index">
+   <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+   <style:text-properties style:font-name-complex="Tahoma" 
style:font-family-complex="Tahoma" style:font-family-generic-complex="swiss"/>
+  </style:style>
+  <style:style style:name="Addressee" style:family="paragraph" 
style:parent-style-name="Standard" style:class="extra">
+   <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.106cm" 
style:contextual-spacing="false" text:number-lines="false" 
text:line-number="0"/>
+  </style:style>
+  <style:style style:name="Quotations" style:family="paragraph" 
style:parent-style-name="Standard" style:class="html">
+   <style:paragraph-properties fo:margin-left="1cm" fo:margin-right="1cm" 
fo:margin-top="0cm" fo:margin-bottom="0.499cm" style:contextual-spacing="false" 
fo:text-indent="0cm" style:auto-text-indent="false"/>
+  </style:style>
+  <style:style style:name="Table_20_Contents" style:display-name="Table 
Contents" style:family="paragraph" style:parent-style-name="Standard" 
style:class="extra">
+   <style:paragraph-properties fo:orphans="0" fo:widows="0" 
text:number-lines="false" text:line-number="0"/>
+  </style:style>
+  <style:style style:name="Signature" style:family="paragraph" 
style:parent-style-name="Standard" style:class="text">
+   <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+  </style:style>
+  <style:style style:name="Sender" style:family="paragraph" 
style:parent-style-name="Standard" style:class="extra">
+   <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.106cm" 
style:contextual-spacing="false" text:number-lines="false" 
text:line-number="0"/>
+  </style:style>
+  <style:style style:name="Preformatted_20_Text" 
style:display-name="Preformatted Text" style:family="paragraph" 
style:parent-style-name="Standard" style:class="html">
+   <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" 
style:contextual-spacing="false"/>
+   <style:text-properties style:font-name="Liberation Mono" 
fo:font-family="&apos;Liberation Mono&apos;" style:font-family-generic="modern" 
style:font-pitch="fixed" fo:font-size="10pt" style:font-name-asian="Noto Sans 
Mono" style:font-family-asian="&apos;Noto Sans Mono&apos;" 
style:font-style-name-asian="Regular" style:font-family-generic-asian="swiss" 
style:font-pitch-asian="variable" style:font-size-asian="10pt" 
style:font-name-complex="Liberation Mono" 
style:font-family-complex="&apos;Liberation Mono&apos;" 
style:font-family-generic-complex="modern" style:font-pitch-complex="fixed" 
style:font-size-complex="10pt"/>
+  </style:style>
+  <text:outline-style style:name="Outline">
+   <text:outline-level-style text:level="1" loext:num-list-format="%1%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="2" loext:num-list-format="%2%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="3" loext:num-list-format="%3%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="4" loext:num-list-format="%4%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="5" loext:num-list-format="%5%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="6" loext:num-list-format="%6%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="7" loext:num-list-format="%7%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="8" loext:num-list-format="%8%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="9" loext:num-list-format="%9%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="10" loext:num-list-format="%10%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+  </text:outline-style>
+  <text:notes-configuration text:note-class="footnote" style:num-format="1" 
text:start-value="0" text:footnotes-position="page" 
text:start-numbering-at="document"/>
+  <text:notes-configuration text:note-class="endnote" 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"/>
+  <loext:theme loext:name="Office">
+   <loext:theme-colors loext:name="LibreOffice">
+    <loext:color loext:name="dark1" loext:color="#000000"/>
+    <loext:color loext:name="light1" loext:color="#ffffff"/>
+    <loext:color loext:name="dark2" loext:color="#000000"/>
+    <loext:color loext:name="light2" loext:color="#ffffff"/>
+    <loext:color loext:name="accent1" loext:color="#18a303"/>
+    <loext:color loext:name="accent2" loext:color="#0369a3"/>
+    <loext:color loext:name="accent3" loext:color="#a33e03"/>
+    <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+    <loext:color loext:name="accent5" loext:color="#c99c00"/>
+    <loext:color loext:name="accent6" loext:color="#c9211e"/>
+    <loext:color loext:name="hyperlink" loext:color="#0000ee"/>
+    <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
+   </loext:theme-colors>
+  </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+  <style:style style:name="P1" style:family="paragraph" 
style:parent-style-name="Standard">
+   <style:paragraph-properties fo:text-align="end" 
style:justify-single-word="false" style:writing-mode="rl-tb"/>
+  </style:style>
+  <style:style style:name="T1" style:family="text">
+   <style:text-properties fo:font-weight="normal" 
style:font-weight-complex="normal"/>
+  </style:style>
+  <style:page-layout style:name="pm1">
+   <style:page-layout-properties fo:page-width="21.59cm" 
fo:page-height="27.94cm" 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:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" 
style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" 
style:layout-grid-mode="none" style:layout-grid-ruby-below="false" 
style:layout-grid-print="false" style:layout-grid-display="false" 
style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+    <style:footnote-sep style:width="0.018cm" 
style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" 
style:line-style="solid" style:adjustment="left" style:rel-width="25%" 
style:color="#000000"/>
+   </style:page-layout-properties>
+   <style:header-style/>
+   <style:footer-style/>
+  </style:page-layout>
+  <style:style style:name="dp1" style:family="drawing-page">
+   <style:drawing-page-properties draw:background-size="full"/>
+  </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+  <style:master-page style:name="Standard" style:page-layout-name="pm1" 
draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+  <office:text>
+   <text:sequence-decls>
+    <text:sequence-decl text:display-outline-level="0" 
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="Figure"/>
+   </text:sequence-decls>
+   <text:p text:style-name="P1">شقّة</text:p>
+   <text:p text:style-name="P1">شق<text:span 
text:style-name="T1">ّ</text:span>ة</text:p>
+  </office:text>
+ </office:body>
+</office:document>
diff --git a/vcl/qa/cppunit/pdfexport/data/tdf71956-styled-diacritics.fodt 
b/vcl/qa/cppunit/pdfexport/data/tdf71956-styled-diacritics.fodt
new file mode 100644
index 000000000000..408744885c2d
--- /dev/null
+++ b/vcl/qa/cppunit/pdfexport/data/tdf71956-styled-diacritics.fodt
@@ -0,0 +1,320 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ 
<office:meta><meta:creation-date>2024-05-17T12:26:58.973389885</meta:creation-date><dc:date>2024-05-17T12:40:53.077636652</dc:date><meta:editing-duration>PT9M18S</meta:editing-duration><meta:editing-cycles>6</meta:editing-cycles><meta:generator>LibreOffice/24.2.3.2$Linux_X86_64
 
LibreOffice_project/4f88f79086d18691a72ac668802d5bc5b5a88122</meta:generator><meta:document-statistic
 meta:table-count="0" meta:image-count="0" meta:object-count="0" 
meta:page-count="1" meta:paragraph-count="2" meta:word-count="2" 
meta:character-count="6" meta:non-whitespace-character-count="6"/></office:meta>
+ <office:settings>
+  <config:config-item-set config:name="ooo:view-settings">
+   <config:config-item config:name="ViewAreaTop" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaLeft" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaWidth" 
config:type="long">46701</config:config-item>
+   <config:config-item config:name="ViewAreaHeight" 
config:type="long">29438</config:config-item>
+   <config:config-item config:name="ShowRedlineChanges" 
config:type="boolean">true</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="long">32143</config:config-item>
+     <config:config-item config:name="ViewTop" 
config:type="long">2501</config:config-item>
+     <config:config-item config:name="VisibleLeft" 
config:type="long">0</config:config-item>
+     <config:config-item config:name="VisibleTop" 
config:type="long">0</config:config-item>
+     <config:config-item config:name="VisibleRight" 
config:type="long">46699</config:config-item>
+     <config:config-item config:name="VisibleBottom" 
config:type="long">29436</config:config-item>
+     <config:config-item config:name="ZoomType" 
config:type="short">0</config:config-item>
+     <config:config-item config:name="ViewLayoutColumns" 
config:type="short">1</config:config-item>
+     <config:config-item config:name="ViewLayoutBookMode" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="ZoomFactor" 
config:type="short">160</config:config-item>
+     <config:config-item config:name="IsSelectedFrame" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="KeepRatio" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="AnchoredTextOverflowLegacy" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="LegacySingleLineFontwork" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="ConnectorUseSnapRect" 
config:type="boolean">false</config:config-item>
+     <config:config-item config:name="IgnoreBreakAfterMultilineField" 
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="ooo:configuration-settings">
+   <config:config-item config:name="PrintProspectRTL" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintPageBackground" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintDrawings" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintFaxName" config:type="string"/>
+   <config:config-item config:name="PrintReversed" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintAnnotationMode" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="PrintHiddenText" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintEmptyPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintGraphics" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="NoNumberingShowFollowBy" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HyphenateURLs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ImagePreferredDPI" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="FootnoteInColumnToPageEnd" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="GutterAtTop" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ContinuousEndnotes" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="FrameAutowidthWithMorePara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SubtractFlysAnchoredAtFlys" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SurroundTextWrapSmall" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintControls" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabOverMargin" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedComplexScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedAsianScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintTextPlaceholder" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedSystemFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DisableOffPagePositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="BackgroundParaOverDrawings" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverflow" 
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="AddVerticalFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ProtectBookmarks" 
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="PrintBlackFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TableRowKeep" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterIndependentLayout" 
config:type="string">high-resolution</config:config-item>
+   <config:config-item config:name="JustifyLinesWithShrinking" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RsidRoot" 
config:type="int">200646</config:config-item>
+   <config:config-item config:name="PrintProspect" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CollapseEmptyCellPara" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommand" 
config:type="string"/>
+   <config:config-item config:name="CurrentDatabaseDataSource" 
config:type="string"/>
+   <config:config-item config:name="SaveThumbnail" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbeddedDatabaseName" 
config:type="string"/>
+   <config:config-item config:name="UnbreakableNumberings" 
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="MsWordCompTrailingBlanks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTables" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintLeftPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddParaTableSpacing" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrinterPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommandType" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="ChartAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="OutlineLevelYieldsNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseOldNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaSpacingToTableCells" 
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="PropLineSpacingShrinksFirstLine" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabAtLeftIndentForParagraphsInList" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintRightPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DoNotCaptureDrawObjsOnPage" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LoadReadonly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HeaderSpacingBelowLastPara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SaveVersionOnClose" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClippedPictures" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MathBaselineAlignment" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AlignTabStopPosition" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseFormerLineSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintSingleJobs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterName" config:type="string"/>
+   <config:config-item config:name="AddParaLineSpacingToTableCells" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="IsKernAsianPunctuation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DoNotJustifyLinesWithManualBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CharacterCompressionType" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="IsLabelDocument" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedLatinScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+   <config:config-item config:name="UseVariableWidthNBSP" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedOnlyUsedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyUserData" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddParaTableSpacingAtStart" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="InvertBorderSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ProtectFields" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddExternalLeading" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="LinkUpdateMode" 
config:type="short">1</config:config-item>
+   <config:config-item config:name="UseFormerObjectPositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UnxForceZeroExtLeading" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerTextWrapping" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ConsiderTextWrapOnObjPos" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="StylesNoDefault" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreFirstLineIndentInNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="NoGapAfterNoteNumber" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmptyDbFieldHidesPara" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DoNotResetParaAttrsForNumFont" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DropCapPunctuation" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseOldPrinterMetrics" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RedlineProtectionKey" 
config:type="base64Binary"/>
+   <config:config-item config:name="TabsRelativeToIndent" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="Rsid" 
config:type="int">313543</config:config-item>
+   <config:config-item config:name="UpdateFromTemplate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ProtectForm" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MsWordCompMinLineHeightByFly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SmallCapsPercentage66" 
config:type="boolean">false</config:config-item>
+  </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+  <office:script script:language="ooo:Basic">
+   <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:xlink="http://www.w3.org/1999/xlink"/>
+  </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+  <style:font-face style:name="Liberation Sans" 
svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" 
style:font-pitch="variable"/>
+  <style:font-face style:name="Liberation Serif" 
svg:font-family="&apos;Liberation Serif&apos;" 
style:font-family-generic="roman" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Sans Arabic" svg:font-family="&apos;Noto 
Sans Arabic&apos;" style:font-adornments="Regular" 
style:font-family-generic="swiss" style:font-pitch="variable"/>
+  <style:font-face style:name="Tahoma" svg:font-family="Tahoma" 
style:font-family-generic="swiss"/>
+  <style:font-face style:name="Tahoma1" svg:font-family="Tahoma" 
style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+  <style:default-style style:family="graphic">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" 
draw:shadow-offset-y="0.3cm" 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" style:writing-mode="lr-tb" 
style:flow-with-text="false"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0cm" 
style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+    <style:tab-stops/>
+   </style:paragraph-properties>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="en" fo:country="US" style:letter-kerning="true" 
style:font-name-complex="Tahoma1" style:font-size-complex="12pt" 
style:language-complex="fa" style:country-complex="IR"/>
+  </style:default-style>
+  <style:default-style style:family="paragraph">
+   <style:paragraph-properties fo:orphans="2" fo:widows="2" 
fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" 
style:punctuation-wrap="hanging" style:line-break="strict" 
style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="en" fo:country="US" style:letter-kerning="true" 
style:font-name-complex="Tahoma1" style:font-size-complex="12pt" 
style:language-complex="fa" style:country-complex="IR" fo:hyphenate="false" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+  </style:default-style>
+  <style:default-style style:family="table">
+   <style:table-properties table:border-model="collapsing"/>
+  </style:default-style>
+  <style:default-style style:family="table-row">
+   <style:table-row-properties fo:keep-together="auto"/>
+  </style:default-style>
+  <style:style style:name="Standard" style:family="paragraph" 
style:class="text">
+   <style:text-properties style:font-name-complex="Noto Sans Arabic" 
style:font-family-complex="&apos;Noto Sans Arabic&apos;" 
style:font-style-name-complex="Regular" 
style:font-family-generic-complex="swiss" style:font-pitch-complex="variable" 
style:font-size-complex="96pt" style:language-complex="ar" 
style:country-complex="SA"/>
+  </style:style>
+  <style:style style:name="Heading" style:family="paragraph" 
style:parent-style-name="Standard" style:next-style-name="Text_20_body" 
style:class="text">
+   <style:paragraph-properties fo:margin-top="0.423cm" 
fo:margin-bottom="0.212cm" style:contextual-spacing="false" 
fo:keep-with-next="always"/>
+   <style:text-properties style:font-name="Liberation Sans" 
fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" 
style:font-pitch="variable" fo:font-size="14pt" 
style:font-name-complex="Tahoma1" style:font-family-complex="Tahoma" 
style:font-family-generic-complex="system" style:font-pitch-complex="variable" 
style:font-size-complex="14pt"/>
+  </style:style>
+  <style:style style:name="Text_20_body" style:display-name="Text body" 
style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+   <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" 
style:contextual-spacing="false" fo:line-height="115%"/>
+  </style:style>
+  <style:style style:name="List" style:family="paragraph" 
style:parent-style-name="Text_20_body" style:class="list">
+   <style:text-properties style:font-size-asian="12pt" 
style:font-name-complex="Tahoma" style:font-family-complex="Tahoma" 
style:font-family-generic-complex="swiss"/>
+  </style:style>
+  <style:style style:name="Caption" style:family="paragraph" 
style:parent-style-name="Standard" style:class="extra">
+   <style:paragraph-properties fo:margin-top="0.212cm" 
fo:margin-bottom="0.212cm" style:contextual-spacing="false" 
text:number-lines="false" text:line-number="0"/>
+   <style:text-properties fo:font-size="12pt" fo:font-style="italic" 
style:font-size-asian="12pt" style:font-style-asian="italic" 
style:font-name-complex="Tahoma" style:font-family-complex="Tahoma" 
style:font-family-generic-complex="swiss" style:font-size-complex="12pt" 
style:font-style-complex="italic"/>
+  </style:style>
+  <style:style style:name="Index" style:family="paragraph" 
style:parent-style-name="Standard" style:class="index">
+   <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+   <style:text-properties style:font-size-asian="12pt" 
style:font-name-complex="Tahoma" style:font-family-complex="Tahoma" 
style:font-family-generic-complex="swiss"/>
+  </style:style>
+  <text:outline-style style:name="Outline">
+   <text:outline-level-style text:level="1" loext:num-list-format="%1%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="2" loext:num-list-format="%2%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="3" loext:num-list-format="%3%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="4" loext:num-list-format="%4%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="5" loext:num-list-format="%5%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="6" loext:num-list-format="%6%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="7" loext:num-list-format="%7%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="8" loext:num-list-format="%8%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="9" loext:num-list-format="%9%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="10" loext:num-list-format="%10%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+  </text:outline-style>
+  <text:notes-configuration text:note-class="footnote" style:num-format="1" 
text:start-value="0" text:footnotes-position="page" 
text:start-numbering-at="document"/>
+  <text:notes-configuration text:note-class="endnote" 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"/>
+  <loext:theme loext:name="Office">
+   <loext:theme-colors loext:name="LibreOffice">
+    <loext:color loext:name="dark1" loext:color="#000000"/>
+    <loext:color loext:name="light1" loext:color="#ffffff"/>
+    <loext:color loext:name="dark2" loext:color="#000000"/>
+    <loext:color loext:name="light2" loext:color="#ffffff"/>
+    <loext:color loext:name="accent1" loext:color="#18a303"/>
+    <loext:color loext:name="accent2" loext:color="#0369a3"/>
+    <loext:color loext:name="accent3" loext:color="#a33e03"/>
+    <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+    <loext:color loext:name="accent5" loext:color="#c99c00"/>
+    <loext:color loext:name="accent6" loext:color="#c9211e"/>
+    <loext:color loext:name="hyperlink" loext:color="#0000ee"/>
+    <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
+   </loext:theme-colors>
+  </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+  <style:style style:name="P1" style:family="paragraph" 
style:parent-style-name="Standard">
+   <style:paragraph-properties fo:text-align="end" 
style:justify-single-word="false" style:writing-mode="rl-tb"/>
+   <style:text-properties officeooo:paragraph-rsid="00040e0a"/>
+  </style:style>
+  <style:style style:name="T1" style:family="text">
+   <style:text-properties fo:color="#ff0000" loext:opacity="100%"/>
+  </style:style>
+  <style:style style:name="T2" style:family="text">
+   <style:text-properties fo:color="#ff8000" loext:opacity="100%"/>
+  </style:style>
+  <style:style style:name="T3" style:family="text">
+   <style:text-properties fo:color="#ffbf00" loext:opacity="100%"/>
+  </style:style>
+  <style:style style:name="T4" style:family="text">
+   <style:text-properties fo:color="#81d41a" loext:opacity="100%"/>
+  </style:style>
+  <style:style style:name="T5" style:family="text">
+   <style:text-properties fo:color="#00a933" loext:opacity="100%"/>
+  </style:style>
+  <style:style style:name="T6" style:family="text">
+   <style:text-properties fo:color="#2a6099" loext:opacity="100%"/>
+  </style:style>
+  <style:page-layout style:name="pm1">
-e 
... etc. - the rest is truncated

Reply via email to